X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dfe1eee3bb9ecde8c4490ea69c07b5030d69530c..d21423356ee013f6819f7b8b69cd2e662e15d44a:/src/motif/mdi.cpp?ds=sidebyside diff --git a/src/motif/mdi.cpp b/src/motif/mdi.cpp index b5b7a97d1a..5404741cfe 100644 --- a/src/motif/mdi.cpp +++ b/src/motif/mdi.cpp @@ -9,14 +9,22 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "mdi.h" +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __VMS +#define XtDisplay XTDISPLAY +#define XtWindow XTWINDOW #endif #include "wx/mdi.h" #include "wx/menu.h" #include "wx/settings.h" +#include "wx/icon.h" +#ifdef __VMS__ +#pragma message disable nosimpint +#endif #include #include #include @@ -27,6 +35,9 @@ #include #include #include +#ifdef __VMS__ +#pragma message enable nosimpint +#endif #include "wx/motif/private.h" @@ -38,7 +49,6 @@ extern void wxFrameFocusProc(Widget workArea, XtPointer clientData, #define wxID_NOTEBOOK_CLIENT_AREA wxID_HIGHEST + 100 -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxMDIParentFrame, wxFrame) IMPLEMENT_DYNAMIC_CLASS(wxMDIChildFrame, wxFrame) IMPLEMENT_DYNAMIC_CLASS(wxMDIClientWindow, wxNotebook) @@ -47,6 +57,7 @@ BEGIN_EVENT_TABLE(wxMDIParentFrame, wxFrame) EVT_SIZE(wxMDIParentFrame::OnSize) EVT_ACTIVATE(wxMDIParentFrame::OnActivate) EVT_SYS_COLOUR_CHANGED(wxMDIParentFrame::OnSysColourChanged) + EVT_MENU_HIGHLIGHT_ALL(wxMDIParentFrame::OnMenuHighlight) END_EVENT_TABLE() BEGIN_EVENT_TABLE(wxMDIClientWindow, wxNotebook) @@ -54,7 +65,6 @@ BEGIN_EVENT_TABLE(wxMDIClientWindow, wxNotebook) EVT_NOTEBOOK_PAGE_CHANGED(wxID_NOTEBOOK_CLIENT_AREA, wxMDIClientWindow::OnPageChanged) END_EVENT_TABLE() -#endif // USE_SHARED_LIBRARY // Parent frame @@ -92,10 +102,10 @@ bool wxMDIParentFrame::Create(wxWindow *parent, int w, h; GetClientSize(& w, & h); m_clientWindow->SetSize(0, 0, w, h); - return TRUE; + return true; } else - return FALSE; + return false; } wxMDIParentFrame::~wxMDIParentFrame() @@ -116,7 +126,7 @@ void wxMDIParentFrame::SetMenuBar(wxMenuBar *menu_bar) SetChildMenuBar((wxMDIChildFrame*) NULL); } -void wxMDIParentFrame::OnSize(wxSizeEvent& event) +void wxMDIParentFrame::OnSize(wxSizeEvent& WXUNUSED(event)) { #if wxUSE_CONSTRAINTS if (GetAutoLayout()) @@ -131,12 +141,12 @@ void wxMDIParentFrame::OnSize(wxSizeEvent& event) GetClientWindow()->SetSize(x, y, width, 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); } -void wxMDIParentFrame::OnActivate(wxActivateEvent& event) +void wxMDIParentFrame::OnActivate(wxActivateEvent& WXUNUSED(event)) { // Do nothing } @@ -218,11 +228,11 @@ bool wxMDIParentFrame::ProcessEvent(wxEvent& event) // Stops the same event being processed repeatedly static wxEventType inEvent = wxEVT_NULL; if (inEvent == event.GetEventType()) - return FALSE; + return false; inEvent = event.GetEventType(); - bool res = FALSE; + bool res = false; if (m_activeChild && event.IsKindOf(CLASSINFO(wxCommandEvent))) { res = m_activeChild->GetEventHandler()->ProcessEvent(event); @@ -263,7 +273,7 @@ void wxMDIParentFrame::Cascade() // TODO } -void wxMDIParentFrame::Tile() +void wxMDIParentFrame::Tile(wxOrientation WXUNUSED(orient)) { // TODO } @@ -283,6 +293,30 @@ void wxMDIParentFrame::ActivatePrevious() // TODO } +// Default menu selection behaviour - display a help string +void wxMDIParentFrame::OnMenuHighlight(wxMenuEvent& event) +{ + if (GetStatusBar()) + { + if (event.GetMenuId() == -1) + SetStatusText(""); + else + { + wxMenuBar *menuBar = (wxMenuBar*) NULL; + if (GetActiveChild()) + menuBar = GetActiveChild()->GetMenuBar(); + else + menuBar = GetMenuBar(); + if (menuBar) + { + wxString helpString(menuBar->GetHelpString(event.GetMenuId())); + if (helpString != "") + SetStatusText(helpString); + } + } + } +} + // Child frame wxMDIChildFrame::wxMDIChildFrame() @@ -299,10 +333,11 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, const wxString& name) { SetName(name); + SetWindowStyleFlag(style); - m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE); + m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE); m_foregroundColour = *wxBLACK; - m_font = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT); + m_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); if ( id > -1 ) m_windowId = id; @@ -328,7 +363,7 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, wxMDIChildFrame* oldActiveChild = parent->GetActiveChild(); if (oldActiveChild) { - wxActivateEvent event(wxEVT_ACTIVATE, FALSE, oldActiveChild->GetId()); + wxActivateEvent event(wxEVT_ACTIVATE, false, oldActiveChild->GetId()); event.SetEventObject( oldActiveChild ); oldActiveChild->GetEventHandler()->ProcessEvent(event); } @@ -352,10 +387,9 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, XmNresizePolicy, XmRESIZE_NONE, NULL); - XtAddEventHandler((Widget) m_mainWidget, ExposureMask,FALSE, + 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(); @@ -364,21 +398,21 @@ bool wxMDIChildFrame::Create(wxMDIParentFrame *parent, SetTitle(title); - clientWindow->AddPage(this, title, TRUE); + 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; + return true; } wxMDIChildFrame::~wxMDIChildFrame() { if (m_mainWidget) - XtRemoveEventHandler((Widget) m_mainWidget, ExposureMask,FALSE, + XtRemoveEventHandler((Widget) m_mainWidget, ExposureMask,False, wxUniversalRepaintProc, (XtPointer) this); if (GetMDIParentFrame()) @@ -390,8 +424,15 @@ wxMDIChildFrame::~wxMDIChildFrame() wxMDIClientWindow* clientWindow = parentFrame->GetClientWindow(); // Remove page if still there - if (clientWindow->RemovePage(this)) - clientWindow->Refresh(); + { + int i = clientWindow->FindPage(this); + + if (i != -1) + { + clientWindow->RemovePage(i); + clientWindow->Refresh(); + } + } // Set the selection to the first remaining page if (clientWindow->GetPageCount() > 0) @@ -418,12 +459,12 @@ void wxMDIChildFrame::OnRaise() if (oldActiveChild) { - wxActivateEvent event(wxEVT_ACTIVATE, FALSE, oldActiveChild->GetId()); + wxActivateEvent event(wxEVT_ACTIVATE, false, oldActiveChild->GetId()); event.SetEventObject( oldActiveChild ); oldActiveChild->GetEventHandler()->ProcessEvent(event); } - wxActivateEvent event(wxEVT_ACTIVATE, TRUE, this->GetId()); + wxActivateEvent event(wxEVT_ACTIVATE, true, this->GetId()); event.SetEventObject( this ); this->GetEventHandler()->ProcessEvent(event); } @@ -435,7 +476,7 @@ void wxMDIChildFrame::OnLower() if (oldActiveChild == this) { - wxActivateEvent event(wxEVT_ACTIVATE, FALSE, oldActiveChild->GetId()); + wxActivateEvent event(wxEVT_ACTIVATE, false, oldActiveChild->GetId()); event.SetEventObject( oldActiveChild ); oldActiveChild->GetEventHandler()->ProcessEvent(event); } @@ -446,15 +487,15 @@ void wxMDIChildFrame::OnLower() #endif // Set the client size (i.e. leave the calculation of borders etc. -// to wxWindows) +// to wxWidgets) void wxMDIChildFrame::DoSetClientSize(int width, int height) { wxWindow::DoSetClientSize(width, height); } -void wxMDIChildFrame::GetClientSize(int* width, int* height) const +void wxMDIChildFrame::DoGetClientSize(int* width, int* height) const { - wxWindow::GetSize(width, height); + wxWindow::DoGetSize(width, height); } void wxMDIChildFrame::DoSetSize(int x, int y, int width, int height, int sizeFlags) @@ -462,19 +503,19 @@ void wxMDIChildFrame::DoSetSize(int x, int y, int width, int height, int sizeFla wxWindow::DoSetSize(x, y, width, height, sizeFlags); } -void wxMDIChildFrame::GetSize(int* width, int* height) const +void wxMDIChildFrame::DoGetSize(int* width, int* height) const { - wxWindow::GetSize(width, height); + wxWindow::DoGetSize(width, height); } -void wxMDIChildFrame::GetPosition(int *x, int *y) const +void wxMDIChildFrame::DoGetPosition(int *x, int *y) const { - wxWindow::GetPosition(x, y); + wxWindow::DoGetPosition(x, y); } bool wxMDIChildFrame::Show(bool show) { - m_visibleStatus = show; /* show-&-hide fix */ + SetVisibleStatus( show ); return wxWindow::Show(show); } @@ -492,21 +533,32 @@ void wxMDIChildFrame::SetMenuBar(wxMenuBar *menuBar) // Set icon void wxMDIChildFrame::SetIcon(const wxIcon& icon) { - m_icon = icon; - if (m_icon.Ok()) + m_icons = wxIconBundle( icon ); + + if (icon.Ok()) { // Not appropriate since there are no icons in // a tabbed window } } +void wxMDIChildFrame::SetIcons(const wxIconBundle& icons) +{ + m_icons = icons; +} + void wxMDIChildFrame::SetTitle(const wxString& title) { - m_title = title; + wxTopLevelWindow::SetTitle( title ); wxMDIClientWindow* clientWindow = GetMDIParentFrame()->GetClientWindow(); - int pageNo = clientWindow->FindPagePosition(this); - if (pageNo > -1) - clientWindow->SetPageText(pageNo, title); + + // Remove page if still there + { + int i = clientWindow->FindPage(this); + + if (i != -1) + clientWindow->SetPageText(i, title); + } } // MDI operations @@ -515,21 +567,21 @@ void wxMDIChildFrame::Maximize() // TODO } -void wxMDIChildFrame::Iconize(bool iconize) +void wxMDIChildFrame::Iconize(bool WXUNUSED(iconize)) { // TODO } bool wxMDIChildFrame::IsIconized() const { - return FALSE; + return false; } // Is it maximized? Always maximized under Motif, using the // tabbed MDI implementation. bool wxMDIChildFrame::IsMaximized(void) const { - return TRUE; + return true; } void wxMDIChildFrame::Restore() @@ -562,7 +614,7 @@ void wxMDIChildFrame::Lower(void) wxWindow::Raise(); } -void wxMDIChildFrame::SetSizeHints(int WXUNUSED(minW), int WXUNUSED(minH), int WXUNUSED(maxW), int WXUNUSED(maxH), int WXUNUSED(incW), int WXUNUSED(incH)) +void wxMDIChildFrame::DoSetSizeHints(int WXUNUSED(minW), int WXUNUSED(minH), int WXUNUSED(maxW), int WXUNUSED(maxH), int WXUNUSED(incW), int WXUNUSED(incH)) { } @@ -583,22 +635,31 @@ wxMDIClientWindow::~wxMDIClientWindow() bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, long style) { + SetWindowStyleFlag(style); + // m_windowParent = parent; - // m_backgroundColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE); + // m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE); bool success = wxNotebook::Create(parent, wxID_NOTEBOOK_CLIENT_AREA, wxPoint(0, 0), wxSize(100, 100), 0); if (success) { wxFont font(10, wxSWISS, wxNORMAL, wxNORMAL); - wxFont selFont(10, wxSWISS, wxNORMAL, wxBOLD); - GetTabView()->SetTabFont(font); - GetTabView()->SetSelectedTabFont(selFont); - GetTabView()->SetTabSize(120, 18); - GetTabView()->SetTabSelectionHeight(20); - return TRUE; + SetFont(font); + return true; } else - return FALSE; + return false; +} + +int wxMDIClientWindow::FindPage(const wxNotebookPage* page) +{ + for (int i = GetPageCount() - 1; i >= 0; --i) + { + if (GetPage(i) == page) + return i; + } + + return -1; } void wxMDIClientWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags) @@ -611,25 +672,25 @@ void wxMDIClientWindow::DoSetClientSize(int width, int height) wxWindow::DoSetClientSize(width, height); } -void wxMDIClientWindow::GetClientSize(int *width, int *height) const +void wxMDIClientWindow::DoGetClientSize(int *width, int *height) const { - wxWindow::GetClientSize(width, height); + wxWindow::DoGetClientSize(width, height); } -void wxMDIClientWindow::GetSize(int *width, int *height) const +void wxMDIClientWindow::DoGetSize(int *width, int *height) const { - wxWindow::GetSize(width, height); + wxWindow::DoGetSize(width, height); } -void wxMDIClientWindow::GetPosition(int *x, int *y) const +void wxMDIClientWindow::DoGetPosition(int *x, int *y) const { - wxWindow::GetPosition(x, y); + wxWindow::DoGetPosition(x, y); } -// Explicitly call default scroll behaviour void wxMDIClientWindow::OnScroll(wxScrollEvent& event) { - Default(); // Default processing + // Default(); // Default processing: OBSOLETE FUNCTION + event.Skip(); } void wxMDIClientWindow::OnPageChanged(wxNotebookEvent& event) @@ -640,7 +701,7 @@ void wxMDIClientWindow::OnPageChanged(wxNotebookEvent& event) wxMDIChildFrame* oldChild = (wxMDIChildFrame*) GetPage(event.GetOldSelection()); if (oldChild) { - wxActivateEvent event(wxEVT_ACTIVATE, FALSE, oldChild->GetId()); + wxActivateEvent event(wxEVT_ACTIVATE, false, oldChild->GetId()); event.SetEventObject( oldChild ); oldChild->GetEventHandler()->ProcessEvent(event); } @@ -650,7 +711,7 @@ void wxMDIClientWindow::OnPageChanged(wxNotebookEvent& event) wxMDIChildFrame* activeChild = (wxMDIChildFrame*) GetPage(event.GetSelection()); if (activeChild) { - wxActivateEvent event(wxEVT_ACTIVATE, TRUE, activeChild->GetId()); + wxActivateEvent event(wxEVT_ACTIVATE, true, activeChild->GetId()); event.SetEventObject( activeChild ); activeChild->GetEventHandler()->ProcessEvent(event);