]> git.saurik.com Git - wxWidgets.git/commitdiff
1. wxChoice and wxComboBox support client data under MSW
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 26 Jul 1999 23:02:32 +0000 (23:02 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 26 Jul 1999 23:02:32 +0000 (23:02 +0000)
2. control creation streamlined under MSW

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3157 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

28 files changed:
distrib/msw/tmake/filelist.txt
distrib/msw/tmake/makeall.bat
include/wx/choice.h
include/wx/control.h
include/wx/gtk/control.h
include/wx/gtk1/control.h
include/wx/msw/choice.h
include/wx/msw/control.h
include/wx/msw/window.h
include/wx/window.h
src/common/wincmn.cpp
src/gtk/control.cpp
src/gtk1/control.cpp
src/msw/button.cpp
src/msw/choice.cpp
src/msw/combobox.cpp
src/msw/control.cpp
src/msw/makefile.b32
src/msw/makefile.bcc
src/msw/makefile.dos
src/msw/makefile.g95
src/msw/makefile.sc
src/msw/makefile.vc
src/msw/makefile.wat
src/msw/notebook.cpp
src/msw/statline.cpp
src/msw/textctrl.cpp
src/msw/window.cpp

index 5dc7454bef91f571ecd25c8d42731998694d222e..46b0bed554bdf596e631ff384a84b6651f490b99 100644 (file)
@@ -52,8 +52,10 @@ textdlgg.cpp G
 tipdlg.cpp     G
 treectrl.cpp   G       16
 
+choiccmn.cpp   C
 cmndata.cpp    C
 config.cpp     C
+ctrlcmn.cpp    C
 date.cpp       C
 datstrm.cpp    C
 db.cpp C
index 6c82dab15329015c7ea169f7580d8ad6b0e158da..f96aed1eb2eed9621c01dc70a3135ed3ccc2c9c7 100755 (executable)
@@ -36,18 +36,18 @@ rem 4nt.exe, so I preferred to unroll it.
 rem for %%c in (b32 bcc dos g95 sc vc wat) %TM% -t %c% wxwin.pro -o %WXDIR%\src\msw\makefile.%c%
 
 echo Generating for Visual C++ 4.0...
-%TM% -t vc wxwin.pro -o makefile.vc
+E:\Perl\5.00471\bin\MSWin32-x86\perl.exe g:\Unix\tmake\bin\tmake -t vc wxwin.pro -o makefile.vc
 echo Generating for Borland C++ (32 bits)...
-%TM% -t b32 wxwin.pro -o makefile.b32
+E:\Perl\5.00471\bin\MSWin32-x86\perl.exe g:\Unix\tmake\bin\tmake -t b32 wxwin.pro -o makefile.b32
 echo Generating for Visual C++ 1.52...
-%TM% -t dos wxwin.pro -o makefile.dos
+E:\Perl\5.00471\bin\MSWin32-x86\perl.exe g:\Unix\tmake\bin\tmake -t dos wxwin.pro -o makefile.dos
 echo Generating for Borland C++ (16 bits)...
-%TM% -t bcc wxwin.pro -o makefile.bcc
+E:\Perl\5.00471\bin\MSWin32-x86\perl.exe g:\Unix\tmake\bin\tmake -t bcc wxwin.pro -o makefile.bcc
 echo Generating for Cygwin/Mingw32
-%TM% -t g95 wxwin.pro -o makefile.g95
+E:\Perl\5.00471\bin\MSWin32-x86\perl.exe g:\Unix\tmake\bin\tmake -t g95 wxwin.pro -o makefile.g95
 echo Generating for Symantec C++...
-%TM% -t sc wxwin.pro -o makefile.sc
+E:\Perl\5.00471\bin\MSWin32-x86\perl.exe g:\Unix\tmake\bin\tmake -t sc wxwin.pro -o makefile.sc
 echo Generating for Watcom C++...
-%TM% -t wat wxwin.pro -o makefile.wat
+E:\Perl\5.00471\bin\MSWin32-x86\perl.exe g:\Unix\tmake\bin\tmake -t wat wxwin.pro -o makefile.wat
 
 :end
index 1830d779aa2a6456505d1cdaeed2b3eac4001eed..9940c9f69fdbf938aa2f34e9d74a4b917d5f3ccd 100644 (file)
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/choice.h
+// Purpose:     wxChoice class interface
+// Author:      Vadim Zeitlin
+// Modified by:
+// Created:     26.07.99
+// RCS-ID:      $Id$
+// Copyright:   (c) wxWindows team
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
 #ifndef _WX_CHOICE_H_BASE_
 #define _WX_CHOICE_H_BASE_
 
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#ifdef __GNUG__
+    #pragma interface "choicebase.h"
+#endif
+
+#include "wx/control.h"     // the base class
+
+// ----------------------------------------------------------------------------
+// global data
+// ----------------------------------------------------------------------------
+
+WXDLLEXPORT_DATA(extern const wxChar*) wxChoiceNameStr;
+
+// ----------------------------------------------------------------------------
+// wxChoice allows to select one of a non-modifiable list of strings
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxChoiceBase : public wxControl
+{
+public:
+    // ctor
+    wxChoiceBase() { m_clientDataItemsType = ClientData_None; }
+
+    // add a new item to the list
+        // no client data
+    void Append(const wxString& item) { DoAppend(item); }
+        // with client data which belongs to the caller
+    void Append(const wxString &item, void* clientData)
+        { DoAppend(item); SetClientData(GetCount() - 1, clientData); }
+        // with client data which will be deleted by the control
+    void Append(const wxString &item, wxClientData* clientData)
+        { DoAppend(item); SetClientObject(GetCount() - 1, clientData); }
+
+    // delete items from the list
+        // one item
+    virtual void Delete(int n) = 0;
+        // all of them
+    virtual void Clear() = 0;
+
+    // selection (at most one item may be selected in wxChoice)
+        // get the index of currently selected item or -1
+    virtual int GetSelection() const = 0;
+        // get the text of the currently selected item or empty string
+    virtual wxString GetStringSelection() const;
+
+        // set selectionto current item
+    virtual void SetSelection(int n) = 0;
+        // set selection to the current item, returns TRUE if ok
+    virtual bool SetStringSelection(const wxString& sel);
+
+    // accessors to the list of strings
+        // get the number of items in the list of strings
+    virtual int GetCount() const = 0;
+
+        // find string in the list, return wxNOT_FOUND if not found
+    virtual int FindString(const wxString& s) const = 0;
+        // get the string with the specified index
+    virtual wxString GetString(int n) const = 0;
+
+    // set/get the number of columns in the control (as they're not supporte on
+    // most platforms, they do nothing by default)
+    virtual void SetColumns(int WXUNUSED(n) = 1 ) { }
+    virtual int GetColumns() const { return 1 ; }
+
+    // client data
+        // untyped (isn't deleted by the control)
+    void SetClientData( int n, void* clientData );
+    void* GetClientData( int n ) const;
+        // typed (is owned and deleted by the control)
+    void SetClientObject( int n, wxClientData* clientData );
+    wxClientData* GetClientObject( int n ) const;
+
+    // emulate selecting the item event.GetInt() from the control
+    virtual void Command(wxCommandEvent &event);
+
+    // deprecated functions, heer for backwards compatibility only
+    int Number() const { return GetCount(); }
+
+private:
+    // pure virtuals to implement in the derived classes
+    virtual void DoAppend(const wxString& item) = 0;
+
+    virtual void DoSetClientData( int n, void* clientData ) = 0;
+    virtual void* DoGetClientData( int n ) const = 0;
+    virtual void DoSetClientObject( int n, wxClientData* clientData ) = 0;
+    virtual wxClientData* DoGetClientObject( int n ) const = 0;
+
+    // the type of the client data for the items
+    wxClientDataType m_clientDataItemsType;
+};
+
+// ----------------------------------------------------------------------------
+// include the platform-dependent class definition
+// ----------------------------------------------------------------------------
+
 #if defined(__WXMSW__)
-#include "wx/msw/choice.h"
+    #include "wx/msw/choice.h"
 #elif defined(__WXMOTIF__)
-#include "wx/motif/choice.h"
+    #include "wx/motif/choice.h"
 #elif defined(__WXGTK__)
-#include "wx/gtk/choice.h"
+    #include "wx/gtk/choice.h"
 #elif defined(__WXQT__)
-#include "wx/qt/choice.h"
+    #include "wx/qt/choice.h"
 #elif defined(__WXMAC__)
-#include "wx/mac/choice.h"
+    #include "wx/mac/choice.h"
 #elif defined(__WXSTUBS__)
-#include "wx/stubs/choice.h"
+    #include "wx/stubs/choice.h"
 #endif
 
 #endif
index 40bc3ab8fdf0b95c3281d44da59e08e3aabecea2..33d5486cb7e88e3e1323e790cfd40755ff9fd6b2 100644 (file)
@@ -1,21 +1,69 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        wx/control.h
+// Purpose:     wxControl common interface
+// Author:      Vadim Zeitlin
+// Modified by:
+// Created:     26.07.99
+// RCS-ID:      $Id$
+// Copyright:   (c) wxWindows team
+// Licence:     wxWindows license
+/////////////////////////////////////////////////////////////////////////////
+
 #ifndef _WX_CONTROL_H_BASE_
 #define _WX_CONTROL_H_BASE_
 
-// all classes derived from wxControl need the validators
-#include "wx/validate.h"
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#ifdef __GNUG__
+    #pragma interface "choicebase.h"
+#endif
+
+#include "wx/window.h"      // base class
+
+// ----------------------------------------------------------------------------
+// wxControl is the base class for all controls
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxControlBase : public wxWindow
+{
+public:
+    // simulates the event of given type (i.e. wxButton::Command() is just as
+    // if the button was clicked)
+    virtual void Command(wxCommandEvent &event);
+
+protected:
+    // creates the controls (invokes wxWindowBase::CreateBase) and adds it to
+    // the list of parents children
+    bool CreateControl(wxWindowBase *parent,
+                       wxWindowID id,
+                       const wxPoint& pos,
+                       const wxSize& size,
+                       long style,
+                       const wxValidator& validator,
+                       const wxString& name);
+
+    // inherit colour and font settings from the parent window
+    void InheritAttributes();
+};
+
+// ----------------------------------------------------------------------------
+// include platform-dependent wxControl declarations
+// ----------------------------------------------------------------------------
 
 #if defined(__WXMSW__)
-#include "wx/msw/control.h"
+    #include "wx/msw/control.h"
 #elif defined(__WXMOTIF__)
-#include "wx/motif/control.h"
+    #include "wx/motif/control.h"
 #elif defined(__WXGTK__)
-#include "wx/gtk/control.h"
+    #include "wx/gtk/control.h"
 #elif defined(__WXQT__)
-#include "wx/qt/control.h"
+    #include "wx/qt/control.h"
 #elif defined(__WXMAC__)
-#include "wx/mac/control.h"
+    #include "wx/mac/control.h"
 #elif defined(__WXSTUBS__)
-#include "wx/stubs/control.h"
+    #include "wx/stubs/control.h"
 #endif
 
 #endif
index d3a164d27500d988b313ccf7488780c4da686f3f..45d0ea230ec327f8ab532a6e4ad6c25f03565bff 100644 (file)
@@ -4,7 +4,7 @@
 // Author:      Robert Roebling
 // Id:          $Id$
 // Copyright:   (c) 1998 Robert Roebling, Julian Smart
-// Licence:    wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef __GTKCONTROLH__
@@ -29,27 +29,27 @@ class wxControl;
 // wxControl
 //-----------------------------------------------------------------------------
 
-class wxControl: public wxWindow
+class wxControl : public wxControlBase
 {
-DECLARE_DYNAMIC_CLASS(wxControl)
+    DECLARE_DYNAMIC_CLASS(wxControl)
 
 public:
-  wxControl();
-  wxControl( wxWindow *parent, wxWindowID id, 
-      const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, 
-      long style = 0, const wxString &name = wxPanelNameStr  );
-  
-  virtual void Command( wxCommandEvent &event );
+    wxControl();
+    wxControl( wxWindow *parent,
+               wxWindowID id,
+               const wxPoint &pos = wxDefaultPosition,
+               const wxSize &size = wxDefaultSize,
+               long style = 0,
+               const wxString &name = wxPanelNameStr );
 
     // this function will filter out '&' characters and will put the accelerator
-    // char (the one immediately after '&') into m_chAccel (@@ not yet)
-  virtual void SetLabel( const wxString &label );
-  virtual wxString GetLabel() const;
-  
+    // char (the one immediately after '&') into m_chAccel (TODO not yet)
+    virtual void SetLabel( const wxString &label );
+    virtual wxString GetLabel() const;
+
 protected:
-  wxString   m_label;
-  char       m_chAccel;  // enabled to avoid breaking binary compatibility later on
-  
+    wxString   m_label;
+    char       m_chAccel;  // enabled to avoid breaking binary compatibility later on
 };
 
 #endif // __GTKCONTROLH__
index d3a164d27500d988b313ccf7488780c4da686f3f..45d0ea230ec327f8ab532a6e4ad6c25f03565bff 100644 (file)
@@ -4,7 +4,7 @@
 // Author:      Robert Roebling
 // Id:          $Id$
 // Copyright:   (c) 1998 Robert Roebling, Julian Smart
-// Licence:    wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef __GTKCONTROLH__
@@ -29,27 +29,27 @@ class wxControl;
 // wxControl
 //-----------------------------------------------------------------------------
 
-class wxControl: public wxWindow
+class wxControl : public wxControlBase
 {
-DECLARE_DYNAMIC_CLASS(wxControl)
+    DECLARE_DYNAMIC_CLASS(wxControl)
 
 public:
-  wxControl();
-  wxControl( wxWindow *parent, wxWindowID id, 
-      const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, 
-      long style = 0, const wxString &name = wxPanelNameStr  );
-  
-  virtual void Command( wxCommandEvent &event );
+    wxControl();
+    wxControl( wxWindow *parent,
+               wxWindowID id,
+               const wxPoint &pos = wxDefaultPosition,
+               const wxSize &size = wxDefaultSize,
+               long style = 0,
+               const wxString &name = wxPanelNameStr );
 
     // this function will filter out '&' characters and will put the accelerator
-    // char (the one immediately after '&') into m_chAccel (@@ not yet)
-  virtual void SetLabel( const wxString &label );
-  virtual wxString GetLabel() const;
-  
+    // char (the one immediately after '&') into m_chAccel (TODO not yet)
+    virtual void SetLabel( const wxString &label );
+    virtual wxString GetLabel() const;
+
 protected:
-  wxString   m_label;
-  char       m_chAccel;  // enabled to avoid breaking binary compatibility later on
-  
+    wxString   m_label;
+    char       m_chAccel;  // enabled to avoid breaking binary compatibility later on
 };
 
 #endif // __GTKCONTROLH__
index 7cdfa9a577e53b2dfae672addec2453189c4be10..ca2bb1666d1c6e1e3ffa2197530e29192ce5fa85 100644 (file)
@@ -2,82 +2,80 @@
 // Name:        choice.h
 // Purpose:     wxChoice class
 // Author:      Julian Smart
-// Modified by:
+// Modified by: Vadim Zeitlin to derive from wxChoiceBase
 // Created:     01/02/97
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart
-// Licence:    wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_CHOICE_H_
 #define _WX_CHOICE_H_
 
 #ifdef __GNUG__
-#pragma interface "choice.h"
+    #pragma interface "choice.h"
 #endif
 
-#include "wx/control.h"
-
-WXDLLEXPORT_DATA(extern const wxChar*) wxChoiceNameStr;
-
+// ----------------------------------------------------------------------------
 // Choice item
-class WXDLLEXPORT wxChoice: public wxControl
+// ----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxChoice : public wxChoiceBase
 {
     DECLARE_DYNAMIC_CLASS(wxChoice)
 
 public:
-    wxChoice() { m_noStrings = 0; }
-
-    wxChoice(wxWindow *parent, wxWindowID id,
-            const wxPoint& pos = wxDefaultPosition,
-            const wxSize& size = wxDefaultSize,
-            int n = 0, const wxString choices[] = NULL,
-            long style = 0,
-            const wxValidator& validator = wxDefaultValidator,
-            const wxString& name = wxChoiceNameStr)
+    // ctors
+    wxChoice() { }
+
+    wxChoice(wxWindow *parent,
+             wxWindowID id,
+             const wxPoint& pos = wxDefaultPosition,
+             const wxSize& size = wxDefaultSize,
+             int n = 0, const wxString choices[] = NULL,
+             long style = 0,
+             const wxValidator& validator = wxDefaultValidator,
+             const wxString& name = wxChoiceNameStr)
     {
         Create(parent, id, pos, size, n, choices, style, validator, name);
     }
 
-    bool Create(wxWindow *parent, wxWindowID id,
-            const wxPoint& pos = wxDefaultPosition,
-            const wxSize& size = wxDefaultSize,
-            int n = 0, const wxString choices[] = NULL,
-            long style = 0,
-            const wxValidator& validator = wxDefaultValidator,
-            const wxString& name = wxChoiceNameStr);
-
-    virtual void Append(const wxString& item);
+    bool Create(wxWindow *parent,
+                wxWindowID id,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                int n = 0, const wxString choices[] = NULL,
+                long style = 0,
+                const wxValidator& validator = wxDefaultValidator,
+                const wxString& name = wxChoiceNameStr);
+
+    // implement base class pure virtuals
+    virtual void DoAppend(const wxString& item);
     virtual void Delete(int n);
     virtual void Clear();
-    virtual int GetSelection() const ;
+
+    virtual int GetCount() const;
+    virtual int GetSelection() const;
     virtual void SetSelection(int n);
-    virtual int FindString(const wxString& s) const;
-    virtual wxString GetString(int n) const ;
-    virtual wxString GetStringSelection() const ;
-    virtual bool SetStringSelection(const wxString& sel);
 
-    virtual int Number() const { return m_noStrings; }
-    virtual void Command(wxCommandEvent& event);
+    virtual int FindString(const wxString& s) const;
+    virtual wxString GetString(int n) const;
 
+    // MSW only
     virtual bool MSWCommand(WXUINT param, WXWORD id);
-
-    virtual void SetColumns(int WXUNUSED(n) = 1 ) { /* No effect */ }
-    virtual int GetColumns() const { return 1 ; }
-
-    virtual WXHBRUSH OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
-            WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
-
     long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
 
 protected:
-    int     m_noStrings;
+    virtual void DoSetClientData( int n, void* clientData );
+    virtual void* DoGetClientData( int n ) const;
+    virtual void DoSetClientObject( int n, wxClientData* clientData );
+    virtual wxClientData* DoGetClientObject( int n ) const;
 
+    // MSW implementation
     virtual wxSize DoGetBestSize();
     virtual void DoSetSize(int x, int y,
                            int width, int height,
                            int sizeFlags = wxSIZE_AUTO);
 };
 
-#endif
-       // _WX_CHOICE_H_
+#endif // _WX_CHOICE_H_
index b4a280754370f332fee323589ed73ea833d8f1e7..0005193c7c6162489eeb53c00e6538226202a38f 100644 (file)
     #pragma interface "control.h"
 #endif
 
-#include "wx/window.h"
-#include "wx/list.h"
-
 // General item class
-class WXDLLEXPORT wxControl : public wxWindow
+class WXDLLEXPORT wxControl : public wxControlBase
 {
     DECLARE_ABSTRACT_CLASS(wxControl)
 
@@ -29,7 +26,10 @@ public:
    virtual ~wxControl();
 
    // Simulates an event
-   bool Command(wxCommandEvent& event) { return ProcessCommand(event); }
+   virtual void Command(wxCommandEvent& event) { ProcessCommand(event); }
+
+   // implementation from now on
+   // --------------------------
 
    // Calls the callback and appropriate event handlers
    bool ProcessCommand(wxCommandEvent& event);
@@ -67,9 +67,17 @@ protected:
 
 protected:
    // For controls like radiobuttons which are really composite
-   wxList           m_subControls;
+   wxList m_subControls;
+
+   virtual wxSize DoGetBestSize();
+
+   // create the control of the given class with the given style, returns FALSE
+   // if creation failed
+   bool MSWCreateControl(const wxChar *classname, WXDWORD style);
 
-    virtual wxSize DoGetBestSize();
+   // determine the extended styles combination for this window (may slightly
+   // modify styl parameter)
+   WXDWORD GetExStyle(WXDWORD& style) const;
 
 private:
    DECLARE_EVENT_TABLE()
@@ -78,8 +86,8 @@ private:
 
 #if WXWIN_COMPATIBILITY
     inline void wxControl::Callback(const wxFunction f) { m_callback = f; };
-    inline wxFont& wxControl::GetLabelFont() const { return GetFont() ; }
-    inline wxFont& wxControl::GetButtonFont() const { return GetFont() ; }
+    inline wxFont& wxControl::GetLabelFont() const { return GetFont(); }
+    inline wxFont& wxControl::GetButtonFont() const { return GetFont(); }
     inline void wxControl::SetLabelFont(const wxFont& font) { SetFont(font); }
     inline void wxControl::SetButtonFont(const wxFont& font) { SetFont(font); }
 #endif // WXWIN_COMPATIBILITY
index dbd49770ede8c5f52577ad63712c41ab5aa59103..e198301331e7e58e42d1c18eedc709e58686f3a8 100644 (file)
@@ -201,9 +201,10 @@ public:
     wxWindow *FindItemByHWND(WXHWND hWnd, bool controlOnly = FALSE) const;
 
     // Make a Windows extended style from the given wxWindows window style
-    virtual WXDWORD MakeExtendedStyle(long style, bool eliminateBorders = TRUE);
+    static WXDWORD MakeExtendedStyle(long style,
+                                     bool eliminateBorders = TRUE);
     // Determine whether 3D effects are wanted
-    virtual WXDWORD Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D);
+    WXDWORD Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D) const;
 
     // MSW only: TRUE if this control is part of the main control
     virtual bool ContainsHWND(WXHWND WXUNUSED(hWnd)) const { return FALSE; };
index 7be5f5413b9543dda55b17a98728a8b0121fcb41..d6ee431600660b87666ef8ef4314742e7272c93c 100644 (file)
 #include "wx/colour.h"
 #include "wx/region.h"
 
+#if wxUSE_VALIDATORS
+    #include "wx/validate.h"    // defines wxDefaultValidator
+#endif // wxUSE_VALIDATORS
+
 #if wxUSE_ACCEL
     #include "wx/accel.h"
 #endif // wxUSE_ACCEL
@@ -48,7 +52,6 @@ class WXDLLEXPORT wxLayoutConstraints;
 class WXDLLEXPORT wxResourceTable;
 class WXDLLEXPORT wxSizer;
 class WXDLLEXPORT wxToolTip;
-class WXDLLEXPORT wxValidator;
 class WXDLLEXPORT wxWindowBase;
 class WXDLLEXPORT wxWindow;
 
@@ -117,6 +120,9 @@ public:
                     const wxPoint& pos = wxDefaultPosition,
                     const wxSize& size = wxDefaultSize,
                     long style = 0,
+#if wxUSE_VALIDATORS
+                    const wxValidator& validator = wxDefaultValidator,
+#endif // wxUSE_VALIDATORS
                     const wxString& name = wxPanelNameStr);
 
     virtual ~wxWindowBase();
@@ -371,18 +377,12 @@ public:
         // each window may have associated client data: either a pointer to
         // wxClientData object in which case it is managed by the window (i.e.
         // it will delete the data when it's destroyed) or an untyped pointer
-        // which won't be deleted by the window
-    virtual void SetClientObject( wxClientData *data )
-    {
-        if ( m_clientObject )
-            delete m_clientObject;
+        // which won't be deleted by the window - but not both of them
+    void SetClientObject( wxClientData *data ) { DoSetClientObject(data); }
+    wxClientData *GetClientObject() const { return DoGetClientObject(); }
 
-        m_clientObject = data;
-    }
-    virtual wxClientData *GetClientObject() const { return m_clientObject; }
-
-    virtual void SetClientData( void *data ) { m_clientData = data; }
-    virtual void *GetClientData() const { return m_clientData; }
+    void SetClientData( void *data ) { DoSetClientData(data); }
+    void *GetClientData() const { return DoGetClientData(); }
 
     // dialog oriented functions
     // -------------------------
@@ -695,9 +695,14 @@ protected:
 
     // user data associated with the window: either an object which will be
     // deleted by the window when it's deleted or some raw pointer which we do
-    // nothing with
-    wxClientData        *m_clientObject;
-    void                *m_clientData;
+    // nothing with - only one type of data can be used with the given window
+    // (i.e. you cannot set the void data and then associate the window with
+    // wxClientData or vice versa)
+    union
+    {
+        wxClientData *m_clientObject;
+        void         *m_clientData;
+    };
 
     // the tooltip for this window (may be NULL)
 #if wxUSE_TOOLTIPS
@@ -777,6 +782,21 @@ protected:
 
     virtual bool DoPopupMenu( wxMenu *menu, int x, int y ) = 0;
 
+    // client data accessors
+    virtual void DoSetClientObject( wxClientData *data );
+    virtual wxClientData *DoGetClientObject() const;
+
+    virtual void DoSetClientData( void *data );
+    virtual void *DoGetClientData() const;
+
+    // what kind of data do we have?
+    enum wxClientDataType
+    {
+        ClientData_None,    // we don't know yet because we don't have it at all
+        ClientData_Object,  // our client data is typed and we own it
+        ClientData_Void     // client data is untyped and we don't own it
+    } m_clientDataType;
+
 private:
     // contains the last id generated by NewControlId
     static int ms_lastControlId;
index bf4921ff5aa0c4d41af227f5788eb625058aa29d..13c3f639ab2908e35efd9a9168d5011b8c6940c3 100644 (file)
@@ -100,9 +100,9 @@ void wxWindowBase::InitBase()
     m_isShown = FALSE;
     m_isEnabled = TRUE;
 
-    // no client data
-    m_clientObject = (wxClientData *)NULL;
+    // no client data (yet)
     m_clientData = NULL;
+    m_clientDataType = ClientData_None;
 
     // the default event handler is just this window
     m_eventHandler = this;
@@ -154,6 +154,7 @@ bool wxWindowBase::CreateBase(wxWindowBase *parent,
                               const wxPoint& WXUNUSED(pos),
                               const wxSize& WXUNUSED(size),
                               long style,
+                              const wxValidator& validator,
                               const wxString& name)
 {
     // m_isWindow is set to TRUE in wxWindowBase::Init() as well as many other
@@ -167,6 +168,7 @@ bool wxWindowBase::CreateBase(wxWindowBase *parent,
     SetName(name);
     SetWindowStyleFlag(style);
     SetParent(parent);
+    SetValidator(validator);
 
     return TRUE;
 }
@@ -1255,6 +1257,47 @@ wxPoint wxWindowBase::ConvertDialogToPixels(const wxPoint& pt)
     return pt2;
 }
 
+// ----------------------------------------------------------------------------
+// client data
+// ----------------------------------------------------------------------------
+
+void wxWindowBase::DoSetClientObject( wxClientData *data )
+{
+    wxASSERT_MSG( m_clientDataType != ClientData_Void,
+                  _T("can't have both object and void client data") );
+
+    if ( m_clientObject )
+        delete m_clientObject;
+
+    m_clientObject = data;
+    m_clientDataType = ClientData_Object;
+}
+
+wxClientData *wxWindowBase::DoGetClientObject() const
+{
+    wxASSERT_MSG( m_clientDataType == ClientData_Object,
+                  _T("this window doesn't have object client data") );
+
+    return m_clientObject;
+}
+
+void wxWindowBase::DoSetClientData( void *data )
+{
+    wxASSERT_MSG( m_clientDataType != ClientData_Object,
+                  _T("can't have both object and void client data") );
+
+    m_clientData = data;
+    m_clientDataType = ClientData_Void;
+}
+
+void *wxWindowBase::DoGetClientData() const
+{
+    wxASSERT_MSG( m_clientDataType == ClientData_Void,
+                  _T("this window doesn't have void client data") );
+
+    return m_clientData;
+}
+
 // ----------------------------------------------------------------------------
 // event handlers
 // ----------------------------------------------------------------------------
index 90b16f3d70d0677a16d9738db85cedfe2fc9b8f6..e767eac88f3969030906664bbee9b954cafd90f9 100644 (file)
@@ -36,10 +36,6 @@ wxControl::wxControl( wxWindow *parent,
 {
 }
 
-void wxControl::Command( wxCommandEvent &WXUNUSED(event) )
-{
-}
-
 void wxControl::SetLabel( const wxString &label )
 {
     m_label = _T("");
index 90b16f3d70d0677a16d9738db85cedfe2fc9b8f6..e767eac88f3969030906664bbee9b954cafd90f9 100644 (file)
@@ -36,10 +36,6 @@ wxControl::wxControl( wxWindow *parent,
 {
 }
 
-void wxControl::Command( wxCommandEvent &WXUNUSED(event) )
-{
-}
-
 void wxControl::SetLabel( const wxString &label )
 {
     m_label = _T("");
index daa665f297bdc0d881a1d545f60d4e278d615b94..706aae70b89024baa661b12b67c1c19d824d3c11 100644 (file)
@@ -64,7 +64,7 @@ bool wxButton::Create(wxWindow *parent,
                       const wxValidator& validator,
                       const wxString& name)
 {
-    if ( !CreateBase(parent, id, pos, size, style, name) )
+    if ( !CreateBase(parent, id, pos, size, style, validator, name) )
         return FALSE;
 
     SetValidator(validator);
index 9859f91a06bd71000aa1e22f72809bfa4ed17bb8..92cab89387a009ef064bd78136d9f2e6511a263c 100644 (file)
 // Name:        choice.cpp
 // Purpose:     wxChoice
 // Author:      Julian Smart
-// Modified by:
+// Modified by: Vadim Zeitlin to derive from wxChoiceBase
 // Created:     04/01/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Julian Smart and Markus Holzem
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
 #ifdef __GNUG__
-#pragma implementation "choice.h"
+    #pragma implementation "choice.h"
 #endif
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-#pragma hdrstop
+    #pragma hdrstop
 #endif
 
 #ifndef WX_PRECOMP
-#include "wx/choice.h"
-#include "wx/utils.h"
-#include "wx/log.h"
+    #include "wx/choice.h"
+    #include "wx/utils.h"
+    #include "wx/log.h"
 #endif
 
 #include "wx/msw/private.h"
 
 #if !USE_SHARED_LIBRARY
-IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl)
+    IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControl)
 #endif
 
-bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
+// ============================================================================
+// implementation
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// creation
+// ----------------------------------------------------------------------------
+
+bool wxChoice::Create(wxWindow *parent,
+                      wxWindowID id,
+                      const wxPoint& pos,
+                      const wxSize& size,
+                      int n, const wxString choices[],
+                      long style,
+                      const wxValidator& validator,
+                      const wxString& name)
 {
-  if (param == CBN_SELCHANGE)
-  {
-    wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId);
-    event.SetInt(GetSelection());
-    event.SetEventObject(this);
-    event.SetString(GetStringSelection());
-    ProcessCommand(event);
+    if ( !CreateControl(parent, id, pos, size, style, validator, name) )
+        return FALSE;
 
-    return TRUE;
-  }
-  else
-      return FALSE;
-}
-
-bool wxChoice::Create(wxWindow *parent, wxWindowID id,
-           const wxPoint& pos,
-           const wxSize& size,
-       int n, const wxString choices[],
-       long style,
-           const wxValidator& validator,
-           const wxString& name)
-{
-  SetName(name);
-  SetValidator(validator);
-  if (parent) parent->AddChild(this);
-  SetBackgroundColour(parent->GetBackgroundColour()) ;
-  SetForegroundColour(parent->GetForegroundColour()) ;
-  m_noStrings = 0;
-
-  m_windowStyle = style;
-
-  if ( id == -1 )
-    m_windowId = (int)NewControlId();
-  else
-  m_windowId = id;
-
-  int x = pos.x;
-  int y = pos.y;
-  int width = size.x;
-  int height = size.y;
-
-  long msStyle = WS_CHILD | CBS_DROPDOWNLIST | WS_HSCROLL | WS_VSCROLL
-                   | WS_TABSTOP | WS_VISIBLE;
-  if (m_windowStyle & wxCB_SORT)
-    msStyle |= CBS_SORT;
-
-  bool want3D;
-  WXDWORD exStyle = Determine3DEffects(WS_EX_CLIENTEDGE, &want3D) ;
-
-  // Even with extended styles, need to combine with WS_BORDER
-  // for them to look right.
-  if ( want3D || wxStyleHasBorder(m_windowStyle) )
-    msStyle |= WS_BORDER;
-
-  m_hWnd = (WXHWND)::CreateWindowEx(exStyle, _T("COMBOBOX"), NULL,
-                   msStyle,
-                   0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)m_windowId,
-                   wxGetInstance(), NULL);
-
-  wxCHECK_MSG( m_hWnd, FALSE, _T("Failed to create combobox") );
-
-/*
-#if wxUSE_CTL3D
-  if (want3D)
-  {
-    m_useCtl3D = TRUE;
-    Ctl3dSubclassCtl(wx_combo); // Does CTL3D affect the combobox? I think not.
-  }
-#endif
-*/
+    long msStyle = WS_CHILD | CBS_DROPDOWNLIST | WS_TABSTOP | WS_VISIBLE;
+    if ( style & wxCB_SORT )
+        msStyle |= CBS_SORT;
 
-  // Subclass again for purposes of dialog editing mode
-  SubclassWin(m_hWnd);
+    // the experience shows that wxChoice vs. wxComboBox distinction confuses
+    // quite a few people - try to help them
+    wxASSERT_MSG( !(style & wxCB_DROPDOWN) &&
+                  !(style & wxCB_READONLY) &&
+                  !(style & wxCB_SIMPLE),
+                  _T("this style flag is ignored by wxChoice, you "
+                     "probably want to use a wxComboBox") );
 
-  SetFont(parent->GetFont());
+    if ( !MSWCreateControl(_T("COMBOBOX"), msStyle) )
+        return FALSE;
 
-  int i;
-  for (i = 0; i < n; i++)
-  {
-    Append(choices[i]);
-  }
-  SetSelection(n);
+    for ( int i = 0; i < n; i++ )
+    {
+        Append(choices[i]);
+    }
 
-  SetSize(x, y, width, height);
+    SetSize(pos.x, pos.y, size.x, size.y);
 
-  return TRUE;
+    return TRUE;
 }
 
-void wxChoice::Append(const wxString& item)
-{
-  SendMessage(GetHwnd(), CB_ADDSTRING, 0, (LONG)(const wxChar *)item);
+// ----------------------------------------------------------------------------
+// adding/deleting items to/from the list
+// ----------------------------------------------------------------------------
 
-  m_noStrings ++;
+void wxChoice::DoAppend(const wxString& item)
+{
+    SendMessage(GetHwnd(), CB_ADDSTRING, 0, (LONG)item.c_str());
 }
 
 void wxChoice::Delete(int n)
 {
-  m_noStrings = (int)SendMessage(GetHwnd(), CB_DELETESTRING, n, 0);
+    wxCHECK_RET( n < GetCount(), _T("invalid item index in wxChoice::Delete") );
+
+    SendMessage(GetHwnd(), CB_DELETESTRING, n, 0);
 }
 
-void wxChoice::Clear(void)
+void wxChoice::Clear()
 {
-  SendMessage(GetHwnd(), CB_RESETCONTENT, 0, 0);
-
-  m_noStrings = 0;
+    SendMessage(GetHwnd(), CB_RESETCONTENT, 0, 0);
 }
 
+// ----------------------------------------------------------------------------
+// selection
+// ----------------------------------------------------------------------------
 
-int wxChoice::GetSelection(void) const
+int wxChoice::GetSelection() const
 {
-  return (int)SendMessage(GetHwnd(), CB_GETCURSEL, 0, 0);
+    return (int)SendMessage(GetHwnd(), CB_GETCURSEL, 0, 0);
 }
 
 void wxChoice::SetSelection(int n)
 {
-  SendMessage(GetHwnd(), CB_SETCURSEL, n, 0);
+    SendMessage(GetHwnd(), CB_SETCURSEL, n, 0);
+}
+
+// ----------------------------------------------------------------------------
+// string list functions
+// ----------------------------------------------------------------------------
+
+int wxChoice::GetCount() const
+{
+    return (int)SendMessage(GetHwnd(), CB_GETCOUNT, 0, 0);
 }
 
 int wxChoice::FindString(const wxString& s) const
 {
 #if defined(__WATCOMC__) && defined(__WIN386__)
-  // For some reason, Watcom in WIN386 mode crashes in the CB_FINDSTRINGEXACT message.
-  // Do it the long way instead.
-  char buf[512];
-  for (int i = 0; i < Number(); i++)
-  {
-    int len = (int)SendMessage(GetHwnd(), CB_GETLBTEXT, i, (LPARAM)(LPSTR)buf);
-    buf[len] = 0;
-    if (strcmp(buf, (const char *)s) == 0)
-      return i;
-  }
-  return -1;
-#else
- int pos = (int)SendMessage(GetHwnd(), CB_FINDSTRINGEXACT, (WPARAM)-1, (LPARAM)(LPSTR)(const wxChar *)s);
- if (pos == LB_ERR)
-   return -1;
- else
-   return pos;
-#endif
+    // For some reason, Watcom in WIN386 mode crashes in the CB_FINDSTRINGEXACT message.
+    // wxChoice::Do it the long way instead.
+    int count = GetCount();
+    for ( int i = 0; i < count; i++ )
+    {
+        // as CB_FINDSTRINGEXACT is case insensitive, be case insensitive too
+        if ( GetString(i).IsSameAs(s, FALSE) )
+            return i;
+    }
+
+    return wxNOT_FOUND;
+#else // !Watcom
+    int pos = (int)SendMessage(GetHwnd(), CB_FINDSTRINGEXACT,
+                               (WPARAM)-1, (LPARAM)s.c_str());
+
+    return pos == LB_ERR ? wxNOT_FOUND : pos;
+#endif // Watcom/!Watcom
 }
 
 wxString wxChoice::GetString(int n) const
@@ -190,6 +166,46 @@ wxString wxChoice::GetString(int n) const
     return str;
 }
 
+// ----------------------------------------------------------------------------
+// client data
+// ----------------------------------------------------------------------------
+
+void wxChoice::DoSetClientData( int n, void* clientData )
+{
+    if ( SendMessage(GetHwnd(), CB_SETITEMDATA, n, (LPARAM)clientData) == CB_ERR )
+    {
+        wxLogLastError(_T("CB_SETITEMDATA"));
+    }
+}
+
+void* wxChoice::DoGetClientData( int n ) const
+{
+    LPARAM rc = SendMessage(GetHwnd(), CB_GETITEMDATA, n, 0);
+    if ( rc == CB_ERR )
+    {
+        wxLogLastError(_T("CB_GETITEMDATA"));
+
+        // unfortunately, there is no way to return an error code to the user
+        rc = NULL;
+    }
+
+    return (void *)rc;
+}
+
+void wxChoice::DoSetClientObject( int n, wxClientData* clientData )
+{
+    DoSetClientData(n, clientData);
+}
+
+wxClientData* wxChoice::DoGetClientObject( int n ) const
+{
+    return (wxClientData *)DoGetClientData(n);
+}
+
+// ----------------------------------------------------------------------------
+// wxMSW specific helpers
+// ----------------------------------------------------------------------------
+
 void wxChoice::DoSetSize(int x, int y,
                          int width, int height,
                          int sizeFlags)
@@ -207,7 +223,8 @@ wxSize wxChoice::DoGetBestSize()
     // find the widest string
     int wLine;
     int wChoice = 0;
-    for ( int i = 0; i < m_noStrings; i++ )
+    int nItems = GetCount();
+    for ( int i = 0; i < nItems; i++ )
     {
         wxString str(GetString(i));
         GetTextExtent(str, &wLine, NULL);
@@ -227,88 +244,45 @@ wxSize wxChoice::DoGetBestSize()
     wChoice += 5*cx;
 
     // Choice drop-down list depends on number of items (limited to 10)
-    size_t nStrings = m_noStrings == 0 ? 10 : wxMin(10, m_noStrings) + 1;
+    size_t nStrings = nItems == 0 ? 10 : wxMin(10, nItems) + 1;
     int hChoice = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy)*nStrings;
 
     return wxSize(wChoice, hChoice);
 }
 
-WXHBRUSH wxChoice::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
-      WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
-{
-  return 0;
-}
-
 long wxChoice::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
 {
-    switch (nMsg)
+    if ( nMsg == WM_LBUTTONUP )
     {
-/*
-      case WM_GETDLGCODE:
-      {
-        if (GetWindowStyleFlag() & wxPROCESS_ENTER)
-          return DLGC_WANTALLKEYS;
-        break;
-      }
-*/
-/*
-      case WM_CHAR: // Always an ASCII character
-      {
-        if (wParam == VK_RETURN)
-        {
-          wxCommandEvent event(wxEVENT_TYPE_TEXT_ENTER_COMMAND);
-          event.commandString = ((wxTextCtrl *)item)->GetValue();
-          event.eventObject = item;
-          item->ProcessCommand(event);
-          return FALSE;
-        }
-        break;
-      }
-*/
-      case WM_LBUTTONUP:
-      {
         int x = (int)LOWORD(lParam);
         int y = (int)HIWORD(lParam);
 
-       // Ok, this is truly weird, but if a panel with a wxChoice loses the
-       // focus, then you get a *fake* WM_LBUTTONUP message
-       // with x = 65535 and y = 65535.
-       // Filter out this nonsense.
-       if (x == 65535 && y == 65535)
-         return 0;
-       break;
-      }
+        // Ok, this is truly weird, but if a panel with a wxChoice loses the
+        // focus, then you get a *fake* WM_LBUTTONUP message with x = 65535 and
+        // y = 65535. Filter out this nonsense.
+        //
+        // VZ: I'd like to know how to reproduce this please...
+        if ( x == 65535 && y == 65535 )
+            return 0;
     }
 
-  return wxWindow::MSWWindowProc(nMsg, wParam, lParam);
-}
-
-wxString wxChoice::GetStringSelection (void) const
-{
-  int sel = GetSelection ();
-  if (sel > -1)
-    return wxString(this->GetString (sel));
-  else
-    return wxString(_T(""));
+    return wxWindow::MSWWindowProc(nMsg, wParam, lParam);
 }
 
-bool wxChoice::SetStringSelection (const wxString& s)
+bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
 {
-  int sel = FindString (s);
-  if (sel > -1)
+    if ( param != CBN_SELCHANGE)
     {
-      SetSelection (sel);
-      return TRUE;
+        // "selection changed" is the only event we're after
+        return FALSE;
     }
-  else
-    return FALSE;
-}
-
-void wxChoice::Command(wxCommandEvent & event)
-{
-  SetSelection (event.GetInt());
-  ProcessCommand (event);
-}
 
+    wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId);
+    event.SetInt(GetSelection());
+    event.SetEventObject(this);
+    event.SetString(GetStringSelection());
+    ProcessCommand(event);
 
+    return TRUE;
+}
 
index 38de733962bf9d2303cec878ede539470ad2628f..cf49b661e85542931fb3d3812489d6401955b2c5 100644 (file)
@@ -73,7 +73,6 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
   if (parent) parent->AddChild(this);
   SetBackgroundColour(parent->GetBackgroundColour()) ;
   SetForegroundColour(parent->GetForegroundColour()) ;
-  m_noStrings = 0;
 
   m_windowStyle = style;
 
@@ -87,8 +86,7 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
   int width = size.x;
   int height = size.y;
 
-  long msStyle = WS_CHILD | WS_HSCROLL | WS_VSCROLL |
-                 WS_TABSTOP | WS_VISIBLE | CBS_NOINTEGRALHEIGHT;
+  long msStyle = WS_CHILD | WS_TABSTOP | WS_VISIBLE | CBS_NOINTEGRALHEIGHT;
 
   if (m_windowStyle & wxCB_READONLY)
     msStyle |= CBS_DROPDOWNLIST;
index b8ccc635511b9163b45cec00c72c2a64a899043f..88ab79da903f1ad3a1b38c4b3dc4cf1d605638e9 100644 (file)
@@ -58,6 +58,39 @@ wxControl::~wxControl()
     m_isBeingDeleted = TRUE;
 }
 
+bool wxControl::MSWCreateControl(const wxChar *classname, WXDWORD style)
+{
+    m_hWnd = (WXHWND)::CreateWindowEx
+                       (
+                        GetExStyle(style),  // extended style
+                        classname,          // the kind of control to create
+                        NULL,               // the window name
+                        style,              // the window style
+                        0, 0, 0, 0,         // the window position and size
+                        GetHwndOf(GetParent()),  // parent
+                        (HMENU)GetId(),     // child id
+                        wxGetInstance(),    // app instance
+                        NULL                // creation parameters
+                       );
+
+    if ( !m_hWnd )
+    {
+#ifdef __WXDEBUG__
+        wxLogError(_T("Failed to create a control of class '%s'"), classname);
+#endif // DEBUG
+
+        return FALSE;
+    }
+
+    // subclass again for purposes of dialog editing mode
+    SubclassWin(m_hWnd);
+
+    // controls use the same font and colours as their parent dialog by default
+    InheritAttributes();
+
+    return TRUE;
+}
+
 wxSize wxControl::DoGetBestSize()
 {
     return wxSize(DEFAULT_ITEM_WIDTH, DEFAULT_ITEM_HEIGHT);
@@ -147,6 +180,19 @@ void wxControl::OnEraseBackground(wxEraseEvent& event)
     ::SetMapMode((HDC) event.GetDC()->GetHDC(), mode);
 }
 
+WXDWORD wxControl::GetExStyle(WXDWORD& style) const
+{
+    bool want3D;
+    WXDWORD exStyle = Determine3DEffects(WS_EX_CLIENTEDGE, &want3D) ;
+
+    // Even with extended styles, need to combine with WS_BORDER
+    // for them to look right.
+    if ( want3D || wxStyleHasBorder(m_windowStyle) )
+        style |= WS_BORDER;
+
+    return exStyle;
+}
+
 // ---------------------------------------------------------------------------
 // global functions
 // ---------------------------------------------------------------------------
index de6c532ec1ad879b03586d35d837186dd926310d..fe536cb6350a437e2de878a74505594af22cc24c 100644 (file)
@@ -1,6 +1,4 @@
-
-
-# This file was automatically generated by tmake at 15:27, 1999/07/26
+# This file was automatically generated by tmake at 00:42, 1999/07/27
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE B32.T!
 
 #
@@ -108,8 +106,10 @@ GENERICOBJS= $(MSWDIR)\busyinfo.obj \
 
 COMMONOBJS = \
                $(MSWDIR)\y_tab.obj \
+               $(MSWDIR)\choiccmn.obj \
                $(MSWDIR)\cmndata.obj \
                $(MSWDIR)\config.obj \
+               $(MSWDIR)\ctrlcmn.obj \
                $(MSWDIR)\date.obj \
                $(MSWDIR)\datstrm.obj \
                $(MSWDIR)\db.obj \
@@ -508,10 +508,14 @@ $(MSWDIR)\xpmhand.obj: $(MSWDIR)\xpmhand.$(SRCSUFF)
 ########################################################
 # Common objects (always compiled)
 
+$(MSWDIR)\choiccmn.obj: $(COMMDIR)\choiccmn.$(SRCSUFF)
+
 $(MSWDIR)\cmndata.obj: $(COMMDIR)\cmndata.$(SRCSUFF)
 
 $(MSWDIR)\config.obj: $(COMMDIR)\config.$(SRCSUFF)
 
+$(MSWDIR)\ctrlcmn.obj: $(COMMDIR)\ctrlcmn.$(SRCSUFF)
+
 $(MSWDIR)\date.obj: $(COMMDIR)\date.$(SRCSUFF)
 
 $(MSWDIR)\datstrm.obj: $(COMMDIR)\datstrm.$(SRCSUFF)
index 07a754e869ed0323fbf83450f2a8e5c611ed8e51..ff7e40f21caf993c47ed57867263a76afa41259c 100644 (file)
@@ -1,6 +1,6 @@
 
 
-# This file was automatically generated by tmake at 14:25, 1999/07/23
+# This file was automatically generated by tmake at 00:42, 1999/07/27
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE BCC.T!
 
 #
@@ -99,8 +99,10 @@ GENERICOBJS= $(MSWDIR)\busyinfo.obj \
 
 COMMONOBJS = \
                $(MSWDIR)\y_tab.obj \
+               $(MSWDIR)\choiccmn.obj \
                $(MSWDIR)\cmndata.obj \
                $(MSWDIR)\config.obj \
+               $(MSWDIR)\ctrlcmn.obj \
                $(MSWDIR)\date.obj \
                $(MSWDIR)\datstrm.obj \
                $(MSWDIR)\db.obj \
@@ -423,10 +425,14 @@ $(MSWDIR)\xpmhand.obj: $(MSWDIR)\xpmhand.$(SRCSUFF)
 ########################################################
 # Common objects (always compiled)
 
+$(MSWDIR)\choiccmn.obj: $(COMMDIR)\choiccmn.$(SRCSUFF)
+
 $(MSWDIR)\cmndata.obj: $(COMMDIR)\cmndata.$(SRCSUFF)
 
 $(MSWDIR)\config.obj: $(COMMDIR)\config.$(SRCSUFF)
 
+$(MSWDIR)\ctrlcmn.obj: $(COMMDIR)\ctrlcmn.$(SRCSUFF)
+
 $(MSWDIR)\date.obj: $(COMMDIR)\date.$(SRCSUFF)
 
 $(MSWDIR)\datstrm.obj: $(COMMDIR)\datstrm.$(SRCSUFF)
index b1b40e57d4338a4c46e36f7483eb76c84c0c079b..e29d0f28358353338bfd469ba5cf3a0e2dcd4e02 100644 (file)
@@ -1,6 +1,6 @@
 
 
-# This file was automatically generated by tmake at 14:25, 1999/07/23
+# This file was automatically generated by tmake at 00:42, 1999/07/27
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE DOS.T!
 
 #
@@ -86,8 +86,10 @@ GENERICOBJS= $(GENDIR)\busyinfo.obj \
 
 COMMONOBJS = \
                $(COMMDIR)\y_tab.obj \
+               $(COMMDIR)\choiccmn.obj \
                $(COMMDIR)\cmndata.obj \
                $(COMMDIR)\config.obj \
+               $(COMMDIR)\ctrlcmn.obj \
                $(COMMDIR)\date.obj \
                $(COMMDIR)\datstrm.obj \
                $(COMMDIR)\db.obj \
@@ -664,6 +666,11 @@ $(MSWDIR)/xpmhand.obj:     $*.$(SRCSUFF)
 $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
 <<
 
+$(COMMDIR)/choiccmn.obj:     $*.$(SRCSUFF)
+        cl @<<
+$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
+<<
+
 $(COMMDIR)/cmndata.obj:     $*.$(SRCSUFF)
         cl @<<
 $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
@@ -674,6 +681,11 @@ $(COMMDIR)/config.obj:     $*.$(SRCSUFF)
 $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
 <<
 
+$(COMMDIR)/ctrlcmn.obj:     $*.$(SRCSUFF)
+        cl @<<
+$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
+<<
+
 $(COMMDIR)/date.obj:     $*.$(SRCSUFF)
         cl @<<
 $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
index 298fdd64b532d0948ef30c2fa3e895ba672af0ea..b5a2bbec4857458cde01a9db929bbe39a53403d8 100644 (file)
@@ -1,6 +1,6 @@
 
 
-# This file was automatically generated by tmake at 14:25, 1999/07/23
+# This file was automatically generated by tmake at 00:42, 1999/07/27
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE G95.T!
 
 #
@@ -59,8 +59,10 @@ GENERICOBJS = \
 
 COMMONOBJS  = \
                $(COMMDIR)/y_tab.$(OBJSUFF) \
+               $(COMMDIR)/choiccmn.$(OBJSUFF) \
                $(COMMDIR)/cmndata.$(OBJSUFF) \
                $(COMMDIR)/config.$(OBJSUFF) \
+               $(COMMDIR)/ctrlcmn.$(OBJSUFF) \
                $(COMMDIR)/date.$(OBJSUFF) \
                $(COMMDIR)/datstrm.$(OBJSUFF) \
                $(COMMDIR)/db.$(OBJSUFF) \
index 49e1ff8b0de4e629ec2f75a1b61c45eb7dc93af6..d43c1b23013c83e3b23b250e7d6fc84b6306bbd9 100644 (file)
@@ -1,6 +1,6 @@
 
 
-# This file was automatically generated by tmake at 14:25, 1999/07/23
+# This file was automatically generated by tmake at 00:42, 1999/07/27
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE SC.T!
 
 # Symantec C++ makefile for the msw objects
@@ -47,8 +47,10 @@ GENERICOBJS= $(GENDIR)\busyinfo.obj \
 
 COMMONOBJS = \
                $(COMMDIR)\y_tab.obj \
+               $(COMMDIR)\choiccmn.obj \
                $(COMMDIR)\cmndata.obj \
                $(COMMDIR)\config.obj \
+               $(COMMDIR)\ctrlcmn.obj \
                $(COMMDIR)\date.obj \
                $(COMMDIR)\datstrm.obj \
                $(COMMDIR)\db.obj \
index 3ff4d9c34d85445ff1cd2d3f7b7e5018b60b1de0..985746139291f82e9fd1c0eec800c6fee17d84b5 100644 (file)
@@ -1,4 +1,4 @@
-# This file was automatically generated by tmake at 14:25, 1999/07/23
+# This file was automatically generated by tmake at 00:42, 1999/07/27
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE VC.T!
 
 # File:     makefile.vc
@@ -113,8 +113,10 @@ NONESSENTIALOBJS= ..\generic\$D\colrdlgg.obj \
 
 COMMONOBJS = \
                ..\common\$D\y_tab.obj \
+               ..\common\$D\choiccmn.obj \
                ..\common\$D\cmndata.obj \
                ..\common\$D\config.obj \
+               ..\common\$D\ctrlcmn.obj \
                ..\common\$D\date.obj \
                ..\common\$D\datstrm.obj \
                ..\common\$D\db.obj \
index e9a635815cd38a385f7ab5e66b2ec10befee045f..739d1b6322f71fddd5c9ae95b1c437a542a69aa6 100644 (file)
@@ -1,6 +1,6 @@
 
 
-# This file was automatically generated by tmake at 14:25, 1999/07/23
+# This file was automatically generated by tmake at 00:42, 1999/07/27
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE WAT.T!
 
 #!/binb/wmake.exe
@@ -67,8 +67,10 @@ NONESSENTIALOBJS= colrdlgg.obj &
 
 COMMONOBJS = &
        y_tab.obj &
+       choiccmn.obj &
        cmndata.obj &
        config.obj &
+       ctrlcmn.obj &
        date.obj &
        datstrm.obj &
        db.obj &
@@ -531,12 +533,18 @@ xpmhand.obj:     $(MSWDIR)\xpmhand.cpp
 ########################################################
 # Common objects (always compiled)
 
+choiccmn.obj:     $(COMMDIR)\choiccmn.cpp
+  *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
+
 cmndata.obj:     $(COMMDIR)\cmndata.cpp
   *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
 
 config.obj:     $(COMMDIR)\config.cpp
   *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
 
+ctrlcmn.obj:     $(COMMDIR)\ctrlcmn.cpp
+  *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
+
 date.obj:     $(COMMDIR)\date.cpp
   *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
 
index 6c0c06db8e00a67410b1a8f2c99d0250674a89db..52bf8dcd0dea663992d6fede27a2ae32ce5f91e9 100644 (file)
@@ -122,7 +122,8 @@ bool wxNotebook::Create(wxWindow *parent,
                         const wxString& name)
 {
   // base init
-  CreateBase(parent, id, pos, size, style, name);
+  if ( !CreateBase(parent, id, pos, size, style, wxDefaultValidator, name) )
+      return FALSE;
 
   // colors and font
   m_backgroundColour = wxColour(GetSysColor(COLOR_BTNFACE));
index bbf331ac854eb3610c9c8fc8a1c477a3a32d4004..55d237160d9b111da88a0bac7ff424f892a11f98 100644 (file)
@@ -51,7 +51,7 @@ bool wxStaticLine::Create( wxWindow *parent,
                            long style,
                            const wxString &name)
 {
-    if ( !CreateBase(parent, id, pos, size, style, name) )
+    if ( !CreateBase(parent, id, pos, size, style, wxDefaultValidator, name) )
         return FALSE;
 
     parent->AddChild(this);
index 3ba5f18f0eab7d7c1d5f93fc21f9cf3b18ad3dce..e953ec4e7daf80a3dc9d8ed8cdf68d7a1232ae4f 100644 (file)
@@ -112,7 +112,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
                         const wxString& name)
 {
     // base initialization
-    if ( !CreateBase(parent, id, pos, size, style, name) )
+    if ( !CreateBase(parent, id, pos, size, style, validator, name) )
         return FALSE;
 
     SetValidator(validator);
index 8d185d64205bef6d592f33a9b3112e22c0daccc0..a4024565ad31b8d078e353702d6a2d80fc21c70f 100644 (file)
@@ -297,7 +297,8 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
 {
     wxCHECK_MSG( parent, FALSE, _T("can't create wxWindow without parent") );
 
-    CreateBase(parent, id, pos, size, style, name);
+    if ( !CreateBase(parent, id, pos, size, style, wxDefaultValidator, name) )
+        return FALSE;
 
     parent->AddChild(this);
 
@@ -856,7 +857,8 @@ WXDWORD wxWindow::MakeExtendedStyle(long style, bool eliminateBorders)
 // Determines whether native 3D effects or CTL3D should be used,
 // applying a default border style if required, and returning an extended
 // style to pass to CreateWindowEx.
-WXDWORD wxWindow::Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D)
+WXDWORD wxWindow::Determine3DEffects(WXDWORD defaultBorderStyle,
+                                     bool *want3D) const
 {
     // If matches certain criteria, then assume no 3D effects
     // unless specifically requested (dealt with in MakeExtendedStyle)