]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/listctrl.cpp
Help button left-aligned in wizard
[wxWidgets.git] / src / generic / listctrl.cpp
index c561337dae48f30ce5cd34b0e08008a7946917e3..6e989ae648d2f18c2d5c2ca56b0697a0ddcfef08 100644 (file)
@@ -76,6 +76,9 @@
     #include "wx/mac/private.h"
 #endif
 
+#include <math.h>
+
+
 // NOTE: If using the wxListBox visual attributes works everywhere then this can
 // be removed, as well as the #else case below.
 #define _USE_VISATTR 0
@@ -677,6 +680,7 @@ public:
     void EnsureVisible( long index );
     long FindItem( long start, const wxString& str, bool partial = false );
     long FindItem( long start, long data);
+    long FindItem( const wxPoint& pt );
     long HitTest( int x, int y, int &flags );
     void InsertItem( wxListItem &item );
     void InsertColumn( long col, wxListItem &item );
@@ -1668,11 +1672,13 @@ wxListHeaderWindow::wxListHeaderWindow( wxWindow *win,
     wxVisualAttributes attr = wxPanel::GetClassDefaultAttributes();
     SetOwnForegroundColour( attr.colFg );
     SetOwnBackgroundColour( attr.colBg );
-    SetOwnFont( attr.font );
+    if (!m_hasFont)
+        SetOwnFont( attr.font );
 #else
     SetOwnForegroundColour( wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT));
     SetOwnBackgroundColour( wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
-    SetOwnFont( wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT ));
+    if (!m_hasFont)
+        SetOwnFont( wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT ));
 #endif
 }
 
@@ -2068,12 +2074,14 @@ void wxListTextCtrl::OnChar( wxKeyEvent &event )
     switch ( event.m_keyCode )
     {
         case WXK_RETURN:
-            if ( !AcceptChanges() )
+            if ( AcceptChanges() )
             {
-                // vetoed by the user code
-                break;
+                // Close the text control, changes were accepted
+                Finish();
             }
-            //else: fall through
+            // else do nothing, do not accept and do not close
+
+            break;
 
         case WXK_ESCAPE:
             Finish();
@@ -2103,7 +2111,7 @@ void wxListTextCtrl::OnKeyUp( wxKeyEvent &event )
         sx = parentSize.x - myPos.x;
     if (mySize.x > sx)
         sx = mySize.x;
-    SetSize(sx, wxDefaultSize.y);
+    SetSize(sx, wxDefaultCoord);
 
     event.Skip();
 }
@@ -2112,13 +2120,16 @@ void wxListTextCtrl::OnKillFocus( wxFocusEvent &event )
 {
     if ( !m_finished )
     {
-        // We must finish regardless of success, otherwise we'll get focus problems
+        // We must finish regardless of success, otherwise we'll get
+        // focus problems:
         Finish();
 
         if ( !AcceptChanges() )
             m_owner->OnRenameCancelled( m_itemEdited );
     }
 
+    // We must let the native text control handle focus, too, otherwise
+    // it could have problems with the cursor (e.g., in wxGTK):
     event.Skip();
 }
 
@@ -2214,7 +2225,8 @@ wxListMainWindow::wxListMainWindow( wxWindow *parent,
     wxVisualAttributes attr = wxGenericListCtrl::GetClassDefaultAttributes();
     SetOwnForegroundColour( attr.colFg );
     SetOwnBackgroundColour( attr.colBg );
-    SetOwnFont( attr.font );
+    if (!m_hasFont)
+        SetOwnFont( attr.font );
 }
 
 wxListMainWindow::~wxListMainWindow()
@@ -2981,12 +2993,7 @@ void wxListMainWindow::OnMouse( wxMouseEvent &event )
         m_lineLastClicked = current;
 
         size_t oldCurrent = m_current;
-        bool cmdModifierDown;
-#ifdef __WXMAC__
-        cmdModifierDown = event.MetaDown();
-#else
-        cmdModifierDown = event.ControlDown();
-#endif
+        bool cmdModifierDown = event.CmdDown();
         if ( IsSingleSel() || !(cmdModifierDown || event.ShiftDown()) )
         {
             HighlightAll( false );
@@ -4283,6 +4290,22 @@ long wxListMainWindow::FindItem(long start, long data)
     return wxNOT_FOUND;
 }
 
+long wxListMainWindow::FindItem( const wxPoint& pt )
+{
+    size_t topItem;
+    GetVisibleLinesRange(&topItem, NULL);
+
+    wxPoint p;
+    GetItemPosition( GetItemCount()-1, p );
+    if( p.y == 0 )
+        return topItem;
+    long id = (long) floor( pt.y*(GetItemCount()-topItem-1)/p.y+topItem );
+    if( id >= 0 && id < (long)GetItemCount() )
+        return id;
+
+    return wxNOT_FOUND;
+}
+
 long wxListMainWindow::HitTest( int x, int y, int &flags )
 {
     CalcUnscrolledPosition( x, y, &x, &y );
@@ -4322,10 +4345,12 @@ void wxListMainWindow::InsertItem( wxListItem &item )
 {
     wxASSERT_MSG( !IsVirtual(), _T("can't be used with virtual control") );
 
-    size_t count = GetItemCount();
-    wxCHECK_RET( item.m_itemId >= 0 && (size_t)item.m_itemId <= count,
-                 _T("invalid item index") );
+    int count = GetItemCount();
+    wxCHECK_RET( item.m_itemId >= 0, _T("invalid item index") );
 
+    if (item.m_itemId > count)
+        item.m_itemId = count;
+    
     size_t id = item.m_itemId;
 
     m_dirty = true;
@@ -5056,10 +5081,10 @@ long wxGenericListCtrl::FindItem( long start, long data )
     return m_mainWin->FindItem( start, data );
 }
 
-long wxGenericListCtrl::FindItem( long WXUNUSED(start), const wxPoint& WXUNUSED(pt),
+long wxGenericListCtrl::FindItem( long WXUNUSED(start), const wxPoint& pt,
                            int WXUNUSED(direction))
 {
-    return 0;
+    return m_mainWin->FindItem( pt );
 }
 
 long wxGenericListCtrl::HitTest( const wxPoint &point, int &flags )