]> git.saurik.com Git - wxWidgets.git/commitdiff
Tried to add sorting to wxTreeCtrl
authorRobert Roebling <robert@roebling.de>
Fri, 18 Dec 1998 10:19:07 +0000 (10:19 +0000)
committerRobert Roebling <robert@roebling.de>
Fri, 18 Dec 1998 10:19:07 +0000 (10:19 +0000)
  minor fixes to radiobutton

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1233 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/dirdlg.h
include/wx/generic/dirdlgg.h
src/generic/dirdlgg.cpp
src/generic/treectrl.cpp
src/gtk.inc
src/gtk/radiobut.cpp
src/gtk1/radiobut.cpp

index b7eddfd0948c3bbbecbe38677d5cb14da6a570a4..6be23181a96c672b44cb13156d63560a2578e728 100644 (file)
@@ -6,7 +6,7 @@
 #elif defined(__WXMOTIF__)
 #include "wx/generic/dirdlgg.h"
 #elif defined(__WXGTK__)
 #elif defined(__WXMOTIF__)
 #include "wx/generic/dirdlgg.h"
 #elif defined(__WXGTK__)
-#include "wx/gtk/dirdlg.h"
+#include "wx/generic/dirdlgg.h"
 #elif defined(__WXQT__)
 #include "wx/qt/dirdlg.h"
 #elif defined(__WXMAC__)
 #elif defined(__WXQT__)
 #include "wx/qt/dirdlg.h"
 #elif defined(__WXMAC__)
index 23b59979879fd2a670b2d07b608a949cd80977d8..c70aedf6eb9c439afb3bba3ca52daeca99d0e53b 100644 (file)
 //#include "wx/checkbox.h"
 #include "wx/treectrl.h"
 
 //#include "wx/checkbox.h"
 #include "wx/treectrl.h"
 
-WXDLLEXPORT_DATA(extern const char*) wxFileSelectorPromptStr;
-
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
-// wxDirItemData
+// data
 //-----------------------------------------------------------------------------
 
 //-----------------------------------------------------------------------------
 
-class wxDirItemData : public wxTreeItemData
-{
-public:
-  wxDirItemData(wxString& path, wxString& name);
-  ~wxDirItemData();
-  bool HasSubDirs();
-  wxString *m_path, *m_name;
-  bool m_isHidden;
-  bool m_hasSubDirs;
-};
+WXDLLEXPORT_DATA(extern const char*) wxFileSelectorPromptStr;
 
 //-----------------------------------------------------------------------------
 
 //-----------------------------------------------------------------------------
-// wxDirCtrl
+// classes
 //-----------------------------------------------------------------------------
 
 //-----------------------------------------------------------------------------
 
-class wxDirCtrl: public wxTreeCtrl
-{
-  DECLARE_DYNAMIC_CLASS(wxDirCtrl)
-  
-  public:
-    bool   m_showHidden;
-    wxTreeItemId   m_rootId;
-  
-    wxDirCtrl(void);
-    wxDirCtrl(wxWindow *parent, const wxWindowID id = -1, 
-             const wxString &dir = "/",
-             const wxPoint& pos = wxDefaultPosition,
-             const wxSize& size = wxDefaultSize,
-             const long style = wxTR_HAS_BUTTONS,
-             const wxString& name = "wxTreeCtrl" );
-    void OnExpandItem( const wxTreeEvent &event );
-    void OnCollapseItem( const wxTreeEvent &event );
-    void ShowHidden( const bool yesno );
-    DECLARE_EVENT_TABLE()
- protected:
-    void CreateItems(const wxTreeItemId &parent);
-    void SetupSections(void);
-    wxArrayString m_paths, m_names;
-};
+class wxDirItemData;
+class wxDirCtrl;
+class wxDirDialog;
 
 //-----------------------------------------------------------------------------
 // wxDirDialog
 
 //-----------------------------------------------------------------------------
 // wxDirDialog
index b4b93e003524ae0da4b331252f35e8ce8c295e04..5f23be06812049a9dbd60a7f2df442a1927a262a 100644 (file)
@@ -56,6 +56,34 @@ static char * icon1_xpm[] = {
 "                ",
 "                "};
 
 "                ",
 "                "};
 
+/* XPM */
+static char * icon2_xpm[] = {
+/* width height ncolors chars_per_pixel */
+"16 16 6 1",
+/* colors */
+"      s None  c None",
+".     c #000000",
+"+     c #c0c0c0",
+"@     c #808080",
+"#     c #ffff00",
+"$     c #ffffff",
+/* pixels */
+"                ",
+"   @@@@@        ",
+"  @$$$$$@       ",
+" @$#+#+#$@@@@@@ ",
+" @$+#+#+$$$$$$@.",
+" @$#+#+#+#+#+#@.",
+"@@@@@@@@@@@@@#@.",
+"@$$$$$$$$$$@@+@.",
+"@$#+#+#+#+##.@@.",
+" @$#+#+#+#+#+.@.",
+" @$+#+#+#+#+#.@.",
+"  @$+#+#+#+##@..",
+"  @@@@@@@@@@@@@.",
+"   .............",
+"                ",
+"                "};
 
 static const int ID_DIRCTRL = 1000;
 static const int ID_TEXTCTRL = 1001;
 
 static const int ID_DIRCTRL = 1000;
 static const int ID_TEXTCTRL = 1001;
@@ -68,6 +96,50 @@ static const int ID_NEW = 1004;
 // wxDirItemData
 //-----------------------------------------------------------------------------
 
 // wxDirItemData
 //-----------------------------------------------------------------------------
 
+class wxDirItemData : public wxTreeItemData
+{
+public:
+  wxDirItemData(wxString& path, wxString& name);
+  ~wxDirItemData();
+  bool HasSubDirs();
+  wxString *m_path, *m_name;
+  bool m_isHidden;
+  bool m_hasSubDirs;
+};
+
+//-----------------------------------------------------------------------------
+// wxDirCtrl
+//-----------------------------------------------------------------------------
+
+class wxDirCtrl: public wxTreeCtrl
+{
+  DECLARE_DYNAMIC_CLASS(wxDirCtrl)
+  
+  public:
+    bool   m_showHidden;
+    wxTreeItemId   m_rootId;
+  
+    wxDirCtrl(void);
+    wxDirCtrl(wxWindow *parent, const wxWindowID id = -1, 
+             const wxString &dir = "/",
+             const wxPoint& pos = wxDefaultPosition,
+             const wxSize& size = wxDefaultSize,
+             const long style = wxTR_HAS_BUTTONS,
+             const wxString& name = "wxTreeCtrl" );
+    void OnExpandItem( const wxTreeEvent &event );
+    void OnCollapseItem( const wxTreeEvent &event );
+    void ShowHidden( const bool yesno );
+    DECLARE_EVENT_TABLE()
+ protected:
+    void CreateItems(const wxTreeItemId &parent);
+    void SetupSections(void);
+    wxArrayString m_paths, m_names;
+};
+
+//-----------------------------------------------------------------------------
+// wxDirItemData
+//-----------------------------------------------------------------------------
+
 wxDirItemData::wxDirItemData(wxString& path, wxString& name)
 {
   m_path = new wxString(path);
 wxDirItemData::wxDirItemData(wxString& path, wxString& name)
 {
   m_path = new wxString(path);
@@ -117,6 +189,7 @@ wxDirCtrl::wxDirCtrl(wxWindow *parent, const wxWindowID id, const wxString &WXUN
 {
   m_imageListNormal = new wxImageList(16, 16, TRUE);
   m_imageListNormal->Add(wxICON(icon1));
 {
   m_imageListNormal = new wxImageList(16, 16, TRUE);
   m_imageListNormal->Add(wxICON(icon1));
+  m_imageListNormal->Add(wxICON(icon2));
   SetImageList(m_imageListNormal);
   
   m_showHidden = FALSE;
   SetImageList(m_imageListNormal);
   
   m_showHidden = FALSE;
@@ -157,7 +230,7 @@ void wxDirCtrl::CreateItems(const wxTreeItemId &parent)
   for (unsigned int i=0; i<m_paths.Count(); i++) 
   {
     dir_item = new wxDirItemData(m_paths[i],m_names[i]);
   for (unsigned int i=0; i<m_paths.Count(); i++) 
   {
     dir_item = new wxDirItemData(m_paths[i],m_names[i]);
-    id = AppendItem( parent, m_names[i], 0, -1, dir_item);
+    id = AppendItem( parent, m_names[i], 0, 1, dir_item);
     if (dir_item->m_hasSubDirs) SetItemHasChildren(id);
   }
 }
     if (dir_item->m_hasSubDirs) SetItemHasChildren(id);
   }
 }
index 7231ed7c68acbf6cf6452b9f4b9a2530f31d5b08..7d29b52f64cd61f52ae9018d43a8a7a57b8606f7 100644 (file)
@@ -28,6 +28,7 @@
 #include "wx/dynarray.h"
 #include "wx/dcclient.h"
 #include "wx/imaglist.h"
 #include "wx/dynarray.h"
 #include "wx/dcclient.h"
 #include "wx/imaglist.h"
+#include "wx/msgdlg.h"
 
 // -----------------------------------------------------------------------------
 // array types
 
 // -----------------------------------------------------------------------------
 // array types
@@ -873,40 +874,40 @@ void wxTreeCtrl::SelectItem(const wxTreeItemId& itemId)
 
 void wxTreeCtrl::EnsureVisible(const wxTreeItemId& item)
 {
 
 void wxTreeCtrl::EnsureVisible(const wxTreeItemId& item)
 {
-  wxGenericTreeItem *gitem = item.m_pItem;
+    wxGenericTreeItem *gitem = item.m_pItem;
 
 
-  int item_y = gitem->GetY();
+    int item_y = gitem->GetY();
 
 
-  int start_x = 0;
-  int start_y = 0;
-  ViewStart( &start_x, &start_y );
-  start_y *= 10;
+    int start_x = 0;
+    int start_y = 0;
+    ViewStart( &start_x, &start_y );
+    start_y *= 10;
 
 
-  if (item_y < start_y+3)
-  {
-    int x = 0;
-    int y = 0;
-    m_anchor->GetSize( x, y );
-    y += 2*m_lineHeight;
-    int x_pos = GetScrollPos( wxHORIZONTAL );
-    SetScrollbars( 10, 10, x/10, y/10, x_pos, item_y/10 );
-    return;
-  }
+    if (item_y < start_y+3)
+    {
+        int x = 0;
+        int y = 0;
+        m_anchor->GetSize( x, y );
+        y += 2*m_lineHeight;
+        int x_pos = GetScrollPos( wxHORIZONTAL );
+        SetScrollbars( 10, 10, x/10, y/10, x_pos, item_y/10 );
+        return;
+    }
 
 
-  int w = 0;
-  int h = 0;
-  GetClientSize( &w, &h );
+    int w = 0;
+    int h = 0;
+    GetClientSize( &w, &h );
 
 
-  if (item_y > start_y+h-26)
-  {
-    int x = 0;
-    int y = 0;
-    m_anchor->GetSize( x, y );
-    y += 2*m_lineHeight;
-    int x_pos = GetScrollPos( wxHORIZONTAL );
-    SetScrollbars( 10, 10, x/10, y/10, x_pos, (item_y-h+30)/10 );
-     return;
-  }
+    if (item_y > start_y+h-26)
+    {
+       int x = 0;
+       int y = 0;
+       m_anchor->GetSize( x, y );
+       y += 2*m_lineHeight;
+       int x_pos = GetScrollPos( wxHORIZONTAL );
+       SetScrollbars( 10, 10, x/10, y/10, x_pos, (item_y-h+30)/10 );
+       return;
+    }
 }
 
 void wxTreeCtrl::ScrollTo(const wxTreeItemId& WXUNUSED(item))
 }
 
 void wxTreeCtrl::ScrollTo(const wxTreeItemId& WXUNUSED(item))
@@ -919,25 +920,52 @@ wxTextCtrl *wxTreeCtrl::EditLabel( const wxTreeItemId& WXUNUSED(item),
 {
   wxFAIL_MSG("not implemented");
 
 {
   wxFAIL_MSG("not implemented");
 
-  return NULL;
+  return (wxTextCtrl*)NULL;
 }
 
 wxTextCtrl *wxTreeCtrl::GetEditControl() const
 {
 }
 
 wxTextCtrl *wxTreeCtrl::GetEditControl() const
 {
-  wxFAIL_MSG("not implemented");
+    wxFAIL_MSG("not implemented");
 
 
-  return NULL;
+    return (wxTextCtrl*)NULL;
 }
 
 void wxTreeCtrl::EndEditLabel(const wxTreeItemId& WXUNUSED(item), bool WXUNUSED(discardChanges))
 {
 }
 
 void wxTreeCtrl::EndEditLabel(const wxTreeItemId& WXUNUSED(item), bool WXUNUSED(discardChanges))
 {
-  wxFAIL_MSG("not implemented");
+    wxFAIL_MSG("not implemented");
+}
+
+wxTreeItemCmpFunc tree_ctrl_compare_func_2;
+
+int tree_ctrl_compare_func_1( wxGenericTreeItem **line1, wxGenericTreeItem **line2 )
+{
+    if (tree_ctrl_compare_func_2 == NULL)
+    {
+        return strcmp( (*line1)->GetText(), (*line2)->GetText() );
+    }
+    else
+    {
+        wxTreeItemData *data1 = (*line1)->GetData();
+        wxTreeItemData *data2 = (*line2)->GetData();
+        return tree_ctrl_compare_func_2( data1, data2 );
+    }
 }
 
 }
 
-void wxTreeCtrl::SortChildren( const wxTreeItemId& WXUNUSED(item),
-                               wxTreeItemCmpFunc *WXUNUSED(cmpFunction))
+void wxTreeCtrl::SortChildren( const wxTreeItemId& item,
+                               wxTreeItemCmpFunc *cmpFunction)
 {
 {
-  wxFAIL_MSG("not implemented");
+    wxGenericTreeItem *gitem = item.m_pItem;
+    
+    if (!gitem) return;
+    
+    if (cmpFunction == NULL)
+       tree_ctrl_compare_func_2 = NULL;
+    else
+       tree_ctrl_compare_func_2 = *cmpFunction;
+       
+    gitem->GetChildren().Sort( *tree_ctrl_compare_func_1 );
+    
+    m_dirty = TRUE;
 }
 
 wxImageList *wxTreeCtrl::GetImageList() const
 }
 
 wxImageList *wxTreeCtrl::GetImageList() const
@@ -963,22 +991,23 @@ void wxTreeCtrl::SetStateImageList(wxImageList *imageList)
 // -----------------------------------------------------------------------------
 // helpers
 // -----------------------------------------------------------------------------
 // -----------------------------------------------------------------------------
 // helpers
 // -----------------------------------------------------------------------------
+
 void wxTreeCtrl::AdjustMyScrollbars()
 {
 void wxTreeCtrl::AdjustMyScrollbars()
 {
-  if (m_anchor)
-  {
-    int x = 0;
-    int y = 0;
-    m_anchor->GetSize( x, y );
-    y += 2*m_lineHeight;
-    int x_pos = GetScrollPos( wxHORIZONTAL );
-    int y_pos = GetScrollPos( wxVERTICAL );
-    SetScrollbars( 10, 10, x/10, y/10, x_pos, y_pos );
-  }
-  else
-  {
-    SetScrollbars( 0, 0, 0, 0 );
-  }
+    if (m_anchor)
+    {
+        int x = 0;
+        int y = 0;
+        m_anchor->GetSize( x, y );
+        y += 2*m_lineHeight;
+        int x_pos = GetScrollPos( wxHORIZONTAL );
+        int y_pos = GetScrollPos( wxVERTICAL );
+        SetScrollbars( 10, 10, x/10, y/10, x_pos, y_pos );
+    }
+    else
+    {
+        SetScrollbars( 0, 0, 0, 0 );
+    }
 }
 
 void wxTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
 }
 
 void wxTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
@@ -1012,7 +1041,12 @@ void wxTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
 
   int image_h = 0;
   int image_w = 0;
 
   int image_h = 0;
   int image_w = 0;
-  if (item->GetImage() != -1)
+  if ((item->IsExpanded()) && (item->GetSelectedImage() != -1))
+  {
+    m_imageListNormal->GetSize( item->GetSelectedImage(), image_w, image_h );
+    image_w += 4;
+  } 
+  else if (item->GetImage() != -1)
   {
     m_imageListNormal->GetSize( item->GetImage(), image_w, image_h );
     image_w += 4;
   {
     m_imageListNormal->GetSize( item->GetImage(), image_w, image_h );
     image_w += 4;
@@ -1020,7 +1054,15 @@ void wxTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
 
   dc.DrawRectangle( item->GetX()-2, item->GetY()-2, image_w+text_w+4, text_h+4 );
 
 
   dc.DrawRectangle( item->GetX()-2, item->GetY()-2, image_w+text_w+4, text_h+4 );
 
-  if (item->GetImage() != -1)
+  if ((item->IsExpanded()) && (item->GetSelectedImage() != -1))
+  {
+    dc.SetClippingRegion( item->GetX(), item->GetY(), image_w-2, text_h );
+    m_imageListNormal->Draw( item->GetSelectedImage(), dc,
+                             item->GetX(), item->GetY()-1,
+                             wxIMAGELIST_DRAW_TRANSPARENT );
+    dc.DestroyClippingRegion();
+  }
+  else if (item->GetImage() != -1)
   {
     dc.SetClippingRegion( item->GetX(), item->GetY(), image_w-2, text_h );
     m_imageListNormal->Draw( item->GetImage(), dc,
   {
     dc.SetClippingRegion( item->GetX(), item->GetY(), image_w-2, text_h );
     m_imageListNormal->Draw( item->GetImage(), dc,
@@ -1131,33 +1173,33 @@ void wxTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level, int &
 
 void wxTreeCtrl::OnPaint( wxPaintEvent &WXUNUSED(event) )
 {
 
 void wxTreeCtrl::OnPaint( wxPaintEvent &WXUNUSED(event) )
 {
-  if ( !m_anchor )
-    return;
+    if ( !m_anchor )
+        return;
 
 
-  wxPaintDC dc(this);
-  PrepareDC( dc );
+    wxPaintDC dc(this);
+    PrepareDC( dc );
 
 
-  dc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_SYSTEM_FONT ) );
+    dc.SetFont( wxSystemSettings::GetSystemFont( wxSYS_SYSTEM_FONT ) );
 
 
-  dc.SetPen( m_dottedPen );
-  m_lineHeight = (int)(dc.GetCharHeight() + 4);
+    dc.SetPen( m_dottedPen );
+    m_lineHeight = (int)(dc.GetCharHeight() + 4);
 
 
-  int y = m_lineHeight / 2 + 2;
-  PaintLevel( m_anchor, dc, 0, y );
+    int y = m_lineHeight / 2 + 2;
+    PaintLevel( m_anchor, dc, 0, y );
 }
 
 void wxTreeCtrl::OnSetFocus( wxFocusEvent &WXUNUSED(event) )
 {
 }
 
 void wxTreeCtrl::OnSetFocus( wxFocusEvent &WXUNUSED(event) )
 {
-  m_hasFocus = TRUE;
-  if ( m_current )
-    RefreshLine( m_current );
+    m_hasFocus = TRUE;
+    if ( m_current )
+        RefreshLine( m_current );
 }
 
 void wxTreeCtrl::OnKillFocus( wxFocusEvent &WXUNUSED(event) )
 {
 }
 
 void wxTreeCtrl::OnKillFocus( wxFocusEvent &WXUNUSED(event) )
 {
-  m_hasFocus = FALSE;
-  if ( m_current )
-    RefreshLine( m_current );
+    m_hasFocus = FALSE;
+    if ( m_current )
+        RefreshLine( m_current );
 }
 
 void wxTreeCtrl::OnChar( wxKeyEvent &event )
 }
 
 void wxTreeCtrl::OnChar( wxKeyEvent &event )
index 9556d2425fa6fd9ee9ed6b728783fa5287f904ee..31dca2714fa86b89de416eb137138ca0ded7d8c3 100644 (file)
@@ -89,7 +89,6 @@ LIB_CPP_SRC=\
  gtk/dcscreen.cpp \
  gtk/dnd.cpp \
  gtk/dialog.cpp \
  gtk/dcscreen.cpp \
  gtk/dnd.cpp \
  gtk/dialog.cpp \
- gtk/dirdlg.cpp \
  gtk/filedlg.cpp \
  gtk/font.cpp \
  gtk/frame.cpp \
  gtk/filedlg.cpp \
  gtk/font.cpp \
  gtk/frame.cpp \
@@ -122,6 +121,7 @@ LIB_CPP_SRC=\
 \
  generic/choicdgg.cpp \
  generic/colrdlgg.cpp \
 \
  generic/choicdgg.cpp \
  generic/colrdlgg.cpp \
+ generic/dirdlgg.cpp \
  generic/fontdlgg.cpp \
  generic/gridg.cpp \
  generic/imaglist.cpp \
  generic/fontdlgg.cpp \
  generic/gridg.cpp \
  generic/imaglist.cpp \
index bc2156d09455e22cf89ec8d676759c790c52bf36..efab7e9d5cb955c5a971202c09371ca75d851b7d 100644 (file)
@@ -108,6 +108,9 @@ void wxRadioButton::SetValue( bool val )
 {
     wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
   
 {
     wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
   
+    if ( val == GetValue() )
+        return;
+
     m_blockFirstEvent = TRUE;
   
     if (val)
     m_blockFirstEvent = TRUE;
   
     if (val)
index bc2156d09455e22cf89ec8d676759c790c52bf36..efab7e9d5cb955c5a971202c09371ca75d851b7d 100644 (file)
@@ -108,6 +108,9 @@ void wxRadioButton::SetValue( bool val )
 {
     wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
   
 {
     wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
   
+    if ( val == GetValue() )
+        return;
+
     m_blockFirstEvent = TRUE;
   
     if (val)
     m_blockFirstEvent = TRUE;
   
     if (val)