//#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
" ",
" "};
+/* 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;
// 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);
{
m_imageListNormal = new wxImageList(16, 16, TRUE);
m_imageListNormal->Add(wxICON(icon1));
+ m_imageListNormal->Add(wxICON(icon2));
SetImageList(m_imageListNormal);
m_showHidden = FALSE;
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);
}
}
#include "wx/dynarray.h"
#include "wx/dcclient.h"
#include "wx/imaglist.h"
+#include "wx/msgdlg.h"
// -----------------------------------------------------------------------------
// array types
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))
{
wxFAIL_MSG("not implemented");
- return NULL;
+ return (wxTextCtrl*)NULL;
}
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))
{
- 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
// -----------------------------------------------------------------------------
// helpers
// -----------------------------------------------------------------------------
+
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)
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;
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,
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) )
{
- m_hasFocus = TRUE;
- if ( m_current )
- RefreshLine( m_current );
+ m_hasFocus = TRUE;
+ if ( m_current )
+ RefreshLine( m_current );
}
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 )