home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / include / wx / generic / mdig.h < prev    next >
C/C++ Source or Header  |  2002-11-04  |  12KB  |  342 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        wx/generic/mdig.h
  3. // Purpose:     Generic MDI (Multiple Document Interface) classes
  4. // Author:      Hans Van Leemputten
  5. // Modified by:
  6. // Created:     29/07/2002
  7. // RCS-ID:      $Id: mdig.h,v 1.2.2.3 2002/10/28 15:22:13 CE Exp $
  8. // Copyright:   (c) Hans Van Leemputten
  9. // Licence:     wxWindows licence
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifndef _WX_MDIG_H_
  13. #define _WX_MDIG_H_
  14.  
  15. #if defined(__GNUG__) && !defined(__APPLE__)
  16.     #pragma interface "mdig.h"
  17. #endif
  18.  
  19. // ----------------------------------------------------------------------------
  20. // headers
  21. // ----------------------------------------------------------------------------
  22.  
  23. #include "wx/frame.h"
  24. #include "wx/panel.h"
  25. #include "wx/notebook.h"
  26.  
  27. WXDLLEXPORT_DATA(extern const wxChar*) wxFrameNameStr;
  28. WXDLLEXPORT_DATA(extern const wxChar*) wxStatusLineNameStr;
  29.  
  30.  
  31. //-----------------------------------------------------------------------------
  32. // classes
  33. //-----------------------------------------------------------------------------
  34.  
  35. class WXDLLEXPORT wxGenericMDIParentFrame;
  36. class WXDLLEXPORT wxGenericMDIClientWindow;
  37. class WXDLLEXPORT wxGenericMDIChildFrame;
  38.  
  39. //-----------------------------------------------------------------------------
  40. // wxGenericMDIParentFrame
  41. //-----------------------------------------------------------------------------
  42.  
  43. class WXDLLEXPORT wxGenericMDIParentFrame: public wxFrame
  44. {
  45. public:
  46.     wxGenericMDIParentFrame();
  47.     wxGenericMDIParentFrame(wxWindow *parent,
  48.                      wxWindowID id,
  49.                      const wxString& title,
  50.                      const wxPoint& pos = wxDefaultPosition,
  51.                      const wxSize& size = wxDefaultSize,
  52.                      long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
  53.                      const wxString& name = wxFrameNameStr);
  54.  
  55.     ~wxGenericMDIParentFrame();
  56.     bool Create( wxWindow *parent,
  57.                  wxWindowID id,
  58.                  const wxString& title,
  59.                  const wxPoint& pos = wxDefaultPosition,
  60.                  const wxSize& size = wxDefaultSize,
  61.                  long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
  62.                  const wxString& name = wxFrameNameStr );
  63.  
  64. #if wxUSE_MENUS
  65.     wxMenu* GetWindowMenu() const { return m_pWindowMenu; };
  66.     void SetWindowMenu(wxMenu* pMenu);
  67.  
  68.     virtual void SetMenuBar(wxMenuBar *pMenuBar);
  69. #endif // wxUSE_MENUS
  70.  
  71.     void SetChildMenuBar(wxGenericMDIChildFrame *pChild);
  72.  
  73.     virtual bool ProcessEvent(wxEvent& event);
  74.  
  75.     wxGenericMDIChildFrame *GetActiveChild() const;
  76.     inline void SetActiveChild(wxGenericMDIChildFrame* pChildFrame);
  77.  
  78.     wxGenericMDIClientWindow *GetClientWindow() const;
  79.     virtual wxGenericMDIClientWindow *OnCreateClient();
  80.  
  81.     virtual void Cascade() { /* Has no effect */ }
  82.     virtual void Tile() { /* Has no effect */ }
  83.     virtual void ArrangeIcons() { /* Has no effect */ }
  84.     virtual void ActivateNext();
  85.     virtual void ActivatePrevious();
  86.  
  87. protected:
  88.     wxGenericMDIClientWindow   *m_pClientWindow;
  89.     wxGenericMDIChildFrame     *m_pActiveChild;
  90. #if wxUSE_MENUS
  91.     wxMenu              *m_pWindowMenu;
  92.     wxMenuBar           *m_pMyMenuBar;
  93. #endif // wxUSE_MENUS
  94.  
  95. protected:
  96.     void Init();
  97.  
  98. #if wxUSE_MENUS
  99.     void RemoveWindowMenu(wxMenuBar *pMenuBar);
  100.     void AddWindowMenu(wxMenuBar *pMenuBar);
  101.  
  102.     void DoHandleMenu(wxCommandEvent &event);
  103. #endif // wxUSE_MENUS
  104.  
  105.     virtual void DoGetClientSize(int *width, int *height) const;
  106.  
  107. private:
  108.     DECLARE_EVENT_TABLE()
  109.     DECLARE_DYNAMIC_CLASS(wxGenericMDIParentFrame)
  110. };
  111.  
  112. //-----------------------------------------------------------------------------
  113. // wxGenericMDIChildFrame
  114. //-----------------------------------------------------------------------------
  115.  
  116. class WXDLLEXPORT wxGenericMDIChildFrame: public wxPanel
  117. {
  118. public:
  119.     wxGenericMDIChildFrame();
  120.     wxGenericMDIChildFrame( wxGenericMDIParentFrame *parent,
  121.                      wxWindowID id,
  122.                      const wxString& title,
  123.                      const wxPoint& pos = wxDefaultPosition,
  124.                      const wxSize& size = wxDefaultSize,
  125.                      long style = wxDEFAULT_FRAME_STYLE,
  126.                      const wxString& name = wxFrameNameStr );
  127.  
  128.     virtual ~wxGenericMDIChildFrame();
  129.     bool Create( wxGenericMDIParentFrame *parent,
  130.                  wxWindowID id,
  131.                  const wxString& title,
  132.                  const wxPoint& pos = wxDefaultPosition,
  133.                  const wxSize& size = wxDefaultSize,
  134.                  long style = wxDEFAULT_FRAME_STYLE,
  135.                  const wxString& name = wxFrameNameStr );
  136.  
  137. #if wxUSE_MENUS
  138.     virtual void SetMenuBar( wxMenuBar *menu_bar );
  139.     virtual wxMenuBar *GetMenuBar() const;
  140. #endif // wxUSE_MENUS
  141.  
  142.     virtual void SetTitle(const wxString& title);
  143.     virtual wxString GetTitle() const;
  144.  
  145.     virtual void Activate();
  146.  
  147. #if wxUSE_STATUSBAR
  148.     // no status bars
  149.     virtual wxStatusBar* CreateStatusBar( int WXUNUSED(number) = 1,
  150.                                         long WXUNUSED(style) = 1,
  151.                                         wxWindowID WXUNUSED(id) = 1,
  152.                                         const wxString& WXUNUSED(name) = wxEmptyString)
  153.       { return (wxStatusBar*)NULL; }
  154.  
  155.     virtual wxStatusBar *GetStatusBar() const { return (wxStatusBar*)NULL; }
  156.     virtual void SetStatusText( const wxString &WXUNUSED(text), int WXUNUSED(number)=0 ) {}
  157.     virtual void SetStatusWidths( int WXUNUSED(n), const int WXUNUSED(widths_field)[] ) {}
  158. #endif
  159.  
  160.     // no size hints
  161.     virtual void SetSizeHints( int WXUNUSED(minW),
  162.                                int WXUNUSED(minH),
  163.                                int WXUNUSED(maxW) = -1,
  164.                                int WXUNUSED(maxH) = -1,
  165.                                int WXUNUSED(incW) = -1,
  166.                                int WXUNUSED(incH) = -1) {}
  167.  
  168. #if wxUSE_TOOLBAR
  169.     // no toolbar bars
  170.     virtual wxToolBar* CreateToolBar( long WXUNUSED(style),
  171.                                        wxWindowID WXUNUSED(id),
  172.                                        const wxString& WXUNUSED(name) )
  173.         { return (wxToolBar*)NULL; }
  174.     virtual wxToolBar *GetToolBar() const { return (wxToolBar*)NULL; }
  175. #endif
  176.  
  177.     // no icon
  178.     void SetIcon( const wxIcon &icon ) { /*m_icons = wxIconBundle( icon );*/}
  179.     void SetIcons( const wxIconBundle &icons ) { /*m_icons = icons;*/ }
  180.  
  181.     // no maximize etc
  182.     virtual void Maximize( bool WXUNUSED(maximize) = TRUE) { /* Has no effect */ }
  183.     virtual void Restore() { /* Has no effect */ }
  184.     virtual void Iconize(bool WXUNUSED(iconize)  = TRUE) { /* Has no effect */ }
  185.     virtual bool IsMaximized() const { return TRUE; }
  186.     virtual bool IsIconized() const { return FALSE; }
  187.     virtual bool ShowFullScreen(bool WXUNUSED(show), long WXUNUSED(style)) { return FALSE; }
  188.     virtual bool IsFullScreen() const { return FALSE; }
  189.  
  190.     virtual bool IsTopLevel() const { return FALSE; }
  191.  
  192.     void OnMenuHighlight(wxMenuEvent& event);
  193.     void OnActivate(wxActivateEvent& event);
  194.  
  195.     // The next 2 are copied from top level...
  196.     void OnCloseWindow(wxCloseEvent& event);
  197.     void OnSize(wxSizeEvent& event);
  198.  
  199.     void SetMDIParentFrame(wxGenericMDIParentFrame* parentFrame);
  200.     wxGenericMDIParentFrame* GetMDIParentFrame() const;
  201.  
  202. protected:
  203.     wxGenericMDIParentFrame *m_pMDIParentFrame;
  204.     wxRect            m_MDIRect;
  205.     wxString          m_Title;
  206.  
  207. #if wxUSE_MENUS
  208.     wxMenuBar        *m_pMenuBar;
  209. #endif // wxUSE_MENUS
  210.  
  211. protected:
  212.     void Init();
  213.  
  214.     virtual void DoMoveWindow(int x, int y, int width, int height);
  215.  
  216.     // This function needs to be called when a size change is confirmed,
  217.     // we needed this function to prevent any body from the outside
  218.     // changing the panel... it messes the UI layout when we would allow it.
  219.     void ApplyMDIChildFrameRect();
  220.  
  221. private:
  222.     DECLARE_DYNAMIC_CLASS(wxGenericMDIChildFrame)
  223.     DECLARE_EVENT_TABLE()
  224.  
  225.     friend class wxGenericMDIClientWindow;
  226. };
  227.  
  228. //-----------------------------------------------------------------------------
  229. // wxGenericMDIClientWindow
  230. //-----------------------------------------------------------------------------
  231.  
  232. class WXDLLEXPORT wxGenericMDIClientWindow: public wxNotebook
  233. {
  234. public:
  235.     wxGenericMDIClientWindow();
  236.     wxGenericMDIClientWindow( wxGenericMDIParentFrame *parent, long style = 0 );
  237.     ~wxGenericMDIClientWindow();
  238.     virtual bool CreateClient( wxGenericMDIParentFrame *parent, long style = wxVSCROLL | wxHSCROLL );
  239.  
  240.     virtual int SetSelection(int nPage);
  241.  
  242. protected:
  243.     void PageChanged(int OldSelection, int newSelection);
  244.  
  245.     void OnPageChanged(wxNotebookEvent& event);
  246.     void OnSize(wxSizeEvent& event);
  247.  
  248. private:
  249.     DECLARE_DYNAMIC_CLASS(wxGenericMDIClientWindow)
  250.     DECLARE_EVENT_TABLE()
  251. };
  252.  
  253.  
  254. /*
  255.  * Define normal wxMDI classes based on wxGenericMDI
  256.  */
  257.  
  258. #ifndef wxUSE_GENERIC_MDI_AS_NATIVE
  259. #if defined(__WXUNIVERSAL__) || defined(__WXPM__)
  260. #define wxUSE_GENERIC_MDI_AS_NATIVE   1
  261. #else
  262. #define wxUSE_GENERIC_MDI_AS_NATIVE   0
  263. #endif
  264. #endif // wxUSE_GENERIC_MDI_AS_NATIVE
  265.  
  266. #if wxUSE_GENERIC_MDI_AS_NATIVE
  267.  
  268. class wxMDIChildFrame ;
  269.  
  270. //-----------------------------------------------------------------------------
  271. // wxMDIParentFrame
  272. //-----------------------------------------------------------------------------
  273.  
  274. class WXDLLEXPORT wxMDIParentFrame: public wxGenericMDIParentFrame
  275. {
  276. public:
  277.     wxMDIParentFrame() {}
  278.     wxMDIParentFrame(wxWindow *parent,
  279.                      wxWindowID id,
  280.                      const wxString& title,
  281.                      const wxPoint& pos = wxDefaultPosition,
  282.                      const wxSize& size = wxDefaultSize,
  283.                      long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
  284.                      const wxString& name = wxFrameNameStr)
  285.         :wxGenericMDIParentFrame(parent, id, title, pos, size, style, name)
  286.     {
  287.     }
  288.  
  289.     wxMDIChildFrame * GetActiveChild() const ;
  290.     
  291.     
  292. private:
  293.     DECLARE_DYNAMIC_CLASS(wxMDIParentFrame)
  294. };
  295.  
  296. //-----------------------------------------------------------------------------
  297. // wxMDIChildFrame
  298. //-----------------------------------------------------------------------------
  299.  
  300. class WXDLLEXPORT wxMDIChildFrame: public wxGenericMDIChildFrame
  301. {
  302. public:
  303.     wxMDIChildFrame() {}
  304.  
  305.     wxMDIChildFrame( wxGenericMDIParentFrame *parent,
  306.                      wxWindowID id,
  307.                      const wxString& title,
  308.                      const wxPoint& pos = wxDefaultPosition,
  309.                      const wxSize& size = wxDefaultSize,
  310.                      long style = wxDEFAULT_FRAME_STYLE,
  311.                      const wxString& name = wxFrameNameStr )
  312.         :wxGenericMDIChildFrame(parent, id, title, pos, size, style, name)
  313.     {
  314.     }
  315.  
  316. private:
  317.     DECLARE_DYNAMIC_CLASS(wxMDIChildFrame)
  318. };
  319.  
  320. //-----------------------------------------------------------------------------
  321. // wxMDIClientWindow
  322. //-----------------------------------------------------------------------------
  323.  
  324. class WXDLLEXPORT wxMDIClientWindow: public wxGenericMDIClientWindow
  325. {
  326. public:
  327.     wxMDIClientWindow() {}
  328.  
  329.     wxMDIClientWindow( wxGenericMDIParentFrame *parent, long style = 0 )
  330.         :wxGenericMDIClientWindow(parent, style)
  331.     {
  332.     }
  333.  
  334. private:
  335.     DECLARE_DYNAMIC_CLASS(wxMDIClientWindow)
  336. };
  337.  
  338. #endif
  339.  
  340. #endif
  341.     // _WX_MDIG_H_
  342.