fixes for dialogs whose parent is wxMDI<whatever>Frame

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@7204 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2000-04-18 09:47:09 +00:00
parent 88c3e369b9
commit 9d62ffe24a
5 changed files with 212 additions and 224 deletions

View File

@@ -1,10 +1,10 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Name: mdi.h // Name: gtk/mdi.h
// Purpose: // Purpose:
// Author: Robert Roebling // Author: Robert Roebling
// Id: $Id$ // Id: $Id$
// Copyright: (c) 1998 Robert Roebling // Copyright: (c) 1998 Robert Roebling
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@@ -45,12 +45,20 @@ extern const wxChar* wxStatusLineNameStr;
class wxMDIParentFrame: public wxFrame class wxMDIParentFrame: public wxFrame
{ {
public: public:
wxMDIParentFrame(); wxMDIParentFrame() { Init(); }
wxMDIParentFrame( wxWindow *parent, wxMDIParentFrame(wxWindow *parent,
wxWindowID id, const wxString& title, wxWindowID id,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, const wxString& title,
long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL, const wxPoint& pos = wxDefaultPosition,
const wxString& name = wxFrameNameStr ); const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
const wxString& name = wxFrameNameStr)
{
Init();
(void)Create(parent, id, title, pos, size, style, name);
}
~wxMDIParentFrame(void); ~wxMDIParentFrame(void);
bool Create( wxWindow *parent, bool Create( wxWindow *parent,
wxWindowID id, const wxString& title, wxWindowID id, const wxString& title,
@@ -60,32 +68,31 @@ public:
void GetClientSize(int *width, int *height) const; void GetClientSize(int *width, int *height) const;
wxMDIChildFrame *GetActiveChild() const; wxMDIChildFrame *GetActiveChild() const;
wxMDIClientWindow *GetClientWindow() const; wxMDIClientWindow *GetClientWindow() const;
virtual wxMDIClientWindow *OnCreateClient(); virtual wxMDIClientWindow *OnCreateClient();
virtual void Cascade() {} virtual void Cascade() {}
virtual void Tile() {} virtual void Tile() {}
virtual void ArrangeIcons() {} virtual void ArrangeIcons() {}
virtual void ActivateNext(); virtual void ActivateNext();
virtual void ActivatePrevious(); virtual void ActivatePrevious();
void OnActivate( wxActivateEvent& event ); // implementation
void OnSysColourChanged( wxSysColourChangedEvent& event );
// implementation
wxMDIClientWindow *m_clientWindow; wxMDIClientWindow *m_clientWindow;
bool m_justInserted; bool m_justInserted;
virtual void GtkOnSize( int x, int y, int width, int height ); virtual void GtkOnSize( int x, int y, int width, int height );
virtual void OnInternalIdle(); virtual void OnInternalIdle();
protected:
void Init();
private: private:
friend class wxMDIChildFrame; friend class wxMDIChildFrame;
DECLARE_DYNAMIC_CLASS(wxMDIParentFrame) DECLARE_DYNAMIC_CLASS(wxMDIParentFrame)
DECLARE_EVENT_TABLE()
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -105,7 +112,7 @@ public:
wxWindowID id, const wxString& title, wxWindowID id, const wxString& title,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME_STYLE, const wxString& name = wxFrameNameStr ); long style = wxDEFAULT_FRAME_STYLE, const wxString& name = wxFrameNameStr );
virtual void SetMenuBar( wxMenuBar *menu_bar ); virtual void SetMenuBar( wxMenuBar *menu_bar );
virtual wxMenuBar *GetMenuBar() const; virtual wxMenuBar *GetMenuBar() const;
@@ -113,11 +120,11 @@ public:
virtual void AddChild( wxWindowBase *child ); virtual void AddChild( wxWindowBase *child );
virtual void Activate(); virtual void Activate();
#if wxUSE_STATUSBAR #if wxUSE_STATUSBAR
// no status bars // no status bars
virtual wxStatusBar* CreateStatusBar( int WXUNUSED(number) = 1, virtual wxStatusBar* CreateStatusBar( int WXUNUSED(number) = 1,
long WXUNUSED(style) = 1, long WXUNUSED(style) = 1,
wxWindowID WXUNUSED(id) = 1, wxWindowID WXUNUSED(id) = 1,
const wxString& WXUNUSED(name) = wxEmptyString) const wxString& WXUNUSED(name) = wxEmptyString)
{ return (wxStatusBar*)NULL; } { return (wxStatusBar*)NULL; }
@@ -131,38 +138,38 @@ public:
virtual void SetSizeHints( int WXUNUSED(minW), int WXUNUSED(minH), virtual void SetSizeHints( int WXUNUSED(minW), int WXUNUSED(minH),
int WXUNUSED(maxW), int WXUNUSED(maxH), int WXUNUSED(maxW), int WXUNUSED(maxH),
int WXUNUSED(incW), int WXUNUSED(incH) ) {} int WXUNUSED(incW), int WXUNUSED(incH) ) {}
#if wxUSE_TOOLBAR #if wxUSE_TOOLBAR
// no toolbar bars // no toolbar bars
virtual wxToolBar* CreateToolBar( long WXUNUSED(style), wxWindowID WXUNUSED(id), virtual wxToolBar* CreateToolBar( long WXUNUSED(style), wxWindowID WXUNUSED(id),
const wxString& WXUNUSED(name) ) { return (wxToolBar*)NULL; } const wxString& WXUNUSED(name) ) { return (wxToolBar*)NULL; }
virtual wxToolBar *GetToolBar() const { return (wxToolBar*)NULL; } virtual wxToolBar *GetToolBar() const { return (wxToolBar*)NULL; }
#endif #endif
// no icon // no icon
void SetIcon( const wxIcon &icon ) { m_icon = icon; } void SetIcon( const wxIcon &icon ) { m_icon = icon; }
// no title // no title
void SetTitle( const wxString &title ) { m_title = title; } void SetTitle( const wxString &title );
wxString GetTitle() const { return m_title; } wxString GetTitle() const { return m_title; }
// no maximize etc // no maximize etc
virtual void Maximize( bool WXUNUSED(maximize) ) {} virtual void Maximize( bool WXUNUSED(maximize) ) {}
virtual void Restore() {} virtual void Restore() {}
virtual bool IsTopLevel() const { return FALSE; } virtual bool IsTopLevel() const { return FALSE; }
void OnActivate( wxActivateEvent& event ); void OnActivate( wxActivateEvent& event );
void OnMenuHighlight( wxMenuEvent& event ); void OnMenuHighlight( wxMenuEvent& event );
// implementation // implementation
wxMenuBar *m_menuBar; wxMenuBar *m_menuBar;
GtkNotebookPage *m_page; GtkNotebookPage *m_page;
bool m_justInserted; bool m_justInserted;
private: private:
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS(wxMDIChildFrame) DECLARE_DYNAMIC_CLASS(wxMDIChildFrame)
}; };

View File

@@ -1,10 +1,10 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Name: mdi.h // Name: gtk/mdi.h
// Purpose: // Purpose:
// Author: Robert Roebling // Author: Robert Roebling
// Id: $Id$ // Id: $Id$
// Copyright: (c) 1998 Robert Roebling // Copyright: (c) 1998 Robert Roebling
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@@ -45,12 +45,20 @@ extern const wxChar* wxStatusLineNameStr;
class wxMDIParentFrame: public wxFrame class wxMDIParentFrame: public wxFrame
{ {
public: public:
wxMDIParentFrame(); wxMDIParentFrame() { Init(); }
wxMDIParentFrame( wxWindow *parent, wxMDIParentFrame(wxWindow *parent,
wxWindowID id, const wxString& title, wxWindowID id,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, const wxString& title,
long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL, const wxPoint& pos = wxDefaultPosition,
const wxString& name = wxFrameNameStr ); const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
const wxString& name = wxFrameNameStr)
{
Init();
(void)Create(parent, id, title, pos, size, style, name);
}
~wxMDIParentFrame(void); ~wxMDIParentFrame(void);
bool Create( wxWindow *parent, bool Create( wxWindow *parent,
wxWindowID id, const wxString& title, wxWindowID id, const wxString& title,
@@ -60,32 +68,31 @@ public:
void GetClientSize(int *width, int *height) const; void GetClientSize(int *width, int *height) const;
wxMDIChildFrame *GetActiveChild() const; wxMDIChildFrame *GetActiveChild() const;
wxMDIClientWindow *GetClientWindow() const; wxMDIClientWindow *GetClientWindow() const;
virtual wxMDIClientWindow *OnCreateClient(); virtual wxMDIClientWindow *OnCreateClient();
virtual void Cascade() {} virtual void Cascade() {}
virtual void Tile() {} virtual void Tile() {}
virtual void ArrangeIcons() {} virtual void ArrangeIcons() {}
virtual void ActivateNext(); virtual void ActivateNext();
virtual void ActivatePrevious(); virtual void ActivatePrevious();
void OnActivate( wxActivateEvent& event ); // implementation
void OnSysColourChanged( wxSysColourChangedEvent& event );
// implementation
wxMDIClientWindow *m_clientWindow; wxMDIClientWindow *m_clientWindow;
bool m_justInserted; bool m_justInserted;
virtual void GtkOnSize( int x, int y, int width, int height ); virtual void GtkOnSize( int x, int y, int width, int height );
virtual void OnInternalIdle(); virtual void OnInternalIdle();
protected:
void Init();
private: private:
friend class wxMDIChildFrame; friend class wxMDIChildFrame;
DECLARE_DYNAMIC_CLASS(wxMDIParentFrame) DECLARE_DYNAMIC_CLASS(wxMDIParentFrame)
DECLARE_EVENT_TABLE()
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -105,7 +112,7 @@ public:
wxWindowID id, const wxString& title, wxWindowID id, const wxString& title,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME_STYLE, const wxString& name = wxFrameNameStr ); long style = wxDEFAULT_FRAME_STYLE, const wxString& name = wxFrameNameStr );
virtual void SetMenuBar( wxMenuBar *menu_bar ); virtual void SetMenuBar( wxMenuBar *menu_bar );
virtual wxMenuBar *GetMenuBar() const; virtual wxMenuBar *GetMenuBar() const;
@@ -113,11 +120,11 @@ public:
virtual void AddChild( wxWindowBase *child ); virtual void AddChild( wxWindowBase *child );
virtual void Activate(); virtual void Activate();
#if wxUSE_STATUSBAR #if wxUSE_STATUSBAR
// no status bars // no status bars
virtual wxStatusBar* CreateStatusBar( int WXUNUSED(number) = 1, virtual wxStatusBar* CreateStatusBar( int WXUNUSED(number) = 1,
long WXUNUSED(style) = 1, long WXUNUSED(style) = 1,
wxWindowID WXUNUSED(id) = 1, wxWindowID WXUNUSED(id) = 1,
const wxString& WXUNUSED(name) = wxEmptyString) const wxString& WXUNUSED(name) = wxEmptyString)
{ return (wxStatusBar*)NULL; } { return (wxStatusBar*)NULL; }
@@ -131,38 +138,38 @@ public:
virtual void SetSizeHints( int WXUNUSED(minW), int WXUNUSED(minH), virtual void SetSizeHints( int WXUNUSED(minW), int WXUNUSED(minH),
int WXUNUSED(maxW), int WXUNUSED(maxH), int WXUNUSED(maxW), int WXUNUSED(maxH),
int WXUNUSED(incW), int WXUNUSED(incH) ) {} int WXUNUSED(incW), int WXUNUSED(incH) ) {}
#if wxUSE_TOOLBAR #if wxUSE_TOOLBAR
// no toolbar bars // no toolbar bars
virtual wxToolBar* CreateToolBar( long WXUNUSED(style), wxWindowID WXUNUSED(id), virtual wxToolBar* CreateToolBar( long WXUNUSED(style), wxWindowID WXUNUSED(id),
const wxString& WXUNUSED(name) ) { return (wxToolBar*)NULL; } const wxString& WXUNUSED(name) ) { return (wxToolBar*)NULL; }
virtual wxToolBar *GetToolBar() const { return (wxToolBar*)NULL; } virtual wxToolBar *GetToolBar() const { return (wxToolBar*)NULL; }
#endif #endif
// no icon // no icon
void SetIcon( const wxIcon &icon ) { m_icon = icon; } void SetIcon( const wxIcon &icon ) { m_icon = icon; }
// no title // no title
void SetTitle( const wxString &title ) { m_title = title; } void SetTitle( const wxString &title );
wxString GetTitle() const { return m_title; } wxString GetTitle() const { return m_title; }
// no maximize etc // no maximize etc
virtual void Maximize( bool WXUNUSED(maximize) ) {} virtual void Maximize( bool WXUNUSED(maximize) ) {}
virtual void Restore() {} virtual void Restore() {}
virtual bool IsTopLevel() const { return FALSE; } virtual bool IsTopLevel() const { return FALSE; }
void OnActivate( wxActivateEvent& event ); void OnActivate( wxActivateEvent& event );
void OnMenuHighlight( wxMenuEvent& event ); void OnMenuHighlight( wxMenuEvent& event );
// implementation // implementation
wxMenuBar *m_menuBar; wxMenuBar *m_menuBar;
GtkNotebookPage *m_page; GtkNotebookPage *m_page;
bool m_justInserted; bool m_justInserted;
private: private:
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS(wxMDIChildFrame) DECLARE_DYNAMIC_CLASS(wxMDIChildFrame)
}; };

View File

@@ -235,7 +235,7 @@ void MyFrame::OnNewWindow(wxCommandEvent& WXUNUSED(event) )
wxMenu *option_menu = new wxMenu; wxMenu *option_menu = new wxMenu;
option_menu->Append(MDI_REFRESH, "&Refresh picture"); option_menu->Append(MDI_REFRESH, "&Refresh picture");
option_menu->Append(MDI_CHANGE_TITLE, "Change &title..."); option_menu->Append(MDI_CHANGE_TITLE, "Change &title...\tCtrl-T");
wxMenu *help_menu = new wxMenu; wxMenu *help_menu = new wxMenu;
help_menu->Append(MDI_ABOUT, "&About"); help_menu->Append(MDI_ABOUT, "&About");
@@ -429,7 +429,7 @@ void MyChild::OnChangeTitle(wxCommandEvent& WXUNUSED(event))
wxString title = wxGetTextFromUser(_T("Enter the new title for MDI child"), wxString title = wxGetTextFromUser(_T("Enter the new title for MDI child"),
_T("MDI sample question"), _T("MDI sample question"),
s_title, s_title,
this); GetParent()->GetParent());
if ( !title ) if ( !title )
return; return;

View File

@@ -47,13 +47,13 @@ extern wxList wxPendingDelete;
// "switch_page" // "switch_page"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
static void static void
gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget), gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget),
GtkNotebookPage *page, GtkNotebookPage *page,
gint WXUNUSED(page_num), gint WXUNUSED(page_num),
wxMDIParentFrame *parent ) wxMDIParentFrame *parent )
{ {
if (g_isIdle) if (g_isIdle)
wxapp_install_idle_handler(); wxapp_install_idle_handler();
// send deactivate event to old child // send deactivate event to old child
@@ -65,9 +65,9 @@ gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget),
event1.SetEventObject( child); event1.SetEventObject( child);
child->GetEventHandler()->ProcessEvent( event1 ); child->GetEventHandler()->ProcessEvent( event1 );
} }
// send activate event to new child // send activate event to new child
wxMDIClientWindow *client_window = parent->GetClientWindow(); wxMDIClientWindow *client_window = parent->GetClientWindow();
if (!client_window) if (!client_window)
return; return;
@@ -79,16 +79,16 @@ gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget),
{ {
wxMDIChildFrame *child_frame = (wxMDIChildFrame *)node->Data(); wxMDIChildFrame *child_frame = (wxMDIChildFrame *)node->Data();
if (child_frame->m_page == page) if (child_frame->m_page == page)
{ {
child = child_frame; child = child_frame;
break; break;
} }
node = node->Next(); node = node->Next();
} }
if (!child) if (!child)
return; return;
wxActivateEvent event2( wxEVT_ACTIVATE, TRUE, child->GetId() ); wxActivateEvent event2( wxEVT_ACTIVATE, TRUE, child->GetId() );
event2.SetEventObject( child); event2.SetEventObject( child);
child->GetEventHandler()->ProcessEvent( event2 ); child->GetEventHandler()->ProcessEvent( event2 );
@@ -100,33 +100,23 @@ gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget),
IMPLEMENT_DYNAMIC_CLASS(wxMDIParentFrame,wxFrame) IMPLEMENT_DYNAMIC_CLASS(wxMDIParentFrame,wxFrame)
BEGIN_EVENT_TABLE(wxMDIParentFrame, wxFrame) void wxMDIParentFrame::Init()
END_EVENT_TABLE()
wxMDIParentFrame::wxMDIParentFrame()
{ {
m_justInserted = FALSE; m_justInserted = FALSE;
m_clientWindow = (wxMDIClientWindow *) NULL; 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() wxMDIParentFrame::~wxMDIParentFrame()
{ {
} }
bool wxMDIParentFrame::Create( wxWindow *parent, bool wxMDIParentFrame::Create(wxWindow *parent,
wxWindowID id, const wxString& title, wxWindowID id,
const wxPoint& pos, const wxSize& size, const wxString& title,
long style, const wxString& name ) const wxPoint& pos,
const wxSize& size,
long style,
const wxString& name )
{ {
wxFrame::Create( parent, id, title, pos, size, style, name ); wxFrame::Create( parent, id, title, pos, size, style, name );
@@ -150,8 +140,8 @@ void wxMDIParentFrame::GtkOnSize( int x, int y, int width, int height )
menu_bar->m_y = 0; menu_bar->m_y = 0;
menu_bar->m_width = m_width; menu_bar->m_width = m_width;
menu_bar->m_height = wxMENU_HEIGHT; menu_bar->m_height = wxMENU_HEIGHT;
gtk_pizza_set_size( GTK_PIZZA(m_mainWidget), gtk_pizza_set_size( GTK_PIZZA(m_mainWidget),
menu_bar->m_widget, menu_bar->m_widget,
0, 0, m_width, wxMENU_HEIGHT ); 0, 0, m_width, wxMENU_HEIGHT );
} }
@@ -179,31 +169,36 @@ void wxMDIParentFrame::OnInternalIdle()
wxNode *node = m_clientWindow->GetChildren().First(); wxNode *node = m_clientWindow->GetChildren().First();
while (node) while (node)
{ {
wxMDIChildFrame *child_frame = (wxMDIChildFrame *)node->Data(); wxObject *child = node->Data();
wxMenuBar *menu_bar = child_frame->m_menuBar; wxMDIChildFrame *child_frame = wxDynamicCast(child, wxMDIChildFrame);
if (child_frame->m_menuBar) if ( child_frame )
{ {
if (child_frame == active_child_frame) wxMenuBar *menu_bar = child_frame->m_menuBar;
if ( menu_bar )
{ {
if (menu_bar->Show(TRUE)) if (child_frame == active_child_frame)
{ {
menu_bar->m_width = m_width; if (menu_bar->Show(TRUE))
menu_bar->m_height = wxMENU_HEIGHT; {
gtk_pizza_set_size( GTK_PIZZA(m_mainWidget), menu_bar->m_width = m_width;
menu_bar->m_widget, menu_bar->m_height = wxMENU_HEIGHT;
0, 0, m_width, wxMENU_HEIGHT ); gtk_pizza_set_size( GTK_PIZZA(m_mainWidget),
menu_bar->SetInvokingWindow( child_frame ); menu_bar->m_widget,
} 0, 0, m_width, wxMENU_HEIGHT );
visible_child_menu = TRUE; 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(); node = node->Next();
} }
@@ -212,21 +207,21 @@ void wxMDIParentFrame::OnInternalIdle()
(m_frameMenuBar->IsShown() == visible_child_menu)) (m_frameMenuBar->IsShown() == visible_child_menu))
{ {
if (visible_child_menu) if (visible_child_menu)
{ {
m_frameMenuBar->Show( FALSE ); m_frameMenuBar->Show( FALSE );
m_frameMenuBar->UnsetInvokingWindow( this ); m_frameMenuBar->UnsetInvokingWindow( this );
} }
else else
{ {
m_frameMenuBar->Show( TRUE ); m_frameMenuBar->Show( TRUE );
m_frameMenuBar->SetInvokingWindow( this ); m_frameMenuBar->SetInvokingWindow( this );
m_frameMenuBar->m_width = m_width; m_frameMenuBar->m_width = m_width;
m_frameMenuBar->m_height = wxMENU_HEIGHT; m_frameMenuBar->m_height = wxMENU_HEIGHT;
gtk_pizza_set_size( GTK_PIZZA(m_mainWidget), gtk_pizza_set_size( GTK_PIZZA(m_mainWidget),
m_frameMenuBar->m_widget, m_frameMenuBar->m_widget,
0, 0, m_width, wxMENU_HEIGHT ); 0, 0, m_width, wxMENU_HEIGHT );
} }
} }
} }
@@ -287,14 +282,6 @@ void wxMDIParentFrame::ActivatePrevious()
gtk_notebook_prev_page( GTK_NOTEBOOK(m_clientWindow->m_widget) ); gtk_notebook_prev_page( GTK_NOTEBOOK(m_clientWindow->m_widget) );
} }
void wxMDIParentFrame::OnActivate( wxActivateEvent& WXUNUSED(event) )
{
}
void wxMDIParentFrame::OnSysColourChanged( wxSysColourChangedEvent& WXUNUSED(event) )
{
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxMDIChildFrame // wxMDIChildFrame
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -363,8 +350,8 @@ void wxMDIChildFrame::SetMenuBar( wxMenuBar *menu_bar )
m_menuBar->SetParent( mdi_frame ); m_menuBar->SetParent( mdi_frame );
/* insert the invisible menu bar into the _parent_ mdi frame */ /* insert the invisible menu bar into the _parent_ mdi frame */
gtk_pizza_put( GTK_PIZZA(mdi_frame->m_mainWidget), gtk_pizza_put( GTK_PIZZA(mdi_frame->m_mainWidget),
m_menuBar->m_widget, m_menuBar->m_widget,
0, 0, mdi_frame->m_width, wxMENU_HEIGHT ); 0, 0, mdi_frame->m_width, wxMENU_HEIGHT );
} }
} }
@@ -383,7 +370,7 @@ void wxMDIChildFrame::Activate()
gtk_notebook_set_page( notebook, pageno ); gtk_notebook_set_page( notebook, pageno );
#else #else
// the only way I can see to do this under gtk+ 1.0.X would // 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 // do "next" enough times to get to this page number - messy
// - J. Russell Smyth // - J. Russell Smyth
#endif #endif
@@ -492,7 +479,7 @@ bool wxMDIClientWindow::CreateClient( wxMDIParentFrame *parent, long style )
!CreateBase( parent, -1, wxDefaultPosition, wxDefaultSize, style, wxDefaultValidator, wxT("wxMDIClientWindow") )) !CreateBase( parent, -1, wxDefaultPosition, wxDefaultSize, style, wxDefaultValidator, wxT("wxMDIClientWindow") ))
{ {
wxFAIL_MSG( wxT("wxMDIClientWindow creation failed") ); wxFAIL_MSG( wxT("wxMDIClientWindow creation failed") );
return FALSE; return FALSE;
} }
m_widget = gtk_notebook_new(); m_widget = gtk_notebook_new();

View File

@@ -47,13 +47,13 @@ extern wxList wxPendingDelete;
// "switch_page" // "switch_page"
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
static void static void
gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget), gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget),
GtkNotebookPage *page, GtkNotebookPage *page,
gint WXUNUSED(page_num), gint WXUNUSED(page_num),
wxMDIParentFrame *parent ) wxMDIParentFrame *parent )
{ {
if (g_isIdle) if (g_isIdle)
wxapp_install_idle_handler(); wxapp_install_idle_handler();
// send deactivate event to old child // send deactivate event to old child
@@ -65,9 +65,9 @@ gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget),
event1.SetEventObject( child); event1.SetEventObject( child);
child->GetEventHandler()->ProcessEvent( event1 ); child->GetEventHandler()->ProcessEvent( event1 );
} }
// send activate event to new child // send activate event to new child
wxMDIClientWindow *client_window = parent->GetClientWindow(); wxMDIClientWindow *client_window = parent->GetClientWindow();
if (!client_window) if (!client_window)
return; return;
@@ -79,16 +79,16 @@ gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget),
{ {
wxMDIChildFrame *child_frame = (wxMDIChildFrame *)node->Data(); wxMDIChildFrame *child_frame = (wxMDIChildFrame *)node->Data();
if (child_frame->m_page == page) if (child_frame->m_page == page)
{ {
child = child_frame; child = child_frame;
break; break;
} }
node = node->Next(); node = node->Next();
} }
if (!child) if (!child)
return; return;
wxActivateEvent event2( wxEVT_ACTIVATE, TRUE, child->GetId() ); wxActivateEvent event2( wxEVT_ACTIVATE, TRUE, child->GetId() );
event2.SetEventObject( child); event2.SetEventObject( child);
child->GetEventHandler()->ProcessEvent( event2 ); child->GetEventHandler()->ProcessEvent( event2 );
@@ -100,33 +100,23 @@ gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget),
IMPLEMENT_DYNAMIC_CLASS(wxMDIParentFrame,wxFrame) IMPLEMENT_DYNAMIC_CLASS(wxMDIParentFrame,wxFrame)
BEGIN_EVENT_TABLE(wxMDIParentFrame, wxFrame) void wxMDIParentFrame::Init()
END_EVENT_TABLE()
wxMDIParentFrame::wxMDIParentFrame()
{ {
m_justInserted = FALSE; m_justInserted = FALSE;
m_clientWindow = (wxMDIClientWindow *) NULL; 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() wxMDIParentFrame::~wxMDIParentFrame()
{ {
} }
bool wxMDIParentFrame::Create( wxWindow *parent, bool wxMDIParentFrame::Create(wxWindow *parent,
wxWindowID id, const wxString& title, wxWindowID id,
const wxPoint& pos, const wxSize& size, const wxString& title,
long style, const wxString& name ) const wxPoint& pos,
const wxSize& size,
long style,
const wxString& name )
{ {
wxFrame::Create( parent, id, title, pos, size, style, name ); wxFrame::Create( parent, id, title, pos, size, style, name );
@@ -150,8 +140,8 @@ void wxMDIParentFrame::GtkOnSize( int x, int y, int width, int height )
menu_bar->m_y = 0; menu_bar->m_y = 0;
menu_bar->m_width = m_width; menu_bar->m_width = m_width;
menu_bar->m_height = wxMENU_HEIGHT; menu_bar->m_height = wxMENU_HEIGHT;
gtk_pizza_set_size( GTK_PIZZA(m_mainWidget), gtk_pizza_set_size( GTK_PIZZA(m_mainWidget),
menu_bar->m_widget, menu_bar->m_widget,
0, 0, m_width, wxMENU_HEIGHT ); 0, 0, m_width, wxMENU_HEIGHT );
} }
@@ -179,31 +169,36 @@ void wxMDIParentFrame::OnInternalIdle()
wxNode *node = m_clientWindow->GetChildren().First(); wxNode *node = m_clientWindow->GetChildren().First();
while (node) while (node)
{ {
wxMDIChildFrame *child_frame = (wxMDIChildFrame *)node->Data(); wxObject *child = node->Data();
wxMenuBar *menu_bar = child_frame->m_menuBar; wxMDIChildFrame *child_frame = wxDynamicCast(child, wxMDIChildFrame);
if (child_frame->m_menuBar) if ( child_frame )
{ {
if (child_frame == active_child_frame) wxMenuBar *menu_bar = child_frame->m_menuBar;
if ( menu_bar )
{ {
if (menu_bar->Show(TRUE)) if (child_frame == active_child_frame)
{ {
menu_bar->m_width = m_width; if (menu_bar->Show(TRUE))
menu_bar->m_height = wxMENU_HEIGHT; {
gtk_pizza_set_size( GTK_PIZZA(m_mainWidget), menu_bar->m_width = m_width;
menu_bar->m_widget, menu_bar->m_height = wxMENU_HEIGHT;
0, 0, m_width, wxMENU_HEIGHT ); gtk_pizza_set_size( GTK_PIZZA(m_mainWidget),
menu_bar->SetInvokingWindow( child_frame ); menu_bar->m_widget,
} 0, 0, m_width, wxMENU_HEIGHT );
visible_child_menu = TRUE; 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(); node = node->Next();
} }
@@ -212,21 +207,21 @@ void wxMDIParentFrame::OnInternalIdle()
(m_frameMenuBar->IsShown() == visible_child_menu)) (m_frameMenuBar->IsShown() == visible_child_menu))
{ {
if (visible_child_menu) if (visible_child_menu)
{ {
m_frameMenuBar->Show( FALSE ); m_frameMenuBar->Show( FALSE );
m_frameMenuBar->UnsetInvokingWindow( this ); m_frameMenuBar->UnsetInvokingWindow( this );
} }
else else
{ {
m_frameMenuBar->Show( TRUE ); m_frameMenuBar->Show( TRUE );
m_frameMenuBar->SetInvokingWindow( this ); m_frameMenuBar->SetInvokingWindow( this );
m_frameMenuBar->m_width = m_width; m_frameMenuBar->m_width = m_width;
m_frameMenuBar->m_height = wxMENU_HEIGHT; m_frameMenuBar->m_height = wxMENU_HEIGHT;
gtk_pizza_set_size( GTK_PIZZA(m_mainWidget), gtk_pizza_set_size( GTK_PIZZA(m_mainWidget),
m_frameMenuBar->m_widget, m_frameMenuBar->m_widget,
0, 0, m_width, wxMENU_HEIGHT ); 0, 0, m_width, wxMENU_HEIGHT );
} }
} }
} }
@@ -287,14 +282,6 @@ void wxMDIParentFrame::ActivatePrevious()
gtk_notebook_prev_page( GTK_NOTEBOOK(m_clientWindow->m_widget) ); gtk_notebook_prev_page( GTK_NOTEBOOK(m_clientWindow->m_widget) );
} }
void wxMDIParentFrame::OnActivate( wxActivateEvent& WXUNUSED(event) )
{
}
void wxMDIParentFrame::OnSysColourChanged( wxSysColourChangedEvent& WXUNUSED(event) )
{
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxMDIChildFrame // wxMDIChildFrame
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -363,8 +350,8 @@ void wxMDIChildFrame::SetMenuBar( wxMenuBar *menu_bar )
m_menuBar->SetParent( mdi_frame ); m_menuBar->SetParent( mdi_frame );
/* insert the invisible menu bar into the _parent_ mdi frame */ /* insert the invisible menu bar into the _parent_ mdi frame */
gtk_pizza_put( GTK_PIZZA(mdi_frame->m_mainWidget), gtk_pizza_put( GTK_PIZZA(mdi_frame->m_mainWidget),
m_menuBar->m_widget, m_menuBar->m_widget,
0, 0, mdi_frame->m_width, wxMENU_HEIGHT ); 0, 0, mdi_frame->m_width, wxMENU_HEIGHT );
} }
} }
@@ -383,7 +370,7 @@ void wxMDIChildFrame::Activate()
gtk_notebook_set_page( notebook, pageno ); gtk_notebook_set_page( notebook, pageno );
#else #else
// the only way I can see to do this under gtk+ 1.0.X would // 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 // do "next" enough times to get to this page number - messy
// - J. Russell Smyth // - J. Russell Smyth
#endif #endif
@@ -492,7 +479,7 @@ bool wxMDIClientWindow::CreateClient( wxMDIParentFrame *parent, long style )
!CreateBase( parent, -1, wxDefaultPosition, wxDefaultSize, style, wxDefaultValidator, wxT("wxMDIClientWindow") )) !CreateBase( parent, -1, wxDefaultPosition, wxDefaultSize, style, wxDefaultValidator, wxT("wxMDIClientWindow") ))
{ {
wxFAIL_MSG( wxT("wxMDIClientWindow creation failed") ); wxFAIL_MSG( wxT("wxMDIClientWindow creation failed") );
return FALSE; return FALSE;
} }
m_widget = gtk_notebook_new(); m_widget = gtk_notebook_new();