// Name: mdi.cpp
// Purpose:
// Author: Robert Roebling
-// Created: 01/02/97
-// Id:
-// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem
+// Id: $Id$
+// Copyright: (c) 1998 Robert Roebling
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/gtk/win_gtk.h"
#include <wx/intl.h>
+//-----------------------------------------------------------------------------
+// constants
+//-----------------------------------------------------------------------------
+
+const int wxMENU_HEIGHT = 27;
+
+//-----------------------------------------------------------------------------
+// globals
//-----------------------------------------------------------------------------
extern wxList wxPendingDelete;
//-----------------------------------------------------------------------------
-// wxMDIParentFrame
+// "size_allocate"
//-----------------------------------------------------------------------------
static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxWindow *win )
if ((win->m_x == alloc->x) &&
(win->m_y == alloc->y) &&
(win->m_width == alloc->width) &&
- (win->m_height == alloc->height))
+ (win->m_height == alloc->height) &&
+ (win->m_sizeSet))
{
return;
}
win->SetSize( alloc->x, alloc->y, alloc->width, alloc->height );
}
+//-----------------------------------------------------------------------------
// page change callback
+//-----------------------------------------------------------------------------
+
static void gtk_page_change_callback( GtkNotebook *WXUNUSED(widget),
GtkNotebookPage *page,
gint WXUNUSED(nPage),
}
}
+//-----------------------------------------------------------------------------
+// wxMDIParentFrame
//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxMDIParentFrame,wxFrame)
wxMDIParentFrame::wxMDIParentFrame(void)
{
- m_clientWindow = NULL;
- m_currentChild = NULL;
+ m_clientWindow = (wxMDIClientWindow *) NULL;
+ m_currentChild = (wxMDIChildFrame *) NULL;
m_parentFrameActive = TRUE;
}
const wxPoint& pos, const wxSize& size,
long style, const wxString& name )
{
- m_clientWindow = NULL;
- m_currentChild = NULL;
+ m_clientWindow = (wxMDIClientWindow *) NULL;
+ m_currentChild = (wxMDIChildFrame *) NULL;
m_parentFrameActive = TRUE;
Create( parent, id, title, pos, size, style, name );
}
if (m_mdiMenuBar)
{
- int x = 0;
- int y = 0;
- GetClientSize( &x, &y );
- m_mdiMenuBar->SetSize( 1, 1, x-2, 26 );
+ m_mdiMenuBar->m_x = 0;
+ m_mdiMenuBar->m_y = 0;
+ m_mdiMenuBar->m_width = m_width;
+ m_mdiMenuBar->m_height = wxMENU_HEIGHT;
+ gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_mdiMenuBar->m_widget, 0, 0 );
+ gtk_widget_set_usize( m_mdiMenuBar->m_widget, m_width, wxMENU_HEIGHT );
}
}
m_mdiMenuBar = menu_bar;
if (m_mdiMenuBar)
{
- int x = 0;
- int y = 0;
- GetClientSize( &x, &y );
- m_mdiMenuBar->SetSize( 1, 1, x-2, 26 );
+ m_mdiMenuBar->m_x = 0;
+ m_mdiMenuBar->m_y = 0;
+ m_mdiMenuBar->m_width = m_width;
+ m_mdiMenuBar->m_height = wxMENU_HEIGHT;
+ gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_mdiMenuBar->m_widget, 0, 0 );
+ gtk_widget_set_usize( m_mdiMenuBar->m_widget, m_width, wxMENU_HEIGHT );
m_mdiMenuBar->Show( TRUE );
}
}
wxMDIChildFrame::wxMDIChildFrame(void)
{
- m_menuBar = NULL;
- m_page = NULL;
+ m_menuBar = (wxMenuBar *) NULL;
+ m_page = (GtkNotebookPage *) NULL;
}
wxMDIChildFrame::wxMDIChildFrame( wxMDIParentFrame *parent,
const wxPoint& WXUNUSED(pos), const wxSize& size,
long style, const wxString& name )
{
- m_menuBar = NULL;
- m_page = NULL;
+ m_menuBar = (wxMenuBar *) NULL;
+ m_page = (GtkNotebookPage *) NULL;
Create( parent, id, title, wxDefaultPosition, size, style, name );
}
wxMDIParentFrame *mdi_frame = (wxMDIParentFrame*)m_parent->m_parent;
if (mdi_frame->m_currentChild == this)
{
- mdi_frame->SetMDIMenuBar( NULL );
- mdi_frame->m_currentChild = NULL;
+ mdi_frame->SetMDIMenuBar( (wxMenuBar *) NULL );
+ mdi_frame->m_currentChild = (wxMDIChildFrame *) NULL;
}
delete m_menuBar;
}
long style, const wxString& name )
{
m_title = title;
+
return wxWindow::Create( parent->GetClientWindow(), id, wxDefaultPosition, size, style, name );
}
}
mdi_frame->SetMDIMenuBar( m_menuBar );
- gtk_myfixed_put( GTK_MYFIXED(mdi_frame->m_mainWindow),
+ gtk_myfixed_put( GTK_MYFIXED(mdi_frame->m_wxwindow),
m_menuBar->m_widget, m_menuBar->m_x, m_menuBar->m_y );
}
}
{
}
+//-----------------------------------------------------------------------------
+// InsertChild callback for wxMDIClientWindow
+//-----------------------------------------------------------------------------
+
+static void wxInsertChildInMDI( wxMDIClientWindow* parent, wxMDIChildFrame* child )
+{
+ wxString s = child->m_title;
+ if (s.IsNull()) s = _("MDI child");
+
+ GtkWidget *label_widget = gtk_label_new( s );
+ gtk_misc_set_alignment( GTK_MISC(label_widget), 0.0, 0.5 );
+
+ gtk_signal_connect( GTK_OBJECT(child->m_widget), "size_allocate",
+ GTK_SIGNAL_FUNC(gtk_page_size_callback), (gpointer)child );
+
+ GtkNotebook *notebook = GTK_NOTEBOOK(parent->m_widget);
+
+ gtk_notebook_append_page( notebook, child->m_widget, label_widget );
+
+ child->m_page = (GtkNotebookPage*) (g_list_last(notebook->children)->data);
+
+ gtk_notebook_set_page( notebook, parent->m_children.Number()-1 );
+
+ gtk_page_change_callback( (GtkNotebook *) NULL, child->m_page, 0, parent );
+}
+
//-----------------------------------------------------------------------------
// wxMDIClientWindow
//-----------------------------------------------------------------------------
bool wxMDIClientWindow::CreateClient( wxMDIParentFrame *parent, long style )
{
m_needParent = TRUE;
+
+ m_insertCallback = (wxInsertChildFunction)wxInsertChildInMDI;
PreCreation( parent, -1, wxPoint(10,10), wxSize(100,100), style, "wxMDIClientWindow" );
gtk_notebook_set_scrollable( GTK_NOTEBOOK(m_widget), 1 );
+ m_parent->AddChild( this );
+
+ (m_parent->m_insertCallback)( m_parent, this );
+
PostCreation();
Show( TRUE );
return TRUE;
}
-void wxMDIClientWindow::AddChild( wxWindow *child )
-{
- if (!child->IsKindOf(CLASSINFO(wxMDIChildFrame)))
- {
- wxFAIL_MSG("wxNotebook::AddChild: Child has to be wxMDIChildFrame");
- return;
- }
-
- m_children.Append( child );
-
- wxString s;
- wxMDIChildFrame* mdi_child = (wxMDIChildFrame*) child;
- s = mdi_child->m_title;
- if (s.IsNull()) s = _("MDI child");
-
- GtkWidget *label_widget;
- label_widget = gtk_label_new( s );
- gtk_misc_set_alignment( GTK_MISC(label_widget), 0.0, 0.5 );
-
- gtk_signal_connect( GTK_OBJECT(child->m_widget), "size_allocate",
- GTK_SIGNAL_FUNC(gtk_page_size_callback), (gpointer)child );
-
- gtk_notebook_append_page( GTK_NOTEBOOK(m_widget), child->m_widget, label_widget );
-
- mdi_child->m_page = (GtkNotebookPage*) (g_list_last(GTK_NOTEBOOK(m_widget)->children)->data);
-
- gtk_notebook_set_page( GTK_NOTEBOOK(m_widget), m_children.Number()-1 );
-
- gtk_page_change_callback( NULL, mdi_child->m_page, 0, this );
-}