Tried to add sorting to wxTreeCtrl
minor fixes to radiobutton git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1233 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
#elif defined(__WXMOTIF__)
|
#elif defined(__WXMOTIF__)
|
||||||
#include "wx/generic/dirdlgg.h"
|
#include "wx/generic/dirdlgg.h"
|
||||||
#elif defined(__WXGTK__)
|
#elif defined(__WXGTK__)
|
||||||
#include "wx/gtk/dirdlg.h"
|
#include "wx/generic/dirdlgg.h"
|
||||||
#elif defined(__WXQT__)
|
#elif defined(__WXQT__)
|
||||||
#include "wx/qt/dirdlg.h"
|
#include "wx/qt/dirdlg.h"
|
||||||
#elif defined(__WXMAC__)
|
#elif defined(__WXMAC__)
|
||||||
|
@@ -58,51 +58,19 @@
|
|||||||
//#include "wx/checkbox.h"
|
//#include "wx/checkbox.h"
|
||||||
#include "wx/treectrl.h"
|
#include "wx/treectrl.h"
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// data
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
WXDLLEXPORT_DATA(extern const char*) wxFileSelectorPromptStr;
|
WXDLLEXPORT_DATA(extern const char*) wxFileSelectorPromptStr;
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxDirItemData
|
// classes
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
class wxDirItemData : public wxTreeItemData
|
class wxDirItemData;
|
||||||
{
|
class wxDirCtrl;
|
||||||
public:
|
class wxDirDialog;
|
||||||
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;
|
|
||||||
};
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxDirDialog
|
// wxDirDialog
|
||||||
|
@@ -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_DIRCTRL = 1000;
|
||||||
static const int ID_TEXTCTRL = 1001;
|
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)
|
wxDirItemData::wxDirItemData(wxString& path, wxString& name)
|
||||||
{
|
{
|
||||||
m_path = new wxString(path);
|
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 = new wxImageList(16, 16, TRUE);
|
||||||
m_imageListNormal->Add(wxICON(icon1));
|
m_imageListNormal->Add(wxICON(icon1));
|
||||||
|
m_imageListNormal->Add(wxICON(icon2));
|
||||||
SetImageList(m_imageListNormal);
|
SetImageList(m_imageListNormal);
|
||||||
|
|
||||||
m_showHidden = FALSE;
|
m_showHidden = FALSE;
|
||||||
@@ -157,7 +230,7 @@ void wxDirCtrl::CreateItems(const wxTreeItemId &parent)
|
|||||||
for (unsigned int i=0; i<m_paths.Count(); i++)
|
for (unsigned int i=0; i<m_paths.Count(); i++)
|
||||||
{
|
{
|
||||||
dir_item = new wxDirItemData(m_paths[i],m_names[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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -28,6 +28,7 @@
|
|||||||
#include "wx/dynarray.h"
|
#include "wx/dynarray.h"
|
||||||
#include "wx/dcclient.h"
|
#include "wx/dcclient.h"
|
||||||
#include "wx/imaglist.h"
|
#include "wx/imaglist.h"
|
||||||
|
#include "wx/msgdlg.h"
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// array types
|
// array types
|
||||||
@@ -919,14 +920,14 @@ 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))
|
||||||
@@ -934,10 +935,37 @@ void wxTreeCtrl::EndEditLabel(const wxTreeItemId& WXUNUSED(item), bool WXUNUSED(
|
|||||||
wxFAIL_MSG("not implemented");
|
wxFAIL_MSG("not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxTreeCtrl::SortChildren( const wxTreeItemId& WXUNUSED(item),
|
wxTreeItemCmpFunc tree_ctrl_compare_func_2;
|
||||||
wxTreeItemCmpFunc *WXUNUSED(cmpFunction))
|
|
||||||
|
int tree_ctrl_compare_func_1( wxGenericTreeItem **line1, wxGenericTreeItem **line2 )
|
||||||
{
|
{
|
||||||
wxFAIL_MSG("not implemented");
|
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& item,
|
||||||
|
wxTreeItemCmpFunc *cmpFunction)
|
||||||
|
{
|
||||||
|
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,6 +991,7 @@ void wxTreeCtrl::SetStateImageList(wxImageList *imageList)
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// helpers
|
// helpers
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
void wxTreeCtrl::AdjustMyScrollbars()
|
void wxTreeCtrl::AdjustMyScrollbars()
|
||||||
{
|
{
|
||||||
if (m_anchor)
|
if (m_anchor)
|
||||||
@@ -1012,7 +1041,12 @@ void wxTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
|
|||||||
|
|
||||||
int image_h = 0;
|
int image_h = 0;
|
||||||
int image_w = 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 );
|
m_imageListNormal->GetSize( item->GetImage(), image_w, image_h );
|
||||||
image_w += 4;
|
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 );
|
dc.SetClippingRegion( item->GetX(), item->GetY(), image_w-2, text_h );
|
||||||
m_imageListNormal->Draw( item->GetImage(), dc,
|
m_imageListNormal->Draw( item->GetImage(), dc,
|
||||||
|
@@ -89,7 +89,6 @@ LIB_CPP_SRC=\
|
|||||||
gtk/dcscreen.cpp \
|
gtk/dcscreen.cpp \
|
||||||
gtk/dnd.cpp \
|
gtk/dnd.cpp \
|
||||||
gtk/dialog.cpp \
|
gtk/dialog.cpp \
|
||||||
gtk/dirdlg.cpp \
|
|
||||||
gtk/filedlg.cpp \
|
gtk/filedlg.cpp \
|
||||||
gtk/font.cpp \
|
gtk/font.cpp \
|
||||||
gtk/frame.cpp \
|
gtk/frame.cpp \
|
||||||
@@ -122,6 +121,7 @@ LIB_CPP_SRC=\
|
|||||||
\
|
\
|
||||||
generic/choicdgg.cpp \
|
generic/choicdgg.cpp \
|
||||||
generic/colrdlgg.cpp \
|
generic/colrdlgg.cpp \
|
||||||
|
generic/dirdlgg.cpp \
|
||||||
generic/fontdlgg.cpp \
|
generic/fontdlgg.cpp \
|
||||||
generic/gridg.cpp \
|
generic/gridg.cpp \
|
||||||
generic/imaglist.cpp \
|
generic/imaglist.cpp \
|
||||||
|
@@ -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;
|
m_blockFirstEvent = TRUE;
|
||||||
|
|
||||||
if (val)
|
if (val)
|
||||||
|
@@ -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;
|
m_blockFirstEvent = TRUE;
|
||||||
|
|
||||||
if (val)
|
if (val)
|
||||||
|
Reference in New Issue
Block a user