virtual void OnInternalIdle();
wxMenuBar *m_frameMenuBar;
+ wxMenuBar *m_mdiMenuBar;
wxStatusBar *m_frameStatusBar;
wxToolBar *m_frameToolBar;
wxString m_title;
wxMDIClientWindow *m_clientWindow;
bool m_parentFrameActive;
- wxMenuBar *m_mdiMenuBar;
DECLARE_EVENT_TABLE()
};
virtual void OnInternalIdle();
wxMenuBar *m_frameMenuBar;
+ wxMenuBar *m_mdiMenuBar;
wxStatusBar *m_frameStatusBar;
wxToolBar *m_frameToolBar;
wxString m_title;
wxMDIClientWindow *m_clientWindow;
bool m_parentFrameActive;
- wxMenuBar *m_mdiMenuBar;
DECLARE_EVENT_TABLE()
};
wxFrame::wxFrame()
{
m_frameMenuBar = (wxMenuBar *) NULL;
+ m_mdiMenuBar = (wxMenuBar *) NULL;
m_frameStatusBar = (wxStatusBar *) NULL;
m_frameToolBar = (wxToolBar *) NULL;
m_sizeSet = FALSE;
long style, const wxString &name )
{
m_frameMenuBar = (wxMenuBar *) NULL;
+ m_mdiMenuBar = (wxMenuBar *) NULL;
m_frameStatusBar = (wxStatusBar *) NULL;
m_frameToolBar = (wxToolBar *) NULL;
m_sizeSet = FALSE;
wxFrame::~wxFrame()
{
if (m_frameMenuBar) delete m_frameMenuBar;
+ m_frameMenuBar = (wxMenuBar *) NULL;
+
if (m_frameStatusBar) delete m_frameStatusBar;
+ m_frameStatusBar = (wxStatusBar *) NULL;
+
if (m_frameToolBar) delete m_frameToolBar;
+ m_frameToolBar = (wxToolBar *) NULL;
wxTopLevelWindows.DeleteObject( this );
if (show && !m_sizeSet)
{
- // by calling GtkOnSize here, we don't have to call
- // either after showing the frame, which would entail
- // much ugly flicker nor from within the size_allocate
- // handler, because GTK 1.1.X forbids that.
+ /* by calling GtkOnSize here, we don't have to call
+ either after showing the frame, which would entail
+ much ugly flicker nor from within the size_allocate
+ handler, because GTK 1.1.X forbids that. */
GtkOnSize( m_x, m_y, m_width, m_height );
}
{
wxASSERT_MSG( (m_widget != NULL), "invalid window" );
- // Don't do anything for children of wxMDIChildFrame
+ /* Don't do anything for children of wxMDIChildFrame */
if (!m_wxwindow) return;
if (m_resizing) return; // I don't like recursions
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameMenuBar->m_widget, xx, yy );
gtk_widget_set_usize( m_frameMenuBar->m_widget, ww, hh );
}
-
+
if (m_frameToolBar)
{
int xx = m_miniEdge;
int yy = m_miniEdge + m_miniTitle;
- if (m_frameMenuBar) yy += wxMENU_HEIGHT;
+ if ((m_frameMenuBar) || (m_mdiMenuBar)) yy += wxMENU_HEIGHT;
int ww = m_width - 2*m_miniEdge;
int hh = m_frameToolBar->m_height;
m_frameMenuBar->m_parent = this;
gtk_myfixed_put( GTK_MYFIXED(m_wxwindow),
m_frameMenuBar->m_widget, m_frameMenuBar->m_x, m_frameMenuBar->m_y );
+
+ /* an mdi child menu bar might be underneath */
+ if (m_mdiMenuBar) m_frameMenuBar->Show( FALSE );
}
}
}
//-----------------------------------------------------------------------------
-// page change callback
+// "switch_page"
//-----------------------------------------------------------------------------
static void gtk_page_change_callback( GtkNotebook *WXUNUSED(widget),
void wxMDIParentFrame::SetMDIMenuBar( wxMenuBar *menu_bar )
{
+ /* hide old child menu bar */
if (m_mdiMenuBar) m_mdiMenuBar->Show( FALSE );
+
m_mdiMenuBar = menu_bar;
+
+ /* show and resize new menu child menu bar */
if (m_mdiMenuBar)
{
m_mdiMenuBar->m_x = 0;
gtk_widget_set_usize( m_mdiMenuBar->m_widget, m_width, wxMENU_HEIGHT );
m_mdiMenuBar->Show( TRUE );
}
+
+ /* show/hide parent menu bar as required */
+ if (m_frameMenuBar) m_frameMenuBar->Show( (m_mdiMenuBar == NULL) );
}
void wxMDIParentFrame::GetClientSize(int *width, int *height ) const
m_menuBar->m_parent = mdi_frame;
}
- mdi_frame->SetMDIMenuBar( m_menuBar );
-
+
gtk_myfixed_put( GTK_MYFIXED(mdi_frame->m_wxwindow),
m_menuBar->m_widget, m_menuBar->m_x, m_menuBar->m_y );
+
+ mdi_frame->SetMDIMenuBar( m_menuBar );
}
}
m_hasVMT = FALSE;
#if wxUSE_DRAG_AND_DROP
- wxDELETE(m_dropTarget);
+ if (m_dropTarget)
+ {
+ delete m_dropTarget;
+ m_dropTarget = (wxDropTarget*) NULL;
+ }
#endif
#if wxUSE_TOOLTIPS
- wxDELETE(m_toolTip);
+ if (m_toolTip)
+ {
+ delete m_toolTip;
+ m_toolTip = (wxToolTip*) NULL;
+ }
#endif // wxUSE_TOOLTIPS
- if (m_parent) m_parent->RemoveChild( this );
if (m_widget) Show( FALSE );
DestroyChildren();
+ if (m_parent) m_parent->RemoveChild( this );
+
if (m_widgetStyle) gtk_style_unref( m_widgetStyle );
if (m_scrollGC) gdk_gc_unref( m_scrollGC );
DeleteRelatedConstraints();
if (m_constraints)
{
- // This removes any dangling pointers to this window
- // in other windows' constraintsInvolvedIn lists.
+ /* This removes any dangling pointers to this window
+ * in other windows' constraintsInvolvedIn lists. */
UnsetConstraints(m_constraints);
delete m_constraints;
m_constraints = (wxLayoutConstraints *) NULL;
}
+
if (m_windowSizer)
{
delete m_windowSizer;
m_windowSizer = (wxSizer *) NULL;
}
- // If this is a child of a sizer, remove self from parent
+ /* If this is a child of a sizer, remove self from parent */
if (m_sizerParent) m_sizerParent->RemoveChild((wxWindow *)this);
- // Just in case the window has been Closed, but
- // we're then deleting immediately: don't leave
- // dangling pointers.
+ /* Just in case the window has been Closed, but
+ * we're then deleting immediately: don't leave
+ * dangling pointers. */
wxPendingDelete.DeleteObject(this);
- // Just in case we've loaded a top-level window via
- // wxWindow::LoadNativeDialog but we weren't a dialog
- // class
+ /* Just in case we've loaded a top-level window via
+ * wxWindow::LoadNativeDialog but we weren't a dialog
+ * class */
wxTopLevelWindows.DeleteObject(this);
if (m_windowValidator) delete m_windowValidator;
m_x = (int)pos.x;
m_y = (int)pos.y;
- if (!m_needParent) // some reasonable defaults
+ if (!m_needParent) /* some reasonable defaults */
{
if (m_x == -1)
{
event.SetEventObject(this);
event.SetCanVeto(!force);
- // return FALSE if window wasn't closed because the application vetoed the
- // close event
+ /* return FALSE if window wasn't closed because the application vetoed the
+ * close event */
return GetEventHandler()->ProcessEvent(event) && !event.GetVeto();
}
wxASSERT_MSG( (m_widget != NULL), "invalid window" );
wxASSERT_MSG( (m_parent != NULL), "wxWindow::SetSize requires parent.\n" );
- if (m_resizing) return; // I don't like recursions
+ if (m_resizing) return; /* I don't like recursions */
m_resizing = TRUE;
- if (m_parent->m_wxwindow == NULL) // i.e. wxNotebook
+ if (m_parent->m_wxwindow == NULL) /* i.e. wxNotebook */
{
- // don't set the size for children of wxNotebook, just take the values.
+ /* don't set the size for children of wxNotebook, just take the values. */
m_x = x;
m_y = y;
m_width = width;
{
wxCHECK_MSG( (m_widget != NULL), FALSE, "invalid window" );
+ if (show == m_isShown) return TRUE;
+
if (show)
gtk_widget_show( m_widget );
else
wxFrame::wxFrame()
{
m_frameMenuBar = (wxMenuBar *) NULL;
+ m_mdiMenuBar = (wxMenuBar *) NULL;
m_frameStatusBar = (wxStatusBar *) NULL;
m_frameToolBar = (wxToolBar *) NULL;
m_sizeSet = FALSE;
long style, const wxString &name )
{
m_frameMenuBar = (wxMenuBar *) NULL;
+ m_mdiMenuBar = (wxMenuBar *) NULL;
m_frameStatusBar = (wxStatusBar *) NULL;
m_frameToolBar = (wxToolBar *) NULL;
m_sizeSet = FALSE;
wxFrame::~wxFrame()
{
if (m_frameMenuBar) delete m_frameMenuBar;
+ m_frameMenuBar = (wxMenuBar *) NULL;
+
if (m_frameStatusBar) delete m_frameStatusBar;
+ m_frameStatusBar = (wxStatusBar *) NULL;
+
if (m_frameToolBar) delete m_frameToolBar;
+ m_frameToolBar = (wxToolBar *) NULL;
wxTopLevelWindows.DeleteObject( this );
if (show && !m_sizeSet)
{
- // by calling GtkOnSize here, we don't have to call
- // either after showing the frame, which would entail
- // much ugly flicker nor from within the size_allocate
- // handler, because GTK 1.1.X forbids that.
+ /* by calling GtkOnSize here, we don't have to call
+ either after showing the frame, which would entail
+ much ugly flicker nor from within the size_allocate
+ handler, because GTK 1.1.X forbids that. */
GtkOnSize( m_x, m_y, m_width, m_height );
}
{
wxASSERT_MSG( (m_widget != NULL), "invalid window" );
- // Don't do anything for children of wxMDIChildFrame
+ /* Don't do anything for children of wxMDIChildFrame */
if (!m_wxwindow) return;
if (m_resizing) return; // I don't like recursions
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameMenuBar->m_widget, xx, yy );
gtk_widget_set_usize( m_frameMenuBar->m_widget, ww, hh );
}
-
+
if (m_frameToolBar)
{
int xx = m_miniEdge;
int yy = m_miniEdge + m_miniTitle;
- if (m_frameMenuBar) yy += wxMENU_HEIGHT;
+ if ((m_frameMenuBar) || (m_mdiMenuBar)) yy += wxMENU_HEIGHT;
int ww = m_width - 2*m_miniEdge;
int hh = m_frameToolBar->m_height;
m_frameMenuBar->m_parent = this;
gtk_myfixed_put( GTK_MYFIXED(m_wxwindow),
m_frameMenuBar->m_widget, m_frameMenuBar->m_x, m_frameMenuBar->m_y );
+
+ /* an mdi child menu bar might be underneath */
+ if (m_mdiMenuBar) m_frameMenuBar->Show( FALSE );
}
}
}
//-----------------------------------------------------------------------------
-// page change callback
+// "switch_page"
//-----------------------------------------------------------------------------
static void gtk_page_change_callback( GtkNotebook *WXUNUSED(widget),
void wxMDIParentFrame::SetMDIMenuBar( wxMenuBar *menu_bar )
{
+ /* hide old child menu bar */
if (m_mdiMenuBar) m_mdiMenuBar->Show( FALSE );
+
m_mdiMenuBar = menu_bar;
+
+ /* show and resize new menu child menu bar */
if (m_mdiMenuBar)
{
m_mdiMenuBar->m_x = 0;
gtk_widget_set_usize( m_mdiMenuBar->m_widget, m_width, wxMENU_HEIGHT );
m_mdiMenuBar->Show( TRUE );
}
+
+ /* show/hide parent menu bar as required */
+ if (m_frameMenuBar) m_frameMenuBar->Show( (m_mdiMenuBar == NULL) );
}
void wxMDIParentFrame::GetClientSize(int *width, int *height ) const
m_menuBar->m_parent = mdi_frame;
}
- mdi_frame->SetMDIMenuBar( m_menuBar );
-
+
gtk_myfixed_put( GTK_MYFIXED(mdi_frame->m_wxwindow),
m_menuBar->m_widget, m_menuBar->m_x, m_menuBar->m_y );
+
+ mdi_frame->SetMDIMenuBar( m_menuBar );
}
}
m_hasVMT = FALSE;
#if wxUSE_DRAG_AND_DROP
- wxDELETE(m_dropTarget);
+ if (m_dropTarget)
+ {
+ delete m_dropTarget;
+ m_dropTarget = (wxDropTarget*) NULL;
+ }
#endif
#if wxUSE_TOOLTIPS
- wxDELETE(m_toolTip);
+ if (m_toolTip)
+ {
+ delete m_toolTip;
+ m_toolTip = (wxToolTip*) NULL;
+ }
#endif // wxUSE_TOOLTIPS
- if (m_parent) m_parent->RemoveChild( this );
if (m_widget) Show( FALSE );
DestroyChildren();
+ if (m_parent) m_parent->RemoveChild( this );
+
if (m_widgetStyle) gtk_style_unref( m_widgetStyle );
if (m_scrollGC) gdk_gc_unref( m_scrollGC );
DeleteRelatedConstraints();
if (m_constraints)
{
- // This removes any dangling pointers to this window
- // in other windows' constraintsInvolvedIn lists.
+ /* This removes any dangling pointers to this window
+ * in other windows' constraintsInvolvedIn lists. */
UnsetConstraints(m_constraints);
delete m_constraints;
m_constraints = (wxLayoutConstraints *) NULL;
}
+
if (m_windowSizer)
{
delete m_windowSizer;
m_windowSizer = (wxSizer *) NULL;
}
- // If this is a child of a sizer, remove self from parent
+ /* If this is a child of a sizer, remove self from parent */
if (m_sizerParent) m_sizerParent->RemoveChild((wxWindow *)this);
- // Just in case the window has been Closed, but
- // we're then deleting immediately: don't leave
- // dangling pointers.
+ /* Just in case the window has been Closed, but
+ * we're then deleting immediately: don't leave
+ * dangling pointers. */
wxPendingDelete.DeleteObject(this);
- // Just in case we've loaded a top-level window via
- // wxWindow::LoadNativeDialog but we weren't a dialog
- // class
+ /* Just in case we've loaded a top-level window via
+ * wxWindow::LoadNativeDialog but we weren't a dialog
+ * class */
wxTopLevelWindows.DeleteObject(this);
if (m_windowValidator) delete m_windowValidator;
m_x = (int)pos.x;
m_y = (int)pos.y;
- if (!m_needParent) // some reasonable defaults
+ if (!m_needParent) /* some reasonable defaults */
{
if (m_x == -1)
{
event.SetEventObject(this);
event.SetCanVeto(!force);
- // return FALSE if window wasn't closed because the application vetoed the
- // close event
+ /* return FALSE if window wasn't closed because the application vetoed the
+ * close event */
return GetEventHandler()->ProcessEvent(event) && !event.GetVeto();
}
wxASSERT_MSG( (m_widget != NULL), "invalid window" );
wxASSERT_MSG( (m_parent != NULL), "wxWindow::SetSize requires parent.\n" );
- if (m_resizing) return; // I don't like recursions
+ if (m_resizing) return; /* I don't like recursions */
m_resizing = TRUE;
- if (m_parent->m_wxwindow == NULL) // i.e. wxNotebook
+ if (m_parent->m_wxwindow == NULL) /* i.e. wxNotebook */
{
- // don't set the size for children of wxNotebook, just take the values.
+ /* don't set the size for children of wxNotebook, just take the values. */
m_x = x;
m_y = y;
m_width = width;
{
wxCHECK_MSG( (m_widget != NULL), FALSE, "invalid window" );
+ if (show == m_isShown) return TRUE;
+
if (show)
gtk_widget_show( m_widget );
else