]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/slider.cpp
Honour wxSB_WRAP in wxMotif spin button
[wxWidgets.git] / src / mac / slider.cpp
index 459a15c76b7820119de7b3058bbf0837044c8dbe..aa4e68609a744ecf0c9fed507c912309db24dc41 100644 (file)
@@ -84,12 +84,12 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID id,
     }
   
 
-     m_macControl = ::NewControl( parent->GetMacRootWindow(), &bounds, title, false,
+     m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()), &bounds, title, false,
                                    value, minValue, maxValue, procID, (long) this);
  
-     wxASSERT_MSG( m_macControl != NULL , "No valid mac control" ) ;
+     wxASSERT_MSG( (ControlHandle) m_macControl != NULL , "No valid mac control" ) ;
  
-     ::SetControlAction( m_macControl , wxMacLiveScrollbarActionUPP ) ;
+     ::SetControlAction( (ControlHandle) m_macControl , wxMacLiveScrollbarActionUPP ) ;
  
      if(style & wxSL_LABELS)
      {
@@ -127,7 +127,7 @@ wxSlider::~wxSlider()
 
 int wxSlider::GetValue() const
 {
-       return GetControlValue( m_macControl) ;
+       return GetControl32BitValue( (ControlHandle) m_macControl) ;
 }
 
 void wxSlider::SetValue(int value)
@@ -136,7 +136,7 @@ void wxSlider::SetValue(int value)
        valuestring.Printf( "%d" , value ) ;    
        if ( m_macValueStatic )
                m_macValueStatic->SetLabel( valuestring ) ;
-       SetControlValue( m_macControl , value ) ;
+       SetControl32BitValue( (ControlHandle) m_macControl , value ) ;
 }
 
 void wxSlider::SetRange(int minValue, int maxValue)
@@ -146,8 +146,8 @@ void wxSlider::SetRange(int minValue, int maxValue)
   m_rangeMin = minValue;
   m_rangeMax = maxValue;
 
-  SetControlMinimum(m_macControl, m_rangeMin);
-  SetControlMaximum(m_macControl, m_rangeMax);
+  SetControl32BitMinimum( (ControlHandle) m_macControl, m_rangeMin);
+  SetControl32BitMaximum( (ControlHandle) m_macControl, m_rangeMax);
   
   if(m_macMinimumStatic) {
     value.Printf("%d", m_rangeMin);
@@ -239,9 +239,9 @@ void wxSlider::Command (wxCommandEvent & event)
   ProcessCommand (event);
 }
 
-void wxSlider::MacHandleControlClick( ControlHandle control , SInt16 controlpart ) 
+void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) 
 {
-       SInt16 value = ::GetControlValue( m_macControl ) ;
+       SInt16 value = ::GetControl32BitValue( (ControlHandle) m_macControl ) ;
        
        SetValue( value ) ;             
        
@@ -327,119 +327,30 @@ void wxSlider::MacHandleControlClick( ControlHandle control , SInt16 controlpart
  
  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);
-         }
-     }
+    wxControl::DoSetSize( x, y , width , height ,sizeFlags ) ;
  }
  
- void wxSlider::DoMoveWindow(int x, int y, int width, int height)
- {
-     m_x = x;
-     m_y = y;
-     m_width  = width;
-     m_height = height;
+ void wxSlider::MacUpdateDimensions() 
+{
+       // actually in the current systems this should never be possible, but later reparenting
+       // may become a reality
+       
+       if ( (ControlHandle) m_macControl == NULL )
+               return ;
+               
+       if ( GetParent() == NULL )
+               return ;
+               
+    WindowRef rootwindow = (WindowRef) MacGetRootWindow() ;
+    if ( rootwindow == NULL )
+       return ;
+       
      int  xborder, yborder;
      int  minValWidth, maxValWidth, textwidth, textheight;
      int  sliderBreadth;
  
      xborder = yborder = 0;
+
      if (GetWindowStyle() & wxSL_LABELS)
      {
          wxString text;
@@ -469,22 +380,45 @@ void wxSlider::MacHandleControlClick( ControlHandle control , SInt16 controlpart
          if(GetWindowStyle() & wxSL_VERTICAL)
          {
              m_macMinimumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT,
-                                      height - yborder - textheight);
+                                      m_height - yborder - textheight);
              m_macMaximumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT, 0);
-             m_macValueStatic->Move(0, height - textheight);
+             m_macValueStatic->Move(0, m_height - textheight);
          }
          else
          {
              m_macMinimumStatic->Move(0, sliderBreadth + wxSLIDER_BORDERTEXT);
-             m_macMaximumStatic->Move(width - xborder - maxValWidth / 2,
+             m_macMaximumStatic->Move(m_width - xborder - maxValWidth / 2,
                                       sliderBreadth + wxSLIDER_BORDERTEXT);
-             m_macValueStatic->Move(width - textwidth, 0);
+             m_macValueStatic->Move(m_width - textwidth, 0);
          }
      }
-     if(GetParent()) {
-         GetParent()->MacClientToRootWindow(&x, &y);
-     }
-     UMAMoveControl(m_macControl, x, y);
-     UMASizeControl(m_macControl, width - xborder, height - yborder);
+
+    Rect oldBounds ;       
+    GetControlBounds( (ControlHandle) m_macControl , &oldBounds ) ; 
+    
+    int new_x = m_x + MacGetLeftBorderSize() + m_macHorizontalBorder ;
+    int new_y = m_y + MacGetTopBorderSize() + m_macVerticalBorder ;
+    int new_width = m_width - MacGetLeftBorderSize() - MacGetRightBorderSize() - 2 * m_macHorizontalBorder - xborder ;
+    int new_height = m_height - MacGetTopBorderSize() - MacGetBottomBorderSize() - 2 * m_macVerticalBorder - yborder ;
+    
+    GetParent()->MacWindowToRootWindow( & new_x , & new_y ) ;
+    bool doMove = new_x != oldBounds.left || new_y != oldBounds.top ;
+    bool doResize =  ( oldBounds.right - oldBounds.left ) != new_width || (oldBounds.bottom - oldBounds.top ) != new_height ;
+       if ( doMove || doResize )
+       {
+               InvalWindowRect( rootwindow, &oldBounds ) ;
+               if ( doMove )
+               {
+                       UMAMoveControl( (ControlHandle) m_macControl , new_x , new_y ) ;
+               }
+               if ( doResize )
+               {
+                       UMASizeControl( (ControlHandle) m_macControl , new_width , new_height ) ;
+               }
+       }
+}
+
+ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
+ {
+    wxControl::DoMoveWindow(x,y,width,height) ;
 }
\ No newline at end of file