// "switch_page"
//-----------------------------------------------------------------------------
-static void
+static void
gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget),
GtkNotebookPage *page,
- gint WXUNUSED(page_num),
- wxMDIParentFrame *parent )
+ gint WXUNUSED(page_num),
+ wxMDIParentFrame *parent )
{
- if (g_isIdle)
+ if (g_isIdle)
wxapp_install_idle_handler();
// send deactivate event to old child
event1.SetEventObject( child);
child->GetEventHandler()->ProcessEvent( event1 );
}
-
+
// send activate event to new child
-
+
wxMDIClientWindow *client_window = parent->GetClientWindow();
if (!client_window)
return;
{
wxMDIChildFrame *child_frame = (wxMDIChildFrame *)node->Data();
if (child_frame->m_page == page)
- {
+ {
child = child_frame;
- break;
- }
+ break;
+ }
node = node->Next();
}
-
+
if (!child)
return;
-
+
wxActivateEvent event2( wxEVT_ACTIVATE, TRUE, child->GetId() );
event2.SetEventObject( child);
child->GetEventHandler()->ProcessEvent( event2 );
IMPLEMENT_DYNAMIC_CLASS(wxMDIParentFrame,wxFrame)
-BEGIN_EVENT_TABLE(wxMDIParentFrame, wxFrame)
-END_EVENT_TABLE()
-
-wxMDIParentFrame::wxMDIParentFrame()
+void wxMDIParentFrame::Init()
{
m_justInserted = FALSE;
m_clientWindow = (wxMDIClientWindow *) NULL;
}
-wxMDIParentFrame::wxMDIParentFrame( wxWindow *parent,
- wxWindowID id, const wxString& title,
- const wxPoint& pos, const wxSize& size,
- long style, const wxString& name )
-{
- m_justInserted = FALSE;
- m_clientWindow = (wxMDIClientWindow *) NULL;
- Create( parent, id, title, pos, size, style, name );
-}
-
wxMDIParentFrame::~wxMDIParentFrame()
{
}
-bool wxMDIParentFrame::Create( wxWindow *parent,
- wxWindowID id, const wxString& title,
- const wxPoint& pos, const wxSize& size,
- long style, const wxString& name )
+bool wxMDIParentFrame::Create(wxWindow *parent,
+ wxWindowID id,
+ const wxString& title,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ const wxString& name )
{
wxFrame::Create( parent, id, title, pos, size, style, name );
menu_bar->m_y = 0;
menu_bar->m_width = m_width;
menu_bar->m_height = wxMENU_HEIGHT;
- gtk_pizza_set_size( GTK_PIZZA(m_mainWidget),
- menu_bar->m_widget,
+ gtk_pizza_set_size( GTK_PIZZA(m_mainWidget),
+ menu_bar->m_widget,
0, 0, m_width, wxMENU_HEIGHT );
}
wxNode *node = m_clientWindow->GetChildren().First();
while (node)
{
- wxMDIChildFrame *child_frame = (wxMDIChildFrame *)node->Data();
- wxMenuBar *menu_bar = child_frame->m_menuBar;
- if (child_frame->m_menuBar)
+ wxObject *child = node->Data();
+ wxMDIChildFrame *child_frame = wxDynamicCast(child, wxMDIChildFrame);
+ if ( child_frame )
{
- if (child_frame == active_child_frame)
+ wxMenuBar *menu_bar = child_frame->m_menuBar;
+ if ( menu_bar )
{
- if (menu_bar->Show(TRUE))
- {
- menu_bar->m_width = m_width;
- menu_bar->m_height = wxMENU_HEIGHT;
- gtk_pizza_set_size( GTK_PIZZA(m_mainWidget),
- menu_bar->m_widget,
- 0, 0, m_width, wxMENU_HEIGHT );
- menu_bar->SetInvokingWindow( child_frame );
- }
- visible_child_menu = TRUE;
+ if (child_frame == active_child_frame)
+ {
+ if (menu_bar->Show(TRUE))
+ {
+ menu_bar->m_width = m_width;
+ menu_bar->m_height = wxMENU_HEIGHT;
+ gtk_pizza_set_size( GTK_PIZZA(m_mainWidget),
+ menu_bar->m_widget,
+ 0, 0, m_width, wxMENU_HEIGHT );
+ menu_bar->SetInvokingWindow( child_frame );
+ }
+ visible_child_menu = TRUE;
+ }
+ else
+ {
+ if (menu_bar->Show(FALSE))
+ {
+ menu_bar->UnsetInvokingWindow( child_frame );
+ }
+ }
}
- else
- {
- if (menu_bar->Show(FALSE))
- {
- menu_bar->UnsetInvokingWindow( child_frame );
- }
- }
}
+
node = node->Next();
}
(m_frameMenuBar->IsShown() == visible_child_menu))
{
if (visible_child_menu)
- {
+ {
m_frameMenuBar->Show( FALSE );
- m_frameMenuBar->UnsetInvokingWindow( this );
- }
- else
- {
+ m_frameMenuBar->UnsetInvokingWindow( this );
+ }
+ else
+ {
m_frameMenuBar->Show( TRUE );
- m_frameMenuBar->SetInvokingWindow( this );
-
- m_frameMenuBar->m_width = m_width;
- m_frameMenuBar->m_height = wxMENU_HEIGHT;
- gtk_pizza_set_size( GTK_PIZZA(m_mainWidget),
- m_frameMenuBar->m_widget,
- 0, 0, m_width, wxMENU_HEIGHT );
- }
+ m_frameMenuBar->SetInvokingWindow( this );
+
+ m_frameMenuBar->m_width = m_width;
+ m_frameMenuBar->m_height = wxMENU_HEIGHT;
+ gtk_pizza_set_size( GTK_PIZZA(m_mainWidget),
+ m_frameMenuBar->m_widget,
+ 0, 0, m_width, wxMENU_HEIGHT );
+ }
}
}
-void wxMDIParentFrame::GetClientSize(int *width, int *height ) const
+void wxMDIParentFrame::DoGetClientSize(int *width, int *height ) const
{
- wxFrame::GetClientSize( width, height );
+ wxFrame::DoGetClientSize( width, height );
}
wxMDIChildFrame *wxMDIParentFrame::GetActiveChild() const
gtk_notebook_prev_page( GTK_NOTEBOOK(m_clientWindow->m_widget) );
}
-void wxMDIParentFrame::OnActivate( wxActivateEvent& WXUNUSED(event) )
-{
-}
-
-void wxMDIParentFrame::OnSysColourChanged( wxSysColourChangedEvent& WXUNUSED(event) )
-{
-}
-
//-----------------------------------------------------------------------------
// wxMDIChildFrame
//-----------------------------------------------------------------------------
BEGIN_EVENT_TABLE(wxMDIChildFrame, wxFrame)
EVT_ACTIVATE(wxMDIChildFrame::OnActivate)
+ EVT_MENU_HIGHLIGHT_ALL(wxMDIChildFrame::OnMenuHighlight)
END_EVENT_TABLE()
wxMDIChildFrame::wxMDIChildFrame()
{
m_menuBar = (wxMenuBar *) NULL;
m_page = (GtkNotebookPage *) NULL;
+ m_isFrame = FALSE;
}
wxMDIChildFrame::wxMDIChildFrame( wxMDIParentFrame *parent,
{
m_menuBar = (wxMenuBar *) NULL;
m_page = (GtkNotebookPage *) NULL;
+ m_isFrame = FALSE;
Create( parent, id, title, wxDefaultPosition, size, style, name );
}
return wxWindow::Create( parent->GetClientWindow(), id, wxDefaultPosition, size, style, name );
}
-void wxMDIChildFrame::GetClientSize( int *width, int *height ) const
+void wxMDIChildFrame::DoGetClientSize( int *width, int *height ) const
{
- wxWindow::GetClientSize( width, height );
+ wxWindow::DoGetClientSize( width, height );
}
void wxMDIChildFrame::AddChild( wxWindowBase *child )
m_menuBar->SetParent( mdi_frame );
/* insert the invisible menu bar into the _parent_ mdi frame */
- gtk_pizza_put( GTK_PIZZA(mdi_frame->m_mainWidget),
- m_menuBar->m_widget,
+ gtk_pizza_put( GTK_PIZZA(mdi_frame->m_mainWidget),
+ m_menuBar->m_widget,
0, 0, mdi_frame->m_width, wxMENU_HEIGHT );
}
}
void wxMDIChildFrame::Activate()
{
-#if (GTK_MINOR_VERSION > 0)
+#if defined(__WXGTK20__) || (GTK_MINOR_VERSION > 0)
wxMDIParentFrame* parent = (wxMDIParentFrame*) GetParent();
GtkNotebook* notebook = GTK_NOTEBOOK(parent->m_widget);
- gint pageno = gtk_notebook_page_num( notebook, m_page->child );
+ gint pageno = gtk_notebook_page_num( notebook, m_widget );
gtk_notebook_set_page( notebook, pageno );
-#else
+#else // GTK+ 1.0
// the only way I can see to do this under gtk+ 1.0.X would
- // be to keep track of page numbers, start at first and
+ // be to keep track of page numbers, start at first and
// do "next" enough times to get to this page number - messy
// - J. Russell Smyth
#endif
}
-void wxMDIChildFrame::OnActivate( wxActivateEvent &WXUNUSED(event) )
+void wxMDIChildFrame::OnActivate( wxActivateEvent& WXUNUSED(event) )
+{
+}
+
+void wxMDIChildFrame::OnMenuHighlight( wxMenuEvent& event )
{
+#if wxUSE_STATUSBAR
+ wxMDIParentFrame *mdi_frame = (wxMDIParentFrame*)m_parent->GetParent();
+ if ( !ShowMenuHelp(mdi_frame->GetStatusBar(), event.GetMenuId()) )
+ {
+ // we don't have any help text for this item, but may be the MDI frame
+ // does?
+ mdi_frame->OnMenuHighlight(event);
+ }
+#endif // wxUSE_STATUSBAR
+}
+
+void wxMDIChildFrame::SetTitle( const wxString &title )
+{
+ if ( title == m_title )
+ return;
+
+ m_title = title;
+
+ wxMDIParentFrame* parent = (wxMDIParentFrame*) GetParent();
+ GtkNotebook* notebook = GTK_NOTEBOOK(parent->m_widget);
+ gtk_notebook_set_tab_label_text(notebook, m_widget, title.mbc_str());
}
//-----------------------------------------------------------------------------
!CreateBase( parent, -1, wxDefaultPosition, wxDefaultSize, style, wxDefaultValidator, wxT("wxMDIClientWindow") ))
{
wxFAIL_MSG( wxT("wxMDIClientWindow creation failed") );
- return FALSE;
+ return FALSE;
}
m_widget = gtk_notebook_new();