]> git.saurik.com Git - wxWidgets.git/commitdiff
TreeCtrl indentation and spacing
authorRobert Roebling <robert@roebling.de>
Mon, 3 May 1999 23:11:53 +0000 (23:11 +0000)
committerRobert Roebling <robert@roebling.de>
Mon, 3 May 1999 23:11:53 +0000 (23:11 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2334 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/generic/treectrl.h
include/wx/msw/treectrl.h
samples/treectrl/treetest.cpp
samples/treectrl/treetest.h
src/generic/treectrl.cpp

index 8bbf086830167d211d593b478f215d5ef1abd21a..407e7c573ce65b150c816b33750e1ffef556cd16 100644 (file)
@@ -234,6 +234,10 @@ public:
     unsigned int GetIndent() const { return m_indent; }
     void SetIndent(unsigned int indent);
 
+       // spacing is the number of pixels between the start and the Text
+    unsigned int GetSpacing() const { return m_spacing; }
+    void SetSpacing(unsigned int spacing);
+    
         // image list: these functions allow to associate an image list with
         // the control and retrieve it. Note that the control does _not_ delete
         // the associated image list when it's deleted in order to allow image
@@ -453,6 +457,7 @@ protected:
     bool                 m_dirty;
     int                  m_xScroll,m_yScroll;
     unsigned int         m_indent;
+    unsigned int         m_spacing;
     int                  m_lineHeight;
     wxPen                m_dottedPen;
     wxBrush             *m_hilightBrush;
index f20bb7501e9fd04b61fe5d424134c89b133c9726..6f4050df46bccf0747e40ea9e5c336b75e6ac05e 100644 (file)
@@ -199,6 +199,11 @@ public:
     unsigned int GetIndent() const;
     void SetIndent(unsigned int indent);
 
+       // spacing is the number of pixels between the start and the Text
+       // not implemented under wxMSW
+    unsigned int GetSpacing() const { return 18; } // return wxGTK default
+    void SetSpacing(unsigned int ) {}
+
         // image list: these functions allow to associate an image list with
         // the control and retrieve it. Note that the control does _not_ delete
         // the associated image list when it's deleted in order to allow image
index 174b9bdc5ff404a59b50dec64fd9532f5293df57..2fe8fe49fd4c6ecfac0c3373ed2bde9914cd1dd6 100644 (file)
@@ -37,6 +37,8 @@
 #include "wx/imaglist.h"
 #include "wx/treectrl.h"
 
+#include "math.h"
+
 #include "treetest.h"
 
 // verify that the item is ok and insult the user if it is not
@@ -64,6 +66,10 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_MENU(TreeTest_CollapseAndReset, MyFrame::OnCollapseAndReset)
     EVT_MENU(TreeTest_EnsureVisible, MyFrame::OnEnsureVisible)
     EVT_MENU(TreeTest_AddItem, MyFrame::OnAddItem)
+    EVT_MENU(TreeTest_IncIndent, MyFrame::OnIncIndent)
+    EVT_MENU(TreeTest_DecIndent, MyFrame::OnDecIndent)
+    EVT_MENU(TreeTest_IncSpacing, MyFrame::OnIncSpacing)
+    EVT_MENU(TreeTest_DecSpacing, MyFrame::OnDecSpacing)
 END_EVENT_TABLE()
 
 BEGIN_EVENT_TABLE(MyTreeCtrl, wxTreeCtrl)
@@ -133,6 +139,12 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h)
     tree_menu->Append(TreeTest_SortRev, "Sort in reversed order");
     tree_menu->AppendSeparator();
     tree_menu->Append(TreeTest_EnsureVisible, "Make the last item &visible");
+    tree_menu->AppendSeparator();
+    tree_menu->Append(TreeTest_IncIndent, "Add 5 points to indentation\tAlt-I");
+    tree_menu->Append(TreeTest_DecIndent, "Reduce indentation by 5 points\tAlt-R");
+    tree_menu->AppendSeparator();
+    tree_menu->Append(TreeTest_IncSpacing, "Add 5 points to spacing\tCtrl-I");
+    tree_menu->Append(TreeTest_DecSpacing, "Reduce spacing by 5 points\tCtrl-R");
 
     item_menu->Append(TreeTest_Dump, "&Dump item children");
     item_menu->AppendSeparator();
@@ -296,6 +308,34 @@ void MyFrame::OnAddItem(wxCommandEvent& WXUNUSED(event))
                            MyTreeCtrl::TreeCtrlIcon_File);
 }
 
+void MyFrame::OnIncIndent(wxCommandEvent& WXUNUSED(event))
+{
+    unsigned int indent = m_treeCtrl->GetIndent();
+    if (indent < 100)
+        m_treeCtrl->SetIndent( indent+5 );
+}
+
+void MyFrame::OnDecIndent(wxCommandEvent& WXUNUSED(event))
+{
+    unsigned int indent = m_treeCtrl->GetIndent();
+    if (indent > 10)
+        m_treeCtrl->SetIndent( indent-5 );
+}
+
+void MyFrame::OnIncSpacing(wxCommandEvent& WXUNUSED(event))
+{
+    unsigned int indent = m_treeCtrl->GetSpacing();
+    if (indent < 100)
+        m_treeCtrl->SetSpacing( indent+5 );
+}
+
+void MyFrame::OnDecSpacing(wxCommandEvent& WXUNUSED(event))
+{
+    unsigned int indent = m_treeCtrl->GetSpacing();
+    if (indent > 10)
+        m_treeCtrl->SetSpacing( indent-5 );
+}
+
 // MyTreeCtrl implementation
 IMPLEMENT_DYNAMIC_CLASS(MyTreeCtrl, wxTreeCtrl)
 
index 0cd2f06ca8fddbb03b8768cfa605fb56cad6fe0c..c3ce883347030cd30fba39fce38e406fe813601d 100644 (file)
@@ -118,6 +118,12 @@ public:
     void OnSortRev(wxCommandEvent& event) { DoSort(TRUE); }
 
     void OnAddItem(wxCommandEvent& event);
+    
+    void OnIncIndent(wxCommandEvent& event);
+    void OnDecIndent(wxCommandEvent& event);
+
+    void OnIncSpacing(wxCommandEvent& event);
+    void OnDecSpacing(wxCommandEvent& event);
 
 private:
     void DoSort(bool reverse = FALSE);
@@ -147,5 +153,9 @@ enum
     TreeTest_CollapseAndReset,
     TreeTest_EnsureVisible,
     TreeTest_AddItem,
+    TreeTest_IncIndent,
+    TreeTest_DecIndent,
+    TreeTest_IncSpacing,
+    TreeTest_DecSpacing,
     TreeTest_Ctrl = 100
 };
index 2494432374c41d31535d8e251e73a9bd6caeaab6..698488be069eb30c0ca9660ef35d8a000cae31ec 100644 (file)
@@ -353,6 +353,7 @@ void wxTreeCtrl::Init()
   m_yScroll = 0;
   m_lineHeight = 10;
   m_indent = 15;
+  m_spacing = 18;
 
   m_hilightBrush = new wxBrush
     (
@@ -403,6 +404,14 @@ size_t wxTreeCtrl::GetCount() const
 void wxTreeCtrl::SetIndent(unsigned int indent)
 {
   m_indent = indent;
+  m_dirty = TRUE;
+  Refresh();
+}
+
+void wxTreeCtrl::SetSpacing(unsigned int spacing)
+{
+  m_spacing = spacing;
+  m_dirty = TRUE;
   Refresh();
 }
 
@@ -1152,11 +1161,11 @@ void wxTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level, int &
 {
     int horizX = level*m_indent;
 
-    item->SetX( horizX+33 );
+    item->SetX( horizX+m_indent+m_spacing );
     item->SetY( y-m_lineHeight/2 );
     item->SetHeight( m_lineHeight );
 
-    item->SetCross( horizX+15, y );
+    item->SetCross( horizX+m_indent, y );
 
     int oldY = y;
 
@@ -1166,24 +1175,25 @@ void wxTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level, int &
     if (IsExposed( exposed_x, exposed_y, 10000, m_lineHeight+4 ))  // 10000 = very much
     {
         int startX = horizX;
-        int endX = horizX + 10;
+        int endX = horizX + (m_indent-5);
 
+//        if (!item->HasChildren()) endX += (m_indent+5);
         if (!item->HasChildren()) endX += 20;
 
         dc.DrawLine( startX, y, endX, y );
 
         if (item->HasPlus())
         {
-            dc.DrawLine( horizX+20, y, horizX+30, y );
+            dc.DrawLine( horizX+(m_indent+5), y, horizX+(m_indent+15), y );
             dc.SetPen( *wxGREY_PEN );
             dc.SetBrush( *wxWHITE_BRUSH );
-            dc.DrawRectangle( horizX+10, y-4, 11, 9 );
+            dc.DrawRectangle( horizX+(m_indent-5), y-4, 11, 9 );
             dc.SetPen( *wxBLACK_PEN );
-            dc.DrawLine( horizX+13, y, horizX+18, y );
+            dc.DrawLine( horizX+(m_indent-2), y, horizX+(m_indent+3), y );
 
             if (!item->IsExpanded())
             {
-                dc.DrawLine( horizX+15, y-2, horizX+15, y+3 );
+                dc.DrawLine( horizX+m_indent, y-2, horizX+m_indent, y+3 );
             }
         }
 
@@ -1232,7 +1242,7 @@ void wxTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level, int &
         // delete all its children for example) - don't draw the vertical line
         // in this case
         if (count > 0)
-            dc.DrawLine( horizX+15, oldY+5, horizX+15, semiOldY );
+            dc.DrawLine( horizX+m_indent, oldY+5, horizX+m_indent, semiOldY );
     }
 }
 
@@ -1534,7 +1544,7 @@ void wxTreeCtrl::CalculateLevel( wxGenericTreeItem *item, wxDC &dc, int level, i
 {
     int horizX = level*m_indent;
 
-    item->SetX( horizX+33 );
+    item->SetX( horizX+m_indent+m_spacing );
     item->SetY( y-m_lineHeight/2 );
     item->SetHeight( m_lineHeight );