wxFrame::wxFrame(void)
{
+ m_frameToolBar = NULL ;
m_frameMenuBar = NULL;
m_frameStatusBar = NULL;
}
bool wxFrame::Create(wxWindow *parent,
- const wxWindowID id,
+ wxWindowID id,
const wxString& title,
const wxPoint& pos,
const wxSize& size,
- const long style,
+ long style,
const wxString& name)
{
if (!parent)
// m_modalShowing = FALSE;
m_windowStyle = style;
m_frameMenuBar = NULL;
+ m_frameToolBar = NULL ;
m_frameStatusBar = NULL;
SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE));
// Set the client size (i.e. leave the calculation of borders etc.
// to wxWindows)
-void wxFrame::SetClientSize(const int width, const int height)
+void wxFrame::SetClientSize(int width, int height)
{
HWND hWnd = (HWND) GetHWND();
point.y = rect2.top;
MoveWindow(hWnd, point.x, point.y, actual_width, actual_height, (BOOL)TRUE);
-#if WXWIN_COMPATIBILITY
- GetEventHandler()->OldOnSize(width, height);
-#else
+
wxSizeEvent event(wxSize(width, height), m_windowId);
event.SetEventObject( this );
GetEventHandler()->ProcessEvent(event);
-#endif
}
void wxFrame::GetSize(int *width, int *height) const
*y = point.y;
}
-void wxFrame::SetSize(const int x, const int y, const int width, const int height, const int sizeFlags)
+void wxFrame::SetSize(int x, int y, int width, int height, int sizeFlags)
{
int currentX, currentY;
int x1 = x;
MoveWindow((HWND) GetHWND(), x1, y1, w1, h1, (BOOL)TRUE);
-#if WXWIN_COMPATIBILITY
- GetEventHandler()->OldOnSize(width, height);
-#else
wxSizeEvent event(wxSize(width, height), m_windowId);
event.SetEventObject( this );
GetEventHandler()->ProcessEvent(event);
-#endif
}
-bool wxFrame::Show(const bool show)
+bool wxFrame::Show(bool show)
{
int cshow;
if (show)
{
BringWindowToTop((HWND) GetHWND());
-#if WXWIN_COMPATIBILITY
- OldOnActivate(TRUE);
-#else
wxActivateEvent event(wxEVT_ACTIVATE, TRUE, m_windowId);
event.SetEventObject( this );
GetEventHandler()->ProcessEvent(event);
-#endif
}
return TRUE;
}
-void wxFrame::Iconize(const bool iconize)
+void wxFrame::Iconize(bool iconize)
{
if (!iconize)
Show(TRUE);
}
// Equivalent to maximize/restore in Windows
-void wxFrame::Maximize(const bool maximize)
+void wxFrame::Maximize(bool maximize)
{
Show(TRUE);
int cshow;
#endif
}
-wxStatusBar *wxFrame::OnCreateStatusBar(const int number)
+wxStatusBar *wxFrame::OnCreateStatusBar(int number)
{
wxStatusBar *statusBar = NULL;
return statusBar;
}
-bool wxFrame::CreateStatusBar(const int number)
+bool wxFrame::CreateStatusBar(int number)
{
// VZ: calling CreateStatusBar twice is an error - why anyone would do it?
- wxCHECK_RET( m_frameStatusBar == NULL, FALSE );
+ wxCHECK_MSG( m_frameStatusBar == NULL, FALSE,
+ "recreating status bar in wxFrame" );
m_frameStatusBar = OnCreateStatusBar(number);
if ( m_frameStatusBar )
return FALSE;
}
-void wxFrame::SetStatusText(const wxString& text, const int number)
+void wxFrame::SetStatusText(const wxString& text, int number)
{
- wxCHECK( m_frameStatusBar != NULL );
+ wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set text for" );
m_frameStatusBar->SetStatusText(text, number);
}
-void wxFrame::SetStatusWidths(const int n, const int *widths_field)
+void wxFrame::SetStatusWidths(int n, const int widths_field[])
{
- wxCHECK( m_frameStatusBar != NULL );
+ wxCHECK_RET( m_frameStatusBar != NULL, "no statusbar to set widths for" );
m_frameStatusBar->SetStatusWidths(n, widths_field);
PositionStatusBar();
*
*/
-void wxFrame::MSWCreate(const int id, wxWindow *parent, const char *wclass, wxWindow *wx_win, const char *title,
- const int x, const int y, const int width, const int height, const long style)
+void wxFrame::MSWCreate(int id, wxWindow *parent, const char *wclass, wxWindow *wx_win, const char *title,
+ int x, int y, int width, int height, long style)
{
m_defaultIcon = (WXHICON) (wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON : wxDEFAULT_FRAME_ICON);
// If child windows aren't properly drawn initially, WS_CLIPCHILDREN
// could be the culprit. But without it, you can get a lot of flicker.
-// DWORD msflags = WS_POPUP | WS_CLIPCHILDREN ;
-
DWORD msflags = 0;
if ((style & wxCAPTION) == wxCAPTION)
- msflags = WS_OVERLAPPED | WS_CLIPCHILDREN ; // WS_POPUP | WS_CLIPCHILDREN ;
+ msflags = WS_OVERLAPPED;
else
- msflags = WS_POPUP | WS_CLIPCHILDREN ;
+ msflags = WS_POPUP;
if (style & wxMINIMIZE_BOX)
msflags |= WS_MINIMIZEBOX;
msflags |= WS_MAXIMIZE;
if (style & wxCAPTION)
msflags |= WS_CAPTION;
+ if (style & wxCLIP_CHILDREN)
+ msflags |= WS_CLIPCHILDREN;
// Keep this in wxFrame because it saves recoding this function
// in wxTinyFrame
bool wxFrame::MSWOnPaint(void)
{
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("wxFrameWnd::OnPaint %d\n", handle);
#endif
RECT rect;
EndPaint((HWND) GetHWND(), &ps);
}
-
- if (!m_iconized)
+ else
{
-// m_paintHDC = (WXHDC) cdc;
- GetEventHandler()->OldOnPaint();
-// m_paintHDC = NULL;
+ wxPaintEvent event(m_windowId);
+ event.m_eventObject = this;
+ if (!GetEventHandler()->ProcessEvent(event))
+ Default();
}
return 0;
}
return m_defaultIcon;
}
-void wxFrame::MSWOnSize(const int x, const int y, const WXUINT id)
+void wxFrame::MSWOnSize(int x, int y, WXUINT id)
{
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("wxFrameWnd::OnSize %d\n", m_hWnd);
#endif
switch (id)
#endif
PositionStatusBar();
-#if WXWIN_COMPATIBILITY
- GetEventHandler()->OldOnSize(x, y);
-#else
wxSizeEvent event(wxSize(x, y), m_windowId);
event.SetEventObject( this );
- GetEventHandler()->ProcessEvent(event);
-#endif
+ if (!GetEventHandler()->ProcessEvent(event))
+ Default();
}
}
bool wxFrame::MSWOnClose(void)
{
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("wxFrameWnd::OnClose %d\n", handle);
#endif
return Close();
}
-bool wxFrame::MSWOnCommand(const WXWORD id, const WXWORD cmd, const WXHWND control)
+bool wxFrame::MSWOnCommand(WXWORD id, WXWORD cmd, WXHWND control)
{
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("wxFrameWnd::OnCommand %d\n", handle);
#endif
if (cmd == 0 || cmd == 1 ) // Can be either a menu command or an accelerator.
return FALSE;
}
-void wxFrame::MSWOnMenuHighlight(const WXWORD nItem, const WXWORD nFlags, const WXHMENU hSysMenu)
+void wxFrame::MSWOnMenuHighlight(WXWORD nItem, WXWORD nFlags, WXHMENU hSysMenu)
{
-#if WXWIN_COMPATIBILITY
- if (nFlags == 0xFFFF && hSysMenu == 0)
- GetEventHandler()->OldOnMenuSelect(-1);
- else if (nFlags != MF_SEPARATOR)
- GetEventHandler()->OldOnMenuSelect(nItem);
-#else
if (nFlags == 0xFFFF && hSysMenu == 0)
{
wxMenuEvent event(wxEVT_MENU_HIGHLIGHT, -1);
event.SetEventObject( this );
GetEventHandler()->ProcessEvent(event);
}
-#endif
}
bool wxFrame::MSWProcessMessage(WXMSG* pMsg)
{
if (m_acceleratorTable != 0 &&
- ::TranslateAccelerator((HWND) GetHWND(), (HANDLE) m_acceleratorTable, (MSG *)pMsg))
+ ::TranslateAccelerator((HWND) GetHWND(), (HACCEL) m_acceleratorTable, (MSG *)pMsg))
return TRUE;
return FALSE;
// resize to client rectangle size
void wxFrame::OnSize(wxSizeEvent& event)
{
- // Search for a child which is a subwindow, not another frame.
+ // if we're using constraints - do use them
+ #if USE_CONSTRAINTS
+ if ( GetAutoLayout() ) {
+ Layout();
+ return;
+ }
+ #endif
+
+ // do we have _exactly_ one child?
wxWindow *child = NULL;
- // Count the number of _subwindow_ children
- int noChildren = 0;
- for(wxNode *node = GetChildren()->First(); node; node = node->Next())
+ for ( wxNode *node = GetChildren()->First(); node; node = node->Next() )
{
wxWindow *win = (wxWindow *)node->Data();
- if (!win->IsKindOf(CLASSINFO(wxFrame)) && !win->IsKindOf(CLASSINFO(wxDialog))
- && (win != GetStatusBar()))
+ if ( !win->IsKindOf(CLASSINFO(wxFrame)) &&
+ !win->IsKindOf(CLASSINFO(wxDialog)) &&
+ (win != GetStatusBar()) &&
+ (win != GetToolBar()) )
{
+ if ( child )
+ return; // it's our second subwindow - nothing to do
child = win;
- noChildren ++;
}
}
- // If not one child, call the Layout function if compiled in
- if (!child || (noChildren > 1)
-#if USE_CONSTRAINTS
- || GetAutoLayout()
-#endif
- )
- {
-#if USE_CONSTRAINTS
- if (GetAutoLayout())
- Layout();
-#endif
- return;
- }
-
- if (child)
- {
- int client_x, client_y;
+ if ( child ) {
+ // we have exactly one child - set it's size to fill the whole frame
+ int clientW, clientH;
+ GetClientSize(&clientW, &clientH);
-#if DEBUG > 1
- wxDebugMsg("wxFrame::OnSize: about to set the child's size.\n");
-#endif
+ int x = 0;
+ int y = 0;
- GetClientSize(&client_x, &client_y);
- child->SetSize(0, 0, client_x, client_y);
- }
+ // Manage the toolbar if there is one
+ if ( GetToolBar() )
+ {
+ int wt, ht;
+ GetToolBar()->GetSize(&wt, &ht);
+ clientH -= ht;
+ y += ht;
+ GetToolBar()->SetSize(0, 0, clientW, ht);
+ }
+ child->SetSize(x, y, clientW, clientH);
+ }
}
// Default activation behaviour - set the focus for the first child
if (!child->IsKindOf(CLASSINFO(wxFrame)) &&
!child->IsKindOf(CLASSINFO(wxDialog)))
{
-#if DEBUG > 1
+#if WXDEBUG > 1
wxDebugMsg("wxFrame::OnActivate: about to set the child's focus.\n");
#endif
child->SetFocus();
}
}
+bool wxFrame::OnClose(void)
+{
+ return TRUE;
+}
+
// Destroy the window (delayed, if a managed window)
bool wxFrame::Destroy(void)
{
}
}
-#if WXWIN_COMPATIBILITY
-void wxFrame::OldOnSize(int x, int y)
-{
-#if WXWIN_COMPATIBILITY == 1
- wxSizeEvent event(wxSize(x, y), m_windowId);
- event.SetEventObject( this );
- if (GetEventHandler()->ProcessEvent(event))
- return;
-#endif
- // Search for a child which is a subwindow, not another frame.
- wxWindow *child = NULL;
- // Count the number of _subwindow_ children
- int noChildren = 0;
- for(wxNode *node = GetChildren()->First(); node; node = node->Next())
- {
- wxWindow *win = (wxWindow *)node->Data();
- if (!win->IsKindOf(CLASSINFO(wxFrame)) && !win->IsKindOf(CLASSINFO(wxDialog)) && (win != GetStatusBar()))
- {
- child = win;
- noChildren ++;
- }
- }
-
- // If not one child, call the Layout function if compiled in
- if (!child || (noChildren > 1)
-#if USE_CONSTRAINTS
- || GetAutoLayout()
-#endif
- )
- {
-#if USE_CONSTRAINTS
- if (GetAutoLayout())
- Layout();
-#endif
- return;
- }
-
- if (child)
- {
- int client_x, client_y;
-
-#if DEBUG > 1
- wxDebugMsg("wxFrame::OnSize: about to set the child's size.\n");
-#endif
-
- GetClientSize(&client_x, &client_y);
- child->SetSize(0, 0, client_x, client_y);
- }
-}
-
-// Default activation behaviour - set the focus for the first child
-// subwindow found.
-void wxFrame::OldOnActivate(bool flag)
-{
-#if WXWIN_COMPATIBILITY == 1
- wxActivateEvent event(wxEVT_ACTIVATE, flag, m_windowId);
- event.SetEventObject( this );
- if (GetEventHandler()->ProcessEvent(event))
- return;
-#endif
- for(wxNode *node = GetChildren()->First(); node; node = node->Next())
- {
- // Find a child that's a subwindow, but not a dialog box.
- wxWindow *child = (wxWindow *)node->Data();
- if (!child->IsKindOf(CLASSINFO(wxFrame)) &&
- !child->IsKindOf(CLASSINFO(wxDialog)))
- {
-#if DEBUG > 1
- wxDebugMsg("wxFrame::OnActivate: about to set the child's focus.\n");
-#endif
- child->SetFocus();
- return;
- }
- }
-}
-
-// Default menu selection behaviour - display a help string
-void wxFrame::OldOnMenuSelect(int id)
-{
-#if WXWIN_COMPATIBILITY == 1
- wxMenuEvent event(wxEVT_MENU_HIGHLIGHT, id);
- event.SetEventObject( this );
- if (GetEventHandler()->ProcessEvent(event))
- return;
-#endif
- if (GetStatusBar())
- {
- if (id == -1)
- SetStatusText("");
- else
- {
- wxMenuBar *menuBar = GetMenuBar();
- if (menuBar)
- {
- wxString helpString(menuBar->GetHelpString(id));
- if (helpString != "")
- SetStatusText(helpString);
- }
- }
- }
-}
-#endif
-
wxMenuBar *wxFrame::GetMenuBar(void) const
{
return m_frameMenuBar;
}
-void wxFrame::Centre(const int direction)
+void wxFrame::Centre(int direction)
{
int display_width, display_height, width, height, x, y;
wxDisplaySize(&display_width, &display_height);
if (!bar)
return;
- // Motif does the job by itself!!
-#ifndef __MOTIF__
wxMenuItem *item = bar->FindItemForId(id) ;
if (item && item->IsCheckable())
{
-//wxDebugMsg("Toggling id %d\n",id) ;
bar->Check(id,!bar->Checked(id)) ;
}
-#endif
- if (!ProcessEvent(commandEvent))
- OldOnMenuCommand(id);
+ GetEventHandler()->ProcessEvent(commandEvent);
}
void wxFrame::OnIdle(wxIdleEvent& event)