]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/listbox.cpp
don't use wxTheXXXList in wxXXX ctor/dtor, only objects explicitly created
[wxWidgets.git] / src / mac / carbon / listbox.cpp
index f6c1403b1c4c4a9b32e12e48ee6e6ee401133dce..cb6e1e96baf4ac9030990e60418360c03431069c 100644 (file)
@@ -81,9 +81,9 @@ static pascal void wxMacListDefinition( short message, Boolean isSelected, Rect
                        
                        savedClipRegion = NewRgn();
                        GetClip( savedClipRegion );
+
                        ClipRect( drawRect );
                        EraseRect( drawRect );
-                                               
                
        MoveTo(drawRect->left + 4 , drawRect->top + 10 );
        ::TextFont( kFontIDMonaco ) ;
@@ -265,6 +265,27 @@ void wxListBox::Free()
     }
 }
 
+void  wxListBox::DoSetSize(int x, int y,
+            int width, int height,
+            int sizeFlags )
+{
+       wxControl::DoSetSize( x , y , width , height , sizeFlags ) ;
+#if TARGET_CARBON
+       Rect bounds ;
+       GetControlBounds( m_macControl , &bounds ) ;
+       ControlRef control = GetListVerticalScrollBar( m_macList ) ;
+       if ( control )
+       {
+               Rect scrollbounds ;
+               GetControlBounds( control , &scrollbounds ) ;
+               if( scrollbounds.right != bounds.right + 1 )
+               {
+                       UMAMoveControl( control , bounds.right - (scrollbounds.right - scrollbounds.left) + 1 , 
+                               scrollbounds.top ) ;
+               }
+       }
+#endif
+}
 void wxListBox::DoSetFirstItem(int N)
 {
        MacScrollTo( N ) ;
@@ -440,7 +461,8 @@ void wxListBox::SetSelection(int N, bool select)
 {
     wxCHECK_RET( N >= 0 && N < m_noItems,
                  "invalid index in wxListBox::SetSelection" );
-       MacSetSelection( N , select ) ;
+         MacSetSelection( N , select ) ;
+         GetSelections( m_selectionPreImage ) ;
 }
 
 bool wxListBox::IsSelected(int N) const
@@ -448,7 +470,7 @@ bool wxListBox::IsSelected(int N) const
     wxCHECK_MSG( N >= 0 && N < m_noItems, FALSE,
                  "invalid index in wxListBox::Selected" );
 
-       return MacIsSelected( N ) ;
+         return MacIsSelected( N ) ;
 }
 
 void *wxListBox::DoGetItemClientData(int N) const
@@ -498,23 +520,6 @@ void wxListBox::DoSetItemClientObject(int n, wxClientData* clientData)
 int wxListBox::GetSelections(wxArrayInt& aSelections) const
 {
        return MacGetSelections( aSelections ) ;
-
-/* TODO
-    if ((m_windowStyle & wxLB_MULTIMacE) || (m_windowStyle & wxLB_EXTENDED))
-    {
-        int no_sel = ??
-        for ( int n = 0; n < no_sel; n++ )
-            aSelections.Add(??);
-
-        return no_sel;
-    }
-    else  // single-selection listbox
-    {
-        aSelections.Add(??);
-
-        return 1;
-    }
-*/
 }
 
 // Get single selection, for single choice list items
@@ -663,9 +668,12 @@ void wxListBox::MacClear()
 void wxListBox::MacSetSelection( int n , bool select )
 {
        Cell cell = { 0 , 0 } ;
-       if ( LGetSelect( true , &cell , m_macList ) )
+       if ( ! (m_windowStyle & wxLB_MULTIPLE) )
        {
-               LSetSelect( false , cell , m_macList ) ;
+       if ( LGetSelect( true , &cell , m_macList ) )
+       {
+               LSetSelect( false , cell , m_macList ) ;
+       }
        }
        
        cell.v = n ;
@@ -765,11 +773,27 @@ void wxListBox::MacSetRedraw( bool doDraw )
 
 void wxListBox::MacDoClick()
 {
-       wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, m_windowId);
-    event.SetEventObject( this );
-
        wxArrayInt aSelections;
        int n, count = GetSelections(aSelections);
+       
+       if ( count == m_selectionPreImage.GetCount() )
+       {
+         bool hasChanged = false ;
+         for ( int i = 0 ; i < count ; ++i )
+         {
+           if ( aSelections[i] != m_selectionPreImage[i] )
+           {
+             hasChanged = true ;
+             break ;
+           }
+         }
+         if ( !hasChanged )
+           return ;
+       }
+       
+       wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, m_windowId);
+  event.SetEventObject( this );
+
        if ( count > 0 )
        {
            n = aSelections[0];