From 8d99be5f5381dad56492da02c2df1c3ec0750926 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 26 Jul 1999 23:02:32 +0000 Subject: [PATCH] 1. wxChoice and wxComboBox support client data under MSW 2. control creation streamlined under MSW git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3157 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- distrib/msw/tmake/filelist.txt | 2 + distrib/msw/tmake/makeall.bat | 14 +- include/wx/choice.h | 121 +++++++++++- include/wx/control.h | 64 ++++++- include/wx/gtk/control.h | 32 ++-- include/wx/gtk1/control.h | 32 ++-- include/wx/msw/choice.h | 84 ++++---- include/wx/msw/control.h | 26 ++- include/wx/msw/window.h | 5 +- include/wx/window.h | 50 +++-- src/common/wincmn.cpp | 47 ++++- src/gtk/control.cpp | 4 - src/gtk1/control.cpp | 4 - src/msw/button.cpp | 2 +- src/msw/choice.cpp | 340 +++++++++++++++------------------ src/msw/combobox.cpp | 4 +- src/msw/control.cpp | 46 +++++ src/msw/makefile.b32 | 10 +- src/msw/makefile.bcc | 8 +- src/msw/makefile.dos | 14 +- src/msw/makefile.g95 | 4 +- src/msw/makefile.sc | 4 +- src/msw/makefile.vc | 4 +- src/msw/makefile.wat | 10 +- src/msw/notebook.cpp | 3 +- src/msw/statline.cpp | 2 +- src/msw/textctrl.cpp | 2 +- src/msw/window.cpp | 6 +- 28 files changed, 611 insertions(+), 333 deletions(-) diff --git a/distrib/msw/tmake/filelist.txt b/distrib/msw/tmake/filelist.txt index 5dc7454bef..46b0bed554 100644 --- a/distrib/msw/tmake/filelist.txt +++ b/distrib/msw/tmake/filelist.txt @@ -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 diff --git a/distrib/msw/tmake/makeall.bat b/distrib/msw/tmake/makeall.bat index 6c82dab153..f96aed1eb2 100755 --- a/distrib/msw/tmake/makeall.bat +++ b/distrib/msw/tmake/makeall.bat @@ -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 diff --git a/include/wx/choice.h b/include/wx/choice.h index 1830d779aa..9940c9f69f 100644 --- a/include/wx/choice.h +++ b/include/wx/choice.h @@ -1,18 +1,127 @@ +///////////////////////////////////////////////////////////////////////////// +// 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 diff --git a/include/wx/control.h b/include/wx/control.h index 40bc3ab8fd..33d5486cb7 100644 --- a/include/wx/control.h +++ b/include/wx/control.h @@ -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 diff --git a/include/wx/gtk/control.h b/include/wx/gtk/control.h index d3a164d275..45d0ea230e 100644 --- a/include/wx/gtk/control.h +++ b/include/wx/gtk/control.h @@ -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__ diff --git a/include/wx/gtk1/control.h b/include/wx/gtk1/control.h index d3a164d275..45d0ea230e 100644 --- a/include/wx/gtk1/control.h +++ b/include/wx/gtk1/control.h @@ -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__ diff --git a/include/wx/msw/choice.h b/include/wx/msw/choice.h index 7cdfa9a577..ca2bb1666d 100644 --- a/include/wx/msw/choice.h +++ b/include/wx/msw/choice.h @@ -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_ diff --git a/include/wx/msw/control.h b/include/wx/msw/control.h index b4a2807543..0005193c7c 100644 --- a/include/wx/msw/control.h +++ b/include/wx/msw/control.h @@ -16,11 +16,8 @@ #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 diff --git a/include/wx/msw/window.h b/include/wx/msw/window.h index dbd49770ed..e198301331 100644 --- a/include/wx/msw/window.h +++ b/include/wx/msw/window.h @@ -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; }; diff --git a/include/wx/window.h b/include/wx/window.h index 7be5f5413b..d6ee431600 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -29,6 +29,10 @@ #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; diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index bf4921ff5a..13c3f639ab 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -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 // ---------------------------------------------------------------------------- diff --git a/src/gtk/control.cpp b/src/gtk/control.cpp index 90b16f3d70..e767eac88f 100644 --- a/src/gtk/control.cpp +++ b/src/gtk/control.cpp @@ -36,10 +36,6 @@ wxControl::wxControl( wxWindow *parent, { } -void wxControl::Command( wxCommandEvent &WXUNUSED(event) ) -{ -} - void wxControl::SetLabel( const wxString &label ) { m_label = _T(""); diff --git a/src/gtk1/control.cpp b/src/gtk1/control.cpp index 90b16f3d70..e767eac88f 100644 --- a/src/gtk1/control.cpp +++ b/src/gtk1/control.cpp @@ -36,10 +36,6 @@ wxControl::wxControl( wxWindow *parent, { } -void wxControl::Command( wxCommandEvent &WXUNUSED(event) ) -{ -} - void wxControl::SetLabel( const wxString &label ) { m_label = _T(""); diff --git a/src/msw/button.cpp b/src/msw/button.cpp index daa665f297..706aae70b8 100644 --- a/src/msw/button.cpp +++ b/src/msw/button.cpp @@ -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); diff --git a/src/msw/choice.cpp b/src/msw/choice.cpp index 9859f91a06..92cab89387 100644 --- a/src/msw/choice.cpp +++ b/src/msw/choice.cpp @@ -2,177 +2,153 @@ // 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; +} diff --git a/src/msw/combobox.cpp b/src/msw/combobox.cpp index 38de733962..cf49b661e8 100644 --- a/src/msw/combobox.cpp +++ b/src/msw/combobox.cpp @@ -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; diff --git a/src/msw/control.cpp b/src/msw/control.cpp index b8ccc63551..88ab79da90 100644 --- a/src/msw/control.cpp +++ b/src/msw/control.cpp @@ -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 // --------------------------------------------------------------------------- diff --git a/src/msw/makefile.b32 b/src/msw/makefile.b32 index de6c532ec1..fe536cb635 100644 --- a/src/msw/makefile.b32 +++ b/src/msw/makefile.b32 @@ -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) diff --git a/src/msw/makefile.bcc b/src/msw/makefile.bcc index 07a754e869..ff7e40f21c 100644 --- a/src/msw/makefile.bcc +++ b/src/msw/makefile.bcc @@ -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) diff --git a/src/msw/makefile.dos b/src/msw/makefile.dos index b1b40e57d4..e29d0f2835 100644 --- a/src/msw/makefile.dos +++ b/src/msw/makefile.dos @@ -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) diff --git a/src/msw/makefile.g95 b/src/msw/makefile.g95 index 298fdd64b5..b5a2bbec48 100644 --- a/src/msw/makefile.g95 +++ b/src/msw/makefile.g95 @@ -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) \ diff --git a/src/msw/makefile.sc b/src/msw/makefile.sc index 49e1ff8b0d..d43c1b2301 100644 --- a/src/msw/makefile.sc +++ b/src/msw/makefile.sc @@ -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 \ diff --git a/src/msw/makefile.vc b/src/msw/makefile.vc index 3ff4d9c34d..9857461392 100644 --- a/src/msw/makefile.vc +++ b/src/msw/makefile.vc @@ -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 \ diff --git a/src/msw/makefile.wat b/src/msw/makefile.wat index e9a635815c..739d1b6322 100644 --- a/src/msw/makefile.wat +++ b/src/msw/makefile.wat @@ -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) $< diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index 6c0c06db8e..52bf8dcd0d 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -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)); diff --git a/src/msw/statline.cpp b/src/msw/statline.cpp index bbf331ac85..55d237160d 100644 --- a/src/msw/statline.cpp +++ b/src/msw/statline.cpp @@ -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); diff --git a/src/msw/textctrl.cpp b/src/msw/textctrl.cpp index 3ba5f18f0e..e953ec4e7d 100644 --- a/src/msw/textctrl.cpp +++ b/src/msw/textctrl.cpp @@ -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); diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 8d185d6420..a4024565ad 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -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) -- 2.45.2