Patch level : 10.0

Files correlati     : xvaga
Ricompilazione Demo : [ ]
Commento            :
Corretto errore 0000840
Corretta gestione  menu


git-svn-id: svn://10.65.10.50/trunk@16928 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2008-07-23 15:45:27 +00:00
parent cc2fca8874
commit a10b0a27da
5 changed files with 127 additions and 105 deletions

View File

@ -435,29 +435,23 @@ void xvt_app_create(int argc, char **argv, unsigned long flags,
wxPoint pos = wxDefaultPosition; wxPoint pos = wxDefaultPosition;
wxSize size = wxDefaultSize; wxSize size = wxDefaultSize;
long style = wxDEFAULT_FRAME_STYLE; long style = wxDEFAULT_FRAME_STYLE;
bool can_change_firm = true;
wxWindow* pParent = NULL;
bool bHasMenu = true, bCanChangeFirm = true;
#ifdef WIN32 #ifdef WIN32
HWND hwndParent = (HWND)OsWin32_FindMenuContainer(); HWND hwndParent = (HWND)OsWin32_FindMenuContainer();
if (hwndParent != NULL) if (hwndParent != NULL)
{ {
can_change_firm = false; pParent = new wxWindow;
pParent->AssociateHandle(hwndParent);
const wxSize szWin = pParent->GetSize();
const wxSize szCli = pParent->GetClientSize();
xvt_rect_set(&_startup_rect, 0, 0, szWin.x, szWin.y);
style = wxSYSTEM_MENU; // Lo stile si riduce al minimo: niente cornici
RECT rct; ::GetWindowRect(hwndParent, &rct); bHasMenu = (szWin.y - szCli.y) < 2;
if (rct.right - rct.left >= 720) bCanChangeFirm = false;
{
style = wxSYSTEM_MENU;
DWORD dwFlags = ::GetWindowLong(hwndParent, GWL_STYLE);
if (dwFlags & WS_CAPTION)
{
xvt_rect_set(&_startup_rect, rct.left, rct.top, rct.right, rct.bottom);
hwndParent = NULL;
}
else
{
xvt_rect_set(&_startup_rect, 0, 0, rct.right-rct.left, rct.bottom-rct.top);
}
}
} }
#endif #endif
@ -487,23 +481,21 @@ void xvt_app_create(int argc, char **argv, unsigned long flags,
_task_win->SetBackgroundStyle(wxBG_STYLE_CUSTOM); // Lo sfondo viene disegnato nella OnPaint _task_win->SetBackgroundStyle(wxBG_STYLE_CUSTOM); // Lo sfondo viene disegnato nella OnPaint
_nice_windows.Put((WINDOW)_task_win, _task_win); _nice_windows.Put((WINDOW)_task_win, _task_win);
#ifdef WIN32 if (pParent != NULL)
if (hwndParent != NULL)
{ {
// HWND hwndChild = (HWND)_task_win->GetHandle(); _task_win->Reparent(pParent);
// ::SetParent(hwndChild, hwndParent); pParent->DissociateHandle();
wxWindow* padre = new wxWindow; pParent = NULL;
padre->AssociateHandle(hwndParent);
_task_win->Reparent(padre);
} }
#endif
if (bHasMenu)
{
wxMenu* Menus[3]; wxMenu* Menus[3];
wxString Title[3]; wxString Title[3];
Title[0] = "&File"; Title[0] = "&File";
Menus[0] = new wxMenu; Menus[0] = new wxMenu;
if (can_change_firm) if (bCanChangeFirm)
{ {
Menus[0]->Append(M_FILE_NEW, "Scelta &Ditta..."); Menus[0]->Append(M_FILE_NEW, "Scelta &Ditta...");
Menus[0]->AppendSeparator(); Menus[0]->AppendSeparator();
@ -530,15 +522,14 @@ void xvt_app_create(int argc, char **argv, unsigned long flags,
wxMenuBar* pMenubar = new wxMenuBar(3, Menus, Title); wxMenuBar* pMenubar = new wxMenuBar(3, Menus, Title);
#else #else
wxMenuBar* pMenubar = new wxMenuBar(); wxMenuBar* pMenubar = new wxMenuBar();
for (int i= 0; i < 3; i++) for (int i= 0; i < 3; i++)
pMenubar->Append(Menus[i], Title[i]); pMenubar->Append(Menus[i], Title[i]);
#endif #endif
wxFrame* pFrame = wxStaticCast(_task_win, wxFrame); _task_win->SetMenuBar(pMenubar);
pFrame->SetMenuBar(pMenubar); }
if (style & wxMAXIMIZE)
pFrame->Maximize();
if (style & wxMAXIMIZE)
_task_win->Maximize();
_task_win->Show(); _task_win->Show();
wxApp* a = wxTheApp; wxApp* a = wxTheApp;
@ -3528,10 +3519,7 @@ wxThread::ExitCode TIconizeTaskThread::Entry()
{ {
::wxMilliSleep(500); ::wxMilliSleep(500);
if (__bChildRunning) // Il programma e' ancora attivo if (__bChildRunning) // Il programma e' ancora attivo
{ _task_win->Iconize();
wxFrame* frame = wxStaticCast(_task_win, wxFrame);
frame->Iconize();
}
return 0; return 0;
} }
@ -3554,7 +3542,6 @@ long xvt_sys_execute(const char* cmdline, BOOLEAN sync, BOOLEAN iconizetask)
if (sync) if (sync)
{ {
wxFrame* frame = wxStaticCast(_task_win, wxFrame);
if (iconizetask) if (iconizetask)
{ {
wxEnableTopLevelWindows(FALSE); wxEnableTopLevelWindows(FALSE);
@ -3564,13 +3551,13 @@ long xvt_sys_execute(const char* cmdline, BOOLEAN sync, BOOLEAN iconizetask)
exitcode = wxExecute(cmd, wxEXEC_SYNC); exitcode = wxExecute(cmd, wxEXEC_SYNC);
__bChildRunning = false; __bChildRunning = false;
if (frame->IsIconized()) if (_task_win->IsIconized())
frame->Restore(); _task_win->Restore();
wxEnableTopLevelWindows(TRUE); wxEnableTopLevelWindows(TRUE);
} }
else else
exitcode = wxExecute(cmd, wxEXEC_SYNC); // Valutare wxEXEC_NODISABLE exitcode = wxExecute(cmd, wxEXEC_SYNC); // Valutare wxEXEC_NODISABLE
frame->Raise(); _task_win->Raise();
} }
else else
exitcode = wxExecute(cmd, wxEXEC_ASYNC); exitcode = wxExecute(cmd, wxEXEC_ASYNC);
@ -4189,8 +4176,8 @@ void xvt_vobj_maximize(WINDOW win)
void xvt_vobj_minimize(WINDOW win) void xvt_vobj_minimize(WINDOW win)
{ {
wxFrame* pMain = wxDynamicCast((wxObject*)win, wxFrame); wxFrame* pMain = wxDynamicCast((wxObject*)win, wxFrame);
if (pMain != NULL) if (pMain == _task_win)
pMain->Iconize(); _task_win->Iconize();
else else
SORRY_BOX(); SORRY_BOX();
} }
@ -4470,10 +4457,7 @@ static wxStatusBar* WIN2StatBar(WINDOW win)
{ {
wxStatusBar* pStatusBar = NULL; wxStatusBar* pStatusBar = NULL;
if (win == NULL_WIN || win == TASK_WIN) if (win == NULL_WIN || win == TASK_WIN)
{ pStatusBar = _task_win->GetStatusBar();
wxFrame* w = wxStaticCast(_task_win, wxFrame);
pStatusBar = w->GetStatusBar();
}
else else
pStatusBar = wxDynamicCast((wxObject*)win, wxStatusBar); pStatusBar = wxDynamicCast((wxObject*)win, wxStatusBar);
return pStatusBar; return pStatusBar;
@ -4543,9 +4527,8 @@ BOOLEAN statbar_destroy(WINDOW win)
wxStatusBar* pStatusBar = WIN2StatBar(win); wxStatusBar* pStatusBar = WIN2StatBar(win);
if (pStatusBar != NULL) if (pStatusBar != NULL)
{ {
wxFrame& w = *wxStaticCast(_task_win, wxFrame); if (_task_win->GetStatusBar() == pStatusBar)
if (w.GetStatusBar() == pStatusBar) _task_win->SetStatusBar(NULL);
w.SetStatusBar(NULL);
pStatusBar->Destroy(); pStatusBar->Destroy();
} }
return pStatusBar != NULL; return pStatusBar != NULL;

View File

@ -425,6 +425,7 @@ XVTDLL void xvt_win_trap_pointer(WINDOW win);
XVTDLL BOOLEAN xvt_pane_add(WINDOW parent, WINDOW pane, const char* name, int dock, int flags); XVTDLL BOOLEAN xvt_pane_add(WINDOW parent, WINDOW pane, const char* name, int dock, int flags);
XVTDLL BOOLEAN xvt_pane_change_flags(WINDOW pane, int set, int reset); XVTDLL BOOLEAN xvt_pane_change_flags(WINDOW pane, int set, int reset);
XVTDLL BOOLEAN xvt_pane_detach(WINDOW pane); XVTDLL BOOLEAN xvt_pane_detach(WINDOW pane);
XVTDLL BOOLEAN xvt_pane_set_size_range(WINDOW pane, int min_size, int max_size);
XVTDLL BOOLEAN xvt_pane_set_title(WINDOW pane, const char* title); XVTDLL BOOLEAN xvt_pane_set_title(WINDOW pane, const char* title);
typedef int ODBC_CALLBACK(void*,int,char**, char**); typedef int ODBC_CALLBACK(void*,int,char**, char**);

View File

@ -335,19 +335,11 @@ void xvt_btn_set_images(WINDOW win, XVT_IMAGE up, XVT_IMAGE down)
// Pane interface // Pane interface
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
BOOLEAN xvt_pane_add(WINDOW win, WINDOW pane, const char* name, int dock, int flags)
{
BOOLEAN done = FALSE;
if (win != NULL_WIN && pane != NULL_WIN && name && *name)
{
done = ((TwxWindow*)win)->AddPane((wxWindow*)pane, name, dock, flags);
}
return done;
}
static wxAuiPaneInfo* LockPane(WINDOW win) static wxAuiPaneInfo* LockPane(WINDOW win)
{ {
wxWindow* pwin = (wxWindow*)win; if (win != NULL_WIN)
{
wxWindow* pwin = wxStaticCast((wxObject*)win, wxWindow);
wxAuiManager* pManager = wxAuiManager::GetManager(pwin); wxAuiManager* pManager = wxAuiManager::GetManager(pwin);
if (pManager != NULL) if (pManager != NULL)
{ {
@ -355,16 +347,32 @@ static wxAuiPaneInfo* LockPane(WINDOW win)
if (pane.IsOk()) if (pane.IsOk())
return &pane; return &pane;
} }
}
return NULL; return NULL;
} }
static void UnlockPane(WINDOW win) static void UnlockPane(WINDOW win)
{ {
wxWindow* pwin = (wxWindow*)win; if (win != NULL_WIN)
{
wxWindow* pwin = wxStaticCast((wxObject*)win, wxWindow);
wxAuiManager* pManager = wxAuiManager::GetManager(pwin); wxAuiManager* pManager = wxAuiManager::GetManager(pwin);
if (pManager != NULL) if (pManager != NULL)
pManager->Update(); pManager->Update();
} }
}
BOOLEAN xvt_pane_add(WINDOW win, WINDOW pane, const char* name, int dock, int flags)
{
BOOLEAN done = FALSE;
if (win != NULL_WIN && pane != NULL_WIN && name && *name)
{
TwxWindow* owner = wxStaticCast((wxObject*)win, TwxWindow);
wxWindow* child = wxStaticCast((wxObject*)pane, wxWindow);
done = owner->AddPane(child, name, dock, flags);
}
return done;
}
BOOLEAN xvt_pane_set_title(WINDOW win, const char* title) BOOLEAN xvt_pane_set_title(WINDOW win, const char* title)
{ {
@ -394,7 +402,7 @@ XVTDLL BOOLEAN xvt_pane_detach(WINDOW win)
BOOLEAN ok = FALSE; BOOLEAN ok = FALSE;
if (win != NULL_WIN) if (win != NULL_WIN)
{ {
wxWindow* pwin = (wxWindow*)win; wxWindow* pwin = wxStaticCast((wxObject*)win, wxWindow);
wxAuiManager* pManager = wxAuiManager::GetManager(pwin); wxAuiManager* pManager = wxAuiManager::GetManager(pwin);
if (pManager != NULL) if (pManager != NULL)
{ {
@ -405,6 +413,36 @@ XVTDLL BOOLEAN xvt_pane_detach(WINDOW win)
return ok; return ok;
} }
XVTDLL BOOLEAN xvt_pane_set_size_range(WINDOW win, int min_size, int max_size)
{
BOOLEAN ok = FALSE;
wxAuiPaneInfo* pane = LockPane(win);
if (pane != NULL)
{
if (min_size > 0 || max_size > 0)
{
wxSize szMin(-1, -1), szMax(-1, -1);
if (pane->IsTopDockable() || pane->IsBottomDockable())
{
szMin.y = min_size;
szMax.y = max_size;
}
else
{
szMin.x = min_size;
szMax.x = max_size;
}
pane->MinSize(szMin);
pane->BestSize(szMin);
pane->MaxSize(szMax);
}
pane->Resizable(min_size != max_size);
pane->DockFixed(min_size == max_size);
UnlockPane(win);
}
return ok;
}
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// Notebook interface // Notebook interface
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -446,7 +484,7 @@ short TwxNoteBook::AddTab(wxWindow* pPage, const wxString text, XVT_IMAGE xvt_im
if (xvt_img != NULL) if (xvt_img != NULL)
{ {
wxImage& img = *(wxImage*)xvt_img; // Piccola porcata... wxImage& img = *wxStaticCast(xvt_img, wxImage);
img.Rescale(BOOK_ICO_SIZE, BOOK_ICO_SIZE, wxIMAGE_QUALITY_HIGH); img.Rescale(BOOK_ICO_SIZE, BOOK_ICO_SIZE, wxIMAGE_QUALITY_HIGH);
bmp = Image2Bitmap(xvt_img, true); bmp = Image2Bitmap(xvt_img, true);
} }

View File

@ -16,7 +16,7 @@
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
wxHashTable _nice_windows; wxHashTable _nice_windows;
wxWindow* _task_win = NULL; wxFrame* _task_win = NULL;
EVENT_HANDLER _task_win_handler = NULL; EVENT_HANDLER _task_win_handler = NULL;
wxRect NormalizeRCT(const RCT* prct) wxRect NormalizeRCT(const RCT* prct)

View File

@ -228,7 +228,7 @@ wxRect NormalizeRCT(const RCT* prct);
#endif #endif
extern wxHashTable _nice_windows; extern wxHashTable _nice_windows;
extern wxWindow* _task_win; extern wxFrame* _task_win;
extern EVENT_HANDLER _task_win_handler; extern EVENT_HANDLER _task_win_handler;
#endif #endif