]> git.saurik.com Git - wxWidgets.git/commitdiff
several mac fixes (Mark Newsams patches)
authorStefan Csomor <csomor@advancedconcepts.ch>
Wed, 11 Jul 2001 20:33:12 +0000 (20:33 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Wed, 11 Jul 2001 20:33:12 +0000 (20:33 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10975 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

25 files changed:
include/wx/generic/spinctlg.h
include/wx/mac/choice.h
include/wx/mac/control.h
include/wx/mac/notebook.h
include/wx/mac/radiobox.h
include/wx/mac/slider.h
include/wx/mac/statbmp.h
include/wx/mac/stattext.h
src/generic/spinctlg.cpp
src/mac/carbon/choice.cpp
src/mac/carbon/control.cpp
src/mac/carbon/frame.cpp
src/mac/carbon/notebmac.cpp
src/mac/carbon/radiobox.cpp
src/mac/carbon/slider.cpp
src/mac/carbon/spinctrl.cpp
src/mac/carbon/window.cpp
src/mac/choice.cpp
src/mac/control.cpp
src/mac/frame.cpp
src/mac/notebmac.cpp
src/mac/radiobox.cpp
src/mac/slider.cpp
src/mac/spinctrl.cpp
src/mac/window.cpp

index 3c24bf33845e88de7f990248cbb6a4d31d04545b..29d3c0faab5df09262cf0712a47b9854b8f3648e 100644 (file)
@@ -20,7 +20,7 @@
 // without tons of #ifdefs.
 // ----------------------------------------------------------------------------
 
 // without tons of #ifdefs.
 // ----------------------------------------------------------------------------
 
-#if wxUSE_SPINBTN && !defined(__WXMAC__)
+#if wxUSE_SPINBTN 
 
 #ifdef __GNUG__
     #pragma interface "spinctlg.h"
 
 #ifdef __GNUG__
     #pragma interface "spinctlg.h"
index 01faf5e769fa27beec73d00f3a5819ff060329ea..50a506940b007c4feb1f381a68d5d1c0ef2fe2c1 100644 (file)
@@ -83,6 +83,7 @@ class WXDLLEXPORT wxChoice: public wxChoiceBase
   virtual inline int GetColumns() const { return 1 ; };
 */
 protected:
   virtual inline int GetColumns() const { return 1 ; };
 */
 protected:
+    virtual wxSize DoGetBestSize() const ;
     virtual void DoSetItemClientData( int n, void* clientData );
     virtual void* DoGetItemClientData( int n ) const;
     virtual void DoSetItemClientObject( int n, wxClientData* clientData );
     virtual void DoSetItemClientData( int n, void* clientData );
     virtual void* DoGetItemClientData( int n ) const;
     virtual void DoSetItemClientObject( int n, wxClientData* clientData );
index cf3288535d108b375a9eade1776a973c4d361dfe..35a00c50138e52c65e524ad9c47928e0f3e95d4c 100644 (file)
@@ -75,7 +75,7 @@ public:
    virtual void         MacSuperShown( bool show ) ;
    virtual bool                 MacCanFocus() const ;
    
    virtual void         MacSuperShown( bool show ) ;
    virtual bool                 MacCanFocus() const ;
    
-   virtual void         DoSetSize(int x, int y,int width, int height,int sizeFlags ) ;
+   virtual void         DoSetSize(int x, int y,int width, int height,int sizeFlags = wxSIZE_AUTO ) ;
    virtual void         OnKeyDown( wxKeyEvent &event ) ;
    virtual void                 OnMouseEvent( wxMouseEvent &event ) ;
    virtual void         OnPaint(wxPaintEvent& event) ;
    virtual void         OnKeyDown( wxKeyEvent &event ) ;
    virtual void                 OnMouseEvent( wxMouseEvent &event ) ;
    virtual void         OnPaint(wxPaintEvent& event) ;
index 283a0166b866fca0041e05c99534a1044a059b68..d71c10eebe610c524819f9153fdfde16e1a674e2 100644 (file)
@@ -80,11 +80,11 @@ public:
 
   // control the appearance of the notebook pages
     // set the size (the same for all pages)
 
   // control the appearance of the notebook pages
     // set the size (the same for all pages)
-  void SetPageSize(const wxSize& size);
+  virtual void SetPageSize(const wxSize& size);
     // set the padding between tabs (in pixels)
     // set the padding between tabs (in pixels)
-  void SetPadding(const wxSize& padding);
+  virtual void SetPadding(const wxSize& padding);
     // sets the size of the tabs (assumes all tabs are the same size)
     // sets the size of the tabs (assumes all tabs are the same size)
-  void SetTabSize(const wxSize& sz);
+  virtual void SetTabSize(const wxSize& sz);
 
 /*
     // get number of pages in the dialog
 
 /*
     // get number of pages in the dialog
index 665635334b94fa45a3c7f55152f984f4b604a46f..632495c5df69d2a2ca1ee33396bb9c0f5822dc37 100644 (file)
@@ -80,6 +80,7 @@ protected:
        int               m_noRowsOrCols;
 
 // Internal functions 
        int               m_noRowsOrCols;
 
 // Internal functions 
+    virtual wxSize DoGetBestSize() const ;
        virtual void DoSetSize(int x, int y,
                            int width, int height,
                            int sizeFlags = wxSIZE_AUTO);
        virtual void DoSetSize(int x, int y,
                            int width, int height,
                            int sizeFlags = wxSIZE_AUTO);
index ff45a5790df1b9833c6053899147b1f3cbf4b4f2..b5dd7e48e76300579c98fb73f511636d8aa9419b 100644 (file)
@@ -53,7 +53,6 @@ public:
 
   virtual int GetValue() const ;
   virtual void SetValue(int);
 
   virtual int GetValue() const ;
   virtual void SetValue(int);
-  bool Show(bool show);
 
   void SetRange(int minValue, int maxValue);
 
 
   void SetRange(int minValue, int maxValue);
 
@@ -76,9 +75,20 @@ public:
   int GetThumbLength() const ;
   void SetTick(int tickPos) ;
 
   int GetThumbLength() const ;
   void SetTick(int tickPos) ;
 
+     // set min/max size of the slider
+     virtual void SetSizeHints( int minW, int minH,
+                                int maxW = -1, int maxH = -1,
+                                int incW = -1, int incH = -1 );
+   protected:
+     virtual wxSize DoGetBestSize() const;
+     virtual void   DoSetSize(int x, int y, int w, int h, int sizeFlags);
+     virtual void   DoMoveWindow(int x, int y, int w, int h);
   void Command(wxCommandEvent& event);
        void                                    MacHandleControlClick( ControlHandle control , SInt16 controlpart ) ;
   void Command(wxCommandEvent& event);
        void                                    MacHandleControlClick( ControlHandle control , SInt16 controlpart ) ;
- protected:
+
        wxStaticText*   m_macMinimumStatic ;
        wxStaticText*   m_macMaximumStatic ;
        wxStaticText*   m_macValueStatic ;
        wxStaticText*   m_macMinimumStatic ;
        wxStaticText*   m_macMaximumStatic ;
        wxStaticText*   m_macValueStatic ;
@@ -88,6 +98,7 @@ public:
   int           m_pageSize;
   int           m_lineSize;
   int           m_tickFreq;
   int           m_pageSize;
   int           m_lineSize;
   int           m_tickFreq;
+private :
 DECLARE_EVENT_TABLE()
 };
 
 DECLARE_EVENT_TABLE()
 };
 
index 3ae276eafffda9ea00264ee2a1be6aef3abb6c55..18bffd3d23f7629af8b320df1d5347a2530d3682 100644 (file)
@@ -58,7 +58,7 @@ class WXDLLEXPORT wxStaticBitmap: public wxStaticBitmapBase
 
   // overriden base class virtuals
   virtual bool AcceptsFocus() const { return FALSE; }
 
   // overriden base class virtuals
   virtual bool AcceptsFocus() const { return FALSE; }
-  wxSize DoGetBestSize() const ;
+  virtual  wxSize DoGetBestSize() const ;
 
  protected:
   wxBitmap m_bitmap;
 
  protected:
   wxBitmap m_bitmap;
index 45d6e4e326625da438f118bd26e7168f4c87c645..934d7e81186971638f1ddf6c33eb6065ab028cbc 100644 (file)
@@ -48,7 +48,7 @@ class WXDLLEXPORT wxStaticText: public wxStaticTextBase
   void DrawParagraph(wxDC &dc, wxString paragraph);
   void OnPaint( wxPaintEvent &event ) ;
   void OnDraw( wxDC &dc ) ;
   void DrawParagraph(wxDC &dc, wxString paragraph);
   void OnPaint( wxPaintEvent &event ) ;
   void OnDraw( wxDC &dc ) ;
-  wxSize DoGetBestSize() const ;
+  virtual wxSize DoGetBestSize() const ;
   virtual bool AcceptsFocus() const { return FALSE; }
  private :
        wxString        m_label ;
   virtual bool AcceptsFocus() const { return FALSE; }
  private :
        wxString        m_label ;
index 44d209b5b99c0652fb66845c25798dbc2ef039bb..5c02451b72fa5d5b408b959d5271ab693b5a8f4d 100644 (file)
@@ -28,7 +28,7 @@
     #pragma hdrstop
 #endif
 
     #pragma hdrstop
 #endif
 
-#if !(defined(__WXMSW__) || defined(__WXGTK__) || defined(__WXPM__)) || \
+#if !(defined(__WXMSW__) || defined(__WXGTK__) || defined(__WXPM__)) || defined(__WXMAC__) || \
     defined(__WXUNIVERSAL__)
 
 #ifndef WX_PRECOMP
     defined(__WXUNIVERSAL__)
 
 #ifndef WX_PRECOMP
@@ -147,7 +147,6 @@ bool wxSpinCtrl::Create(wxWindow *parent,
     }
 
     SetBackgroundColour(*wxRED);
     }
 
     SetBackgroundColour(*wxRED);
-
     m_text = new wxSpinCtrlText(this, value);
     m_btn = new wxSpinCtrlButton(this, style);
 
     m_text = new wxSpinCtrlText(this, value);
     m_btn = new wxSpinCtrlButton(this, style);
 
@@ -155,7 +154,9 @@ bool wxSpinCtrl::Create(wxWindow *parent,
     m_btn->SetValue(initial);
 
     DoSetSize(pos.x, pos.y, size.x, size.y);
     m_btn->SetValue(initial);
 
     DoSetSize(pos.x, pos.y, size.x, size.y);
-
+#ifdef __WXMAC__
+    DoMoveWindow( pos.x, pos.y, size.x, size.y ) ;
+#endif
     // have to disable this window to avoid interfering it with message
     // processing to the text and the button... but pretend it is enabled to
     // make IsEnabled() return TRUE
     // have to disable this window to avoid interfering it with message
     // processing to the text and the button... but pretend it is enabled to
     // make IsEnabled() return TRUE
index 0559853584c689fc3381eff7121132f3fd216b37..30a17488d2f79f62948ac6c3909980dd38e5673c 100644 (file)
@@ -216,6 +216,13 @@ void wxChoice::MacHandleControlClick( ControlHandle control , SInt16 controlpart
     event.SetString(GetStringSelection());
     ProcessCommand(event);
 }
     event.SetString(GetStringSelection());
     ProcessCommand(event);
 }
+
+wxSize wxChoice::DoGetBestSize() const
+{
+    // TODO should modify this to take into account string length ala wxGTK
+    return wxSize(100,20);
+}
+
 /*
 void wxChoice::Command(wxCommandEvent & event)
 {
 /*
 void wxChoice::Command(wxCommandEvent & event)
 {
index f0714b067a99305774f138b94d0860d40b1c77a8..1d23a5eaaee279e18b8dda8aa972cbf46ed9e925 100644 (file)
@@ -143,7 +143,50 @@ void wxControl::SetLabel(const wxString& title)
 
 wxSize wxControl::DoGetBestSize() const
 {
 
 wxSize wxControl::DoGetBestSize() const
 {
-    return wxSize(20, 20);
+       Rect    bestsize = { 0 , 0 , 0 , 0 } ;
+       short   baselineoffset ;
+       int bestWidth, bestHeight ;
+       UMAGetBestControlRect( m_macControl , &bestsize , &baselineoffset ) ;
+
+       if ( EmptyRect( &bestsize ) )
+       {
+               baselineoffset = 0;
+               bestsize.left = bestsize.top = 0 ;
+               bestsize.right = 16 ;
+               bestsize.bottom = 16 ;
+               if ( IsKindOf( CLASSINFO( wxScrollBar ) ) )
+               {
+                       bestsize.bottom = 16 ;
+               }
+               else if ( IsKindOf( CLASSINFO( wxSpinButton ) ) )
+               {
+                       bestsize.bottom = 24 ; 
+               }
+       }
+
+       if ( IsKindOf( CLASSINFO( wxButton ) ) )
+       {
+               bestWidth = m_label.Length() * 8 + 12 ;
+               if ( bestWidth < 70 )
+                 bestWidth = 70 ;
+       }
+       else if ( IsKindOf( CLASSINFO( wxStaticText ) ) )
+       {
+               bestWidth = m_label.Length() * 8 ;
+       }
+       else
+               bestWidth = bestsize.right - bestsize.left ;
+               
+       bestWidth += 2 * m_macHorizontalBorder ;
+
+       bestHeight = bestsize.bottom - bestsize.top ;
+       if ( bestHeight < 10 )
+               bestHeight = 13 ;
+
+       bestHeight += 2 * m_macVerticalBorder;
+
+               
+    return wxSize(bestWidth, bestHeight);
 }
 
 bool wxControl::ProcessCommand (wxCommandEvent & event)
 }
 
 bool wxControl::ProcessCommand (wxCommandEvent & event)
@@ -203,7 +246,7 @@ void wxControl::MacPreControlCreate( wxWindow *parent, wxWindowID id, wxString l
        SetValidator(validator);
 
   m_windowStyle = style;
        SetValidator(validator);
 
   m_windowStyle = style;
-  parent->AddChild((wxButton *)this);
+  parent->AddChild(this);
 
   m_backgroundColour = parent->GetBackgroundColour() ;
   m_foregroundColour = parent->GetForegroundColour() ;
 
   m_backgroundColour = parent->GetBackgroundColour() ;
   m_foregroundColour = parent->GetForegroundColour() ;
@@ -213,20 +256,17 @@ void wxControl::MacPreControlCreate( wxWindow *parent, wxWindowID id, wxString l
   else
       m_windowId = id;
 
   else
       m_windowId = id;
 
+   // These sizes will be adjusted in MacPostControlCreate
+
        m_width = size.x ;
        m_height = size.y ;
        m_width = size.x ;
        m_height = size.y ;
-       int x = pos.x ;
-       int y = pos.y ;
-       AdjustForParentClientOrigin(x, y, wxSIZE_USE_EXISTING);
-       m_x = x ;
-       m_y = y ;
+       m_x = pos.x ;
+       m_y = pos.y ;
                
                
-
-       parent->MacClientToRootWindow( &x , &y ) ;
-       outBounds->top = y + m_macVerticalBorder ;
-       outBounds->left = x + m_macHorizontalBorder ;
-       outBounds->bottom = outBounds->top + m_height - 2 * m_macVerticalBorder;
-       outBounds->right = outBounds->left + m_width - 2 * m_macHorizontalBorder ;
+       outBounds->top = -10;
+       outBounds->left = -10;
+       outBounds->bottom = 0;
+       outBounds->right = 0;
 
        char c_text[255];
        strcpy( c_text , label ) ;
 
        char c_text[255];
        strcpy( c_text , label ) ;
@@ -268,17 +308,35 @@ void wxControl::MacPostControlCreate()
                ::UMASetControlFontStyle( m_macControl , &controlstyle ) ;
        }
        ControlHandle container = GetParent()->MacGetContainerForEmbedding() ;
                ::UMASetControlFontStyle( m_macControl , &controlstyle ) ;
        }
        ControlHandle container = GetParent()->MacGetContainerForEmbedding() ;
-       wxASSERT_MSG( container != NULL , "No valid mac container control" ) ;
+       wxASSERT_MSG( container != NULL , wxT("No valid mac container control") ) ;
        ::UMAEmbedControl( m_macControl , container ) ;
        m_macControlIsShown  = true ;
        ::UMAEmbedControl( m_macControl , container ) ;
        m_macControlIsShown  = true ;
-       MacAdjustControlRect() ;
+
        wxAssociateControlWithMacControl( m_macControl , this ) ;
        wxAssociateControlWithMacControl( m_macControl , this ) ;
-       UMAShowControl( m_macControl ) ;
+
+     // Adjust the controls size and position
+     wxPoint pos(m_x, m_y);
+     wxSize best_size( DoGetBestSize() );
+     wxSize new_size( m_width, m_height );
+     m_x = m_y = m_width = m_height = -1;  // Forces SetSize to move/size the control
+     if (new_size.x == -1) {
+        new_size.x = best_size.x;
+     }
+     if (new_size.y == -1) {
+         new_size.y = best_size.y;
+     }
+     SetSize(pos.x, pos.y, new_size.x, new_size.y);
+     UMAShowControl( m_macControl ) ;
 }
 
 void wxControl::MacAdjustControlRect() 
 {
 }
 
 void wxControl::MacAdjustControlRect() 
 {
-       wxASSERT_MSG( m_macControl != NULL , "No valid mac control" ) ;
+       wxASSERT_MSG( m_macControl != NULL , wxT("No valid mac control") ) ;
        if ( m_width == -1 || m_height == -1 )
        {
                Rect    bestsize = { 0 , 0 , 0 , 0 } ;
        if ( m_width == -1 || m_height == -1 )
        {
                Rect    bestsize = { 0 , 0 , 0 , 0 } ;
@@ -453,102 +511,127 @@ void  wxControl::DoSetSize(int x, int y,
                return ;
        }
 
                return ;
        }
 
-       WindowRef rootwindow = GetMacRootWindow() ;
-       wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ;
-       UMASetThemeWindowBackground( rootwindow , kThemeBrushDialogBackgroundActive , false ) ;
-               
-       int former_x = m_x ;
-       int former_y = m_y ;
-       int former_w = m_width ;
-       int former_h = m_height ;
-       
-       Rect contrlRect ;               
-       GetControlBounds( m_macControl , &contrlRect ) ; 
-       int former_mac_x = contrlRect.left ;
-       int former_mac_y = contrlRect.top ;
-       
-  int currentX, currentY;
-  GetPosition(&currentX, &currentY);
-  int currentW,currentH;
-  GetSize(&currentW, &currentH);
-
-  int actualWidth = width;
-  int actualHeight = height;
-  int actualX = x;
-  int actualY = y;
-  if (x == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
-      actualX = currentX;
-  if (y == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
-      actualY = currentY;
-  if (width == -1)
-      actualWidth = currentW ;
-  if (height == -1)
-      actualHeight = currentH ;
-
-       if ( actualX == currentX && actualY == currentY && actualWidth == currentW && actualHeight == currentH)
-               return ;
-               
-       AdjustForParentClientOrigin(actualX, actualY, sizeFlags);
-       WindowRef macrootwindow = GetMacRootWindow() ;
-       wxMacDrawingHelper focus( wxFindWinFromMacWindow( macrootwindow ) ) ;
-
-       int mac_x = actualX ;
-       int mac_y = actualY ;
-       GetParent()->MacClientToRootWindow( & mac_x , & mac_y ) ;
-       
-       if ( mac_x != former_mac_x || mac_y != former_mac_y )
-       {
-               {
-                       Rect inval = { former_mac_y , former_mac_x , former_mac_y + m_height , former_mac_x + m_width } ;
-                       InvalWindowRect( macrootwindow, &inval ) ;
-               }
-               UMAMoveControl( m_macControl , mac_x + m_macHorizontalBorder , mac_y  + m_macVerticalBorder ) ;
-               {
-                       Rect inval = { mac_y , mac_x , mac_y + m_height , mac_x + m_width } ;
-                       InvalWindowRect(macrootwindow, &inval ) ;
-               }
-       }
-
-       if ( actualX != former_x || actualY != former_y )
-       {
-               m_x = actualX ;
-               m_y = actualY ;
-
-               MacRepositionScrollBars() ;
-               // To consider -> should the parameters be the effective or the virtual coordinates (AdjustForParent..)
-       wxPoint point(m_x, m_y);
-        wxMoveEvent event(point, m_windowId);
-        event.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(event);
-       }               
-       if ( actualWidth != former_w || actualHeight != former_h )
-       {
-               {
-                       Rect inval = { mac_y , mac_x , mac_y + former_h , mac_x + former_w } ;
-                       InvalWindowRect( macrootwindow, &inval ) ;
-               }
-               m_width = actualWidth ;
-               m_height = actualHeight ;
-
-               UMASizeControl( m_macControl ,  m_width - 2 * m_macHorizontalBorder, m_height -  2 * m_macVerticalBorder ) ;
-               {
-                       Rect inval = { mac_y , mac_x , mac_y + m_height , mac_x + m_width } ;
-                       InvalWindowRect( macrootwindow , &inval ) ;
-               }
-
-               MacRepositionScrollBars() ;
-       wxSize size(m_width, m_height);
-        wxSizeEvent event(size, m_windowId);
-        event.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(event);
-       }
-       if ( wxrootwindow->IsKindOf( CLASSINFO( wxDialog ) ) )
-       {
-       }
-       else
-       {
-               UMASetThemeWindowBackground( rootwindow , kThemeBrushDocumentWindowBackground , false ) ;
-       }
+     Rect oldbounds, newbounds;
+     int new_x, new_y, new_width, new_height;
+     int mac_x, mac_y;
+     new_x = m_x;
+     new_y = m_y;
+     new_width  = m_width;
+     new_height = m_height;
+     if (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)
+     {
+         new_x      = x;
+         new_y      = y;
+         new_width  = width;
+         new_height = height;
+     }
+     else
+     {
+         if (x != -1)      new_x      = x;
+         if (y != -1)      new_y      = y;
+         if (width != -1)  new_width  = width;
+         if (height != -1) new_height = height;
+     }
+     if(sizeFlags & wxSIZE_AUTO)
+     {
+         wxSize size = GetBestSize();
+         if (sizeFlags & wxSIZE_AUTO_WIDTH)
+         {
+             if (width == -1)   new_width = size.x;
+         }
+         if (sizeFlags & wxSIZE_AUTO_HEIGHT)
+         {
+             if (height == -1)   new_height = size.y;
+         }
+     }
+     AdjustForParentClientOrigin(new_x, new_y, sizeFlags);
+     mac_x = new_x;
+     mac_y = new_y;
+     if(GetParent()) {
+         GetParent()->MacClientToRootWindow(&mac_x, &mac_y);
+     }
+     GetControlBounds(m_macControl, &oldbounds);
+     oldbounds.right = oldbounds.left + m_width;
+     oldbounds.bottom = oldbounds.top + m_height;
+     bool doMove = false;
+     bool doResize = false;
+     if ( mac_x != (oldbounds.left - m_macHorizontalBorder) ||
+          mac_y != (oldbounds.top - m_macVerticalBorder) )
+     {
+         doMove = true ;
+     }
+     if ( new_width != oldbounds.right - oldbounds.left - 2 * m_macHorizontalBorder ||
+          new_height != oldbounds.bottom - oldbounds.top - 2 * m_macVerticalBorder)
+     {
+         doResize = true ;
+     }
+     if ( doMove || doResize )
+     {
+         // Ensure resize is within constraints
+         if ((m_minWidth != -1) && (new_width < m_minWidth)) {
+             new_width = m_minWidth;
+         }
+         if ((m_minHeight != -1) && (new_height < m_minHeight)) {
+             new_height = m_minHeight;
+         }
+         if ((m_maxWidth != -1) && (new_width > m_maxWidth)) {
+             new_width = m_maxWidth;
+         }
+         if ((m_maxHeight != -1) && (new_height > m_maxHeight)) {
+             new_height = m_maxHeight;
+         }
+         if ( doMove )
+         {
+             m_x = new_x;
+             m_y = new_y;
+             UMAMoveControl(m_macControl,
+                            mac_x + m_macHorizontalBorder, mac_y + m_macVerticalBorder);
+             wxMoveEvent event(wxPoint(m_x, m_y), m_windowId);
+             event.SetEventObject(this);
+             GetEventHandler()->ProcessEvent(event) ;
+         }
+         if ( doResize )
+         {
+             m_width = new_width;
+             m_height = new_height;
+             UMASizeControl( m_macControl,
+                             m_width - 2 * m_macHorizontalBorder,
+                             m_height -  2 * m_macVerticalBorder ) ;
+             wxSizeEvent event(wxSize(m_width, m_height), m_windowId);
+             event.SetEventObject(this);
+             GetEventHandler()->ProcessEvent(event);
+         }
+         // Set up port
+         WindowRef rootwindow = GetMacRootWindow() ;
+         wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ;
+         wxMacDrawingHelper focus( wxrootwindow );
+         UMASetThemeWindowBackground( rootwindow , kThemeBrushDialogBackgroundActive , false ) ;
+         // Update window at old and new positions
+         SetRect(&newbounds, m_x, m_y, m_x + m_width, m_y + m_height);
+         InvalWindowRect( rootwindow , &oldbounds );
+         InvalWindowRect( rootwindow , &newbounds );
+         MacRepositionScrollBars() ;
+         if ( !wxrootwindow->IsKindOf( CLASSINFO( wxDialog ) ) )
+         {
+             UMASetThemeWindowBackground( rootwindow, kThemeBrushDocumentWindowBackground, false );
+         }
+     }
 }
 
 bool  wxControl::Show(bool show) 
 }
 
 bool  wxControl::Show(bool show) 
@@ -619,7 +702,6 @@ void wxControl::MacRedrawControl()
                                // the mac control manager always assumes to have the origin at 0,0
                                SetOrigin( 0 , 0 ) ;
                                
                                // the mac control manager always assumes to have the origin at 0,0
                                SetOrigin( 0 , 0 ) ;
                                
-                               bool                    hasTabBehind = false ;
                                wxWindow* parent = GetParent() ;
                                while ( parent )
                                {
                                wxWindow* parent = GetParent() ;
                                while ( parent )
                                {
@@ -660,8 +742,6 @@ void wxControl::OnPaint(wxPaintEvent& event)
                                // the mac control manager always assumes to have the origin at 0,0
                                SetOrigin( 0 , 0 ) ;
 
                                // the mac control manager always assumes to have the origin at 0,0
                                SetOrigin( 0 , 0 ) ;
 
-                               
-                               bool hasTabBehind = false ;
                                wxWindow* parent = GetParent() ;
                                while ( parent )
                                {
                                wxWindow* parent = GetParent() ;
                                while ( parent )
                                {
@@ -732,7 +812,6 @@ void  wxControl::OnMouseEvent( wxMouseEvent &event )
                        
                ControlHandle   control ;
                Point           localwhere ;
                        
                ControlHandle   control ;
                Point           localwhere ;
-               GrafPtr         port ;
                SInt16          controlpart ;
                WindowRef       window = GetMacRootWindow() ;
                
                SInt16          controlpart ;
                WindowRef       window = GetMacRootWindow() ;
                
index 6bde00fc744d3dd3c670d7a9e6dd2d10c60de2e0..fb3d2fee9f79b875a906301a1dff3005d2dabec2 100644 (file)
@@ -315,7 +315,7 @@ void wxFrameMac::DoGetClientSize(int *x, int *y) const
        wxWindow::DoGetClientSize( x , y ) ;
 
 #if wxUSE_STATUSBAR
        wxWindow::DoGetClientSize( x , y ) ;
 
 #if wxUSE_STATUSBAR
-  if ( GetStatusBar() )
+  if ( GetStatusBar() && y )
   {
     int statusX, statusY;
     GetStatusBar()->GetClientSize(&statusX, &statusY);
   {
     int statusX, statusY;
     GetStatusBar()->GetClientSize(&statusX, &statusY);
@@ -324,8 +324,10 @@ void wxFrameMac::DoGetClientSize(int *x, int *y) const
 #endif // wxUSE_STATUSBAR
 
   wxPoint pt(GetClientAreaOrigin());
 #endif // wxUSE_STATUSBAR
 
   wxPoint pt(GetClientAreaOrigin());
-  *y -= pt.y;
-  *x -= pt.x;
+  if ( y )
+    *y -= pt.y;
+  if ( x ) 
+    *x -= pt.x;
 }
 
 void wxFrameMac::DoSetClientSize(int clientwidth, int clientheight)
 }
 
 void wxFrameMac::DoSetClientSize(int clientwidth, int clientheight)
index ec38c6230c31b0f30ed72405dd06d987b6400843..496c75fe5b4c737872720a0c5131f366465bce9a 100644 (file)
@@ -149,7 +149,8 @@ void wxNotebook::SetPageSize(const wxSize& size)
 
 int wxNotebook::SetSelection(int nPage)
 {
 
 int wxNotebook::SetSelection(int nPage)
 {
-    wxASSERT( IS_VALID_PAGE(nPage) );
+  if( !IS_VALID_PAGE(nPage) ) 
+    return m_nSelection ;
 
     ChangePage(m_nSelection, nPage);
        SetControlValue( m_macControl , m_nSelection + 1 ) ;
 
     ChangePage(m_nSelection, nPage);
        SetControlValue( m_macControl , m_nSelection + 1 ) ;
index f2651ba5945afca59b967d3a0a7e8fbdb4c7f438..664e5c54d2a0d7e71b2a59effbf67886c503b2bc 100644 (file)
@@ -120,8 +120,6 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
        m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , false , 0 , 0 , 1, 
                kControlGroupBoxTextTitleProc , (long) this ) ;
        
        m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , false , 0 , 0 , 1, 
                kControlGroupBoxTextTitleProc , (long) this ) ;
        
-       MacPostControlCreate() ;
-
     for (i = 0; i < n; i++)
     {
         wxRadioButton *radBtn = new wxRadioButton(this, NewControlId(),choices[i],wxPoint(5,20*i+10),
     for (i = 0; i < n; i++)
     {
         wxRadioButton *radBtn = new wxRadioButton(this, NewControlId(),choices[i],wxPoint(5,20*i+10),
@@ -132,7 +130,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
     }
 
        SetSelection(0);
     }
 
        SetSelection(0);
-       SetSize(pos.x,pos.y,size.x,size.y);
+       MacPostControlCreate() ;
 
   return TRUE;
 }
 
   return TRUE;
 }
@@ -481,6 +479,33 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
                }
 }
 
                }
 }
 
+wxSize wxRadioBox::DoGetBestSize() const
+{
+    int charWidth, charHeight;
+    int maxWidth, maxHeight;
+    int eachWidth, eachHeight;
+    int totWidth, totHeight;
+
+    wxFont font = GetParent()->GetFont();
+    GetTextExtent(wxString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"),
+                  &charWidth, &charHeight, NULL, NULL, &font);
+    charWidth /= 52;
+
+   maxWidth = -1;
+   maxHeight = -1;
+   for (int i = 0 ; i < m_noItems; i++)
+   {
+        GetTextExtent(GetString(i), &eachWidth, &eachHeight);
+        eachWidth  = (int)(eachWidth + RADIO_SIZE) ;
+        eachHeight = (int)((3 * eachHeight) / 2);
+        if (maxWidth < eachWidth)     maxWidth = eachWidth;
+        if (maxHeight < eachHeight)   maxHeight = eachHeight;
+    }
+
+    totHeight = GetRowCount() * (maxHeight + charHeight/2) + charHeight * 3/2;
+    totWidth  = GetColumnCount() * (maxWidth + charWidth) + charWidth;
+   return wxSize(totWidth, totHeight);
+}
 //-------------------------------------------------------------------------------------
 //             Â¥ GetNumVer
 //-------------------------------------------------------------------------------------
 //-------------------------------------------------------------------------------------
 //             Â¥ GetNumVer
 //-------------------------------------------------------------------------------------
index bce30a4bd1b95bf80694d8483ac266b72a5b7d12..53ad11814ee2ff5746955cdec3b62a8f65f7afe1 100644 (file)
@@ -23,6 +23,20 @@ BEGIN_EVENT_TABLE(wxSlider, wxControl)
 END_EVENT_TABLE()
 #endif
 
 END_EVENT_TABLE()
 #endif
 
+ // The dimensions of the different styles of sliders (From Aqua document)
+ #define wxSLIDER_DIMENSIONACROSS 15
+ #define wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS 24
+ #define wxSLIDER_DIMENSIONACROSS_ARROW 18
+ // Distance between slider and text
+ #define wxSLIDER_BORDERTEXT 5
+ /* NB!  The default orientation for a slider is horizontal however if the user specifies
+  * some slider styles but dosen't specify the orientation we have to assume he wants a
+  * horizontal one.  Therefore in this file when testing for the sliders orientation
+  * vertical is tested for if this is not set then we use the horizontal one
+  * eg.  if(GetWindowStyle() & wxSL_VERTICAL) {}  else { horizontal case }>  
+  */
 
 
 // Slider
 
 
 // Slider
@@ -44,141 +58,67 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id,
            const wxValidator& validator,
            const wxString& name)
 {
            const wxValidator& validator,
            const wxString& name)
 {
-  Rect bounds ;
-  Str255 title ;
-  wxSize slsize;
-  int maxtextwidth, textheight;
-  
-  // Is control horizontal or vertical (Can be ambigous if user selects
-  // another style without also specifying horz or vert
-  if (!(style & wxSL_HORIZONTAL) && !(style & wxSL_VERTICAL)) {
-    // Default is horizontal so make it so
-    style |= wxSL_HORIZONTAL;
-  }
-  slsize = size;
-  // Check that size corresponds with users selection of vertical or
-  // horizontal slider and insert suitable default values
-  if (style & wxSL_HORIZONTAL) 
-    {
-      slsize.y = 15;      // Slider width
-      if (slsize.x == -1) {
-        slsize.x = 150;  // Slider default length
-      }
-    }
-  else
-    {
-      slsize.x = 15;      // Slider width
-      if (slsize.y == -1) {
-        slsize.y = 150;  // Slider default length
-      }
+     Rect bounds ;
+     Str255 title ;
+     SInt16 procID;
+
+     m_macMinimumStatic = NULL ;
+     m_macMaximumStatic = NULL ;
+     m_macValueStatic = NULL ;
+
+
+     m_lineSize = 1;
+     m_tickFreq = 0;
+     m_rangeMax = maxValue;
+     m_rangeMin = minValue;
+     m_pageSize = (int)((maxValue-minValue)/10);
+     MacPreControlCreate( parent, id, "", pos, size, style,
+                          validator, name, &bounds, title );
+     procID = kControlSliderProc + kControlSliderLiveFeedback;
+     if(style & wxSL_AUTOTICKS) {
+         procID += kControlSliderHasTickMarks;
     }
     }
-  /* Set the height and width for the slider control region.  The actual 
-   * slider is set at 10 pixels across.  If the slider has labels then the
-   * control region must be large enough to contain these labels
-   */
-  if (style & wxSL_LABELS) 
-    {
-      wxString text;
-      int ht, wd;
-      
-      // Get maximum text label width and height
-      text.Printf("%d", minValue);
-      parent->GetTextExtent(text, &maxtextwidth, &textheight);
-      text.Printf("%d", maxValue);
-      parent->GetTextExtent(text, &wd, &ht);
-      if(ht > textheight) {
-        textheight = ht;
-      }
-      if (wd > maxtextwidth) {
-        maxtextwidth = wd;
-      }
-      
-      if (style & wxSL_VERTICAL) {
-        slsize.x = (15 + maxtextwidth + 2); // Slider wd plus mac text width
-      }
-      if (style & wxSL_HORIZONTAL) {
-        slsize.y = (15 + textheight);  // Slider ht plus text ht.
-      }
-    }
-  
-  MacPreControlCreate( parent , id ,  "" , pos , slsize , style,
-                      validator , name , &bounds , title ) ;
-  
-  m_macMinimumStatic = NULL ;
-  m_macMaximumStatic = NULL ;
-  m_macValueStatic = NULL ;
   
   
-  m_lineSize = 1;
-  m_tickFreq = 0;
-
-  m_rangeMax = maxValue;
-  m_rangeMin = minValue;
 
 
-  m_pageSize = (int)((maxValue-minValue)/10);
-  
-  // Must modify bounds to that of the slider dimensions from slider
-  // dimensions plus text labels.
-  if (style & wxSL_LABELS)
-    {
-      if ( style & wxSL_HORIZONTAL )
-       {
-         bounds.bottom = bounds.top + 15;
-          bounds.right -= (5 + maxtextwidth);
-       }
-      else  // Vertical slider
-       {
-          bounds.right = bounds.left + 15;
-          bounds.bottom -= (5 + textheight);
-       }
+     m_macControl = UMANewControl( parent->GetMacRootWindow(), &bounds, title, false,
+                                   value, minValue, maxValue, procID, (long) this);
+     wxASSERT_MSG( m_macControl != NULL , "No valid mac control" ) ;
+     ::SetControlAction( m_macControl , wxMacLiveScrollbarActionUPP ) ;
+     if(style & wxSL_LABELS)
+     {
+         m_macMinimumStatic = new wxStaticText( this, -1, "" );
+         m_macMaximumStatic = new wxStaticText( this, -1, "" );
+         m_macValueStatic = new wxStaticText( this, -1, "" );
+         SetRange(minValue, maxValue);
+         SetValue(value);
     }
   
     }
   
-  m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds ,
-                               title , false ,  value , minValue , maxValue, 
-                               kControlSliderProc +  kControlSliderLiveFeedback + ( ( style & wxSL_AUTOTICKS ) ? kControlSliderHasTickMarks : 0 ) , (long) this ) ;
-  
-  wxASSERT_MSG( m_macControl != NULL , "No valid mac control" ) ;
-  
-  ::SetControlAction( m_macControl , wxMacLiveScrollbarActionUPP ) ;
-  
-  MacPostControlCreate() ;
-  
-  if ( style & wxSL_LABELS )
-    {
-      if ( style & wxSL_HORIZONTAL )
-       {
-         wxPoint leftpos( 0 , 15 ) ;
-         wxPoint rightpos( m_width - (maxtextwidth + 20) , 15 ) ;
-         wxPoint valuepos( m_width - maxtextwidth , 0 ) ;
-         wxString valuestring ;
-         
-         valuestring.Printf( "%d" , minValue ) ;
-         m_macMinimumStatic = new wxStaticText( this , -1 , valuestring , leftpos ) ;
-
-         valuestring.Printf( "%d" , maxValue ) ;
-         m_macMinimumStatic = new wxStaticText( this , -1 , valuestring , rightpos ) ;
-
-         valuestring.Printf( "%d" , value ) ;
-         m_macMinimumStatic = new wxStaticText( this , -1 , valuestring , valuepos ) ;
-       }
-      else // Vertical slider
-       {
-         wxPoint toppos( 17 , 0 ) ;
-         wxPoint bottompos( 17 , m_height - (textheight + 15) ) ;
-         wxPoint valuepos( 0 , m_height - textheight ) ;
-         wxString valuestring ;
-         
-         valuestring.Printf( "%d" , minValue ) ;
-         m_macMinimumStatic = new wxStaticText( this , -1 , valuestring , bottompos ) ;
-
-         valuestring.Printf( "%d" , maxValue ) ;
-         m_macMinimumStatic = new wxStaticText( this , -1 , valuestring , toppos ) ;
-
-         valuestring.Printf( "%d" , value ) ;
-         m_macMinimumStatic = new wxStaticText( this , -1 , valuestring , valuepos ) ;
-       }
-    }
-  
-  return true;
+     else {
+         m_macMinimumStatic = NULL ;
+         m_macMaximumStatic = NULL ;
+         m_macValueStatic = NULL ;
+     }
+     if(style & wxSL_VERTICAL) {
+         SetSizeHints(10, -1, 10, -1);  // Forces SetSize to use the proper width
+     }
+     else {
+         SetSizeHints(-1, 10, -1, 10);  // Forces SetSize to use the proper height
+     }
+     // NB!  SetSizeHints is overloaded by wxSlider and will substitute 10 with the
+     // proper dimensions, it also means other people cannot bugger the slider with
+     // other values
+     MacPostControlCreate() ;
+     return true;
 }
 
 wxSlider::~wxSlider()
 }
 
 wxSlider::~wxSlider()
@@ -194,8 +134,8 @@ void wxSlider::SetValue(int value)
 {
        wxString valuestring ;
        valuestring.Printf( "%d" , value ) ;    
 {
        wxString valuestring ;
        valuestring.Printf( "%d" , value ) ;    
-       if ( m_macMinimumStatic )
-               m_macMinimumStatic->SetLabel( valuestring ) ;
+       if ( m_macValueStatic )
+               m_macValueStatic->SetLabel( valuestring ) ;
        SetControlValue( m_macControl , value ) ;
 }
 
        SetControlValue( m_macControl , value ) ;
 }
 
@@ -206,7 +146,6 @@ void wxSlider::SetRange(int minValue, int maxValue)
   m_rangeMin = minValue;
   m_rangeMax = maxValue;
 
   m_rangeMin = minValue;
   m_rangeMax = maxValue;
 
-  // TODO
   SetControlMinimum(m_macControl, m_rangeMin);
   SetControlMaximum(m_macControl, m_rangeMax);
   
   SetControlMinimum(m_macControl, m_rangeMin);
   SetControlMaximum(m_macControl, m_rangeMax);
   
@@ -300,11 +239,6 @@ void wxSlider::Command (wxCommandEvent & event)
   ProcessCommand (event);
 }
 
   ProcessCommand (event);
 }
 
-bool wxSlider::Show( bool show ) 
-{
-       return wxWindow::Show( show ) ;
-}
-
 void wxSlider::MacHandleControlClick( ControlHandle control , SInt16 controlpart ) 
 {
        SInt16 value = ::GetControlValue( m_macControl ) ;
 void wxSlider::MacHandleControlClick( ControlHandle control , SInt16 controlpart ) 
 {
        SInt16 value = ::GetControlValue( m_macControl ) ;
@@ -322,3 +256,235 @@ void wxSlider::MacHandleControlClick( ControlHandle control , SInt16 controlpart
 
   GetEventHandler()->ProcessEvent( cevent );
 }
 
   GetEventHandler()->ProcessEvent( cevent );
 }
+
+ /* This is overloaded in wxSlider so that the proper width/height will always be used
+  * for the slider different values would cause redrawing and mouse detection problems */
+ void wxSlider::SetSizeHints( int minW, int minH,
+                              int maxW , int maxH ,
+                              int incW , int incH )
+ {
+     wxSize size = GetBestSize();
+     if(GetWindowStyle() & wxSL_VERTICAL) {
+         wxWindow::SetSizeHints(size.x, minH, size.x, maxH, incW, incH);
+     }
+     else {
+         wxWindow::SetSizeHints(minW, size.y, maxW, size.y, incW, incH);
+     }
+ }
+ wxSize wxSlider::DoGetBestSize() const
+ {
+     wxSize size;
+     int textwidth, textheight;
+     if(GetWindowStyle() & wxSL_LABELS)
+     {
+         wxString text;
+         int ht, wd;
+         // Get maximum text label width and height
+         text.Printf("%d", m_rangeMin);
+         GetTextExtent(text, &textwidth, &textheight);
+         text.Printf("%d", m_rangeMax);
+         GetTextExtent(text, &wd, &ht);
+         if(ht > textheight) {
+             textheight = ht;
+         }
+         if (wd > textwidth) {
+             textwidth = wd;
+         }
+     }
+     if(GetWindowStyle() & wxSL_VERTICAL)
+     {
+         if(GetWindowStyle() & wxSL_AUTOTICKS) {
+             size.x = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS;
+         }
+         else {
+             size.x = wxSLIDER_DIMENSIONACROSS_ARROW;
+         }
+         if(GetWindowStyle() & wxSL_LABELS) {
+             size.x += textwidth + wxSLIDER_BORDERTEXT;
+         }
+         size.y = 150;
+     }
+     else
+     {
+         if(GetWindowStyle() & wxSL_AUTOTICKS) {
+             size.y = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS;
+         }
+         else {
+             size.y = wxSLIDER_DIMENSIONACROSS_ARROW;
+         }
+         if(GetWindowStyle() & wxSL_LABELS) {
+             size.y += textheight + wxSLIDER_BORDERTEXT;
+         }
+         size.x = 150;
+     }
+     return size;
+ }
+ void wxSlider::DoSetSize(int x, int y, int width, int height, int sizeFlags)
+ {
+     Rect oldbounds, newbounds;
+     int new_x, new_y, new_width, new_height;
+     int mac_x, mac_y;
+     new_x = m_x;
+     new_y = m_y;
+     new_width  = m_width;
+     new_height = m_height;
+     if (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)
+     {
+         new_x      = x;
+         new_y      = y;
+         new_width  = width;
+         new_height = height;
+     }
+     else
+     {
+         if (x != -1)      new_x      = x;
+         if (y != -1)      new_y      = y;
+         if (width != -1)  new_width  = width;
+         if (height != -1) new_height = height;
+     }
+     if(sizeFlags & wxSIZE_AUTO)
+     {
+         wxSize size = GetBestSize();
+         if (sizeFlags & wxSIZE_AUTO_WIDTH)
+         {
+             if (width == -1)   new_width = size.x;
+         }
+         if (sizeFlags & wxSIZE_AUTO_HEIGHT)
+         {
+             if (height == -1)   new_height = size.y;
+         }
+     }
+     AdjustForParentClientOrigin(new_x, new_y, sizeFlags);
+     mac_x = new_x;
+     mac_y = new_y;
+     if(GetParent()) {
+         GetParent()->MacClientToRootWindow(&mac_x, &mac_y);
+     }
+     GetControlBounds(m_macControl, &oldbounds);
+     oldbounds.right = oldbounds.left + m_width;
+     oldbounds.bottom = oldbounds.top + m_height;
+     bool doMove = false;
+     bool doResize = false;
+     if ( mac_x != oldbounds.left || mac_y != oldbounds.top )
+     {
+         doMove = true ;
+     }
+     if ( new_width != m_width || new_height != m_height )
+     {
+         doResize = true ;
+     }
+     if ( doMove || doResize )
+     {
+         // Ensure resize is within constraints
+         if ((m_minWidth != -1) && (new_width < m_minWidth)) {
+             new_width = m_minWidth;
+         }
+         if ((m_minHeight != -1) && (new_height < m_minHeight)) {
+             new_height = m_minHeight;
+         }
+         if ((m_maxWidth != -1) && (new_width > m_maxWidth)) {
+             new_width = m_maxWidth;
+         }
+         if ((m_maxHeight != -1) && (new_height > m_maxHeight)) {
+             new_height = m_maxHeight;
+         }
+         DoMoveWindow(new_x, new_y, new_width, new_height);
+         // Update window at old and new positions
+         SetRect(&newbounds, m_x, m_y, m_x + m_width, m_y + m_height);
+         WindowRef rootwindow = GetMacRootWindow();
+         InvalWindowRect( rootwindow , &oldbounds );
+         InvalWindowRect( rootwindow , &newbounds );
+         if ( doMove )
+         {
+             wxMoveEvent event(wxPoint(m_x, m_y), m_windowId);
+             event.SetEventObject(this);
+             GetEventHandler()->ProcessEvent(event) ;
+         }
+         if ( doResize )
+         {
+             wxSizeEvent event(wxSize(m_width, m_height), m_windowId);
+             event.SetEventObject(this);
+             GetEventHandler()->ProcessEvent(event);
+         }
+     }
+ }
+ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
+ {
+     m_x = x;
+     m_y = y;
+     m_width  = width;
+     m_height = height;
+     int  xborder, yborder;
+     int  minValWidth, maxValWidth, textwidth, textheight;
+     int  sliderBreadth;
+     xborder = yborder = 0;
+     if (GetWindowStyle() & wxSL_LABELS)
+     {
+         wxString text;
+         int ht;
+         // Get maximum text label width and height
+         text.Printf("%d", m_rangeMin);
+         GetTextExtent(text, &minValWidth, &textheight);
+         text.Printf("%d", m_rangeMax);
+         GetTextExtent(text, &maxValWidth, &ht);
+         if(ht > textheight) {
+             textheight = ht;
+         }
+         textwidth = (minValWidth > maxValWidth ? minValWidth : maxValWidth);
+         xborder = textwidth + wxSLIDER_BORDERTEXT;
+         yborder = textheight + wxSLIDER_BORDERTEXT;
+         // Get slider breadth
+         if(GetWindowStyle() & wxSL_AUTOTICKS) {
+             sliderBreadth = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS;
+         }
+         else {
+             sliderBreadth = wxSLIDER_DIMENSIONACROSS_ARROW;
+         }
+         if(GetWindowStyle() & wxSL_VERTICAL)
+         {
+             m_macMinimumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT,
+                                      height - yborder - textheight);
+             m_macMaximumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT, 0);
+             m_macValueStatic->Move(0, height - textheight);
+         }
+         else
+         {
+             m_macMinimumStatic->Move(0, sliderBreadth + wxSLIDER_BORDERTEXT);
+             m_macMaximumStatic->Move(width - xborder - maxValWidth / 2,
+                                      sliderBreadth + wxSLIDER_BORDERTEXT);
+             m_macValueStatic->Move(width - textwidth, 0);
+         }
+     }
+     if(GetParent()) {
+         GetParent()->MacClientToRootWindow(&x, &y);
+     }
+     UMAMoveControl(m_macControl, x, y);
+     UMASizeControl(m_macControl, width - xborder, height - yborder);
+}
\ No newline at end of file
index 31aca328439b36c9564c3a4ae4b9fa8070181160..272c0791f351eefd4919902012cdf8bb7769669b 100644 (file)
@@ -18,7 +18,9 @@
 
 #include "wx/spinctrl.h"
 
 
 #include "wx/spinctrl.h"
 
+#if 0
 
 
+// now using the generic impl
 //-----------------------------------------------------------------------------
 // wxSpinCtrl
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 // wxSpinCtrl
 //-----------------------------------------------------------------------------
@@ -37,5 +39,7 @@
 
 #endif // wxUSE_SPINBTN/!wxUSE_SPINBTN
 
 
 #endif // wxUSE_SPINBTN/!wxUSE_SPINBTN
 
+#endif
+
 #endif   // wxUSE_SPINCTRL
 
 #endif   // wxUSE_SPINCTRL
 
index 0cd659a9f07fdcb429a6041f4b9b90336e174f34..72cc0f8290a1ea69b3b2174032c8838820d3b4b9 100644 (file)
@@ -341,20 +341,24 @@ void wxWindowMac::DragAcceptFiles(bool accept)
 // Get total size
 void wxWindowMac::DoGetSize(int *x, int *y) const
 {
 // Get total size
 void wxWindowMac::DoGetSize(int *x, int *y) const
 {
-    *x = m_width ;
-    *y = m_height ;
+     if(x)   *x = m_width ;
+     if(y)   *y = m_height ;
 }
 
 void wxWindowMac::DoGetPosition(int *x, int *y) const
 {
 }
 
 void wxWindowMac::DoGetPosition(int *x, int *y) const
 {
-    *x = m_x ;
-    *y = m_y ;
+    int xx,yy;
+    xx = m_x ;
+    yy = m_y ;
     if (GetParent())
     {
         wxPoint pt(GetParent()->GetClientAreaOrigin());
     if (GetParent())
     {
         wxPoint pt(GetParent()->GetClientAreaOrigin());
-        *x -= pt.x;
-        *y -= pt.y;
+        xx -= pt.x;
+        yy -= pt.y;
     }
     }
+    if(x)   *x = xx;
+    if(y)   *y = yy;
 }
 
 #if wxUSE_MENUS
 }
 
 #if wxUSE_MENUS
@@ -378,9 +382,10 @@ void wxWindowMac::DoScreenToClient(int *x, int *y) const
 {
        WindowRef window = GetMacRootWindow() ;
 
 {
        WindowRef window = GetMacRootWindow() ;
 
-       Point           localwhere ;
-       localwhere.h = * x ;
-       localwhere.v = * y ;
+       Point           localwhere = {0,0} ;
+
+    if(x)   localwhere.h = * x ;
+    if(y)   localwhere.v = * y ;
 
        GrafPtr         port ;  
        ::GetPort( &port ) ;
 
        GrafPtr         port ;  
        ::GetPort( &port ) ;
@@ -388,8 +393,8 @@ void wxWindowMac::DoScreenToClient(int *x, int *y) const
        ::GlobalToLocal( &localwhere ) ;
        ::SetPort( port ) ;
 
        ::GlobalToLocal( &localwhere ) ;
        ::SetPort( port ) ;
 
-       *x = localwhere.h ;
-       *y = localwhere.v ;
+    if(x)   *x = localwhere.h ;
+    if(y)   *y = localwhere.v ;
        
        MacRootWindowToClient( x , y ) ;
 }
        
        MacRootWindowToClient( x , y ) ;
 }
@@ -400,9 +405,9 @@ void wxWindowMac::DoClientToScreen(int *x, int *y) const
        
        MacClientToRootWindow( x , y ) ;
        
        
        MacClientToRootWindow( x , y ) ;
        
-       Point           localwhere ;
-       localwhere.h = * x ;
-       localwhere.v = * y ;
+       Point           localwhere = { 0,0 };
+    if(x)   localwhere.h = * x ;
+    if(y)   localwhere.v = * y ;
        
        GrafPtr         port ;  
        ::GetPort( &port ) ;
        
        GrafPtr         port ;  
        ::GetPort( &port ) ;
@@ -410,32 +415,26 @@ void wxWindowMac::DoClientToScreen(int *x, int *y) const
        ::SetOrigin( 0 , 0 ) ;
        ::LocalToGlobal( &localwhere ) ;
        ::SetPort( port ) ;
        ::SetOrigin( 0 , 0 ) ;
        ::LocalToGlobal( &localwhere ) ;
        ::SetPort( port ) ;
-       *x = localwhere.h ;
-       *y = localwhere.v ;
+    if(x)   *x = localwhere.h ;
+    if(y)   *y = localwhere.v ;
 }
 
 void wxWindowMac::MacClientToRootWindow( int *x , int *y ) const
 {
 }
 
 void wxWindowMac::MacClientToRootWindow( int *x , int *y ) const
 {
-       if ( m_macWindowData )
-       {
-       }
-       else
+       if ( m_macWindowData == NULL)
        {
        {
-               *x += m_x ;
-               *y += m_y ;
+               if(x)   *x += m_x ;
+               if(y)   *y += m_y ;
                GetParent()->MacClientToRootWindow( x , y ) ;
        }
 }
 
 void wxWindowMac::MacRootWindowToClient( int *x , int *y ) const
 {
                GetParent()->MacClientToRootWindow( x , y ) ;
        }
 }
 
 void wxWindowMac::MacRootWindowToClient( int *x , int *y ) const
 {
-       if ( m_macWindowData )
+       if ( m_macWindowData == NULL)
        {
        {
-       }
-       else
-       {
-               *x -= m_x ;
-               *y -= m_y ;
+               if(x)   *x -= m_x ;
+           if(y)   *y -= m_y ;
                GetParent()->MacRootWindowToClient( x , y ) ;
        }
 }
                GetParent()->MacRootWindowToClient( x , y ) ;
        }
 }
@@ -480,11 +479,12 @@ bool wxWindowMac::SetCursor(const wxCursor& cursor)
 // Get size *available for subwindows* i.e. excluding menu bar etc.
 void wxWindowMac::DoGetClientSize(int *x, int *y) const
 {
 // Get size *available for subwindows* i.e. excluding menu bar etc.
 void wxWindowMac::DoGetClientSize(int *x, int *y) const
 {
-    *x = m_width ;
-    *y = m_height ;
+    int ww, hh;
+    ww = m_width ;
+    hh = m_height ;
 
 
-       *x -= MacGetLeftBorderSize(  )  + MacGetRightBorderSize(  ) ;
-       *y -= MacGetTopBorderSize(  ) + MacGetBottomBorderSize( );
+       ww -= MacGetLeftBorderSize(  )  + MacGetRightBorderSize(  ) ;
+       hh -= MacGetTopBorderSize(  ) + MacGetBottomBorderSize( );
        
   if ( (m_vScrollBar && m_vScrollBar->IsShown()) || (m_hScrollBar  && m_hScrollBar->IsShown()) )
   {
        
   if ( (m_vScrollBar && m_vScrollBar->IsShown()) || (m_hScrollBar  && m_hScrollBar->IsShown()) )
   {
@@ -496,7 +496,6 @@ void wxWindowMac::DoGetClientSize(int *x, int *y) const
        MacClientToRootWindow( &x1 , &y1 ) ;
        MacClientToRootWindow( &w , &h ) ;
        
        MacClientToRootWindow( &x1 , &y1 ) ;
        MacClientToRootWindow( &w , &h ) ;
        
-       WindowRef window = NULL ;
        wxWindowMac *iter = (wxWindowMac*)this ;
        
        int totW = 10000 , totH = 10000;
        wxWindowMac *iter = (wxWindowMac*)this ;
        
        int totW = 10000 , totH = 10000;
@@ -514,21 +513,23 @@ void wxWindowMac::DoGetClientSize(int *x, int *y) const
        
        if (m_hScrollBar  && m_hScrollBar->IsShown() )
        {
        
        if (m_hScrollBar  && m_hScrollBar->IsShown() )
        {
-               (*y) -= MAC_SCROLLBAR_SIZE;
+               hh -= MAC_SCROLLBAR_SIZE;
                if ( h-y1 >= totH )
                {
                if ( h-y1 >= totH )
                {
-                       (*y)+= 1 ;
+                       hh += 1 ;
                }
     }
        if (m_vScrollBar  && m_vScrollBar->IsShown() )
        {
                }
     }
        if (m_vScrollBar  && m_vScrollBar->IsShown() )
        {
-       (*x) -= MAC_SCROLLBAR_SIZE;
+       ww -= MAC_SCROLLBAR_SIZE;
                if ( w-x1 >= totW )
                {
                if ( w-x1 >= totW )
                {
-               (*x) += 1 ;
+               ww += 1 ;
        }
        }
   }
        }
        }
   }
+  if(x)   *x = ww;
+  if(y)   *y = hh;
 }
 
 
 }
 
 
@@ -789,7 +790,7 @@ bool wxWindowMac::Show(bool show)
        {
            WindowRef window = GetMacRootWindow() ;
            wxWindowMac* win = wxFindWinFromMacWindow( window ) ;
        {
            WindowRef window = GetMacRootWindow() ;
            wxWindowMac* win = wxFindWinFromMacWindow( window ) ;
-           if ( !win->m_isBeingDeleted )
+           if ( win && !win->m_isBeingDeleted )
                Refresh() ;     
        }
        else
                Refresh() ;     
        }
        else
@@ -1797,7 +1798,6 @@ void wxWindowMac::MacMouseDown( EventRecord *ev , short part)
 
 void wxWindowMac::MacMouseUp( EventRecord *ev , short part)
 {
 
 void wxWindowMac::MacMouseUp( EventRecord *ev , short part)
 {
-       WindowPtr frontWindow ;
        switch (part)
        {
                case inContent:         
        switch (part)
        {
                case inContent:         
@@ -1810,7 +1810,6 @@ void wxWindowMac::MacMouseUp( EventRecord *ev , short part)
 
 void wxWindowMac::MacMouseMoved( EventRecord *ev , short part)
 {
 
 void wxWindowMac::MacMouseMoved( EventRecord *ev , short part)
 {
-       WindowPtr frontWindow ;
        switch (part)
        {
                case inContent:         
        switch (part)
        {
                case inContent:         
@@ -1843,7 +1842,7 @@ void wxWindowMac::MacRedraw( RgnHandle updatergn , long time)
        // ownUpdateRgn is the area that this window has to invalidate i.e. its own area without its children
        RgnHandle ownUpdateRgn = NewRgn() ;
        CopyRgn( updatergn , ownUpdateRgn ) ;
        // ownUpdateRgn is the area that this window has to invalidate i.e. its own area without its children
        RgnHandle ownUpdateRgn = NewRgn() ;
        CopyRgn( updatergn , ownUpdateRgn ) ;
-       wxWindowMac* win = wxFindWinFromMacWindow( window ) ;
+
        {
                wxMacDrawingHelper focus( this ) ; // was client
                if ( focus.Ok() )
        {
                wxMacDrawingHelper focus( this ) ; // was client
                if ( focus.Ok() )
@@ -2042,7 +2041,6 @@ void wxWindowMac::MacUpdate( EventRecord *ev )
 
 WindowRef wxWindowMac::GetMacRootWindow() const
 {
 
 WindowRef wxWindowMac::GetMacRootWindow() const
 {
-       WindowRef window = NULL ;
        wxWindowMac *iter = (wxWindowMac*)this ;
        
        while( iter )
        wxWindowMac *iter = (wxWindowMac*)this ;
        
        while( iter )
@@ -2121,7 +2119,6 @@ void wxWindowMac::MacRepositionScrollBars()
        MacClientToRootWindow( &x , &y ) ;
        MacClientToRootWindow( &w , &h ) ;
        
        MacClientToRootWindow( &x , &y ) ;
        MacClientToRootWindow( &w , &h ) ;
        
-       WindowRef window = NULL ;
        wxWindowMac *iter = (wxWindowMac*)this ;
        
        int totW = 10000 , totH = 10000;
        wxWindowMac *iter = (wxWindowMac*)this ;
        
        int totW = 10000 , totH = 10000;
index 0559853584c689fc3381eff7121132f3fd216b37..30a17488d2f79f62948ac6c3909980dd38e5673c 100644 (file)
@@ -216,6 +216,13 @@ void wxChoice::MacHandleControlClick( ControlHandle control , SInt16 controlpart
     event.SetString(GetStringSelection());
     ProcessCommand(event);
 }
     event.SetString(GetStringSelection());
     ProcessCommand(event);
 }
+
+wxSize wxChoice::DoGetBestSize() const
+{
+    // TODO should modify this to take into account string length ala wxGTK
+    return wxSize(100,20);
+}
+
 /*
 void wxChoice::Command(wxCommandEvent & event)
 {
 /*
 void wxChoice::Command(wxCommandEvent & event)
 {
index f0714b067a99305774f138b94d0860d40b1c77a8..1d23a5eaaee279e18b8dda8aa972cbf46ed9e925 100644 (file)
@@ -143,7 +143,50 @@ void wxControl::SetLabel(const wxString& title)
 
 wxSize wxControl::DoGetBestSize() const
 {
 
 wxSize wxControl::DoGetBestSize() const
 {
-    return wxSize(20, 20);
+       Rect    bestsize = { 0 , 0 , 0 , 0 } ;
+       short   baselineoffset ;
+       int bestWidth, bestHeight ;
+       UMAGetBestControlRect( m_macControl , &bestsize , &baselineoffset ) ;
+
+       if ( EmptyRect( &bestsize ) )
+       {
+               baselineoffset = 0;
+               bestsize.left = bestsize.top = 0 ;
+               bestsize.right = 16 ;
+               bestsize.bottom = 16 ;
+               if ( IsKindOf( CLASSINFO( wxScrollBar ) ) )
+               {
+                       bestsize.bottom = 16 ;
+               }
+               else if ( IsKindOf( CLASSINFO( wxSpinButton ) ) )
+               {
+                       bestsize.bottom = 24 ; 
+               }
+       }
+
+       if ( IsKindOf( CLASSINFO( wxButton ) ) )
+       {
+               bestWidth = m_label.Length() * 8 + 12 ;
+               if ( bestWidth < 70 )
+                 bestWidth = 70 ;
+       }
+       else if ( IsKindOf( CLASSINFO( wxStaticText ) ) )
+       {
+               bestWidth = m_label.Length() * 8 ;
+       }
+       else
+               bestWidth = bestsize.right - bestsize.left ;
+               
+       bestWidth += 2 * m_macHorizontalBorder ;
+
+       bestHeight = bestsize.bottom - bestsize.top ;
+       if ( bestHeight < 10 )
+               bestHeight = 13 ;
+
+       bestHeight += 2 * m_macVerticalBorder;
+
+               
+    return wxSize(bestWidth, bestHeight);
 }
 
 bool wxControl::ProcessCommand (wxCommandEvent & event)
 }
 
 bool wxControl::ProcessCommand (wxCommandEvent & event)
@@ -203,7 +246,7 @@ void wxControl::MacPreControlCreate( wxWindow *parent, wxWindowID id, wxString l
        SetValidator(validator);
 
   m_windowStyle = style;
        SetValidator(validator);
 
   m_windowStyle = style;
-  parent->AddChild((wxButton *)this);
+  parent->AddChild(this);
 
   m_backgroundColour = parent->GetBackgroundColour() ;
   m_foregroundColour = parent->GetForegroundColour() ;
 
   m_backgroundColour = parent->GetBackgroundColour() ;
   m_foregroundColour = parent->GetForegroundColour() ;
@@ -213,20 +256,17 @@ void wxControl::MacPreControlCreate( wxWindow *parent, wxWindowID id, wxString l
   else
       m_windowId = id;
 
   else
       m_windowId = id;
 
+   // These sizes will be adjusted in MacPostControlCreate
+
        m_width = size.x ;
        m_height = size.y ;
        m_width = size.x ;
        m_height = size.y ;
-       int x = pos.x ;
-       int y = pos.y ;
-       AdjustForParentClientOrigin(x, y, wxSIZE_USE_EXISTING);
-       m_x = x ;
-       m_y = y ;
+       m_x = pos.x ;
+       m_y = pos.y ;
                
                
-
-       parent->MacClientToRootWindow( &x , &y ) ;
-       outBounds->top = y + m_macVerticalBorder ;
-       outBounds->left = x + m_macHorizontalBorder ;
-       outBounds->bottom = outBounds->top + m_height - 2 * m_macVerticalBorder;
-       outBounds->right = outBounds->left + m_width - 2 * m_macHorizontalBorder ;
+       outBounds->top = -10;
+       outBounds->left = -10;
+       outBounds->bottom = 0;
+       outBounds->right = 0;
 
        char c_text[255];
        strcpy( c_text , label ) ;
 
        char c_text[255];
        strcpy( c_text , label ) ;
@@ -268,17 +308,35 @@ void wxControl::MacPostControlCreate()
                ::UMASetControlFontStyle( m_macControl , &controlstyle ) ;
        }
        ControlHandle container = GetParent()->MacGetContainerForEmbedding() ;
                ::UMASetControlFontStyle( m_macControl , &controlstyle ) ;
        }
        ControlHandle container = GetParent()->MacGetContainerForEmbedding() ;
-       wxASSERT_MSG( container != NULL , "No valid mac container control" ) ;
+       wxASSERT_MSG( container != NULL , wxT("No valid mac container control") ) ;
        ::UMAEmbedControl( m_macControl , container ) ;
        m_macControlIsShown  = true ;
        ::UMAEmbedControl( m_macControl , container ) ;
        m_macControlIsShown  = true ;
-       MacAdjustControlRect() ;
+
        wxAssociateControlWithMacControl( m_macControl , this ) ;
        wxAssociateControlWithMacControl( m_macControl , this ) ;
-       UMAShowControl( m_macControl ) ;
+
+     // Adjust the controls size and position
+     wxPoint pos(m_x, m_y);
+     wxSize best_size( DoGetBestSize() );
+     wxSize new_size( m_width, m_height );
+     m_x = m_y = m_width = m_height = -1;  // Forces SetSize to move/size the control
+     if (new_size.x == -1) {
+        new_size.x = best_size.x;
+     }
+     if (new_size.y == -1) {
+         new_size.y = best_size.y;
+     }
+     SetSize(pos.x, pos.y, new_size.x, new_size.y);
+     UMAShowControl( m_macControl ) ;
 }
 
 void wxControl::MacAdjustControlRect() 
 {
 }
 
 void wxControl::MacAdjustControlRect() 
 {
-       wxASSERT_MSG( m_macControl != NULL , "No valid mac control" ) ;
+       wxASSERT_MSG( m_macControl != NULL , wxT("No valid mac control") ) ;
        if ( m_width == -1 || m_height == -1 )
        {
                Rect    bestsize = { 0 , 0 , 0 , 0 } ;
        if ( m_width == -1 || m_height == -1 )
        {
                Rect    bestsize = { 0 , 0 , 0 , 0 } ;
@@ -453,102 +511,127 @@ void  wxControl::DoSetSize(int x, int y,
                return ;
        }
 
                return ;
        }
 
-       WindowRef rootwindow = GetMacRootWindow() ;
-       wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ;
-       UMASetThemeWindowBackground( rootwindow , kThemeBrushDialogBackgroundActive , false ) ;
-               
-       int former_x = m_x ;
-       int former_y = m_y ;
-       int former_w = m_width ;
-       int former_h = m_height ;
-       
-       Rect contrlRect ;               
-       GetControlBounds( m_macControl , &contrlRect ) ; 
-       int former_mac_x = contrlRect.left ;
-       int former_mac_y = contrlRect.top ;
-       
-  int currentX, currentY;
-  GetPosition(&currentX, &currentY);
-  int currentW,currentH;
-  GetSize(&currentW, &currentH);
-
-  int actualWidth = width;
-  int actualHeight = height;
-  int actualX = x;
-  int actualY = y;
-  if (x == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
-      actualX = currentX;
-  if (y == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
-      actualY = currentY;
-  if (width == -1)
-      actualWidth = currentW ;
-  if (height == -1)
-      actualHeight = currentH ;
-
-       if ( actualX == currentX && actualY == currentY && actualWidth == currentW && actualHeight == currentH)
-               return ;
-               
-       AdjustForParentClientOrigin(actualX, actualY, sizeFlags);
-       WindowRef macrootwindow = GetMacRootWindow() ;
-       wxMacDrawingHelper focus( wxFindWinFromMacWindow( macrootwindow ) ) ;
-
-       int mac_x = actualX ;
-       int mac_y = actualY ;
-       GetParent()->MacClientToRootWindow( & mac_x , & mac_y ) ;
-       
-       if ( mac_x != former_mac_x || mac_y != former_mac_y )
-       {
-               {
-                       Rect inval = { former_mac_y , former_mac_x , former_mac_y + m_height , former_mac_x + m_width } ;
-                       InvalWindowRect( macrootwindow, &inval ) ;
-               }
-               UMAMoveControl( m_macControl , mac_x + m_macHorizontalBorder , mac_y  + m_macVerticalBorder ) ;
-               {
-                       Rect inval = { mac_y , mac_x , mac_y + m_height , mac_x + m_width } ;
-                       InvalWindowRect(macrootwindow, &inval ) ;
-               }
-       }
-
-       if ( actualX != former_x || actualY != former_y )
-       {
-               m_x = actualX ;
-               m_y = actualY ;
-
-               MacRepositionScrollBars() ;
-               // To consider -> should the parameters be the effective or the virtual coordinates (AdjustForParent..)
-       wxPoint point(m_x, m_y);
-        wxMoveEvent event(point, m_windowId);
-        event.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(event);
-       }               
-       if ( actualWidth != former_w || actualHeight != former_h )
-       {
-               {
-                       Rect inval = { mac_y , mac_x , mac_y + former_h , mac_x + former_w } ;
-                       InvalWindowRect( macrootwindow, &inval ) ;
-               }
-               m_width = actualWidth ;
-               m_height = actualHeight ;
-
-               UMASizeControl( m_macControl ,  m_width - 2 * m_macHorizontalBorder, m_height -  2 * m_macVerticalBorder ) ;
-               {
-                       Rect inval = { mac_y , mac_x , mac_y + m_height , mac_x + m_width } ;
-                       InvalWindowRect( macrootwindow , &inval ) ;
-               }
-
-               MacRepositionScrollBars() ;
-       wxSize size(m_width, m_height);
-        wxSizeEvent event(size, m_windowId);
-        event.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(event);
-       }
-       if ( wxrootwindow->IsKindOf( CLASSINFO( wxDialog ) ) )
-       {
-       }
-       else
-       {
-               UMASetThemeWindowBackground( rootwindow , kThemeBrushDocumentWindowBackground , false ) ;
-       }
+     Rect oldbounds, newbounds;
+     int new_x, new_y, new_width, new_height;
+     int mac_x, mac_y;
+     new_x = m_x;
+     new_y = m_y;
+     new_width  = m_width;
+     new_height = m_height;
+     if (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)
+     {
+         new_x      = x;
+         new_y      = y;
+         new_width  = width;
+         new_height = height;
+     }
+     else
+     {
+         if (x != -1)      new_x      = x;
+         if (y != -1)      new_y      = y;
+         if (width != -1)  new_width  = width;
+         if (height != -1) new_height = height;
+     }
+     if(sizeFlags & wxSIZE_AUTO)
+     {
+         wxSize size = GetBestSize();
+         if (sizeFlags & wxSIZE_AUTO_WIDTH)
+         {
+             if (width == -1)   new_width = size.x;
+         }
+         if (sizeFlags & wxSIZE_AUTO_HEIGHT)
+         {
+             if (height == -1)   new_height = size.y;
+         }
+     }
+     AdjustForParentClientOrigin(new_x, new_y, sizeFlags);
+     mac_x = new_x;
+     mac_y = new_y;
+     if(GetParent()) {
+         GetParent()->MacClientToRootWindow(&mac_x, &mac_y);
+     }
+     GetControlBounds(m_macControl, &oldbounds);
+     oldbounds.right = oldbounds.left + m_width;
+     oldbounds.bottom = oldbounds.top + m_height;
+     bool doMove = false;
+     bool doResize = false;
+     if ( mac_x != (oldbounds.left - m_macHorizontalBorder) ||
+          mac_y != (oldbounds.top - m_macVerticalBorder) )
+     {
+         doMove = true ;
+     }
+     if ( new_width != oldbounds.right - oldbounds.left - 2 * m_macHorizontalBorder ||
+          new_height != oldbounds.bottom - oldbounds.top - 2 * m_macVerticalBorder)
+     {
+         doResize = true ;
+     }
+     if ( doMove || doResize )
+     {
+         // Ensure resize is within constraints
+         if ((m_minWidth != -1) && (new_width < m_minWidth)) {
+             new_width = m_minWidth;
+         }
+         if ((m_minHeight != -1) && (new_height < m_minHeight)) {
+             new_height = m_minHeight;
+         }
+         if ((m_maxWidth != -1) && (new_width > m_maxWidth)) {
+             new_width = m_maxWidth;
+         }
+         if ((m_maxHeight != -1) && (new_height > m_maxHeight)) {
+             new_height = m_maxHeight;
+         }
+         if ( doMove )
+         {
+             m_x = new_x;
+             m_y = new_y;
+             UMAMoveControl(m_macControl,
+                            mac_x + m_macHorizontalBorder, mac_y + m_macVerticalBorder);
+             wxMoveEvent event(wxPoint(m_x, m_y), m_windowId);
+             event.SetEventObject(this);
+             GetEventHandler()->ProcessEvent(event) ;
+         }
+         if ( doResize )
+         {
+             m_width = new_width;
+             m_height = new_height;
+             UMASizeControl( m_macControl,
+                             m_width - 2 * m_macHorizontalBorder,
+                             m_height -  2 * m_macVerticalBorder ) ;
+             wxSizeEvent event(wxSize(m_width, m_height), m_windowId);
+             event.SetEventObject(this);
+             GetEventHandler()->ProcessEvent(event);
+         }
+         // Set up port
+         WindowRef rootwindow = GetMacRootWindow() ;
+         wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ;
+         wxMacDrawingHelper focus( wxrootwindow );
+         UMASetThemeWindowBackground( rootwindow , kThemeBrushDialogBackgroundActive , false ) ;
+         // Update window at old and new positions
+         SetRect(&newbounds, m_x, m_y, m_x + m_width, m_y + m_height);
+         InvalWindowRect( rootwindow , &oldbounds );
+         InvalWindowRect( rootwindow , &newbounds );
+         MacRepositionScrollBars() ;
+         if ( !wxrootwindow->IsKindOf( CLASSINFO( wxDialog ) ) )
+         {
+             UMASetThemeWindowBackground( rootwindow, kThemeBrushDocumentWindowBackground, false );
+         }
+     }
 }
 
 bool  wxControl::Show(bool show) 
 }
 
 bool  wxControl::Show(bool show) 
@@ -619,7 +702,6 @@ void wxControl::MacRedrawControl()
                                // the mac control manager always assumes to have the origin at 0,0
                                SetOrigin( 0 , 0 ) ;
                                
                                // the mac control manager always assumes to have the origin at 0,0
                                SetOrigin( 0 , 0 ) ;
                                
-                               bool                    hasTabBehind = false ;
                                wxWindow* parent = GetParent() ;
                                while ( parent )
                                {
                                wxWindow* parent = GetParent() ;
                                while ( parent )
                                {
@@ -660,8 +742,6 @@ void wxControl::OnPaint(wxPaintEvent& event)
                                // the mac control manager always assumes to have the origin at 0,0
                                SetOrigin( 0 , 0 ) ;
 
                                // the mac control manager always assumes to have the origin at 0,0
                                SetOrigin( 0 , 0 ) ;
 
-                               
-                               bool hasTabBehind = false ;
                                wxWindow* parent = GetParent() ;
                                while ( parent )
                                {
                                wxWindow* parent = GetParent() ;
                                while ( parent )
                                {
@@ -732,7 +812,6 @@ void  wxControl::OnMouseEvent( wxMouseEvent &event )
                        
                ControlHandle   control ;
                Point           localwhere ;
                        
                ControlHandle   control ;
                Point           localwhere ;
-               GrafPtr         port ;
                SInt16          controlpart ;
                WindowRef       window = GetMacRootWindow() ;
                
                SInt16          controlpart ;
                WindowRef       window = GetMacRootWindow() ;
                
index 6bde00fc744d3dd3c670d7a9e6dd2d10c60de2e0..fb3d2fee9f79b875a906301a1dff3005d2dabec2 100644 (file)
@@ -315,7 +315,7 @@ void wxFrameMac::DoGetClientSize(int *x, int *y) const
        wxWindow::DoGetClientSize( x , y ) ;
 
 #if wxUSE_STATUSBAR
        wxWindow::DoGetClientSize( x , y ) ;
 
 #if wxUSE_STATUSBAR
-  if ( GetStatusBar() )
+  if ( GetStatusBar() && y )
   {
     int statusX, statusY;
     GetStatusBar()->GetClientSize(&statusX, &statusY);
   {
     int statusX, statusY;
     GetStatusBar()->GetClientSize(&statusX, &statusY);
@@ -324,8 +324,10 @@ void wxFrameMac::DoGetClientSize(int *x, int *y) const
 #endif // wxUSE_STATUSBAR
 
   wxPoint pt(GetClientAreaOrigin());
 #endif // wxUSE_STATUSBAR
 
   wxPoint pt(GetClientAreaOrigin());
-  *y -= pt.y;
-  *x -= pt.x;
+  if ( y )
+    *y -= pt.y;
+  if ( x ) 
+    *x -= pt.x;
 }
 
 void wxFrameMac::DoSetClientSize(int clientwidth, int clientheight)
 }
 
 void wxFrameMac::DoSetClientSize(int clientwidth, int clientheight)
index ec38c6230c31b0f30ed72405dd06d987b6400843..496c75fe5b4c737872720a0c5131f366465bce9a 100644 (file)
@@ -149,7 +149,8 @@ void wxNotebook::SetPageSize(const wxSize& size)
 
 int wxNotebook::SetSelection(int nPage)
 {
 
 int wxNotebook::SetSelection(int nPage)
 {
-    wxASSERT( IS_VALID_PAGE(nPage) );
+  if( !IS_VALID_PAGE(nPage) ) 
+    return m_nSelection ;
 
     ChangePage(m_nSelection, nPage);
        SetControlValue( m_macControl , m_nSelection + 1 ) ;
 
     ChangePage(m_nSelection, nPage);
        SetControlValue( m_macControl , m_nSelection + 1 ) ;
index f2651ba5945afca59b967d3a0a7e8fbdb4c7f438..664e5c54d2a0d7e71b2a59effbf67886c503b2bc 100644 (file)
@@ -120,8 +120,6 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
        m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , false , 0 , 0 , 1, 
                kControlGroupBoxTextTitleProc , (long) this ) ;
        
        m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , false , 0 , 0 , 1, 
                kControlGroupBoxTextTitleProc , (long) this ) ;
        
-       MacPostControlCreate() ;
-
     for (i = 0; i < n; i++)
     {
         wxRadioButton *radBtn = new wxRadioButton(this, NewControlId(),choices[i],wxPoint(5,20*i+10),
     for (i = 0; i < n; i++)
     {
         wxRadioButton *radBtn = new wxRadioButton(this, NewControlId(),choices[i],wxPoint(5,20*i+10),
@@ -132,7 +130,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
     }
 
        SetSelection(0);
     }
 
        SetSelection(0);
-       SetSize(pos.x,pos.y,size.x,size.y);
+       MacPostControlCreate() ;
 
   return TRUE;
 }
 
   return TRUE;
 }
@@ -481,6 +479,33 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
                }
 }
 
                }
 }
 
+wxSize wxRadioBox::DoGetBestSize() const
+{
+    int charWidth, charHeight;
+    int maxWidth, maxHeight;
+    int eachWidth, eachHeight;
+    int totWidth, totHeight;
+
+    wxFont font = GetParent()->GetFont();
+    GetTextExtent(wxString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"),
+                  &charWidth, &charHeight, NULL, NULL, &font);
+    charWidth /= 52;
+
+   maxWidth = -1;
+   maxHeight = -1;
+   for (int i = 0 ; i < m_noItems; i++)
+   {
+        GetTextExtent(GetString(i), &eachWidth, &eachHeight);
+        eachWidth  = (int)(eachWidth + RADIO_SIZE) ;
+        eachHeight = (int)((3 * eachHeight) / 2);
+        if (maxWidth < eachWidth)     maxWidth = eachWidth;
+        if (maxHeight < eachHeight)   maxHeight = eachHeight;
+    }
+
+    totHeight = GetRowCount() * (maxHeight + charHeight/2) + charHeight * 3/2;
+    totWidth  = GetColumnCount() * (maxWidth + charWidth) + charWidth;
+   return wxSize(totWidth, totHeight);
+}
 //-------------------------------------------------------------------------------------
 //             Â¥ GetNumVer
 //-------------------------------------------------------------------------------------
 //-------------------------------------------------------------------------------------
 //             Â¥ GetNumVer
 //-------------------------------------------------------------------------------------
index bce30a4bd1b95bf80694d8483ac266b72a5b7d12..53ad11814ee2ff5746955cdec3b62a8f65f7afe1 100644 (file)
@@ -23,6 +23,20 @@ BEGIN_EVENT_TABLE(wxSlider, wxControl)
 END_EVENT_TABLE()
 #endif
 
 END_EVENT_TABLE()
 #endif
 
+ // The dimensions of the different styles of sliders (From Aqua document)
+ #define wxSLIDER_DIMENSIONACROSS 15
+ #define wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS 24
+ #define wxSLIDER_DIMENSIONACROSS_ARROW 18
+ // Distance between slider and text
+ #define wxSLIDER_BORDERTEXT 5
+ /* NB!  The default orientation for a slider is horizontal however if the user specifies
+  * some slider styles but dosen't specify the orientation we have to assume he wants a
+  * horizontal one.  Therefore in this file when testing for the sliders orientation
+  * vertical is tested for if this is not set then we use the horizontal one
+  * eg.  if(GetWindowStyle() & wxSL_VERTICAL) {}  else { horizontal case }>  
+  */
 
 
 // Slider
 
 
 // Slider
@@ -44,141 +58,67 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id,
            const wxValidator& validator,
            const wxString& name)
 {
            const wxValidator& validator,
            const wxString& name)
 {
-  Rect bounds ;
-  Str255 title ;
-  wxSize slsize;
-  int maxtextwidth, textheight;
-  
-  // Is control horizontal or vertical (Can be ambigous if user selects
-  // another style without also specifying horz or vert
-  if (!(style & wxSL_HORIZONTAL) && !(style & wxSL_VERTICAL)) {
-    // Default is horizontal so make it so
-    style |= wxSL_HORIZONTAL;
-  }
-  slsize = size;
-  // Check that size corresponds with users selection of vertical or
-  // horizontal slider and insert suitable default values
-  if (style & wxSL_HORIZONTAL) 
-    {
-      slsize.y = 15;      // Slider width
-      if (slsize.x == -1) {
-        slsize.x = 150;  // Slider default length
-      }
-    }
-  else
-    {
-      slsize.x = 15;      // Slider width
-      if (slsize.y == -1) {
-        slsize.y = 150;  // Slider default length
-      }
+     Rect bounds ;
+     Str255 title ;
+     SInt16 procID;
+
+     m_macMinimumStatic = NULL ;
+     m_macMaximumStatic = NULL ;
+     m_macValueStatic = NULL ;
+
+
+     m_lineSize = 1;
+     m_tickFreq = 0;
+     m_rangeMax = maxValue;
+     m_rangeMin = minValue;
+     m_pageSize = (int)((maxValue-minValue)/10);
+     MacPreControlCreate( parent, id, "", pos, size, style,
+                          validator, name, &bounds, title );
+     procID = kControlSliderProc + kControlSliderLiveFeedback;
+     if(style & wxSL_AUTOTICKS) {
+         procID += kControlSliderHasTickMarks;
     }
     }
-  /* Set the height and width for the slider control region.  The actual 
-   * slider is set at 10 pixels across.  If the slider has labels then the
-   * control region must be large enough to contain these labels
-   */
-  if (style & wxSL_LABELS) 
-    {
-      wxString text;
-      int ht, wd;
-      
-      // Get maximum text label width and height
-      text.Printf("%d", minValue);
-      parent->GetTextExtent(text, &maxtextwidth, &textheight);
-      text.Printf("%d", maxValue);
-      parent->GetTextExtent(text, &wd, &ht);
-      if(ht > textheight) {
-        textheight = ht;
-      }
-      if (wd > maxtextwidth) {
-        maxtextwidth = wd;
-      }
-      
-      if (style & wxSL_VERTICAL) {
-        slsize.x = (15 + maxtextwidth + 2); // Slider wd plus mac text width
-      }
-      if (style & wxSL_HORIZONTAL) {
-        slsize.y = (15 + textheight);  // Slider ht plus text ht.
-      }
-    }
-  
-  MacPreControlCreate( parent , id ,  "" , pos , slsize , style,
-                      validator , name , &bounds , title ) ;
-  
-  m_macMinimumStatic = NULL ;
-  m_macMaximumStatic = NULL ;
-  m_macValueStatic = NULL ;
   
   
-  m_lineSize = 1;
-  m_tickFreq = 0;
-
-  m_rangeMax = maxValue;
-  m_rangeMin = minValue;
 
 
-  m_pageSize = (int)((maxValue-minValue)/10);
-  
-  // Must modify bounds to that of the slider dimensions from slider
-  // dimensions plus text labels.
-  if (style & wxSL_LABELS)
-    {
-      if ( style & wxSL_HORIZONTAL )
-       {
-         bounds.bottom = bounds.top + 15;
-          bounds.right -= (5 + maxtextwidth);
-       }
-      else  // Vertical slider
-       {
-          bounds.right = bounds.left + 15;
-          bounds.bottom -= (5 + textheight);
-       }
+     m_macControl = UMANewControl( parent->GetMacRootWindow(), &bounds, title, false,
+                                   value, minValue, maxValue, procID, (long) this);
+     wxASSERT_MSG( m_macControl != NULL , "No valid mac control" ) ;
+     ::SetControlAction( m_macControl , wxMacLiveScrollbarActionUPP ) ;
+     if(style & wxSL_LABELS)
+     {
+         m_macMinimumStatic = new wxStaticText( this, -1, "" );
+         m_macMaximumStatic = new wxStaticText( this, -1, "" );
+         m_macValueStatic = new wxStaticText( this, -1, "" );
+         SetRange(minValue, maxValue);
+         SetValue(value);
     }
   
     }
   
-  m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds ,
-                               title , false ,  value , minValue , maxValue, 
-                               kControlSliderProc +  kControlSliderLiveFeedback + ( ( style & wxSL_AUTOTICKS ) ? kControlSliderHasTickMarks : 0 ) , (long) this ) ;
-  
-  wxASSERT_MSG( m_macControl != NULL , "No valid mac control" ) ;
-  
-  ::SetControlAction( m_macControl , wxMacLiveScrollbarActionUPP ) ;
-  
-  MacPostControlCreate() ;
-  
-  if ( style & wxSL_LABELS )
-    {
-      if ( style & wxSL_HORIZONTAL )
-       {
-         wxPoint leftpos( 0 , 15 ) ;
-         wxPoint rightpos( m_width - (maxtextwidth + 20) , 15 ) ;
-         wxPoint valuepos( m_width - maxtextwidth , 0 ) ;
-         wxString valuestring ;
-         
-         valuestring.Printf( "%d" , minValue ) ;
-         m_macMinimumStatic = new wxStaticText( this , -1 , valuestring , leftpos ) ;
-
-         valuestring.Printf( "%d" , maxValue ) ;
-         m_macMinimumStatic = new wxStaticText( this , -1 , valuestring , rightpos ) ;
-
-         valuestring.Printf( "%d" , value ) ;
-         m_macMinimumStatic = new wxStaticText( this , -1 , valuestring , valuepos ) ;
-       }
-      else // Vertical slider
-       {
-         wxPoint toppos( 17 , 0 ) ;
-         wxPoint bottompos( 17 , m_height - (textheight + 15) ) ;
-         wxPoint valuepos( 0 , m_height - textheight ) ;
-         wxString valuestring ;
-         
-         valuestring.Printf( "%d" , minValue ) ;
-         m_macMinimumStatic = new wxStaticText( this , -1 , valuestring , bottompos ) ;
-
-         valuestring.Printf( "%d" , maxValue ) ;
-         m_macMinimumStatic = new wxStaticText( this , -1 , valuestring , toppos ) ;
-
-         valuestring.Printf( "%d" , value ) ;
-         m_macMinimumStatic = new wxStaticText( this , -1 , valuestring , valuepos ) ;
-       }
-    }
-  
-  return true;
+     else {
+         m_macMinimumStatic = NULL ;
+         m_macMaximumStatic = NULL ;
+         m_macValueStatic = NULL ;
+     }
+     if(style & wxSL_VERTICAL) {
+         SetSizeHints(10, -1, 10, -1);  // Forces SetSize to use the proper width
+     }
+     else {
+         SetSizeHints(-1, 10, -1, 10);  // Forces SetSize to use the proper height
+     }
+     // NB!  SetSizeHints is overloaded by wxSlider and will substitute 10 with the
+     // proper dimensions, it also means other people cannot bugger the slider with
+     // other values
+     MacPostControlCreate() ;
+     return true;
 }
 
 wxSlider::~wxSlider()
 }
 
 wxSlider::~wxSlider()
@@ -194,8 +134,8 @@ void wxSlider::SetValue(int value)
 {
        wxString valuestring ;
        valuestring.Printf( "%d" , value ) ;    
 {
        wxString valuestring ;
        valuestring.Printf( "%d" , value ) ;    
-       if ( m_macMinimumStatic )
-               m_macMinimumStatic->SetLabel( valuestring ) ;
+       if ( m_macValueStatic )
+               m_macValueStatic->SetLabel( valuestring ) ;
        SetControlValue( m_macControl , value ) ;
 }
 
        SetControlValue( m_macControl , value ) ;
 }
 
@@ -206,7 +146,6 @@ void wxSlider::SetRange(int minValue, int maxValue)
   m_rangeMin = minValue;
   m_rangeMax = maxValue;
 
   m_rangeMin = minValue;
   m_rangeMax = maxValue;
 
-  // TODO
   SetControlMinimum(m_macControl, m_rangeMin);
   SetControlMaximum(m_macControl, m_rangeMax);
   
   SetControlMinimum(m_macControl, m_rangeMin);
   SetControlMaximum(m_macControl, m_rangeMax);
   
@@ -300,11 +239,6 @@ void wxSlider::Command (wxCommandEvent & event)
   ProcessCommand (event);
 }
 
   ProcessCommand (event);
 }
 
-bool wxSlider::Show( bool show ) 
-{
-       return wxWindow::Show( show ) ;
-}
-
 void wxSlider::MacHandleControlClick( ControlHandle control , SInt16 controlpart ) 
 {
        SInt16 value = ::GetControlValue( m_macControl ) ;
 void wxSlider::MacHandleControlClick( ControlHandle control , SInt16 controlpart ) 
 {
        SInt16 value = ::GetControlValue( m_macControl ) ;
@@ -322,3 +256,235 @@ void wxSlider::MacHandleControlClick( ControlHandle control , SInt16 controlpart
 
   GetEventHandler()->ProcessEvent( cevent );
 }
 
   GetEventHandler()->ProcessEvent( cevent );
 }
+
+ /* This is overloaded in wxSlider so that the proper width/height will always be used
+  * for the slider different values would cause redrawing and mouse detection problems */
+ void wxSlider::SetSizeHints( int minW, int minH,
+                              int maxW , int maxH ,
+                              int incW , int incH )
+ {
+     wxSize size = GetBestSize();
+     if(GetWindowStyle() & wxSL_VERTICAL) {
+         wxWindow::SetSizeHints(size.x, minH, size.x, maxH, incW, incH);
+     }
+     else {
+         wxWindow::SetSizeHints(minW, size.y, maxW, size.y, incW, incH);
+     }
+ }
+ wxSize wxSlider::DoGetBestSize() const
+ {
+     wxSize size;
+     int textwidth, textheight;
+     if(GetWindowStyle() & wxSL_LABELS)
+     {
+         wxString text;
+         int ht, wd;
+         // Get maximum text label width and height
+         text.Printf("%d", m_rangeMin);
+         GetTextExtent(text, &textwidth, &textheight);
+         text.Printf("%d", m_rangeMax);
+         GetTextExtent(text, &wd, &ht);
+         if(ht > textheight) {
+             textheight = ht;
+         }
+         if (wd > textwidth) {
+             textwidth = wd;
+         }
+     }
+     if(GetWindowStyle() & wxSL_VERTICAL)
+     {
+         if(GetWindowStyle() & wxSL_AUTOTICKS) {
+             size.x = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS;
+         }
+         else {
+             size.x = wxSLIDER_DIMENSIONACROSS_ARROW;
+         }
+         if(GetWindowStyle() & wxSL_LABELS) {
+             size.x += textwidth + wxSLIDER_BORDERTEXT;
+         }
+         size.y = 150;
+     }
+     else
+     {
+         if(GetWindowStyle() & wxSL_AUTOTICKS) {
+             size.y = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS;
+         }
+         else {
+             size.y = wxSLIDER_DIMENSIONACROSS_ARROW;
+         }
+         if(GetWindowStyle() & wxSL_LABELS) {
+             size.y += textheight + wxSLIDER_BORDERTEXT;
+         }
+         size.x = 150;
+     }
+     return size;
+ }
+ void wxSlider::DoSetSize(int x, int y, int width, int height, int sizeFlags)
+ {
+     Rect oldbounds, newbounds;
+     int new_x, new_y, new_width, new_height;
+     int mac_x, mac_y;
+     new_x = m_x;
+     new_y = m_y;
+     new_width  = m_width;
+     new_height = m_height;
+     if (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)
+     {
+         new_x      = x;
+         new_y      = y;
+         new_width  = width;
+         new_height = height;
+     }
+     else
+     {
+         if (x != -1)      new_x      = x;
+         if (y != -1)      new_y      = y;
+         if (width != -1)  new_width  = width;
+         if (height != -1) new_height = height;
+     }
+     if(sizeFlags & wxSIZE_AUTO)
+     {
+         wxSize size = GetBestSize();
+         if (sizeFlags & wxSIZE_AUTO_WIDTH)
+         {
+             if (width == -1)   new_width = size.x;
+         }
+         if (sizeFlags & wxSIZE_AUTO_HEIGHT)
+         {
+             if (height == -1)   new_height = size.y;
+         }
+     }
+     AdjustForParentClientOrigin(new_x, new_y, sizeFlags);
+     mac_x = new_x;
+     mac_y = new_y;
+     if(GetParent()) {
+         GetParent()->MacClientToRootWindow(&mac_x, &mac_y);
+     }
+     GetControlBounds(m_macControl, &oldbounds);
+     oldbounds.right = oldbounds.left + m_width;
+     oldbounds.bottom = oldbounds.top + m_height;
+     bool doMove = false;
+     bool doResize = false;
+     if ( mac_x != oldbounds.left || mac_y != oldbounds.top )
+     {
+         doMove = true ;
+     }
+     if ( new_width != m_width || new_height != m_height )
+     {
+         doResize = true ;
+     }
+     if ( doMove || doResize )
+     {
+         // Ensure resize is within constraints
+         if ((m_minWidth != -1) && (new_width < m_minWidth)) {
+             new_width = m_minWidth;
+         }
+         if ((m_minHeight != -1) && (new_height < m_minHeight)) {
+             new_height = m_minHeight;
+         }
+         if ((m_maxWidth != -1) && (new_width > m_maxWidth)) {
+             new_width = m_maxWidth;
+         }
+         if ((m_maxHeight != -1) && (new_height > m_maxHeight)) {
+             new_height = m_maxHeight;
+         }
+         DoMoveWindow(new_x, new_y, new_width, new_height);
+         // Update window at old and new positions
+         SetRect(&newbounds, m_x, m_y, m_x + m_width, m_y + m_height);
+         WindowRef rootwindow = GetMacRootWindow();
+         InvalWindowRect( rootwindow , &oldbounds );
+         InvalWindowRect( rootwindow , &newbounds );
+         if ( doMove )
+         {
+             wxMoveEvent event(wxPoint(m_x, m_y), m_windowId);
+             event.SetEventObject(this);
+             GetEventHandler()->ProcessEvent(event) ;
+         }
+         if ( doResize )
+         {
+             wxSizeEvent event(wxSize(m_width, m_height), m_windowId);
+             event.SetEventObject(this);
+             GetEventHandler()->ProcessEvent(event);
+         }
+     }
+ }
+ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
+ {
+     m_x = x;
+     m_y = y;
+     m_width  = width;
+     m_height = height;
+     int  xborder, yborder;
+     int  minValWidth, maxValWidth, textwidth, textheight;
+     int  sliderBreadth;
+     xborder = yborder = 0;
+     if (GetWindowStyle() & wxSL_LABELS)
+     {
+         wxString text;
+         int ht;
+         // Get maximum text label width and height
+         text.Printf("%d", m_rangeMin);
+         GetTextExtent(text, &minValWidth, &textheight);
+         text.Printf("%d", m_rangeMax);
+         GetTextExtent(text, &maxValWidth, &ht);
+         if(ht > textheight) {
+             textheight = ht;
+         }
+         textwidth = (minValWidth > maxValWidth ? minValWidth : maxValWidth);
+         xborder = textwidth + wxSLIDER_BORDERTEXT;
+         yborder = textheight + wxSLIDER_BORDERTEXT;
+         // Get slider breadth
+         if(GetWindowStyle() & wxSL_AUTOTICKS) {
+             sliderBreadth = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS;
+         }
+         else {
+             sliderBreadth = wxSLIDER_DIMENSIONACROSS_ARROW;
+         }
+         if(GetWindowStyle() & wxSL_VERTICAL)
+         {
+             m_macMinimumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT,
+                                      height - yborder - textheight);
+             m_macMaximumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT, 0);
+             m_macValueStatic->Move(0, height - textheight);
+         }
+         else
+         {
+             m_macMinimumStatic->Move(0, sliderBreadth + wxSLIDER_BORDERTEXT);
+             m_macMaximumStatic->Move(width - xborder - maxValWidth / 2,
+                                      sliderBreadth + wxSLIDER_BORDERTEXT);
+             m_macValueStatic->Move(width - textwidth, 0);
+         }
+     }
+     if(GetParent()) {
+         GetParent()->MacClientToRootWindow(&x, &y);
+     }
+     UMAMoveControl(m_macControl, x, y);
+     UMASizeControl(m_macControl, width - xborder, height - yborder);
+}
\ No newline at end of file
index 31aca328439b36c9564c3a4ae4b9fa8070181160..272c0791f351eefd4919902012cdf8bb7769669b 100644 (file)
@@ -18,7 +18,9 @@
 
 #include "wx/spinctrl.h"
 
 
 #include "wx/spinctrl.h"
 
+#if 0
 
 
+// now using the generic impl
 //-----------------------------------------------------------------------------
 // wxSpinCtrl
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 // wxSpinCtrl
 //-----------------------------------------------------------------------------
@@ -37,5 +39,7 @@
 
 #endif // wxUSE_SPINBTN/!wxUSE_SPINBTN
 
 
 #endif // wxUSE_SPINBTN/!wxUSE_SPINBTN
 
+#endif
+
 #endif   // wxUSE_SPINCTRL
 
 #endif   // wxUSE_SPINCTRL
 
index 0cd659a9f07fdcb429a6041f4b9b90336e174f34..72cc0f8290a1ea69b3b2174032c8838820d3b4b9 100644 (file)
@@ -341,20 +341,24 @@ void wxWindowMac::DragAcceptFiles(bool accept)
 // Get total size
 void wxWindowMac::DoGetSize(int *x, int *y) const
 {
 // Get total size
 void wxWindowMac::DoGetSize(int *x, int *y) const
 {
-    *x = m_width ;
-    *y = m_height ;
+     if(x)   *x = m_width ;
+     if(y)   *y = m_height ;
 }
 
 void wxWindowMac::DoGetPosition(int *x, int *y) const
 {
 }
 
 void wxWindowMac::DoGetPosition(int *x, int *y) const
 {
-    *x = m_x ;
-    *y = m_y ;
+    int xx,yy;
+    xx = m_x ;
+    yy = m_y ;
     if (GetParent())
     {
         wxPoint pt(GetParent()->GetClientAreaOrigin());
     if (GetParent())
     {
         wxPoint pt(GetParent()->GetClientAreaOrigin());
-        *x -= pt.x;
-        *y -= pt.y;
+        xx -= pt.x;
+        yy -= pt.y;
     }
     }
+    if(x)   *x = xx;
+    if(y)   *y = yy;
 }
 
 #if wxUSE_MENUS
 }
 
 #if wxUSE_MENUS
@@ -378,9 +382,10 @@ void wxWindowMac::DoScreenToClient(int *x, int *y) const
 {
        WindowRef window = GetMacRootWindow() ;
 
 {
        WindowRef window = GetMacRootWindow() ;
 
-       Point           localwhere ;
-       localwhere.h = * x ;
-       localwhere.v = * y ;
+       Point           localwhere = {0,0} ;
+
+    if(x)   localwhere.h = * x ;
+    if(y)   localwhere.v = * y ;
 
        GrafPtr         port ;  
        ::GetPort( &port ) ;
 
        GrafPtr         port ;  
        ::GetPort( &port ) ;
@@ -388,8 +393,8 @@ void wxWindowMac::DoScreenToClient(int *x, int *y) const
        ::GlobalToLocal( &localwhere ) ;
        ::SetPort( port ) ;
 
        ::GlobalToLocal( &localwhere ) ;
        ::SetPort( port ) ;
 
-       *x = localwhere.h ;
-       *y = localwhere.v ;
+    if(x)   *x = localwhere.h ;
+    if(y)   *y = localwhere.v ;
        
        MacRootWindowToClient( x , y ) ;
 }
        
        MacRootWindowToClient( x , y ) ;
 }
@@ -400,9 +405,9 @@ void wxWindowMac::DoClientToScreen(int *x, int *y) const
        
        MacClientToRootWindow( x , y ) ;
        
        
        MacClientToRootWindow( x , y ) ;
        
-       Point           localwhere ;
-       localwhere.h = * x ;
-       localwhere.v = * y ;
+       Point           localwhere = { 0,0 };
+    if(x)   localwhere.h = * x ;
+    if(y)   localwhere.v = * y ;
        
        GrafPtr         port ;  
        ::GetPort( &port ) ;
        
        GrafPtr         port ;  
        ::GetPort( &port ) ;
@@ -410,32 +415,26 @@ void wxWindowMac::DoClientToScreen(int *x, int *y) const
        ::SetOrigin( 0 , 0 ) ;
        ::LocalToGlobal( &localwhere ) ;
        ::SetPort( port ) ;
        ::SetOrigin( 0 , 0 ) ;
        ::LocalToGlobal( &localwhere ) ;
        ::SetPort( port ) ;
-       *x = localwhere.h ;
-       *y = localwhere.v ;
+    if(x)   *x = localwhere.h ;
+    if(y)   *y = localwhere.v ;
 }
 
 void wxWindowMac::MacClientToRootWindow( int *x , int *y ) const
 {
 }
 
 void wxWindowMac::MacClientToRootWindow( int *x , int *y ) const
 {
-       if ( m_macWindowData )
-       {
-       }
-       else
+       if ( m_macWindowData == NULL)
        {
        {
-               *x += m_x ;
-               *y += m_y ;
+               if(x)   *x += m_x ;
+               if(y)   *y += m_y ;
                GetParent()->MacClientToRootWindow( x , y ) ;
        }
 }
 
 void wxWindowMac::MacRootWindowToClient( int *x , int *y ) const
 {
                GetParent()->MacClientToRootWindow( x , y ) ;
        }
 }
 
 void wxWindowMac::MacRootWindowToClient( int *x , int *y ) const
 {
-       if ( m_macWindowData )
+       if ( m_macWindowData == NULL)
        {
        {
-       }
-       else
-       {
-               *x -= m_x ;
-               *y -= m_y ;
+               if(x)   *x -= m_x ;
+           if(y)   *y -= m_y ;
                GetParent()->MacRootWindowToClient( x , y ) ;
        }
 }
                GetParent()->MacRootWindowToClient( x , y ) ;
        }
 }
@@ -480,11 +479,12 @@ bool wxWindowMac::SetCursor(const wxCursor& cursor)
 // Get size *available for subwindows* i.e. excluding menu bar etc.
 void wxWindowMac::DoGetClientSize(int *x, int *y) const
 {
 // Get size *available for subwindows* i.e. excluding menu bar etc.
 void wxWindowMac::DoGetClientSize(int *x, int *y) const
 {
-    *x = m_width ;
-    *y = m_height ;
+    int ww, hh;
+    ww = m_width ;
+    hh = m_height ;
 
 
-       *x -= MacGetLeftBorderSize(  )  + MacGetRightBorderSize(  ) ;
-       *y -= MacGetTopBorderSize(  ) + MacGetBottomBorderSize( );
+       ww -= MacGetLeftBorderSize(  )  + MacGetRightBorderSize(  ) ;
+       hh -= MacGetTopBorderSize(  ) + MacGetBottomBorderSize( );
        
   if ( (m_vScrollBar && m_vScrollBar->IsShown()) || (m_hScrollBar  && m_hScrollBar->IsShown()) )
   {
        
   if ( (m_vScrollBar && m_vScrollBar->IsShown()) || (m_hScrollBar  && m_hScrollBar->IsShown()) )
   {
@@ -496,7 +496,6 @@ void wxWindowMac::DoGetClientSize(int *x, int *y) const
        MacClientToRootWindow( &x1 , &y1 ) ;
        MacClientToRootWindow( &w , &h ) ;
        
        MacClientToRootWindow( &x1 , &y1 ) ;
        MacClientToRootWindow( &w , &h ) ;
        
-       WindowRef window = NULL ;
        wxWindowMac *iter = (wxWindowMac*)this ;
        
        int totW = 10000 , totH = 10000;
        wxWindowMac *iter = (wxWindowMac*)this ;
        
        int totW = 10000 , totH = 10000;
@@ -514,21 +513,23 @@ void wxWindowMac::DoGetClientSize(int *x, int *y) const
        
        if (m_hScrollBar  && m_hScrollBar->IsShown() )
        {
        
        if (m_hScrollBar  && m_hScrollBar->IsShown() )
        {
-               (*y) -= MAC_SCROLLBAR_SIZE;
+               hh -= MAC_SCROLLBAR_SIZE;
                if ( h-y1 >= totH )
                {
                if ( h-y1 >= totH )
                {
-                       (*y)+= 1 ;
+                       hh += 1 ;
                }
     }
        if (m_vScrollBar  && m_vScrollBar->IsShown() )
        {
                }
     }
        if (m_vScrollBar  && m_vScrollBar->IsShown() )
        {
-       (*x) -= MAC_SCROLLBAR_SIZE;
+       ww -= MAC_SCROLLBAR_SIZE;
                if ( w-x1 >= totW )
                {
                if ( w-x1 >= totW )
                {
-               (*x) += 1 ;
+               ww += 1 ;
        }
        }
   }
        }
        }
   }
+  if(x)   *x = ww;
+  if(y)   *y = hh;
 }
 
 
 }
 
 
@@ -789,7 +790,7 @@ bool wxWindowMac::Show(bool show)
        {
            WindowRef window = GetMacRootWindow() ;
            wxWindowMac* win = wxFindWinFromMacWindow( window ) ;
        {
            WindowRef window = GetMacRootWindow() ;
            wxWindowMac* win = wxFindWinFromMacWindow( window ) ;
-           if ( !win->m_isBeingDeleted )
+           if ( win && !win->m_isBeingDeleted )
                Refresh() ;     
        }
        else
                Refresh() ;     
        }
        else
@@ -1797,7 +1798,6 @@ void wxWindowMac::MacMouseDown( EventRecord *ev , short part)
 
 void wxWindowMac::MacMouseUp( EventRecord *ev , short part)
 {
 
 void wxWindowMac::MacMouseUp( EventRecord *ev , short part)
 {
-       WindowPtr frontWindow ;
        switch (part)
        {
                case inContent:         
        switch (part)
        {
                case inContent:         
@@ -1810,7 +1810,6 @@ void wxWindowMac::MacMouseUp( EventRecord *ev , short part)
 
 void wxWindowMac::MacMouseMoved( EventRecord *ev , short part)
 {
 
 void wxWindowMac::MacMouseMoved( EventRecord *ev , short part)
 {
-       WindowPtr frontWindow ;
        switch (part)
        {
                case inContent:         
        switch (part)
        {
                case inContent:         
@@ -1843,7 +1842,7 @@ void wxWindowMac::MacRedraw( RgnHandle updatergn , long time)
        // ownUpdateRgn is the area that this window has to invalidate i.e. its own area without its children
        RgnHandle ownUpdateRgn = NewRgn() ;
        CopyRgn( updatergn , ownUpdateRgn ) ;
        // ownUpdateRgn is the area that this window has to invalidate i.e. its own area without its children
        RgnHandle ownUpdateRgn = NewRgn() ;
        CopyRgn( updatergn , ownUpdateRgn ) ;
-       wxWindowMac* win = wxFindWinFromMacWindow( window ) ;
+
        {
                wxMacDrawingHelper focus( this ) ; // was client
                if ( focus.Ok() )
        {
                wxMacDrawingHelper focus( this ) ; // was client
                if ( focus.Ok() )
@@ -2042,7 +2041,6 @@ void wxWindowMac::MacUpdate( EventRecord *ev )
 
 WindowRef wxWindowMac::GetMacRootWindow() const
 {
 
 WindowRef wxWindowMac::GetMacRootWindow() const
 {
-       WindowRef window = NULL ;
        wxWindowMac *iter = (wxWindowMac*)this ;
        
        while( iter )
        wxWindowMac *iter = (wxWindowMac*)this ;
        
        while( iter )
@@ -2121,7 +2119,6 @@ void wxWindowMac::MacRepositionScrollBars()
        MacClientToRootWindow( &x , &y ) ;
        MacClientToRootWindow( &w , &h ) ;
        
        MacClientToRootWindow( &x , &y ) ;
        MacClientToRootWindow( &w , &h ) ;
        
-       WindowRef window = NULL ;
        wxWindowMac *iter = (wxWindowMac*)this ;
        
        int totW = 10000 , totH = 10000;
        wxWindowMac *iter = (wxWindowMac*)this ;
        
        int totW = 10000 , totH = 10000;