]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/widgets/widgets.h
Fix discrepancy between different ways of measuring text extents under Mac.
[wxWidgets.git] / samples / widgets / widgets.h
index bfd7ca6b4f0610921a3cf011ea64c98fab8c92af..2420bbe567fd13e3519751d861eb6b42de40215f 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Program:     wxWindows Widgets Sample
+// Program:     wxWidgets Widgets Sample
 // Name:        widgets.h
 // Purpose:     Common stuff for all widgets project files
 // Author:      Vadim Zeitlin
 // Name:        widgets.h
 // Purpose:     Common stuff for all widgets project files
 // Author:      Vadim Zeitlin
 #ifndef _WX_SAMPLE_WIDGETS_H_
 #define _WX_SAMPLE_WIDGETS_H_
 
 #ifndef _WX_SAMPLE_WIDGETS_H_
 #define _WX_SAMPLE_WIDGETS_H_
 
-class WXDLLEXPORT wxCheckBox;
-class WXDLLEXPORT wxNotebook;
-class WXDLLEXPORT wxSizer;
-class WXDLLEXPORT wxTextCtrl;
-
-class WXDLLEXPORT WidgetsPageInfo;
+#if wxUSE_TREEBOOK && !defined(__WXHANDHELD__)
+    #include "wx/treebook.h"
+    #define USE_TREEBOOK 1
+    #define WidgetsBookCtrl wxTreebook
+    #define WidgetsBookCtrlEvent wxTreebookEvent
+    #define EVT_WIDGETS_PAGE_CHANGING(id,func) EVT_TREEBOOK_PAGE_CHANGING(id,func)
+    #define wxEVT_COMMAND_WIDGETS_PAGE_CHANGED wxEVT_COMMAND_TREEBOOK_PAGE_CHANGED
+    #define wxWidgetsbookEventHandler(func) wxTreebookEventHandler(func)
+#else
+    #include "wx/bookctrl.h"
+    #define USE_TREEBOOK 0
+    #define WidgetsBookCtrl wxBookCtrl
+    #define WidgetsBookCtrlEvent wxBookCtrlEvent
+    #define EVT_WIDGETS_PAGE_CHANGING(id,func) EVT_BOOKCTRL_PAGE_CHANGING(id,func)
+    #define wxEVT_COMMAND_WIDGETS_PAGE_CHANGED wxEVT_COMMAND_BOOKCTRL_PAGE_CHANGED
+    #define wxWidgetsbookEventHandler(func) wxBookCtrlEventHandler(func)
+#endif
+
+#if wxUSE_LOG && !defined(__WXHANDHELD__)
+    #define USE_LOG 1
+#else
+    #define USE_LOG 0
+#endif
+
+#if defined(__WXHANDHELD__)
+    #define USE_ICONS_IN_BOOK 0
+#else
+    #define USE_ICONS_IN_BOOK 1
+    #define ICON_SIZE         16
+#endif
+
+class WXDLLIMPEXP_FWD_CORE wxCheckBox;
+class WXDLLIMPEXP_FWD_CORE wxSizer;
+class WXDLLIMPEXP_FWD_CORE wxImageList;
+class WXDLLIMPEXP_FWD_CORE wxTextCtrl;
+class WXDLLIMPEXP_FWD_CORE WidgetsBookCtrl;
+
+class WidgetsPageInfo;
 
 #include "wx/panel.h"
 
 
 #include "wx/panel.h"
 
-// all source files use wxImageList
-#include "wx/imaglist.h"
+// INTRODUCING NEW PAGES DON'T FORGET TO ADD ENTRIES TO 'WidgetsCategories'
+enum
+{
+    // On wxUniversal-based build (wxX11, wxMGL, wxMSWUniv, wxGTKUniv, etc.)
+    // 'native' means 'made with wxUniv port renderer'
+    NATIVE_PAGE = 0,
+    UNIVERSAL_PAGE = NATIVE_PAGE,
+    GENERIC_PAGE,
+    PICKER_PAGE,
+    COMBO_PAGE,
+    WITH_ITEMS_PAGE,
+    EDITABLE_PAGE,
+    BOOK_PAGE,
+    ALL_PAGE,
+    MAX_PAGES
+};
+
+enum
+{
+    NATIVE_CTRLS     = 1 << NATIVE_PAGE,
+    UNIVERSAL_CTRLS  = NATIVE_CTRLS,
+    GENERIC_CTRLS    = 1 << GENERIC_PAGE,
+    PICKER_CTRLS     = 1 << PICKER_PAGE,
+    COMBO_CTRLS      = 1 << COMBO_PAGE,
+    WITH_ITEMS_CTRLS = 1 << WITH_ITEMS_PAGE,
+    EDITABLE_CTRLS   = 1 << EDITABLE_PAGE,
+    BOOK_CTRLS       = 1 << BOOK_PAGE,
+    ALL_CTRLS        = 1 << ALL_PAGE
+};
 
 // ----------------------------------------------------------------------------
 
 // ----------------------------------------------------------------------------
-// WidgetsPage: a notebook page demonstrating some widget
+// WidgetsPage: a book page demonstrating some widget
 // ----------------------------------------------------------------------------
 
 class WidgetsPage : public wxPanel
 {
 public:
 // ----------------------------------------------------------------------------
 
 class WidgetsPage : public wxPanel
 {
 public:
-    WidgetsPage(wxNotebook *notebook);
+    WidgetsPage(WidgetsBookCtrl *book,
+                wxImageList *imaglist,
+                const char *const icon[]);
+
+    // return the control shown by this page
+    virtual wxControl *GetWidget() const = 0;
+
+    // return the control shown by this page, if it supports text entry interface
+    virtual wxTextEntryBase *GetTextEntry() const { return NULL; }
+
+    // lazy creation of the content
+    virtual void CreateContent() = 0;
+
+    // some pages show 2 controls, in this case override this one as well
+    virtual wxControl *GetWidget2() const { return NULL; }
+
+    // recreate the control shown by this page
+    //
+    // this is currently used only to take into account the border flags
+    virtual void RecreateWidget() = 0;
+
+    // the default flags for the widget, currently only contains border flags
+    static int ms_defaultFlags;
 
 protected:
     // several helper functions for page creation
 
 protected:
     // several helper functions for page creation
@@ -40,24 +121,24 @@ protected:
     // (pointer to which will be saved in the provided variable if not NULL)
     // with the specified id
     wxSizer *CreateSizerWithText(wxControl *control,
     // (pointer to which will be saved in the provided variable if not NULL)
     // with the specified id
     wxSizer *CreateSizerWithText(wxControl *control,
-                                 wxWindowID id = -1,
+                                 wxWindowID id = wxID_ANY,
                                  wxTextCtrl **ppText = NULL);
 
     // create a sizer containing a label and a text ctrl
     wxSizer *CreateSizerWithTextAndLabel(const wxString& label,
                                  wxTextCtrl **ppText = NULL);
 
     // create a sizer containing a label and a text ctrl
     wxSizer *CreateSizerWithTextAndLabel(const wxString& label,
-                                         wxWindowID id = -1,
+                                         wxWindowID id = wxID_ANY,
                                          wxTextCtrl **ppText = NULL);
 
     // create a sizer containing a button and a text ctrl
     wxSizer *CreateSizerWithTextAndButton(wxWindowID idBtn,
                                           const wxString& labelBtn,
                                          wxTextCtrl **ppText = NULL);
 
     // create a sizer containing a button and a text ctrl
     wxSizer *CreateSizerWithTextAndButton(wxWindowID idBtn,
                                           const wxString& labelBtn,
-                                          wxWindowID id = -1,
+                                          wxWindowID id = wxID_ANY,
                                           wxTextCtrl **ppText = NULL);
 
     // create a checkbox and add it to the sizer
     wxCheckBox *CreateCheckBoxAndAddToSizer(wxSizer *sizer,
                                             const wxString& label,
                                           wxTextCtrl **ppText = NULL);
 
     // create a checkbox and add it to the sizer
     wxCheckBox *CreateCheckBoxAndAddToSizer(wxSizer *sizer,
                                             const wxString& label,
-                                            wxWindowID id = -1);
+                                            wxWindowID id = wxID_ANY);
 
 public:
     // the head of the linked list containinginfo about all pages
 
 public:
     // the head of the linked list containinginfo about all pages
@@ -68,24 +149,30 @@ public:
 // dynamic WidgetsPage creation helpers
 // ----------------------------------------------------------------------------
 
 // dynamic WidgetsPage creation helpers
 // ----------------------------------------------------------------------------
 
-class WXDLLEXPORT WidgetsPageInfo
+class WidgetsPageInfo
 {
 public:
 {
 public:
-    typedef WidgetsPage *(*Constructor)(wxNotebook *notebook,
+    typedef WidgetsPage *(*Constructor)(WidgetsBookCtrl *book,
                                         wxImageList *imaglist);
 
     // our ctor
                                         wxImageList *imaglist);
 
     // our ctor
-    WidgetsPageInfo(Constructor ctor, const wxChar *label);
+    WidgetsPageInfo(Constructor ctor, const wxChar *label, int categories);
 
     // accessors
     const wxString& GetLabel() const { return m_label; }
 
     // accessors
     const wxString& GetLabel() const { return m_label; }
+    int GetCategories() const { return m_categories; }
     Constructor GetCtor() const { return m_ctor; }
     WidgetsPageInfo *GetNext() const { return m_next; }
 
     Constructor GetCtor() const { return m_ctor; }
     WidgetsPageInfo *GetNext() const { return m_next; }
 
+    void SetNext(WidgetsPageInfo *next) { m_next = next; }
+
 private:
     // the label of the page
     wxString m_label;
 
 private:
     // the label of the page
     wxString m_label;
 
+    // the list (flags) for sharing page between categories
+    int m_categories;
+
     // the function to create this page
     Constructor m_ctor;
 
     // the function to create this page
     Constructor m_ctor;
 
@@ -102,11 +189,11 @@ private:
             { return &ms_info##classname; }
 
 // and this one must be inserted somewhere in the source file
             { return &ms_info##classname; }
 
 // and this one must be inserted somewhere in the source file
-#define IMPLEMENT_WIDGETS_PAGE(classname, label)                            \
-    WidgetsPage *wxCtorFor##classname(wxNotebook *notebook,                 \
+#define IMPLEMENT_WIDGETS_PAGE(classname, label, categories)                \
+    WidgetsPage *wxCtorFor##classname(WidgetsBookCtrl *book,                \
                                       wxImageList *imaglist)                \
                                       wxImageList *imaglist)                \
-        { return new classname(notebook, imaglist); }                       \
+        { return new classname(book, imaglist); }                           \
     WidgetsPageInfo classname::                                             \
     WidgetsPageInfo classname::                                             \
-        ms_info##classname(wxCtorFor##classname, label)
+        ms_info##classname(wxCtorFor##classname, label, ALL_CTRLS | categories)
 
 #endif // _WX_SAMPLE_WIDGETS_H_
 
 #endif // _WX_SAMPLE_WIDGETS_H_