From 738f9e5a12b8bb3936cc10347be98390602d3660 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Mon, 11 Oct 1999 10:05:36 +0000 Subject: [PATCH] added SpinCtrl, updated a few headers, tried to set window size hints, no effect with KWM, git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3926 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- Makefile.in | 4 +- distrib/msw/tmake/filelist.txt | 1 + include/wx/gtk/accel.h | 3 +- include/wx/gtk/app.h | 1 + include/wx/gtk/bmpbuttn.h | 67 +++++------ include/wx/gtk/brush.h | 8 +- include/wx/gtk/button.h | 9 +- include/wx/gtk/checkbox.h | 6 +- include/wx/gtk/checklst.h | 5 +- include/wx/gtk/choice.h | 5 +- include/wx/gtk/clipbrd.h | 10 +- include/wx/gtk/combobox.h | 119 ++++++++++---------- include/wx/gtk/control.h | 5 +- include/wx/gtk/region.h | 15 ++- include/wx/gtk/spinbutt.h | 6 +- include/wx/gtk/spinctrl.h | 62 ++++++++++ include/wx/gtk1/accel.h | 3 +- include/wx/gtk1/app.h | 1 + include/wx/gtk1/bmpbuttn.h | 67 +++++------ include/wx/gtk1/brush.h | 8 +- include/wx/gtk1/button.h | 9 +- include/wx/gtk1/checkbox.h | 6 +- include/wx/gtk1/checklst.h | 5 +- include/wx/gtk1/choice.h | 5 +- include/wx/gtk1/clipbrd.h | 10 +- include/wx/gtk1/combobox.h | 119 ++++++++++---------- include/wx/gtk1/control.h | 5 +- include/wx/gtk1/region.h | 15 ++- include/wx/gtk1/spinbutt.h | 6 +- include/wx/gtk1/spinctrl.h | 62 ++++++++++ include/wx/spinctrl.h | 2 + include/wx/window.h | 5 + samples/controls/controls.cpp | 6 +- src/gtk/dialog.cpp | 42 ++----- src/gtk/frame.cpp | 13 +++ src/gtk/spinbutt.cpp | 8 +- src/gtk/spinctrl.cpp | 199 +++++++++++++++++++++++++++++++++ src/gtk1/dialog.cpp | 42 ++----- src/gtk1/frame.cpp | 13 +++ src/gtk1/spinbutt.cpp | 8 +- src/gtk1/spinctrl.cpp | 199 +++++++++++++++++++++++++++++++++ 41 files changed, 848 insertions(+), 336 deletions(-) create mode 100644 include/wx/gtk/spinctrl.h create mode 100644 include/wx/gtk1/spinctrl.h create mode 100644 src/gtk/spinctrl.cpp create mode 100644 src/gtk1/spinctrl.cpp diff --git a/Makefile.in b/Makefile.in index 3be6793df7..c21bd0fca0 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,5 +1,5 @@ # -# This file was automatically generated by tmake at 14:12, 1999/10/09 +# This file was automatically generated by tmake at 09:29, 1999/10/11 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE UNX.T! # @@ -892,6 +892,7 @@ GTK_GUIOBJS = \ settings.o \ slider.o \ spinbutt.o \ + spinctrl.o \ statbmp.o \ statbox.o \ statline.o \ @@ -951,6 +952,7 @@ GTK_GUIDEPS = \ settings.d \ slider.d \ spinbutt.d \ + spinctrl.d \ statbmp.d \ statbox.d \ statline.d \ diff --git a/distrib/msw/tmake/filelist.txt b/distrib/msw/tmake/filelist.txt index c9c1fa3350..04812c4679 100644 --- a/distrib/msw/tmake/filelist.txt +++ b/distrib/msw/tmake/filelist.txt @@ -326,6 +326,7 @@ scrolbar.cpp R settings.cpp R slider.cpp R spinbutt.cpp R +spinctrl.cpp R statbmp.cpp R statbox.cpp R statline.cpp R diff --git a/include/wx/gtk/accel.h b/include/wx/gtk/accel.h index 9bca3cf6f9..a60eb15e98 100644 --- a/include/wx/gtk/accel.h +++ b/include/wx/gtk/accel.h @@ -56,8 +56,7 @@ extern wxAcceleratorTable wxNullAcceleratorTable; class wxAcceleratorEntry: public wxObject { - public: - +public: wxAcceleratorEntry(int flags = 0, int keyCode = 0, int cmd = 0) { m_flags = flags; m_keyCode = keyCode; m_command = cmd; } diff --git a/include/wx/gtk/app.h b/include/wx/gtk/app.h index 6b528f8b16..58083583f8 100644 --- a/include/wx/gtk/app.h +++ b/include/wx/gtk/app.h @@ -80,6 +80,7 @@ private: /// Set to TRUE while we are in wxYield(). bool m_suppressIdleEvents; +private: DECLARE_DYNAMIC_CLASS(wxApp) DECLARE_EVENT_TABLE() }; diff --git a/include/wx/gtk/bmpbuttn.h b/include/wx/gtk/bmpbuttn.h index 7126dc0675..dfcf70ce73 100644 --- a/include/wx/gtk/bmpbuttn.h +++ b/include/wx/gtk/bmpbuttn.h @@ -43,56 +43,57 @@ extern const wxChar *wxButtonNameStr; class wxBitmapButton: public wxButton { - DECLARE_DYNAMIC_CLASS(wxBitmapButton) - public: - wxBitmapButton(); - inline wxBitmapButton( wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, + wxBitmapButton(); + inline wxBitmapButton( wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxBU_AUTODRAW, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxButtonNameStr ) - { - Create(parent, id, bitmap, pos, size, style, validator, name); - } - bool Create( wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, + { + Create(parent, id, bitmap, pos, size, style, validator, name); + } + bool Create( wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxBU_AUTODRAW, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxButtonNameStr); - virtual void SetDefault(); + virtual void SetDefault(); - void SetLabel( const wxString &label ); - wxString GetLabel() const; - virtual void SetLabel( const wxBitmap& bitmap ) { SetBitmapLabel(bitmap); } + void SetLabel( const wxString &label ); + wxString GetLabel() const; + virtual void SetLabel( const wxBitmap& bitmap ) { SetBitmapLabel(bitmap); } - wxBitmap& GetBitmapDisabled() const { return (wxBitmap&) m_disabled; } - wxBitmap& GetBitmapFocus() const { return (wxBitmap&) m_focus; } - wxBitmap& GetBitmapLabel() const { return (wxBitmap&) m_bitmap; } - wxBitmap& GetBitmapSelected() const { return (wxBitmap&) m_selected; } + wxBitmap& GetBitmapDisabled() const { return (wxBitmap&) m_disabled; } + wxBitmap& GetBitmapFocus() const { return (wxBitmap&) m_focus; } + wxBitmap& GetBitmapLabel() const { return (wxBitmap&) m_bitmap; } + wxBitmap& GetBitmapSelected() const { return (wxBitmap&) m_selected; } - void SetBitmapDisabled( const wxBitmap& bitmap ); - void SetBitmapFocus( const wxBitmap& bitmap ); - void SetBitmapLabel( const wxBitmap& bitmap ); - void SetBitmapSelected( const wxBitmap& bitmap ); + void SetBitmapDisabled( const wxBitmap& bitmap ); + void SetBitmapFocus( const wxBitmap& bitmap ); + void SetBitmapLabel( const wxBitmap& bitmap ); + void SetBitmapSelected( const wxBitmap& bitmap ); - virtual bool Enable(bool enable); + virtual bool Enable(bool enable); // implementation - void HasFocus(); - void NotFocus(); - void StartSelect(); - void EndSelect(); - void SetBitmap(); - void ApplyWidgetStyle(); + void HasFocus(); + void NotFocus(); + void StartSelect(); + void EndSelect(); + void SetBitmap(); + void ApplyWidgetStyle(); + + bool m_hasFocus; + bool m_isSelected; + wxBitmap m_bitmap; + wxBitmap m_disabled; + wxBitmap m_focus; + wxBitmap m_selected; - bool m_hasFocus; - bool m_isSelected; - wxBitmap m_bitmap; - wxBitmap m_disabled; - wxBitmap m_focus; - wxBitmap m_selected; +private: + DECLARE_DYNAMIC_CLASS(wxBitmapButton) }; #endif diff --git a/include/wx/gtk/brush.h b/include/wx/gtk/brush.h index c52eb45011..d42e564a81 100644 --- a/include/wx/gtk/brush.h +++ b/include/wx/gtk/brush.h @@ -33,10 +33,7 @@ class wxBrush; class wxBrush: public wxGDIObject { - DECLARE_DYNAMIC_CLASS(wxBrush) - - public: - +public: wxBrush(); wxBrush( const wxColour &colour, int style ); wxBrush( const wxBitmap &stippleBitmap ); @@ -58,7 +55,8 @@ class wxBrush: public wxGDIObject void Unshare(); - // no data :-) +private: + DECLARE_DYNAMIC_CLASS(wxBrush) }; #endif // __GTKBRUSHH__ diff --git a/include/wx/gtk/button.h b/include/wx/gtk/button.h index af4fdac9ee..051c16637c 100644 --- a/include/wx/gtk/button.h +++ b/include/wx/gtk/button.h @@ -7,7 +7,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// - #ifndef __GTKBUTTONH__ #define __GTKBUTTONH__ @@ -38,10 +37,7 @@ extern const wxChar *wxButtonNameStr; class wxButton: public wxControl { - DECLARE_DYNAMIC_CLASS(wxButton) - - public: - +public: wxButton(); inline wxButton(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos = wxDefaultPosition, @@ -66,6 +62,9 @@ class wxButton: public wxControl // implementation void ApplyWidgetStyle(); + +private: + DECLARE_DYNAMIC_CLASS(wxButton) }; #endif // __GTKBUTTONH__ diff --git a/include/wx/gtk/checkbox.h b/include/wx/gtk/checkbox.h index f26be094c8..1a0c0ca399 100644 --- a/include/wx/gtk/checkbox.h +++ b/include/wx/gtk/checkbox.h @@ -7,7 +7,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// - #ifndef __GTKCHECKBOXH__ #define __GTKCHECKBOXH__ @@ -41,8 +40,6 @@ extern const char *wxCheckBoxNameStr; class wxCheckBox: public wxControl { -DECLARE_DYNAMIC_CLASS(wxCheckBox) - public: wxCheckBox(); wxCheckBox( wxWindow *parent, wxWindowID id, const wxString& label, @@ -73,6 +70,9 @@ public: GtkWidget *m_widgetCheckbox; GtkWidget *m_widgetLabel; + +private: + DECLARE_DYNAMIC_CLASS(wxCheckBox) }; #endif diff --git a/include/wx/gtk/checklst.h b/include/wx/gtk/checklst.h index 8022f35658..3290184e06 100644 --- a/include/wx/gtk/checklst.h +++ b/include/wx/gtk/checklst.h @@ -36,8 +36,6 @@ class wxCheckListBox; class wxCheckListBox : public wxListBox { -DECLARE_DYNAMIC_CLASS(wxCheckListBox) - public: wxCheckListBox(); wxCheckListBox(wxWindow *parent, wxWindowID id, @@ -53,6 +51,9 @@ public: void Check( int index, bool check = TRUE ); int GetItemHeight() const; + +private: + DECLARE_DYNAMIC_CLASS(wxCheckListBox) }; #endif diff --git a/include/wx/gtk/choice.h b/include/wx/gtk/choice.h index e405f01c72..7b95f490da 100644 --- a/include/wx/gtk/choice.h +++ b/include/wx/gtk/choice.h @@ -38,8 +38,6 @@ extern const wxChar *wxChoiceNameStr; class wxChoice : public wxControl { - DECLARE_DYNAMIC_CLASS(wxChoice) - public: wxChoice(); wxChoice( wxWindow *parent, wxWindowID id, @@ -97,6 +95,9 @@ public: void EnableEvents(); void AppendCommon( const wxString &item ); void ApplyWidgetStyle(); + +private: + DECLARE_DYNAMIC_CLASS(wxChoice) }; diff --git a/include/wx/gtk/clipbrd.h b/include/wx/gtk/clipbrd.h index d940100715..ebd46448d6 100644 --- a/include/wx/gtk/clipbrd.h +++ b/include/wx/gtk/clipbrd.h @@ -44,8 +44,6 @@ extern wxClipboard* wxTheClipboard; class wxClipboard : public wxObject { - DECLARE_DYNAMIC_CLASS(wxClipboard) - public: wxClipboard(); ~wxClipboard(); @@ -91,6 +89,9 @@ public: GdkAtom m_targetRequested; bool m_usePrimary; wxDataObject *m_receivedData; + +private: + DECLARE_DYNAMIC_CLASS(wxClipboard) }; //----------------------------------------------------------------------------- @@ -99,12 +100,13 @@ public: class wxClipboardModule: public wxModule { - DECLARE_DYNAMIC_CLASS(wxClipboardModule) - public: wxClipboardModule() {} bool OnInit(); void OnExit(); + +private: + DECLARE_DYNAMIC_CLASS(wxClipboardModule) }; #endif diff --git a/include/wx/gtk/combobox.h b/include/wx/gtk/combobox.h index 4fda5e81b8..129321d3a4 100644 --- a/include/wx/gtk/combobox.h +++ b/include/wx/gtk/combobox.h @@ -42,12 +42,9 @@ extern const wxChar* wxEmptyString; class wxComboBox : public wxControl { - DECLARE_DYNAMIC_CLASS(wxComboBox) - public: - - inline wxComboBox() {} - inline wxComboBox(wxWindow *parent, wxWindowID id, + inline wxComboBox() {} + inline wxComboBox(wxWindow *parent, wxWindowID id, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, @@ -55,11 +52,11 @@ public: long style = 0, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxComboBoxNameStr) - { - Create(parent, id, value, pos, size, n, choices, style, validator, name); - } - ~wxComboBox(); - bool Create(wxWindow *parent, wxWindowID id, + { + Create(parent, id, value, pos, size, n, choices, style, validator, name); + } + ~wxComboBox(); + bool Create(wxWindow *parent, wxWindowID id, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, @@ -68,63 +65,65 @@ public: const wxValidator& validator = wxDefaultValidator, const wxString& name = wxComboBoxNameStr); - void Append( const wxString &item ); - void Append( const wxString &item, void* clientData ); - void Append( const wxString &item, wxClientData* clientData ); + void Append( const wxString &item ); + void Append( const wxString &item, void* clientData ); + void Append( const wxString &item, wxClientData* clientData ); - void SetClientData( int n, void* clientData ); - void* GetClientData( int n ); - void SetClientObject( int n, wxClientData* clientData ); - wxClientData* GetClientObject( int n ); + void SetClientData( int n, void* clientData ); + void* GetClientData( int n ); + void SetClientObject( int n, wxClientData* clientData ); + wxClientData* GetClientObject( int n ); - void SetClientObject( wxClientData *data ) { wxControl::SetClientObject( data ); } - wxClientData *GetClientObject() const { return wxControl::GetClientObject(); } - void SetClientData( void *data ) { wxControl::SetClientData( data ); } - void *GetClientData() const { return wxControl::GetClientData(); } + void SetClientObject( wxClientData *data ) { wxControl::SetClientObject( data ); } + wxClientData *GetClientObject() const { return wxControl::GetClientObject(); } + void SetClientData( void *data ) { wxControl::SetClientData( data ); } + void *GetClientData() const { return wxControl::GetClientData(); } - void Clear(); - void Delete( int n ); - - int FindString( const wxString &item ); - int GetSelection() const; - wxString GetString( int n ) const; - wxString GetStringSelection() const; - int Number() const; - void SetSelection( int n ); - void SetStringSelection( const wxString &string ); - - wxString GetValue() const; - void SetValue(const wxString& value); - - void Copy(); - void Cut(); - void Paste(); - void SetInsertionPoint( long pos ); - void SetInsertionPointEnd(); - long GetInsertionPoint() const; - long GetLastPosition() const; - void Replace( long from, long to, const wxString& value ); - void Remove( long from, long to ); - void SetSelection( long from, long to ); - void SetEditable( bool editable ); + void Clear(); + void Delete( int n ); - void OnSize( wxSizeEvent &event ); - void OnChar( wxKeyEvent &event ); + int FindString( const wxString &item ); + int GetSelection() const; + wxString GetString( int n ) const; + wxString GetStringSelection() const; + int Number() const; + void SetSelection( int n ); + void SetStringSelection( const wxString &string ); + + wxString GetValue() const; + void SetValue(const wxString& value); + + void Copy(); + void Cut(); + void Paste(); + void SetInsertionPoint( long pos ); + void SetInsertionPointEnd(); + long GetInsertionPoint() const; + long GetLastPosition() const; + void Replace( long from, long to, const wxString& value ); + void Remove( long from, long to ); + void SetSelection( long from, long to ); + void SetEditable( bool editable ); -// implementation + // implementation - bool m_alreadySent; - wxList m_clientDataList; - wxList m_clientObjectList; - - void DisableEvents(); - void EnableEvents(); - void AppendCommon( const wxString &item ); - GtkWidget* GetConnectWidget(); - bool IsOwnGtkWindow( GdkWindow *window ); - void ApplyWidgetStyle(); + void OnSize( wxSizeEvent &event ); + void OnChar( wxKeyEvent &event ); - DECLARE_EVENT_TABLE() + bool m_alreadySent; + wxList m_clientDataList; + wxList m_clientObjectList; + + void DisableEvents(); + void EnableEvents(); + void AppendCommon( const wxString &item ); + GtkWidget* GetConnectWidget(); + bool IsOwnGtkWindow( GdkWindow *window ); + void ApplyWidgetStyle(); + +private: + DECLARE_DYNAMIC_CLASS(wxComboBox) + DECLARE_EVENT_TABLE() }; #endif diff --git a/include/wx/gtk/control.h b/include/wx/gtk/control.h index f18f219d8c..3b19b4c98c 100644 --- a/include/wx/gtk/control.h +++ b/include/wx/gtk/control.h @@ -31,8 +31,6 @@ class wxControl; class wxControl : public wxWindow { - DECLARE_DYNAMIC_CLASS(wxControl) - public: wxControl(); wxControl( wxWindow *parent, @@ -50,6 +48,9 @@ public: protected: wxString m_label; char m_chAccel; // enabled to avoid breaking binary compatibility later on + +private: + DECLARE_DYNAMIC_CLASS(wxControl) }; #endif // __GTKCONTROLH__ diff --git a/include/wx/gtk/region.h b/include/wx/gtk/region.h index 2e23876d44..ac93125bd3 100644 --- a/include/wx/gtk/region.h +++ b/include/wx/gtk/region.h @@ -103,10 +103,7 @@ class wxRegion : public wxGDIObject class wxRegionIterator: public wxObject { - DECLARE_DYNAMIC_CLASS(wxRegionIterator); - - public: - +public: wxRegionIterator(); wxRegionIterator(const wxRegion& region); @@ -127,10 +124,12 @@ class wxRegionIterator: public wxObject long GetHeight() const { return GetH(); } wxRect GetRect() const { return wxRect(GetX(), GetY(), GetWidth(), GetHeight()); } - private: - - long m_current; - wxRegion m_region; +private: + long m_current; + wxRegion m_region; + +private: + DECLARE_DYNAMIC_CLASS(wxRegionIterator); }; diff --git a/include/wx/gtk/spinbutt.h b/include/wx/gtk/spinbutt.h index 440c26afe7..378b7f0f94 100644 --- a/include/wx/gtk/spinbutt.h +++ b/include/wx/gtk/spinbutt.h @@ -8,7 +8,7 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef __GTKSPINPUTTH__ +#ifndef __GTKSPINBUTTH__ #define __GTKSPINBUTTH__ #ifdef __GNUG__ @@ -21,8 +21,6 @@ class wxSpinButton : public wxSpinButtonBase { - DECLARE_DYNAMIC_CLASS(wxSpinButton) - public: wxSpinButton() { } wxSpinButton( wxWindow *parent, wxWindowID id = -1, @@ -31,7 +29,6 @@ public: { Create(parent, id, pos, size, style, name); } - ~wxSpinButton(); bool Create( wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, @@ -54,6 +51,7 @@ public: private: DECLARE_EVENT_TABLE() + DECLARE_DYNAMIC_CLASS(wxSpinButton) }; #endif diff --git a/include/wx/gtk/spinctrl.h b/include/wx/gtk/spinctrl.h new file mode 100644 index 0000000000..b3a0d0cdd6 --- /dev/null +++ b/include/wx/gtk/spinctrl.h @@ -0,0 +1,62 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: spinctrl.h +// Purpose: wxSpinCtrl class +// Author: Robert Roebling +// Modified by: +// RCS-ID: $Id$ +// Copyright: (c) Robert Roebling +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef __GTKSPINCTRLH__ +#define __GTKSPINCTRLH__ + +#ifdef __GNUG__ +#pragma interface +#endif + +//----------------------------------------------------------------------------- +// wxSpinButton +//----------------------------------------------------------------------------- + +class wxSpinCtrl : public wxControl +{ +public: + wxSpinCtrl() {} + wxSpinCtrl(wxWindow *parent, + wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxSP_ARROW_KEYS, + int min = 0, int max = 100, int initial = 0, + const wxString& name = _T("wxSpinCtrl")) + { + Create(parent, id, pos, size, style, min, max, initial, name); + } + + bool Create(wxWindow *parent, + wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxSP_ARROW_KEYS, + int min = 0, int max = 100, int initial = 0, + const wxString& name = _T("wxSpinCtrl")); + + virtual int GetValue() const; + virtual void SetValue( int value ); + virtual void SetRange( int minVal, int maxVal ); + virtual int GetMin() const; + virtual int GetMax() const; + + bool IsOwnGtkWindow( GdkWindow *window ); + void ApplyWidgetStyle(); + + GtkAdjustment *m_adjust; + float m_oldPos; + +private: + DECLARE_DYNAMIC_CLASS(wxSpinCtrl) +}; + +#endif + // __GTKSPINCTRLH__ diff --git a/include/wx/gtk1/accel.h b/include/wx/gtk1/accel.h index 9bca3cf6f9..a60eb15e98 100644 --- a/include/wx/gtk1/accel.h +++ b/include/wx/gtk1/accel.h @@ -56,8 +56,7 @@ extern wxAcceleratorTable wxNullAcceleratorTable; class wxAcceleratorEntry: public wxObject { - public: - +public: wxAcceleratorEntry(int flags = 0, int keyCode = 0, int cmd = 0) { m_flags = flags; m_keyCode = keyCode; m_command = cmd; } diff --git a/include/wx/gtk1/app.h b/include/wx/gtk1/app.h index 6b528f8b16..58083583f8 100644 --- a/include/wx/gtk1/app.h +++ b/include/wx/gtk1/app.h @@ -80,6 +80,7 @@ private: /// Set to TRUE while we are in wxYield(). bool m_suppressIdleEvents; +private: DECLARE_DYNAMIC_CLASS(wxApp) DECLARE_EVENT_TABLE() }; diff --git a/include/wx/gtk1/bmpbuttn.h b/include/wx/gtk1/bmpbuttn.h index 7126dc0675..dfcf70ce73 100644 --- a/include/wx/gtk1/bmpbuttn.h +++ b/include/wx/gtk1/bmpbuttn.h @@ -43,56 +43,57 @@ extern const wxChar *wxButtonNameStr; class wxBitmapButton: public wxButton { - DECLARE_DYNAMIC_CLASS(wxBitmapButton) - public: - wxBitmapButton(); - inline wxBitmapButton( wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, + wxBitmapButton(); + inline wxBitmapButton( wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxBU_AUTODRAW, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxButtonNameStr ) - { - Create(parent, id, bitmap, pos, size, style, validator, name); - } - bool Create( wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, + { + Create(parent, id, bitmap, pos, size, style, validator, name); + } + bool Create( wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxBU_AUTODRAW, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxButtonNameStr); - virtual void SetDefault(); + virtual void SetDefault(); - void SetLabel( const wxString &label ); - wxString GetLabel() const; - virtual void SetLabel( const wxBitmap& bitmap ) { SetBitmapLabel(bitmap); } + void SetLabel( const wxString &label ); + wxString GetLabel() const; + virtual void SetLabel( const wxBitmap& bitmap ) { SetBitmapLabel(bitmap); } - wxBitmap& GetBitmapDisabled() const { return (wxBitmap&) m_disabled; } - wxBitmap& GetBitmapFocus() const { return (wxBitmap&) m_focus; } - wxBitmap& GetBitmapLabel() const { return (wxBitmap&) m_bitmap; } - wxBitmap& GetBitmapSelected() const { return (wxBitmap&) m_selected; } + wxBitmap& GetBitmapDisabled() const { return (wxBitmap&) m_disabled; } + wxBitmap& GetBitmapFocus() const { return (wxBitmap&) m_focus; } + wxBitmap& GetBitmapLabel() const { return (wxBitmap&) m_bitmap; } + wxBitmap& GetBitmapSelected() const { return (wxBitmap&) m_selected; } - void SetBitmapDisabled( const wxBitmap& bitmap ); - void SetBitmapFocus( const wxBitmap& bitmap ); - void SetBitmapLabel( const wxBitmap& bitmap ); - void SetBitmapSelected( const wxBitmap& bitmap ); + void SetBitmapDisabled( const wxBitmap& bitmap ); + void SetBitmapFocus( const wxBitmap& bitmap ); + void SetBitmapLabel( const wxBitmap& bitmap ); + void SetBitmapSelected( const wxBitmap& bitmap ); - virtual bool Enable(bool enable); + virtual bool Enable(bool enable); // implementation - void HasFocus(); - void NotFocus(); - void StartSelect(); - void EndSelect(); - void SetBitmap(); - void ApplyWidgetStyle(); + void HasFocus(); + void NotFocus(); + void StartSelect(); + void EndSelect(); + void SetBitmap(); + void ApplyWidgetStyle(); + + bool m_hasFocus; + bool m_isSelected; + wxBitmap m_bitmap; + wxBitmap m_disabled; + wxBitmap m_focus; + wxBitmap m_selected; - bool m_hasFocus; - bool m_isSelected; - wxBitmap m_bitmap; - wxBitmap m_disabled; - wxBitmap m_focus; - wxBitmap m_selected; +private: + DECLARE_DYNAMIC_CLASS(wxBitmapButton) }; #endif diff --git a/include/wx/gtk1/brush.h b/include/wx/gtk1/brush.h index c52eb45011..d42e564a81 100644 --- a/include/wx/gtk1/brush.h +++ b/include/wx/gtk1/brush.h @@ -33,10 +33,7 @@ class wxBrush; class wxBrush: public wxGDIObject { - DECLARE_DYNAMIC_CLASS(wxBrush) - - public: - +public: wxBrush(); wxBrush( const wxColour &colour, int style ); wxBrush( const wxBitmap &stippleBitmap ); @@ -58,7 +55,8 @@ class wxBrush: public wxGDIObject void Unshare(); - // no data :-) +private: + DECLARE_DYNAMIC_CLASS(wxBrush) }; #endif // __GTKBRUSHH__ diff --git a/include/wx/gtk1/button.h b/include/wx/gtk1/button.h index af4fdac9ee..051c16637c 100644 --- a/include/wx/gtk1/button.h +++ b/include/wx/gtk1/button.h @@ -7,7 +7,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// - #ifndef __GTKBUTTONH__ #define __GTKBUTTONH__ @@ -38,10 +37,7 @@ extern const wxChar *wxButtonNameStr; class wxButton: public wxControl { - DECLARE_DYNAMIC_CLASS(wxButton) - - public: - +public: wxButton(); inline wxButton(wxWindow *parent, wxWindowID id, const wxString& label, const wxPoint& pos = wxDefaultPosition, @@ -66,6 +62,9 @@ class wxButton: public wxControl // implementation void ApplyWidgetStyle(); + +private: + DECLARE_DYNAMIC_CLASS(wxButton) }; #endif // __GTKBUTTONH__ diff --git a/include/wx/gtk1/checkbox.h b/include/wx/gtk1/checkbox.h index f26be094c8..1a0c0ca399 100644 --- a/include/wx/gtk1/checkbox.h +++ b/include/wx/gtk1/checkbox.h @@ -7,7 +7,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// - #ifndef __GTKCHECKBOXH__ #define __GTKCHECKBOXH__ @@ -41,8 +40,6 @@ extern const char *wxCheckBoxNameStr; class wxCheckBox: public wxControl { -DECLARE_DYNAMIC_CLASS(wxCheckBox) - public: wxCheckBox(); wxCheckBox( wxWindow *parent, wxWindowID id, const wxString& label, @@ -73,6 +70,9 @@ public: GtkWidget *m_widgetCheckbox; GtkWidget *m_widgetLabel; + +private: + DECLARE_DYNAMIC_CLASS(wxCheckBox) }; #endif diff --git a/include/wx/gtk1/checklst.h b/include/wx/gtk1/checklst.h index 8022f35658..3290184e06 100644 --- a/include/wx/gtk1/checklst.h +++ b/include/wx/gtk1/checklst.h @@ -36,8 +36,6 @@ class wxCheckListBox; class wxCheckListBox : public wxListBox { -DECLARE_DYNAMIC_CLASS(wxCheckListBox) - public: wxCheckListBox(); wxCheckListBox(wxWindow *parent, wxWindowID id, @@ -53,6 +51,9 @@ public: void Check( int index, bool check = TRUE ); int GetItemHeight() const; + +private: + DECLARE_DYNAMIC_CLASS(wxCheckListBox) }; #endif diff --git a/include/wx/gtk1/choice.h b/include/wx/gtk1/choice.h index e405f01c72..7b95f490da 100644 --- a/include/wx/gtk1/choice.h +++ b/include/wx/gtk1/choice.h @@ -38,8 +38,6 @@ extern const wxChar *wxChoiceNameStr; class wxChoice : public wxControl { - DECLARE_DYNAMIC_CLASS(wxChoice) - public: wxChoice(); wxChoice( wxWindow *parent, wxWindowID id, @@ -97,6 +95,9 @@ public: void EnableEvents(); void AppendCommon( const wxString &item ); void ApplyWidgetStyle(); + +private: + DECLARE_DYNAMIC_CLASS(wxChoice) }; diff --git a/include/wx/gtk1/clipbrd.h b/include/wx/gtk1/clipbrd.h index d940100715..ebd46448d6 100644 --- a/include/wx/gtk1/clipbrd.h +++ b/include/wx/gtk1/clipbrd.h @@ -44,8 +44,6 @@ extern wxClipboard* wxTheClipboard; class wxClipboard : public wxObject { - DECLARE_DYNAMIC_CLASS(wxClipboard) - public: wxClipboard(); ~wxClipboard(); @@ -91,6 +89,9 @@ public: GdkAtom m_targetRequested; bool m_usePrimary; wxDataObject *m_receivedData; + +private: + DECLARE_DYNAMIC_CLASS(wxClipboard) }; //----------------------------------------------------------------------------- @@ -99,12 +100,13 @@ public: class wxClipboardModule: public wxModule { - DECLARE_DYNAMIC_CLASS(wxClipboardModule) - public: wxClipboardModule() {} bool OnInit(); void OnExit(); + +private: + DECLARE_DYNAMIC_CLASS(wxClipboardModule) }; #endif diff --git a/include/wx/gtk1/combobox.h b/include/wx/gtk1/combobox.h index 4fda5e81b8..129321d3a4 100644 --- a/include/wx/gtk1/combobox.h +++ b/include/wx/gtk1/combobox.h @@ -42,12 +42,9 @@ extern const wxChar* wxEmptyString; class wxComboBox : public wxControl { - DECLARE_DYNAMIC_CLASS(wxComboBox) - public: - - inline wxComboBox() {} - inline wxComboBox(wxWindow *parent, wxWindowID id, + inline wxComboBox() {} + inline wxComboBox(wxWindow *parent, wxWindowID id, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, @@ -55,11 +52,11 @@ public: long style = 0, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxComboBoxNameStr) - { - Create(parent, id, value, pos, size, n, choices, style, validator, name); - } - ~wxComboBox(); - bool Create(wxWindow *parent, wxWindowID id, + { + Create(parent, id, value, pos, size, n, choices, style, validator, name); + } + ~wxComboBox(); + bool Create(wxWindow *parent, wxWindowID id, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, @@ -68,63 +65,65 @@ public: const wxValidator& validator = wxDefaultValidator, const wxString& name = wxComboBoxNameStr); - void Append( const wxString &item ); - void Append( const wxString &item, void* clientData ); - void Append( const wxString &item, wxClientData* clientData ); + void Append( const wxString &item ); + void Append( const wxString &item, void* clientData ); + void Append( const wxString &item, wxClientData* clientData ); - void SetClientData( int n, void* clientData ); - void* GetClientData( int n ); - void SetClientObject( int n, wxClientData* clientData ); - wxClientData* GetClientObject( int n ); + void SetClientData( int n, void* clientData ); + void* GetClientData( int n ); + void SetClientObject( int n, wxClientData* clientData ); + wxClientData* GetClientObject( int n ); - void SetClientObject( wxClientData *data ) { wxControl::SetClientObject( data ); } - wxClientData *GetClientObject() const { return wxControl::GetClientObject(); } - void SetClientData( void *data ) { wxControl::SetClientData( data ); } - void *GetClientData() const { return wxControl::GetClientData(); } + void SetClientObject( wxClientData *data ) { wxControl::SetClientObject( data ); } + wxClientData *GetClientObject() const { return wxControl::GetClientObject(); } + void SetClientData( void *data ) { wxControl::SetClientData( data ); } + void *GetClientData() const { return wxControl::GetClientData(); } - void Clear(); - void Delete( int n ); - - int FindString( const wxString &item ); - int GetSelection() const; - wxString GetString( int n ) const; - wxString GetStringSelection() const; - int Number() const; - void SetSelection( int n ); - void SetStringSelection( const wxString &string ); - - wxString GetValue() const; - void SetValue(const wxString& value); - - void Copy(); - void Cut(); - void Paste(); - void SetInsertionPoint( long pos ); - void SetInsertionPointEnd(); - long GetInsertionPoint() const; - long GetLastPosition() const; - void Replace( long from, long to, const wxString& value ); - void Remove( long from, long to ); - void SetSelection( long from, long to ); - void SetEditable( bool editable ); + void Clear(); + void Delete( int n ); - void OnSize( wxSizeEvent &event ); - void OnChar( wxKeyEvent &event ); + int FindString( const wxString &item ); + int GetSelection() const; + wxString GetString( int n ) const; + wxString GetStringSelection() const; + int Number() const; + void SetSelection( int n ); + void SetStringSelection( const wxString &string ); + + wxString GetValue() const; + void SetValue(const wxString& value); + + void Copy(); + void Cut(); + void Paste(); + void SetInsertionPoint( long pos ); + void SetInsertionPointEnd(); + long GetInsertionPoint() const; + long GetLastPosition() const; + void Replace( long from, long to, const wxString& value ); + void Remove( long from, long to ); + void SetSelection( long from, long to ); + void SetEditable( bool editable ); -// implementation + // implementation - bool m_alreadySent; - wxList m_clientDataList; - wxList m_clientObjectList; - - void DisableEvents(); - void EnableEvents(); - void AppendCommon( const wxString &item ); - GtkWidget* GetConnectWidget(); - bool IsOwnGtkWindow( GdkWindow *window ); - void ApplyWidgetStyle(); + void OnSize( wxSizeEvent &event ); + void OnChar( wxKeyEvent &event ); - DECLARE_EVENT_TABLE() + bool m_alreadySent; + wxList m_clientDataList; + wxList m_clientObjectList; + + void DisableEvents(); + void EnableEvents(); + void AppendCommon( const wxString &item ); + GtkWidget* GetConnectWidget(); + bool IsOwnGtkWindow( GdkWindow *window ); + void ApplyWidgetStyle(); + +private: + DECLARE_DYNAMIC_CLASS(wxComboBox) + DECLARE_EVENT_TABLE() }; #endif diff --git a/include/wx/gtk1/control.h b/include/wx/gtk1/control.h index f18f219d8c..3b19b4c98c 100644 --- a/include/wx/gtk1/control.h +++ b/include/wx/gtk1/control.h @@ -31,8 +31,6 @@ class wxControl; class wxControl : public wxWindow { - DECLARE_DYNAMIC_CLASS(wxControl) - public: wxControl(); wxControl( wxWindow *parent, @@ -50,6 +48,9 @@ public: protected: wxString m_label; char m_chAccel; // enabled to avoid breaking binary compatibility later on + +private: + DECLARE_DYNAMIC_CLASS(wxControl) }; #endif // __GTKCONTROLH__ diff --git a/include/wx/gtk1/region.h b/include/wx/gtk1/region.h index 2e23876d44..ac93125bd3 100644 --- a/include/wx/gtk1/region.h +++ b/include/wx/gtk1/region.h @@ -103,10 +103,7 @@ class wxRegion : public wxGDIObject class wxRegionIterator: public wxObject { - DECLARE_DYNAMIC_CLASS(wxRegionIterator); - - public: - +public: wxRegionIterator(); wxRegionIterator(const wxRegion& region); @@ -127,10 +124,12 @@ class wxRegionIterator: public wxObject long GetHeight() const { return GetH(); } wxRect GetRect() const { return wxRect(GetX(), GetY(), GetWidth(), GetHeight()); } - private: - - long m_current; - wxRegion m_region; +private: + long m_current; + wxRegion m_region; + +private: + DECLARE_DYNAMIC_CLASS(wxRegionIterator); }; diff --git a/include/wx/gtk1/spinbutt.h b/include/wx/gtk1/spinbutt.h index 440c26afe7..378b7f0f94 100644 --- a/include/wx/gtk1/spinbutt.h +++ b/include/wx/gtk1/spinbutt.h @@ -8,7 +8,7 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef __GTKSPINPUTTH__ +#ifndef __GTKSPINBUTTH__ #define __GTKSPINBUTTH__ #ifdef __GNUG__ @@ -21,8 +21,6 @@ class wxSpinButton : public wxSpinButtonBase { - DECLARE_DYNAMIC_CLASS(wxSpinButton) - public: wxSpinButton() { } wxSpinButton( wxWindow *parent, wxWindowID id = -1, @@ -31,7 +29,6 @@ public: { Create(parent, id, pos, size, style, name); } - ~wxSpinButton(); bool Create( wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, @@ -54,6 +51,7 @@ public: private: DECLARE_EVENT_TABLE() + DECLARE_DYNAMIC_CLASS(wxSpinButton) }; #endif diff --git a/include/wx/gtk1/spinctrl.h b/include/wx/gtk1/spinctrl.h new file mode 100644 index 0000000000..b3a0d0cdd6 --- /dev/null +++ b/include/wx/gtk1/spinctrl.h @@ -0,0 +1,62 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: spinctrl.h +// Purpose: wxSpinCtrl class +// Author: Robert Roebling +// Modified by: +// RCS-ID: $Id$ +// Copyright: (c) Robert Roebling +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef __GTKSPINCTRLH__ +#define __GTKSPINCTRLH__ + +#ifdef __GNUG__ +#pragma interface +#endif + +//----------------------------------------------------------------------------- +// wxSpinButton +//----------------------------------------------------------------------------- + +class wxSpinCtrl : public wxControl +{ +public: + wxSpinCtrl() {} + wxSpinCtrl(wxWindow *parent, + wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxSP_ARROW_KEYS, + int min = 0, int max = 100, int initial = 0, + const wxString& name = _T("wxSpinCtrl")) + { + Create(parent, id, pos, size, style, min, max, initial, name); + } + + bool Create(wxWindow *parent, + wxWindowID id = -1, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxSP_ARROW_KEYS, + int min = 0, int max = 100, int initial = 0, + const wxString& name = _T("wxSpinCtrl")); + + virtual int GetValue() const; + virtual void SetValue( int value ); + virtual void SetRange( int minVal, int maxVal ); + virtual int GetMin() const; + virtual int GetMax() const; + + bool IsOwnGtkWindow( GdkWindow *window ); + void ApplyWidgetStyle(); + + GtkAdjustment *m_adjust; + float m_oldPos; + +private: + DECLARE_DYNAMIC_CLASS(wxSpinCtrl) +}; + +#endif + // __GTKSPINCTRLH__ diff --git a/include/wx/spinctrl.h b/include/wx/spinctrl.h index 59deb9ab80..84e20dc840 100644 --- a/include/wx/spinctrl.h +++ b/include/wx/spinctrl.h @@ -52,6 +52,8 @@ protected: #if defined(__WXMSW__) && defined(__WIN32__) #include "wx/msw/spinctrl.h" +#elif defined(__WXGTK__) + #include "wx/gtk/spinctrl.h" #else // Win16 || !Win #include "wx/generic/spinctrl.h" #endif // platform diff --git a/include/wx/window.h b/include/wx/window.h index caf8db3444..a265f57e52 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -277,6 +277,11 @@ public: int maxW = -1, int maxH = -1, int incW = -1, int incH = -1 ); + int GetMinWidth() const { return m_minWidth; } + int GetMinHeight() const { return m_minHeight; } + int GetMaxWidth() const { return m_maxWidth; } + int GetMaxHeight() const { return m_maxHeight; } + // window state // ------------ diff --git a/samples/controls/controls.cpp b/samples/controls/controls.cpp index e14e8215e1..91ee748916 100644 --- a/samples/controls/controls.cpp +++ b/samples/controls/controls.cpp @@ -484,16 +484,16 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) s << initialSpinValue; m_spintext = new wxTextCtrl( panel, -1, s, wxPoint(20,160), wxSize(80,-1) ); #if wxUSE_SPINBUTTON - m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,159), wxSize(80, -1) ); + m_spinbutton = new wxSpinButton( panel, ID_SPIN, wxPoint(103,160), wxSize(80, -1) ); m_spinbutton->SetRange(-10,30); m_spinbutton->SetValue(initialSpinValue); m_btnProgress = new wxButton( panel, ID_BTNPROGRESS, "Show progress dialog", - wxPoint(408, 159) ); + wxPoint(300, 160) ); #endif // wxUSE_SPINBUTTON #if wxUSE_SPINCTRL - m_spinctrl = new wxSpinCtrl( panel, -1, wxPoint(200, 159), wxSize(80, 20) ); + m_spinctrl = new wxSpinCtrl( panel, -1, wxPoint(200, 160), wxSize(80, -1) ); m_spinctrl->SetRange(10,30); m_spinctrl->SetValue(15); #endif // wxUSE_SPINCTRL diff --git a/src/gtk/dialog.cpp b/src/gtk/dialog.cpp index 138fb5e769..75852bf968 100644 --- a/src/gtk/dialog.cpp +++ b/src/gtk/dialog.cpp @@ -38,33 +38,6 @@ extern bool g_isIdle; extern wxList wxPendingDelete; -/* -//----------------------------------------------------------------------------- -// instruct X to set the WM hint for positioning -//----------------------------------------------------------------------------- - -extern "C" { - -static void gdk_window_set_position_hint( GdkWindow *window, gint x, gint y ) -{ - GdkWindowPrivate *priv; - XSizeHints size_hints; - - g_return_if_fail (window != NULL); - - priv = (GdkWindowPrivate*) window; - if (priv->destroyed) return; - - size_hints.flags = PPosition; - size_hints.x = x; - size_hints.y = y; - - XSetWMNormalHints (priv->xdisplay, priv->xwindow, &size_hints); -} - -} -*/ - //----------------------------------------------------------------------------- // "delete_event" //----------------------------------------------------------------------------- @@ -150,9 +123,18 @@ gtk_dialog_realized_callback( GtkWidget *widget, wxDialog *win ) position in "realize" and "map" */ gtk_widget_set_uposition( widget, win->m_x, win->m_y ); -/* - gdk_window_set_position_hint( widget->window, win->m_x, win->m_y ); -*/ + /* set size hints */ + gint flag = GDK_HINT_POS; + if ((win->GetMinWidth() != -1) || (win->GetMinHeight() != -1)) flag |= GDK_HINT_MIN_SIZE; + if ((win->GetMaxWidth() != -1) || (win->GetMaxHeight() != -1)) flag |= GDK_HINT_MAX_SIZE; + if (flag) + { + gdk_window_set_hints( win->m_widget->window, + win->m_x, win->m_y, + win->GetMinWidth(), win->GetMinHeight(), + win->GetMaxWidth(), win->GetMaxHeight(), + flag ); + } /* reset the icon */ if (win->m_icon != wxNullIcon) diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index c0d27bd464..780a098659 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -233,6 +233,19 @@ gtk_frame_realized_callback( GtkWidget *WXUNUSED(widget), wxFrame *win ) else gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1); + /* set size hints */ + gint flag = GDK_HINT_POS; + if ((win->GetMinWidth() != -1) || (win->GetMinHeight() != -1)) flag |= GDK_HINT_MIN_SIZE; + if ((win->GetMaxWidth() != -1) || (win->GetMaxHeight() != -1)) flag |= GDK_HINT_MAX_SIZE; + if (flag) + { + gdk_window_set_hints( win->m_widget->window, + win->m_x, win->m_y, + win->GetMinWidth(), win->GetMinHeight(), + win->GetMaxWidth(), win->GetMaxHeight(), + flag ); + } + /* reset the icon */ if (win->m_icon != wxNullIcon) { diff --git a/src/gtk/spinbutt.cpp b/src/gtk/spinbutt.cpp index 1901da14bf..3d75387d4d 100644 --- a/src/gtk/spinbutt.cpp +++ b/src/gtk/spinbutt.cpp @@ -35,7 +35,7 @@ extern bool g_isIdle; extern bool g_blockEventsOnDrag; -static const float sensitivity = 0.2; +static const float sensitivity = 0.02; //----------------------------------------------------------------------------- // "value_changed" @@ -101,7 +101,7 @@ bool wxSpinButton::Create(wxWindow *parent, wxSize new_size = size; new_size.x = 15; if (new_size.y == -1) - new_size.y = 30; + new_size.y = 26; if (!PreCreation( parent, pos, new_size ) || !CreateBase( parent, id, pos, new_size, style, wxDefaultValidator, name )) @@ -134,10 +134,6 @@ bool wxSpinButton::Create(wxWindow *parent, return TRUE; } -wxSpinButton::~wxSpinButton() -{ -} - int wxSpinButton::GetMin() const { wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") ); diff --git a/src/gtk/spinctrl.cpp b/src/gtk/spinctrl.cpp new file mode 100644 index 0000000000..bf19e51002 --- /dev/null +++ b/src/gtk/spinctrl.cpp @@ -0,0 +1,199 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: spinbutt.cpp +// Purpose: wxSpinCtrl +// Author: Robert +// Modified by: +// RCS-ID: $Id$ +// Copyright: (c) Robert Roebling +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifdef __GNUG__ +#pragma implementation "spinctrl.h" +#endif + +#include "wx/spinctrl.h" + +#ifdef wxUSE_SPINBTN + +#include "wx/utils.h" +#include "wx/spinbutt.h" +#include + +#include "gdk/gdk.h" +#include "gtk/gtk.h" + +//----------------------------------------------------------------------------- +// idle system +//----------------------------------------------------------------------------- + +extern void wxapp_install_idle_handler(); +extern bool g_isIdle; + +//----------------------------------------------------------------------------- +// data +//----------------------------------------------------------------------------- + +extern bool g_blockEventsOnDrag; + +static const float sensitivity = 0.02; + +//----------------------------------------------------------------------------- +// "value_changed" +//----------------------------------------------------------------------------- + +static void gtk_spinctrl_callback( GtkWidget *WXUNUSED(widget), wxSpinCtrl *win ) +{ + if (g_isIdle) wxapp_install_idle_handler(); + + if (!win->m_hasVMT) return; + if (g_blockEventsOnDrag) return; + + float diff = win->m_adjust->value - win->m_oldPos; + if (fabs(diff) < sensitivity) return; + win->m_oldPos = win->m_adjust->value; + + wxEventType command = wxEVT_NULL; + + float line_step = win->m_adjust->step_increment; + + if (fabs(diff-line_step) < sensitivity) command = wxEVT_SCROLL_LINEDOWN; + else if (fabs(diff+line_step) < sensitivity) command = wxEVT_SCROLL_LINEUP; + else command = wxEVT_SCROLL_THUMBTRACK; + + int value = (int)ceil(win->m_adjust->value); + + wxSpinEvent event( command, win->GetId()); + event.SetPosition( value ); + event.SetEventObject( win ); + win->GetEventHandler()->ProcessEvent( event ); + + /* always send a thumbtrack event */ + if (command != wxEVT_SCROLL_THUMBTRACK) + { + command = wxEVT_SCROLL_THUMBTRACK; + wxSpinEvent event2( command, win->GetId()); + event2.SetPosition( value ); + event2.SetEventObject( win ); + win->GetEventHandler()->ProcessEvent( event2 ); + } +} + +//----------------------------------------------------------------------------- +// wxSpinCtrl +//----------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl,wxControl) + +bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id, + const wxPoint& pos, const wxSize& size, + long style, + int min, int max, int initial, + const wxString& name) +{ + m_needParent = TRUE; + + wxSize new_size = size; + if (new_size.y == -1) + new_size.y = 26; + + if (!PreCreation( parent, pos, new_size ) || + !CreateBase( parent, id, pos, new_size, style, wxDefaultValidator, name )) + { + wxFAIL_MSG( wxT("wxSpinCtrl creation failed") ); + return FALSE; + } + + m_oldPos = initial; + + m_adjust = (GtkAdjustment*) gtk_adjustment_new( initial, min, max, 1.0, 5.0, 0.0); + + m_widget = gtk_spin_button_new( m_adjust, 1, 0 ); + + gtk_spin_button_set_wrap( GTK_SPIN_BUTTON(m_widget), (m_windowStyle & wxSP_WRAP) ); + + gtk_signal_connect( GTK_OBJECT (m_adjust), + "value_changed", + (GtkSignalFunc) gtk_spinctrl_callback, + (gpointer) this ); + + m_parent->DoAddChild( this ); + + PostCreation(); + + SetBackgroundColour( parent->GetBackgroundColour() ); + + Show( TRUE ); + + return TRUE; +} + +int wxSpinCtrl::GetMin() const +{ + wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") ); + + return (int)ceil(m_adjust->lower); +} + +int wxSpinCtrl::GetMax() const +{ + wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") ); + + return (int)ceil(m_adjust->upper); +} + +int wxSpinCtrl::GetValue() const +{ + wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") ); + + return (int)ceil(m_adjust->value); +} + +void wxSpinCtrl::SetValue( int value ) +{ + wxCHECK_RET( (m_widget != NULL), wxT("invalid spin button") ); + + float fpos = (float)value; + m_oldPos = fpos; + if (fabs(fpos-m_adjust->value) < sensitivity) return; + + m_adjust->value = fpos; + + gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "value_changed" ); +} + +void wxSpinCtrl::SetRange(int minVal, int maxVal) +{ + wxCHECK_RET( (m_widget != NULL), wxT("invalid spin button") ); + + float fmin = (float)minVal; + float fmax = (float)maxVal; + + if ((fabs(fmin-m_adjust->lower) < sensitivity) && + (fabs(fmax-m_adjust->upper) < sensitivity)) + { + return; + } + + m_adjust->lower = fmin; + m_adjust->upper = fmax; + + gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" ); + + // these two calls are required due to some bug in GTK + Refresh(); + SetFocus(); +} + +bool wxSpinCtrl::IsOwnGtkWindow( GdkWindow *window ) +{ + return GTK_SPIN_BUTTON(m_widget)->panel == window; +} + +void wxSpinCtrl::ApplyWidgetStyle() +{ + SetWidgetStyle(); + gtk_widget_set_style( m_widget, m_widgetStyle ); +} + +#endif diff --git a/src/gtk1/dialog.cpp b/src/gtk1/dialog.cpp index 138fb5e769..75852bf968 100644 --- a/src/gtk1/dialog.cpp +++ b/src/gtk1/dialog.cpp @@ -38,33 +38,6 @@ extern bool g_isIdle; extern wxList wxPendingDelete; -/* -//----------------------------------------------------------------------------- -// instruct X to set the WM hint for positioning -//----------------------------------------------------------------------------- - -extern "C" { - -static void gdk_window_set_position_hint( GdkWindow *window, gint x, gint y ) -{ - GdkWindowPrivate *priv; - XSizeHints size_hints; - - g_return_if_fail (window != NULL); - - priv = (GdkWindowPrivate*) window; - if (priv->destroyed) return; - - size_hints.flags = PPosition; - size_hints.x = x; - size_hints.y = y; - - XSetWMNormalHints (priv->xdisplay, priv->xwindow, &size_hints); -} - -} -*/ - //----------------------------------------------------------------------------- // "delete_event" //----------------------------------------------------------------------------- @@ -150,9 +123,18 @@ gtk_dialog_realized_callback( GtkWidget *widget, wxDialog *win ) position in "realize" and "map" */ gtk_widget_set_uposition( widget, win->m_x, win->m_y ); -/* - gdk_window_set_position_hint( widget->window, win->m_x, win->m_y ); -*/ + /* set size hints */ + gint flag = GDK_HINT_POS; + if ((win->GetMinWidth() != -1) || (win->GetMinHeight() != -1)) flag |= GDK_HINT_MIN_SIZE; + if ((win->GetMaxWidth() != -1) || (win->GetMaxHeight() != -1)) flag |= GDK_HINT_MAX_SIZE; + if (flag) + { + gdk_window_set_hints( win->m_widget->window, + win->m_x, win->m_y, + win->GetMinWidth(), win->GetMinHeight(), + win->GetMaxWidth(), win->GetMaxHeight(), + flag ); + } /* reset the icon */ if (win->m_icon != wxNullIcon) diff --git a/src/gtk1/frame.cpp b/src/gtk1/frame.cpp index c0d27bd464..780a098659 100644 --- a/src/gtk1/frame.cpp +++ b/src/gtk1/frame.cpp @@ -233,6 +233,19 @@ gtk_frame_realized_callback( GtkWidget *WXUNUSED(widget), wxFrame *win ) else gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1); + /* set size hints */ + gint flag = GDK_HINT_POS; + if ((win->GetMinWidth() != -1) || (win->GetMinHeight() != -1)) flag |= GDK_HINT_MIN_SIZE; + if ((win->GetMaxWidth() != -1) || (win->GetMaxHeight() != -1)) flag |= GDK_HINT_MAX_SIZE; + if (flag) + { + gdk_window_set_hints( win->m_widget->window, + win->m_x, win->m_y, + win->GetMinWidth(), win->GetMinHeight(), + win->GetMaxWidth(), win->GetMaxHeight(), + flag ); + } + /* reset the icon */ if (win->m_icon != wxNullIcon) { diff --git a/src/gtk1/spinbutt.cpp b/src/gtk1/spinbutt.cpp index 1901da14bf..3d75387d4d 100644 --- a/src/gtk1/spinbutt.cpp +++ b/src/gtk1/spinbutt.cpp @@ -35,7 +35,7 @@ extern bool g_isIdle; extern bool g_blockEventsOnDrag; -static const float sensitivity = 0.2; +static const float sensitivity = 0.02; //----------------------------------------------------------------------------- // "value_changed" @@ -101,7 +101,7 @@ bool wxSpinButton::Create(wxWindow *parent, wxSize new_size = size; new_size.x = 15; if (new_size.y == -1) - new_size.y = 30; + new_size.y = 26; if (!PreCreation( parent, pos, new_size ) || !CreateBase( parent, id, pos, new_size, style, wxDefaultValidator, name )) @@ -134,10 +134,6 @@ bool wxSpinButton::Create(wxWindow *parent, return TRUE; } -wxSpinButton::~wxSpinButton() -{ -} - int wxSpinButton::GetMin() const { wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") ); diff --git a/src/gtk1/spinctrl.cpp b/src/gtk1/spinctrl.cpp new file mode 100644 index 0000000000..bf19e51002 --- /dev/null +++ b/src/gtk1/spinctrl.cpp @@ -0,0 +1,199 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: spinbutt.cpp +// Purpose: wxSpinCtrl +// Author: Robert +// Modified by: +// RCS-ID: $Id$ +// Copyright: (c) Robert Roebling +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifdef __GNUG__ +#pragma implementation "spinctrl.h" +#endif + +#include "wx/spinctrl.h" + +#ifdef wxUSE_SPINBTN + +#include "wx/utils.h" +#include "wx/spinbutt.h" +#include + +#include "gdk/gdk.h" +#include "gtk/gtk.h" + +//----------------------------------------------------------------------------- +// idle system +//----------------------------------------------------------------------------- + +extern void wxapp_install_idle_handler(); +extern bool g_isIdle; + +//----------------------------------------------------------------------------- +// data +//----------------------------------------------------------------------------- + +extern bool g_blockEventsOnDrag; + +static const float sensitivity = 0.02; + +//----------------------------------------------------------------------------- +// "value_changed" +//----------------------------------------------------------------------------- + +static void gtk_spinctrl_callback( GtkWidget *WXUNUSED(widget), wxSpinCtrl *win ) +{ + if (g_isIdle) wxapp_install_idle_handler(); + + if (!win->m_hasVMT) return; + if (g_blockEventsOnDrag) return; + + float diff = win->m_adjust->value - win->m_oldPos; + if (fabs(diff) < sensitivity) return; + win->m_oldPos = win->m_adjust->value; + + wxEventType command = wxEVT_NULL; + + float line_step = win->m_adjust->step_increment; + + if (fabs(diff-line_step) < sensitivity) command = wxEVT_SCROLL_LINEDOWN; + else if (fabs(diff+line_step) < sensitivity) command = wxEVT_SCROLL_LINEUP; + else command = wxEVT_SCROLL_THUMBTRACK; + + int value = (int)ceil(win->m_adjust->value); + + wxSpinEvent event( command, win->GetId()); + event.SetPosition( value ); + event.SetEventObject( win ); + win->GetEventHandler()->ProcessEvent( event ); + + /* always send a thumbtrack event */ + if (command != wxEVT_SCROLL_THUMBTRACK) + { + command = wxEVT_SCROLL_THUMBTRACK; + wxSpinEvent event2( command, win->GetId()); + event2.SetPosition( value ); + event2.SetEventObject( win ); + win->GetEventHandler()->ProcessEvent( event2 ); + } +} + +//----------------------------------------------------------------------------- +// wxSpinCtrl +//----------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl,wxControl) + +bool wxSpinCtrl::Create(wxWindow *parent, wxWindowID id, + const wxPoint& pos, const wxSize& size, + long style, + int min, int max, int initial, + const wxString& name) +{ + m_needParent = TRUE; + + wxSize new_size = size; + if (new_size.y == -1) + new_size.y = 26; + + if (!PreCreation( parent, pos, new_size ) || + !CreateBase( parent, id, pos, new_size, style, wxDefaultValidator, name )) + { + wxFAIL_MSG( wxT("wxSpinCtrl creation failed") ); + return FALSE; + } + + m_oldPos = initial; + + m_adjust = (GtkAdjustment*) gtk_adjustment_new( initial, min, max, 1.0, 5.0, 0.0); + + m_widget = gtk_spin_button_new( m_adjust, 1, 0 ); + + gtk_spin_button_set_wrap( GTK_SPIN_BUTTON(m_widget), (m_windowStyle & wxSP_WRAP) ); + + gtk_signal_connect( GTK_OBJECT (m_adjust), + "value_changed", + (GtkSignalFunc) gtk_spinctrl_callback, + (gpointer) this ); + + m_parent->DoAddChild( this ); + + PostCreation(); + + SetBackgroundColour( parent->GetBackgroundColour() ); + + Show( TRUE ); + + return TRUE; +} + +int wxSpinCtrl::GetMin() const +{ + wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") ); + + return (int)ceil(m_adjust->lower); +} + +int wxSpinCtrl::GetMax() const +{ + wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") ); + + return (int)ceil(m_adjust->upper); +} + +int wxSpinCtrl::GetValue() const +{ + wxCHECK_MSG( (m_widget != NULL), 0, wxT("invalid spin button") ); + + return (int)ceil(m_adjust->value); +} + +void wxSpinCtrl::SetValue( int value ) +{ + wxCHECK_RET( (m_widget != NULL), wxT("invalid spin button") ); + + float fpos = (float)value; + m_oldPos = fpos; + if (fabs(fpos-m_adjust->value) < sensitivity) return; + + m_adjust->value = fpos; + + gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "value_changed" ); +} + +void wxSpinCtrl::SetRange(int minVal, int maxVal) +{ + wxCHECK_RET( (m_widget != NULL), wxT("invalid spin button") ); + + float fmin = (float)minVal; + float fmax = (float)maxVal; + + if ((fabs(fmin-m_adjust->lower) < sensitivity) && + (fabs(fmax-m_adjust->upper) < sensitivity)) + { + return; + } + + m_adjust->lower = fmin; + m_adjust->upper = fmax; + + gtk_signal_emit_by_name( GTK_OBJECT(m_adjust), "changed" ); + + // these two calls are required due to some bug in GTK + Refresh(); + SetFocus(); +} + +bool wxSpinCtrl::IsOwnGtkWindow( GdkWindow *window ) +{ + return GTK_SPIN_BUTTON(m_widget)->panel == window; +} + +void wxSpinCtrl::ApplyWidgetStyle() +{ + SetWidgetStyle(); + gtk_widget_set_style( m_widget, m_widgetStyle ); +} + +#endif -- 2.45.2