]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/mdi.cpp
Added lots of files. Enough now so that all wxHTML samples link.
[wxWidgets.git] / src / motif / mdi.cpp
index 929e51d3c2c69380f357a4ff34e6f933fb031f5f..b5b7a97d1a238740fbc4cedef702afab4a815367 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     17/09/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
-// Licence:    wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
@@ -33,7 +33,7 @@
 extern wxList wxModelessWindows;
 
 // Implemented in frame.cpp
-extern void wxFrameFocusProc(Widget workArea, XtPointer clientData, 
+extern void wxFrameFocusProc(Widget workArea, XtPointer clientData,
                              XmAnyCallbackStruct *cbs);
 
 #define wxID_NOTEBOOK_CLIENT_AREA wxID_HIGHEST + 100
@@ -44,17 +44,17 @@ IMPLEMENT_DYNAMIC_CLASS(wxMDIChildFrame, wxFrame)
 IMPLEMENT_DYNAMIC_CLASS(wxMDIClientWindow, wxNotebook)
 
 BEGIN_EVENT_TABLE(wxMDIParentFrame, wxFrame)
-EVT_SIZE(wxMDIParentFrame::OnSize)
-EVT_ACTIVATE(wxMDIParentFrame::OnActivate)
-EVT_SYS_COLOUR_CHANGED(wxMDIParentFrame::OnSysColourChanged)
+    EVT_SIZE(wxMDIParentFrame::OnSize)
+    EVT_ACTIVATE(wxMDIParentFrame::OnActivate)
+    EVT_SYS_COLOUR_CHANGED(wxMDIParentFrame::OnSysColourChanged)
 END_EVENT_TABLE()
 
 BEGIN_EVENT_TABLE(wxMDIClientWindow, wxNotebook)
-EVT_SCROLL(wxMDIClientWindow::OnScroll)
-EVT_NOTEBOOK_PAGE_CHANGED(wxID_NOTEBOOK_CLIENT_AREA, wxMDIClientWindow::OnPageChanged)
+    EVT_SCROLL(wxMDIClientWindow::OnScroll)
+    EVT_NOTEBOOK_PAGE_CHANGED(wxID_NOTEBOOK_CLIENT_AREA, wxMDIClientWindow::OnPageChanged)
 END_EVENT_TABLE()
 
-#endif
+#endif // USE_SHARED_LIBRARY
 
 // Parent frame
 
@@ -76,19 +76,19 @@ bool wxMDIParentFrame::Create(wxWindow *parent,
     m_clientWindow = (wxMDIClientWindow*) NULL;
     m_activeChild = (wxMDIChildFrame*) NULL;
     m_activeMenuBar = (wxMenuBar*) NULL;
-    
+
     bool success = wxFrame::Create(parent, id, title, pos, size, style, name);
     if (success)
     {
         // TODO: app cannot override OnCreateClient since
         // wxMDIParentFrame::OnCreateClient will still be called
         // (we're in the constructor). How to resolve?
-        
+
         m_clientWindow = OnCreateClient();
-        
+
         // Uses own style for client style
         m_clientWindow->CreateClient(this, GetWindowStyleFlag());
-        
+
         int w, h;
         GetClientSize(& w, & h);
         m_clientWindow->SetSize(0, 0, w, h);
@@ -102,9 +102,9 @@ wxMDIParentFrame::~wxMDIParentFrame()
 {
     // Make sure we delete the client window last of all
     RemoveChild(m_clientWindow);
-    
+
     DestroyChildren();
-    
+
     delete m_clientWindow;
     m_clientWindow = NULL;
 }
@@ -112,7 +112,7 @@ wxMDIParentFrame::~wxMDIParentFrame()
 void wxMDIParentFrame::SetMenuBar(wxMenuBar *menu_bar)
 {
     m_frameMenuBar = menu_bar;
-    
+
     SetChildMenuBar((wxMDIChildFrame*) NULL);
 }
 
@@ -126,11 +126,16 @@ void wxMDIParentFrame::OnSize(wxSizeEvent& event)
     int y = 0;
     int width, height;
     GetClientSize(&width, &height);
-    
+
     if ( GetClientWindow() )
         GetClientWindow()->SetSize(x, y, width, height);
 }
 
+void wxMDIParentFrame::GetClientSize(int *width, int *height) const
+{
+    wxFrame::GetClientSize(width, height);
+}
+
 void wxMDIParentFrame::OnActivate(wxActivateEvent& event)
 {
     // Do nothing
@@ -153,14 +158,14 @@ wxMDIClientWindow *wxMDIParentFrame::OnCreateClient()
 void wxMDIParentFrame::SetChildMenuBar(wxMDIChildFrame* child)
 {
     wxMenuBar* oldMenuBar = m_activeMenuBar;
-    
+
     if (child == (wxMDIChildFrame*) NULL)  // No child: use parent frame
     {
         if (GetMenuBar() && (GetMenuBar() != m_activeMenuBar))
         {
             //            if (m_activeMenuBar)
             //                m_activeMenuBar->DestroyMenuBar();
-            
+
             m_activeMenuBar = GetMenuBar();
             m_activeMenuBar->CreateMenuBar(this);
             /*
@@ -169,7 +174,7 @@ void wxMDIParentFrame::SetChildMenuBar(wxMDIChildFrame* child)
             */
             if (oldMenuBar && oldMenuBar->GetMainWidget())
                 XtUnmapWidget((Widget) oldMenuBar->GetMainWidget());
-            
+
         }
     }
     else if (child->GetMenuBar() == (wxMenuBar*) NULL) // No child menu bar: use parent frame
@@ -194,7 +199,7 @@ void wxMDIParentFrame::SetChildMenuBar(wxMDIChildFrame* child)
         {
             //            if (m_activeMenuBar)
             //                m_activeMenuBar->DestroyMenuBar();
-            
+
             m_activeMenuBar = child->GetMenuBar();
             m_activeMenuBar->CreateMenuBar(this);
             /*
@@ -214,28 +219,40 @@ bool wxMDIParentFrame::ProcessEvent(wxEvent& event)
     static wxEventType inEvent = wxEVT_NULL;
     if (inEvent == event.GetEventType())
         return FALSE;
-    
+
     inEvent = event.GetEventType();
-    
+
     bool res = FALSE;
     if (m_activeChild && event.IsKindOf(CLASSINFO(wxCommandEvent)))
     {
         res = m_activeChild->GetEventHandler()->ProcessEvent(event);
     }
-    
+
     if (!res)
         res = GetEventHandler()->wxEvtHandler::ProcessEvent(event);
-    
+
     inEvent = wxEVT_NULL;
-    
+
     return res;
 }
 
+void wxMDIParentFrame::DoSetSize(int x, int y,
+                                 int width, int height,
+                                 int sizeFlags)
+{
+    wxWindow::DoSetSize(x, y, width, height, sizeFlags);
+}
+
+void wxMDIParentFrame::DoSetClientSize(int width, int height)
+{
+    wxWindow::DoSetClientSize(width, height);
+}
+
 // Responds to colour changes, and passes event on to children.
 void wxMDIParentFrame::OnSysColourChanged(wxSysColourChangedEvent& event)
 {
     // TODO
-    
+
     // Propagate the event to the non-top-level children
     wxFrame::OnSysColourChanged(event);
 }
@@ -282,31 +299,31 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
                              const wxString& name)
 {
     SetName(name);
-    
+
     m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE);
     m_foregroundColour = *wxBLACK;
-    m_windowFont = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
-    
+    m_font = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
+
     if ( id > -1 )
         m_windowId = id;
     else
         m_windowId = (int)NewControlId();
-    
+
     wxMDIClientWindow* clientWindow = parent->GetClientWindow();
-    
+
     wxASSERT_MSG( (clientWindow != (wxWindow*) NULL), "Missing MDI client window.");
-    
+
     if (clientWindow) clientWindow->AddChild(this);
-    
+
     SetMDIParentFrame(parent);
-    
-    int x = pos.x; int y = pos.y;
-    int width = size.x; int height = size.y;
+
+    int width = size.x;
+    int height = size.y;
     if (width == -1)
         width = 200; // TODO: give reasonable default
     if (height == -1)
         height = 200; // TODO: give reasonable default
-    
+
     // We're deactivating the old child
     wxMDIChildFrame* oldActiveChild = parent->GetActiveChild();
     if (oldActiveChild)
@@ -315,13 +332,13 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
         event.SetEventObject( oldActiveChild );
         oldActiveChild->GetEventHandler()->ProcessEvent(event);
     }
-    
+
     // This is the currently active child
     parent->SetActiveChild((wxMDIChildFrame*) this);
-    
+
     // This time we'll try a bog-standard bulletin board for
     // the 'frame'. A main window doesn't seem to work.
-    
+
     m_mainWidget = (WXWidget) XtVaCreateWidget("client",
         xmBulletinBoardWidgetClass, (Widget) clientWindow->GetTopWidget(),
         XmNmarginWidth, 0,
@@ -337,22 +354,22 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
 
     XtAddEventHandler((Widget) m_mainWidget, ExposureMask,FALSE,
         wxUniversalRepaintProc, (XtPointer) this);
-    
+
     SetCanAddEventHandler(TRUE);
     AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y);
-    
-    ChangeBackgroundColour();   
-    
+
+    ChangeBackgroundColour();
+
     XtManageChild((Widget) m_mainWidget);
-    
+
     SetTitle(title);
-    
+
     clientWindow->AddPage(this, title, TRUE);
     clientWindow->Refresh();
-    
+
     // Positions the toolbar and status bar -- but we don't have any.
     //    PreResize();
-    
+
     wxModelessWindows.Append(this);
     return TRUE;
 }
@@ -363,19 +380,19 @@ wxMDIChildFrame::~wxMDIChildFrame()
     if (m_mainWidget)
       XtRemoveEventHandler((Widget) m_mainWidget, ExposureMask,FALSE,
         wxUniversalRepaintProc, (XtPointer) this);
-    
+
     if (GetMDIParentFrame())
     {
         wxMDIParentFrame* parentFrame = GetMDIParentFrame();
-        
+
         if (parentFrame->GetActiveChild() == this)
             parentFrame->SetActiveChild((wxMDIChildFrame*) NULL);
         wxMDIClientWindow* clientWindow = parentFrame->GetClientWindow();
-        
+
         // Remove page if still there
         if (clientWindow->RemovePage(this))
             clientWindow->Refresh();
-        
+
         // Set the selection to the first remaining page
         if (clientWindow->GetPageCount() > 0)
         {
@@ -398,14 +415,14 @@ void wxMDIChildFrame::OnRaise()
     wxMDIParentFrame* parentFrame = (wxMDIParentFrame*) GetParent() ;
     wxMDIChildFrame* oldActiveChild = parentFrame->GetActiveChild();
     parentFrame->SetActiveChild(this);
-    
+
     if (oldActiveChild)
     {
         wxActivateEvent event(wxEVT_ACTIVATE, FALSE, oldActiveChild->GetId());
         event.SetEventObject( oldActiveChild );
         oldActiveChild->GetEventHandler()->ProcessEvent(event);
     }
-    
+
     wxActivateEvent event(wxEVT_ACTIVATE, TRUE, this->GetId());
     event.SetEventObject( this );
     this->GetEventHandler()->ProcessEvent(event);
@@ -415,7 +432,7 @@ void wxMDIChildFrame::OnLower()
 {
     wxMDIParentFrame* parentFrame = (wxMDIParentFrame*) GetParent() ;
     wxMDIChildFrame* oldActiveChild = parentFrame->GetActiveChild();
-    
+
     if (oldActiveChild == this)
     {
         wxActivateEvent event(wxEVT_ACTIVATE, FALSE, oldActiveChild->GetId());
@@ -430,7 +447,7 @@ void wxMDIChildFrame::OnLower()
 
 // Set the client size (i.e. leave the calculation of borders etc.
 // to wxWindows)
-void wxMDIChildFrame::SetClientSize(int width, int height)
+void wxMDIChildFrame::DoSetClientSize(int width, int height)
 {
     wxWindow::DoSetClientSize(width, height);
 }
@@ -466,7 +483,7 @@ void wxMDIChildFrame::SetMenuBar(wxMenuBar *menuBar)
     // Don't create the underlying menubar yet; need to recreate
     // it every time the child is activated.
     m_frameMenuBar = menuBar;
-    
+
     // We make the assumption that if you're setting the menubar,
     // this is the currently active child.
     GetMDIParentFrame()->SetChildMenuBar(this);
@@ -478,7 +495,7 @@ void wxMDIChildFrame::SetIcon(const wxIcon& icon)
     m_icon = icon;
     if (m_icon.Ok())
     {
-        // Not appropriate since there are no icons in 
+        // Not appropriate since there are no icons in
         // a tabbed window
     }
 }
@@ -560,7 +577,7 @@ wxMDIClientWindow::~wxMDIClientWindow()
     // By the time this destructor is called, the child frames will have been
     // deleted and removed from the notebook/client window.
     DestroyChildren();
-    
+
     m_mainWidget = (WXWidget) 0;
 }
 
@@ -568,7 +585,7 @@ bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, long style)
 {
     //    m_windowParent = parent;
     //    m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE);
-    
+
     bool success = wxNotebook::Create(parent, wxID_NOTEBOOK_CLIENT_AREA, wxPoint(0, 0), wxSize(100, 100), 0);
     if (success)
     {
@@ -636,7 +653,7 @@ void wxMDIClientWindow::OnPageChanged(wxNotebookEvent& event)
             wxActivateEvent event(wxEVT_ACTIVATE, TRUE, activeChild->GetId());
             event.SetEventObject( activeChild );
             activeChild->GetEventHandler()->ProcessEvent(event);
-            
+
             if (activeChild->GetMDIParentFrame())
             {
                 activeChild->GetMDIParentFrame()->SetActiveChild(activeChild);