Added wxDataViewTreeCtrl
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50404 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -101,6 +101,7 @@ that are not static can have \helpref{validators}{wxvalidator} associated with t
|
|||||||
\twocolitem{\helpref{wxComboBox}{wxcombobox}}{A choice with an editable area}
|
\twocolitem{\helpref{wxComboBox}{wxcombobox}}{A choice with an editable area}
|
||||||
\twocolitem{\helpref{wxComboCtrl}{wxcomboctrl}}{A combobox with application defined popup}
|
\twocolitem{\helpref{wxComboCtrl}{wxcomboctrl}}{A combobox with application defined popup}
|
||||||
\twocolitem{\helpref{wxDataViewCtrl}{wxdataviewctrl}}{A control to tabular or tree like data}
|
\twocolitem{\helpref{wxDataViewCtrl}{wxdataviewctrl}}{A control to tabular or tree like data}
|
||||||
|
\twocolitem{\helpref{wxDataViewTreeCtrl}{wxdataviewtreectrl}}{A specialized wxDataViewCtrl with wxTreeCtrl-like API}
|
||||||
\twocolitem{\helpref{wxGauge}{wxgauge}}{A control to represent a varying quantity, such as time remaining}
|
\twocolitem{\helpref{wxGauge}{wxgauge}}{A control to represent a varying quantity, such as time remaining}
|
||||||
\twocolitem{\helpref{wxGenericDirCtrl}{wxgenericdirctrl}}{A control for displaying a directory tree}
|
\twocolitem{\helpref{wxGenericDirCtrl}{wxgenericdirctrl}}{A control for displaying a directory tree}
|
||||||
\twocolitem{\helpref{wxHtmlListBox}{wxhtmllistbox}}{An abstract class for creating listboxes showing HTML content}
|
\twocolitem{\helpref{wxHtmlListBox}{wxhtmllistbox}}{An abstract class for creating listboxes showing HTML content}
|
||||||
|
@@ -90,6 +90,7 @@
|
|||||||
\input dataviewitem.tex
|
\input dataviewitem.tex
|
||||||
\input dataviewitemattr.tex
|
\input dataviewitemattr.tex
|
||||||
\input dataviewrenderer.tex
|
\input dataviewrenderer.tex
|
||||||
|
\input dataviewtreectrl.tex
|
||||||
\input dataviewtreestore.tex
|
\input dataviewtreestore.tex
|
||||||
\input dobjcomp.tex
|
\input dobjcomp.tex
|
||||||
\input dobjsmpl.tex
|
\input dobjsmpl.tex
|
||||||
|
183
docs/latex/wx/dataviewtreectrl.tex
Normal file
183
docs/latex/wx/dataviewtreectrl.tex
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
\section{\class{wxDataViewTreeCtrl}}\label{wxdataviewtreectrl}
|
||||||
|
|
||||||
|
This class is a \helpref{wxDataViewCtrl}{wxdataviewctrl} which internally
|
||||||
|
uses a \helpref{wxDataViewTreeStore}{wxdataviewtreestore} and forwards
|
||||||
|
most of its API to that class. Additionally, it uses a \helpref{wxImageList}{wxImageList}
|
||||||
|
to store a list of icons. The main purpose of this class is to look
|
||||||
|
like a \helpref{wxTreeCtrl}{wxtreectrl} to make a transition from it
|
||||||
|
to the wxDataViewCtrl class simpler.
|
||||||
|
|
||||||
|
\wxheading{Derived from}
|
||||||
|
|
||||||
|
\helpref{wxDataViewCtrl}{wxdataviewctrl}
|
||||||
|
|
||||||
|
\wxheading{Include files}
|
||||||
|
|
||||||
|
<dataview.h>
|
||||||
|
|
||||||
|
\wxheading{Data structures}
|
||||||
|
|
||||||
|
\latexignore{\rtfignore{\wxheading{Members}}}
|
||||||
|
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::wxDataViewTreeCtrl}\label{wxdataviewtreectrlwxdataviewtreectrl}
|
||||||
|
|
||||||
|
\func{}{wxDataViewTreeCtrl}{\void}
|
||||||
|
|
||||||
|
Default constructor.
|
||||||
|
|
||||||
|
\func{}{wxDataViewTreeCtrl}{\param{wxWindow* }{parent}, \param{wxWindowID }{id}, \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize}, \param{long }{style = wxDV\_NO\_HEADER}, \param{const wxValidator\& }{validator = wxDefaultValidator}}
|
||||||
|
|
||||||
|
Constructor. Calls \helpref{Create}{wxdataviewtreectrlcreate}.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::\destruct{wxDataViewTreeCtrl}}\label{wxdataviewtreectrldtor}
|
||||||
|
|
||||||
|
\func{}{\destruct{wxDataViewTreeCtrl}}{\void}
|
||||||
|
|
||||||
|
Destructor. Deletes the image list if any.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::AppendContainer}\label{wxdataviewtreectrlappendcontainer}
|
||||||
|
|
||||||
|
\func{wxDataViewItem}{AppendContainer}{\param{const wxDataViewItem\& }{parent}, \param{const wxString\& }{text}, \param{int }{icon = -1}, \param{int }{expanded = -1}, \param{wxClientData* }{data = NULL}}
|
||||||
|
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::AppendItem}\label{wxdataviewtreectrlappenditem}
|
||||||
|
|
||||||
|
\func{wxDataViewItem}{AppendItem}{\param{const wxDataViewItem\& }{parent}, \param{const wxString\& }{text}, \param{int }{icon = -1}, \param{wxClientData* }{data = NULL}}
|
||||||
|
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::Create}\label{wxdataviewtreectrlcreate}
|
||||||
|
|
||||||
|
\func{bool}{Create}{\param{wxWindow* }{parent}, \param{wxWindowID }{id}, \param{const wxPoint\& }{pos = wxDefaultPosition}, \param{const wxSize\& }{size = wxDefaultSize}, \param{long }{style = wxDV\_NO\_HEADER}, \param{const wxValidator\& }{validator = wxDefaultValidator}}
|
||||||
|
|
||||||
|
Creates the control and a \helpref{wxDataViewTreeStore}{wxdataviewtreestore} as
|
||||||
|
its internal model.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::DeleteAllItems}\label{wxdataviewtreectrldeleteallitems}
|
||||||
|
|
||||||
|
\func{void}{DeleteAllItems}{\void}
|
||||||
|
|
||||||
|
Calls the identical method from wxDataViewTreeStore.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::DeleteChildren}\label{wxdataviewtreectrldeletechildren}
|
||||||
|
|
||||||
|
\func{void}{DeleteChildren}{\param{const wxDataViewItem\& }{item}}
|
||||||
|
|
||||||
|
Calls the identical method from wxDataViewTreeStore.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::DeleteItem}\label{wxdataviewtreectrldeleteitem}
|
||||||
|
|
||||||
|
\func{void}{DeleteItem}{\param{const wxDataViewItem\& }{item}}
|
||||||
|
|
||||||
|
Calls the identical method from wxDataViewTreeStore.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::GetChildCount}\label{wxdataviewtreectrlgetchildcount}
|
||||||
|
|
||||||
|
\constfunc{int}{GetChildCount}{\param{const wxDataViewItem\& }{parent}}
|
||||||
|
|
||||||
|
Calls the identical method from wxDataViewTreeStore.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::GetImageList}\label{wxdataviewtreectrlgetimagelist}
|
||||||
|
|
||||||
|
\func{wxImageList*}{GetImageList}{\void}
|
||||||
|
|
||||||
|
Returns the image list.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::GetItemData}\label{wxdataviewtreectrlgetitemdata}
|
||||||
|
|
||||||
|
\constfunc{wxClientData*}{GetItemData}{\param{const wxDataViewItem\& }{item}}
|
||||||
|
|
||||||
|
Calls the identical method from wxDataViewTreeStore.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::GetItemExpandedIcon}\label{wxdataviewtreectrlgetitemexpandedicon}
|
||||||
|
|
||||||
|
\constfunc{const wxIcon\&}{GetItemExpandedIcon}{\param{const wxDataViewItem\& }{item}}
|
||||||
|
|
||||||
|
Calls the identical method from wxDataViewTreeStore.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::GetItemIcon}\label{wxdataviewtreectrlgetitemicon}
|
||||||
|
|
||||||
|
\constfunc{const wxIcon\&}{GetItemIcon}{\param{const wxDataViewItem\& }{item}}
|
||||||
|
|
||||||
|
Calls the identical method from wxDataViewTreeStore.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::GetItemText}\label{wxdataviewtreectrlgetitemtext}
|
||||||
|
|
||||||
|
\constfunc{wxString}{GetItemText}{\param{const wxDataViewItem\& }{item}}
|
||||||
|
|
||||||
|
Calls the identical method from wxDataViewTreeStore.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::GetNthChild}\label{wxdataviewtreectrlgetnthchild}
|
||||||
|
|
||||||
|
\constfunc{wxDataViewItem}{GetNthChild}{\param{const wxDataViewItem\& }{parent}, \param{unsigned int }{pos}}
|
||||||
|
|
||||||
|
Calls the identical method from wxDataViewTreeStore.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::GetStore}\label{wxdataviewtreectrlgetstore}
|
||||||
|
|
||||||
|
\func{wxDataViewTreeStore*}{GetStore}{\void}
|
||||||
|
|
||||||
|
\constfunc{const wxDataViewTreeStore*}{GetStore}{\void}
|
||||||
|
|
||||||
|
Returns the store.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::InsertContainer}\label{wxdataviewtreectrlinsertcontainer}
|
||||||
|
|
||||||
|
\func{wxDataViewItem}{InsertContainer}{\param{const wxDataViewItem\& }{parent}, \param{const wxDataViewItem\& }{previous}, \param{const wxString\& }{text}, \param{int }{icon = -1}, \param{int }{expanded = -1}, \param{wxClientData* }{data = NULL}}
|
||||||
|
|
||||||
|
Calls the same method from wxDataViewTreeStore but uess
|
||||||
|
and index position in the image list instead of a wxIcon.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::InsertItem}\label{wxdataviewtreectrlinsertitem}
|
||||||
|
|
||||||
|
\func{wxDataViewItem}{InsertItem}{\param{const wxDataViewItem\& }{parent}, \param{const wxDataViewItem\& }{previous}, \param{const wxString\& }{text}, \param{int }{icon = -1}, \param{wxClientData* }{data = NULL}}
|
||||||
|
|
||||||
|
Calls the same method from wxDataViewTreeStore but uess
|
||||||
|
and index position in the image list instead of a wxIcon.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::PrependContainer}\label{wxdataviewtreectrlprependcontainer}
|
||||||
|
|
||||||
|
\func{wxDataViewItem}{PrependContainer}{\param{const wxDataViewItem\& }{parent}, \param{const wxString\& }{text}, \param{int }{icon = -1}, \param{int }{expanded = -1}, \param{wxClientData* }{data = NULL}}
|
||||||
|
|
||||||
|
Calls the same method from wxDataViewTreeStore but uess
|
||||||
|
and index position in the image list instead of a wxIcon.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::PrependItem}\label{wxdataviewtreectrlprependitem}
|
||||||
|
|
||||||
|
\func{wxDataViewItem}{PrependItem}{\param{const wxDataViewItem\& }{parent}, \param{const wxString\& }{text}, \param{int }{icon = -1}, \param{wxClientData* }{data = NULL}}
|
||||||
|
|
||||||
|
Calls the same method from wxDataViewTreeStore but uess
|
||||||
|
and index position in the image list instead of a wxIcon.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::SetImageList}\label{wxdataviewtreectrlsetimagelist}
|
||||||
|
|
||||||
|
\func{void}{SetImageList}{\param{wxImageList* }{imagelist}}
|
||||||
|
|
||||||
|
Sets the image list.
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::SetItemData}\label{wxdataviewtreectrlsetitemdata}
|
||||||
|
|
||||||
|
\func{void}{SetItemData}{\param{const wxDataViewItem\& }{item}, \param{wxClientData* }{data}}
|
||||||
|
|
||||||
|
Calls the identical method from wxDataViewTreeStore.
|
||||||
|
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::SetItemExpandedIcon}\label{wxdataviewtreectrlsetitemexpandedicon}
|
||||||
|
|
||||||
|
\func{void}{SetItemExpandedIcon}{\param{const wxDataViewItem\& }{item}, \param{const wxIcon\& }{icon}}
|
||||||
|
|
||||||
|
Calls the identical method from wxDataViewTreeStore.
|
||||||
|
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::SetItemIcon}\label{wxdataviewtreectrlsetitemicon}
|
||||||
|
|
||||||
|
\func{void}{SetItemIcon}{\param{const wxDataViewItem\& }{item}, \param{const wxIcon\& }{icon}}
|
||||||
|
|
||||||
|
Calls the identical method from wxDataViewTreeStore.
|
||||||
|
|
||||||
|
|
||||||
|
\membersection{wxDataViewTreeCtrl::SetItemText}\label{wxdataviewtreectrlsetitemtext}
|
||||||
|
|
||||||
|
\func{void}{SetItemText}{\param{const wxDataViewItem\& }{item}, \param{const wxString\& }{text}}
|
||||||
|
|
||||||
|
Calls the identical method from wxDataViewTreeStore.
|
@@ -22,6 +22,7 @@
|
|||||||
#include "wx/variant.h"
|
#include "wx/variant.h"
|
||||||
#include "wx/dynarray.h"
|
#include "wx/dynarray.h"
|
||||||
#include "wx/icon.h"
|
#include "wx/icon.h"
|
||||||
|
#include "wx/imaglist.h"
|
||||||
|
|
||||||
#if defined(__WXGTK20__)
|
#if defined(__WXGTK20__)
|
||||||
// for testing
|
// for testing
|
||||||
@@ -506,6 +507,7 @@ public:
|
|||||||
|
|
||||||
virtual bool AssociateModel( wxDataViewModel *model );
|
virtual bool AssociateModel( wxDataViewModel *model );
|
||||||
wxDataViewModel* GetModel();
|
wxDataViewModel* GetModel();
|
||||||
|
const wxDataViewModel* GetModel() const;
|
||||||
|
|
||||||
// short cuts
|
// short cuts
|
||||||
wxDataViewColumn *PrependTextColumn( const wxString &label, unsigned int model_column,
|
wxDataViewColumn *PrependTextColumn( const wxString &label, unsigned int model_column,
|
||||||
@@ -848,12 +850,18 @@ public:
|
|||||||
const wxIcon &GetExpandedIcon() const
|
const wxIcon &GetExpandedIcon() const
|
||||||
{ return m_iconExpanded; }
|
{ return m_iconExpanded; }
|
||||||
|
|
||||||
|
void SetExpanded( bool expanded = true )
|
||||||
|
{ m_isExpanded = expanded; }
|
||||||
|
bool IsExpanded() const
|
||||||
|
{ return m_isExpanded; }
|
||||||
|
|
||||||
virtual bool IsContainer()
|
virtual bool IsContainer()
|
||||||
{ return true; }
|
{ return true; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxDataViewTreeStoreNodeList m_children;
|
wxDataViewTreeStoreNodeList m_children;
|
||||||
wxIcon m_iconExpanded;
|
wxIcon m_iconExpanded;
|
||||||
|
bool m_isExpanded;
|
||||||
};
|
};
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -925,14 +933,15 @@ public:
|
|||||||
wxDataViewTreeStoreNode *m_root;
|
wxDataViewTreeStoreNode *m_root;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if 0
|
|
||||||
class WXDLLIMPEXP_ADV wxDataViewTreeCtrl: public wxDataViewCtrl
|
class WXDLLIMPEXP_ADV wxDataViewTreeCtrl: public wxDataViewCtrl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxDataViewCtrl( wxWindow *parent, wxWindowID id,
|
wxDataViewTreeCtrl();
|
||||||
|
wxDataViewTreeCtrl( wxWindow *parent, wxWindowID id,
|
||||||
const wxPoint& pos = wxDefaultPosition,
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
const wxSize& size = wxDefaultSize, long style = wxDV_NO_HEADER,
|
const wxSize& size = wxDefaultSize, long style = wxDV_NO_HEADER,
|
||||||
const wxValidator& validator = wxDefaultValidator );
|
const wxValidator& validator = wxDefaultValidator );
|
||||||
|
~wxDataViewTreeCtrl();
|
||||||
|
|
||||||
bool Create( wxWindow *parent, wxWindowID id,
|
bool Create( wxWindow *parent, wxWindowID id,
|
||||||
const wxPoint& pos = wxDefaultPosition,
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
@@ -941,14 +950,68 @@ public:
|
|||||||
|
|
||||||
wxDataViewTreeStore *GetStore()
|
wxDataViewTreeStore *GetStore()
|
||||||
{ return (wxDataViewTreeStore*) GetModel(); }
|
{ return (wxDataViewTreeStore*) GetModel(); }
|
||||||
|
const wxDataViewTreeStore *GetStore() const
|
||||||
|
{ return (const wxDataViewTreeStore*) GetModel(); }
|
||||||
|
|
||||||
void OnExpand( wxDataViewCtrl &event );
|
void SetImageList( wxImageList *imagelist );
|
||||||
void OnCollapse( wxDataViewCtrl &event );
|
wxImageList* GetImageList() { return m_imageList; }
|
||||||
|
|
||||||
|
wxDataViewItem AppendItem( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, int icon = -1, wxClientData *data = NULL );
|
||||||
|
wxDataViewItem PrependItem( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, int icon = -1, wxClientData *data = NULL );
|
||||||
|
wxDataViewItem InsertItem( const wxDataViewItem& parent, const wxDataViewItem& previous,
|
||||||
|
const wxString &text, int icon = -1, wxClientData *data = NULL );
|
||||||
|
|
||||||
|
wxDataViewItem PrependContainer( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, int icon = -1, int expanded = -1,
|
||||||
|
wxClientData *data = NULL );
|
||||||
|
wxDataViewItem AppendContainer( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, int icon = -1, int expanded = -1,
|
||||||
|
wxClientData *data = NULL );
|
||||||
|
wxDataViewItem InsertContainer( const wxDataViewItem& parent, const wxDataViewItem& previous,
|
||||||
|
const wxString &text, int icon = -1, int expanded = -1,
|
||||||
|
wxClientData *data = NULL );
|
||||||
|
|
||||||
|
wxDataViewItem GetNthChild( const wxDataViewItem& parent, unsigned int pos ) const
|
||||||
|
{ return GetStore()->GetNthChild(parent, pos); }
|
||||||
|
int GetChildCount( const wxDataViewItem& parent ) const
|
||||||
|
{ return GetStore()->GetChildCount(parent); }
|
||||||
|
|
||||||
|
void SetItemText( const wxDataViewItem& item, const wxString &text )
|
||||||
|
{ GetStore()->SetItemText(item,text); }
|
||||||
|
wxString GetItemText( const wxDataViewItem& item ) const
|
||||||
|
{ return GetStore()->GetItemText(item); }
|
||||||
|
void SetItemIcon( const wxDataViewItem& item, const wxIcon &icon )
|
||||||
|
{ GetStore()->SetItemIcon(item,icon); }
|
||||||
|
const wxIcon &GetItemIcon( const wxDataViewItem& item ) const
|
||||||
|
{ return GetStore()->GetItemIcon(item); }
|
||||||
|
void SetItemExpandedIcon( const wxDataViewItem& item, const wxIcon &icon )
|
||||||
|
{ GetStore()->SetItemExpandedIcon(item,icon); }
|
||||||
|
const wxIcon &GetItemExpandedIcon( const wxDataViewItem& item ) const
|
||||||
|
{ return GetStore()->GetItemExpandedIcon(item); }
|
||||||
|
void SetItemData( const wxDataViewItem& item, wxClientData *data )
|
||||||
|
{ GetStore()->SetItemData(item,data); }
|
||||||
|
wxClientData *GetItemData( const wxDataViewItem& item ) const
|
||||||
|
{ return GetStore()->GetItemData(item); }
|
||||||
|
|
||||||
|
void DeleteItem( const wxDataViewItem& item )
|
||||||
|
{ GetStore()->DeleteItem(item); }
|
||||||
|
void DeleteChildren( const wxDataViewItem& item )
|
||||||
|
{ GetStore()->DeleteChildren(item); }
|
||||||
|
void DeleteAllItems()
|
||||||
|
{ GetStore()->DeleteAllItems(); }
|
||||||
|
|
||||||
|
void OnExpanded( wxDataViewEvent &event );
|
||||||
|
void OnCollapsed( wxDataViewEvent &event );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
wxImageList *m_imageList;
|
||||||
|
|
||||||
|
private:
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDataViewTreeCtrl)
|
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxDataViewTreeCtrl)
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // wxUSE_DATAVIEWCTRL
|
#endif // wxUSE_DATAVIEWCTRL
|
||||||
|
|
||||||
|
@@ -34,6 +34,36 @@
|
|||||||
|
|
||||||
#include "null.xpm"
|
#include "null.xpm"
|
||||||
|
|
||||||
|
/* XPM */
|
||||||
|
static const char *small1_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"16 16 6 1",
|
||||||
|
". c Black",
|
||||||
|
"o c #FFFFFF",
|
||||||
|
"X c #000080",
|
||||||
|
"O c #FFFF00",
|
||||||
|
" c None",
|
||||||
|
"+ c #FF0000",
|
||||||
|
/* pixels */
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ....... ",
|
||||||
|
" .XXXXX. ",
|
||||||
|
" .oXXXX. ",
|
||||||
|
" .oXXX.......",
|
||||||
|
".....oXXX.OOOOO.",
|
||||||
|
".+++.XXXX.oOOOO.",
|
||||||
|
".o++......oOOOO.",
|
||||||
|
".o++++. .oOOOO.",
|
||||||
|
".o++++. .OOOOO.",
|
||||||
|
".+++++. .......",
|
||||||
|
"....... ",
|
||||||
|
" ",
|
||||||
|
" "
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define DEFAULT_ALIGN wxALIGN_LEFT
|
#define DEFAULT_ALIGN wxALIGN_LEFT
|
||||||
#define DATAVIEW_DEFAULT_STYLE (wxDV_MULTIPLE|wxDV_HORIZ_RULES|wxDV_VERT_RULES)
|
#define DATAVIEW_DEFAULT_STYLE (wxDV_MULTIPLE|wxDV_HORIZ_RULES|wxDV_VERT_RULES)
|
||||||
@@ -327,7 +357,11 @@ class MyListModel: public wxDataViewIndexListModel
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MyListModel() :
|
MyListModel() :
|
||||||
wxDataViewIndexListModel( 100 )
|
#ifdef __WXMAC__
|
||||||
|
wxDataViewIndexListModel( 1000 )
|
||||||
|
#else
|
||||||
|
wxDataViewIndexListModel( 100000 )
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
for (i = 0; i < 100; i++)
|
for (i = 0; i < 100; i++)
|
||||||
@@ -380,7 +414,16 @@ public:
|
|||||||
{
|
{
|
||||||
if (col==0)
|
if (col==0)
|
||||||
{
|
{
|
||||||
variant = m_array[ row ];
|
if (row >= m_array.GetCount())
|
||||||
|
{
|
||||||
|
wxString str;
|
||||||
|
str.Printf( "row %d", row );
|
||||||
|
variant = str;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
variant = m_array[ row ];
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
if (col==1)
|
if (col==1)
|
||||||
{
|
{
|
||||||
@@ -414,6 +457,9 @@ public:
|
|||||||
{
|
{
|
||||||
if (col == 0)
|
if (col == 0)
|
||||||
{
|
{
|
||||||
|
if (row >= m_array.GetCount())
|
||||||
|
return false;
|
||||||
|
|
||||||
m_array[row] = variant.GetString();
|
m_array[row] = variant.GetString();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -449,8 +495,6 @@ public:
|
|||||||
void OnQuit(wxCommandEvent& event);
|
void OnQuit(wxCommandEvent& event);
|
||||||
void OnAbout(wxCommandEvent& event);
|
void OnAbout(wxCommandEvent& event);
|
||||||
|
|
||||||
void OnTestTreeCtrl(wxCommandEvent& event);
|
|
||||||
|
|
||||||
void OnAddMozart(wxCommandEvent& event);
|
void OnAddMozart(wxCommandEvent& event);
|
||||||
void OnDeleteMusic(wxCommandEvent& event);
|
void OnDeleteMusic(wxCommandEvent& event);
|
||||||
void OnDeleteYear(wxCommandEvent& event);
|
void OnDeleteYear(wxCommandEvent& event);
|
||||||
@@ -529,8 +573,6 @@ enum
|
|||||||
ID_ABOUT = wxID_ABOUT,
|
ID_ABOUT = wxID_ABOUT,
|
||||||
ID_EXIT = wxID_EXIT,
|
ID_EXIT = wxID_EXIT,
|
||||||
|
|
||||||
ID_TEST_TREECTRL = 40,
|
|
||||||
|
|
||||||
ID_MUSIC_CTRL = 50,
|
ID_MUSIC_CTRL = 50,
|
||||||
|
|
||||||
ID_ADD_MOZART = 100,
|
ID_ADD_MOZART = 100,
|
||||||
@@ -544,7 +586,6 @@ enum
|
|||||||
|
|
||||||
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
||||||
EVT_MENU( ID_ABOUT, MyFrame::OnAbout )
|
EVT_MENU( ID_ABOUT, MyFrame::OnAbout )
|
||||||
EVT_MENU( ID_TEST_TREECTRL, MyFrame::OnTestTreeCtrl )
|
|
||||||
EVT_MENU( ID_EXIT, MyFrame::OnQuit )
|
EVT_MENU( ID_EXIT, MyFrame::OnQuit )
|
||||||
EVT_BUTTON( ID_ADD_MOZART, MyFrame::OnAddMozart )
|
EVT_BUTTON( ID_ADD_MOZART, MyFrame::OnAddMozart )
|
||||||
EVT_BUTTON( ID_DELETE_MUSIC, MyFrame::OnDeleteMusic )
|
EVT_BUTTON( ID_DELETE_MUSIC, MyFrame::OnDeleteMusic )
|
||||||
@@ -585,8 +626,6 @@ MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int
|
|||||||
wxMenu *file_menu = new wxMenu;
|
wxMenu *file_menu = new wxMenu;
|
||||||
file_menu->Append(ID_ABOUT, "&About");
|
file_menu->Append(ID_ABOUT, "&About");
|
||||||
file_menu->AppendSeparator();
|
file_menu->AppendSeparator();
|
||||||
file_menu->Append(ID_TEST_TREECTRL, "Test &Treectrl");
|
|
||||||
file_menu->AppendSeparator();
|
|
||||||
file_menu->Append(ID_EXIT, "E&xit");
|
file_menu->Append(ID_EXIT, "E&xit");
|
||||||
|
|
||||||
wxMenuBar *menu_bar = new wxMenuBar;
|
wxMenuBar *menu_bar = new wxMenuBar;
|
||||||
@@ -603,7 +642,7 @@ MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int
|
|||||||
|
|
||||||
m_musicCtrl = new wxDataViewCtrl( this, ID_MUSIC_CTRL, wxDefaultPosition,
|
m_musicCtrl = new wxDataViewCtrl( this, ID_MUSIC_CTRL, wxDefaultPosition,
|
||||||
wxDefaultSize, wxDV_MULTIPLE );
|
wxDefaultSize, wxDV_MULTIPLE );
|
||||||
|
|
||||||
m_music_model = new MyMusicModel;
|
m_music_model = new MyMusicModel;
|
||||||
m_musicCtrl->AssociateModel( m_music_model.get() );
|
m_musicCtrl->AssociateModel( m_music_model.get() );
|
||||||
|
|
||||||
@@ -658,58 +697,18 @@ MyFrame::MyFrame(wxFrame *frame, const wxString &title, int x, int y, int w, int
|
|||||||
button_sizer->Add( new wxButton( this, ID_GOTO, "Goto 50"), 0, wxALL, 10 );
|
button_sizer->Add( new wxButton( this, ID_GOTO, "Goto 50"), 0, wxALL, 10 );
|
||||||
|
|
||||||
main_sizer->Add( button_sizer, 0, wxGROW, 0 );
|
main_sizer->Add( button_sizer, 0, wxGROW, 0 );
|
||||||
|
|
||||||
|
wxBoxSizer *bottom_sizer = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
m_log = new wxTextCtrl( this, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
|
m_log = new wxTextCtrl( this, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE );
|
||||||
m_logOld = wxLog::SetActiveTarget(new wxLogTextCtrl(m_log));
|
m_logOld = wxLog::SetActiveTarget(new wxLogTextCtrl(m_log));
|
||||||
wxLogMessage("This is the log window");
|
wxLogMessage("This is the log window");
|
||||||
|
|
||||||
main_sizer->Add( m_log, 1, wxGROW );
|
bottom_sizer->Add( m_log, 1, wxGROW );
|
||||||
|
|
||||||
SetSizer( main_sizer );
|
// wxDataViewTreeStore
|
||||||
}
|
|
||||||
|
|
||||||
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
|
wxDataViewCtrl *treectrl = new wxDataViewCtrl( this, -1,
|
||||||
{
|
|
||||||
Close(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* XPM */
|
|
||||||
static const char *small1_xpm[] = {
|
|
||||||
/* columns rows colors chars-per-pixel */
|
|
||||||
"16 16 6 1",
|
|
||||||
". c Black",
|
|
||||||
"o c #FFFFFF",
|
|
||||||
"X c #000080",
|
|
||||||
"O c #FFFF00",
|
|
||||||
" c None",
|
|
||||||
"+ c #FF0000",
|
|
||||||
/* pixels */
|
|
||||||
" ",
|
|
||||||
" ",
|
|
||||||
" ",
|
|
||||||
" ....... ",
|
|
||||||
" .XXXXX. ",
|
|
||||||
" .oXXXX. ",
|
|
||||||
" .oXXX.......",
|
|
||||||
".....oXXX.OOOOO.",
|
|
||||||
".+++.XXXX.oOOOO.",
|
|
||||||
".o++......oOOOO.",
|
|
||||||
".o++++. .oOOOO.",
|
|
||||||
".o++++. .OOOOO.",
|
|
||||||
".+++++. .......",
|
|
||||||
"....... ",
|
|
||||||
" ",
|
|
||||||
" "
|
|
||||||
};
|
|
||||||
|
|
||||||
void MyFrame::OnTestTreeCtrl(wxCommandEvent& WXUNUSED(event) )
|
|
||||||
{
|
|
||||||
wxDialog dialog( this, -1, wxString(wxT("Test wxDataViewTreeStore")));
|
|
||||||
|
|
||||||
wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
|
|
||||||
|
|
||||||
wxDataViewCtrl *treectrl = new wxDataViewCtrl( &dialog, -1,
|
|
||||||
wxDefaultPosition, wxSize(300,200), wxDV_NO_HEADER );
|
wxDefaultPosition, wxSize(300,200), wxDV_NO_HEADER );
|
||||||
|
|
||||||
wxDataViewTreeStore *store = new wxDataViewTreeStore;
|
wxDataViewTreeStore *store = new wxDataViewTreeStore;
|
||||||
@@ -722,17 +721,30 @@ void MyFrame::OnTestTreeCtrl(wxCommandEvent& WXUNUSED(event) )
|
|||||||
|
|
||||||
treectrl->AppendIconTextColumn( "no label", 0, wxDATAVIEW_CELL_INERT, 200 );
|
treectrl->AppendIconTextColumn( "no label", 0, wxDATAVIEW_CELL_INERT, 200 );
|
||||||
|
|
||||||
main_sizer->Add( treectrl, 1, wxGROW );
|
bottom_sizer->Add( treectrl );
|
||||||
|
|
||||||
|
|
||||||
wxSizer *button_sizer = dialog.CreateButtonSizer( wxOK );
|
// wxDataViewTreeCtrl
|
||||||
if (button_sizer)
|
|
||||||
main_sizer->Add( button_sizer, 0, wxGROW|wxALL, 10 );
|
wxDataViewTreeCtrl *treectrl2 = new wxDataViewTreeCtrl( this, -1, wxDefaultPosition, wxSize(300,200) );
|
||||||
|
wxImageList *ilist = new wxImageList;
|
||||||
dialog.SetSizer( main_sizer );
|
ilist->Add( wxIcon(small1_xpm) );
|
||||||
main_sizer->Fit( &dialog );
|
parent = treectrl2->AppendContainer( wxDataViewItem(0), "Root 1", 0 );
|
||||||
|
child = treectrl2->AppendItem( parent, "Child 1", 0 );
|
||||||
|
child = treectrl2->AppendItem( parent, "Child 2", 0 );
|
||||||
|
child = treectrl2->AppendItem( parent, "Child 3", 0 );
|
||||||
|
|
||||||
dialog.ShowModal();
|
bottom_sizer->Add( treectrl2 );
|
||||||
|
|
||||||
|
// main sizer
|
||||||
|
|
||||||
|
main_sizer->Add( bottom_sizer, 0, wxGROW );
|
||||||
|
|
||||||
|
SetSizer( main_sizer );
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
|
||||||
|
{
|
||||||
|
Close(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyFrame::OnAddMozart(wxCommandEvent& WXUNUSED(event) )
|
void MyFrame::OnAddMozart(wxCommandEvent& WXUNUSED(event) )
|
||||||
|
@@ -781,6 +781,11 @@ wxDataViewModel* wxDataViewCtrlBase::GetModel()
|
|||||||
return m_model;
|
return m_model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const wxDataViewModel* wxDataViewCtrlBase::GetModel() const
|
||||||
|
{
|
||||||
|
return m_model;
|
||||||
|
}
|
||||||
|
|
||||||
wxDataViewColumn *
|
wxDataViewColumn *
|
||||||
wxDataViewCtrlBase::AppendTextColumn( const wxString &label, unsigned int model_column,
|
wxDataViewCtrlBase::AppendTextColumn( const wxString &label, unsigned int model_column,
|
||||||
wxDataViewCellMode mode, int width, wxAlignment align, int flags )
|
wxDataViewCellMode mode, int width, wxAlignment align, int flags )
|
||||||
@@ -1163,6 +1168,7 @@ wxDataViewTreeStoreContainerNode::wxDataViewTreeStoreContainerNode(
|
|||||||
wxDataViewTreeStoreNode( parent, text, icon, data )
|
wxDataViewTreeStoreNode( parent, text, icon, data )
|
||||||
{
|
{
|
||||||
m_iconExpanded = expanded;
|
m_iconExpanded = expanded;
|
||||||
|
m_isExpanded = false;
|
||||||
m_children.DeleteContents(true);
|
m_children.DeleteContents(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1424,7 +1430,15 @@ wxDataViewTreeStore::GetValue(wxVariant &variant,
|
|||||||
wxDataViewTreeStoreNode *node = FindNode( item );
|
wxDataViewTreeStoreNode *node = FindNode( item );
|
||||||
if (!node) return;
|
if (!node) return;
|
||||||
|
|
||||||
wxDataViewIconText data( node->GetText(), node->GetIcon() );
|
wxIcon icon( node->GetIcon());
|
||||||
|
if (node->IsContainer())
|
||||||
|
{
|
||||||
|
wxDataViewTreeStoreContainerNode *container = (wxDataViewTreeStoreContainerNode*) node;
|
||||||
|
if (container->IsExpanded() && container->GetExpandedIcon().IsOk())
|
||||||
|
icon = container->GetExpandedIcon();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewIconText data( node->GetText(), icon );
|
||||||
|
|
||||||
variant << data;
|
variant << data;
|
||||||
}
|
}
|
||||||
@@ -1536,5 +1550,149 @@ wxDataViewTreeStoreContainerNode *wxDataViewTreeStore::FindContainerNode( const
|
|||||||
return (wxDataViewTreeStoreContainerNode*) node;
|
return (wxDataViewTreeStoreContainerNode*) node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// wxDataViewTreeCtrl
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxDataViewTreeCtrl,wxDataViewCtrl)
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(wxDataViewTreeCtrl,wxDataViewCtrl)
|
||||||
|
EVT_DATAVIEW_ITEM_EXPANDED(-1, wxDataViewTreeCtrl::OnExpanded)
|
||||||
|
EVT_DATAVIEW_ITEM_COLLAPSED(-1, wxDataViewTreeCtrl::OnCollapsed)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
wxDataViewTreeCtrl::wxDataViewTreeCtrl()
|
||||||
|
{
|
||||||
|
m_imageList = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewTreeCtrl::wxDataViewTreeCtrl( wxWindow *parent, wxWindowID id,
|
||||||
|
const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator )
|
||||||
|
{
|
||||||
|
m_imageList = NULL;
|
||||||
|
Create( parent, id, pos, size, style, validator );
|
||||||
|
|
||||||
|
wxDataViewTreeStore *store = new wxDataViewTreeStore;
|
||||||
|
AssociateModel( store );
|
||||||
|
store->DecRef();
|
||||||
|
AppendIconTextColumn( "", 0, wxDATAVIEW_CELL_INERT, 200 );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewTreeCtrl::~wxDataViewTreeCtrl()
|
||||||
|
{
|
||||||
|
if (m_imageList)
|
||||||
|
delete m_imageList;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxDataViewTreeCtrl::Create( wxWindow *parent, wxWindowID id,
|
||||||
|
const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator )
|
||||||
|
{
|
||||||
|
return wxDataViewCtrl::Create( parent, id, pos, size, style, validator );
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDataViewTreeCtrl::SetImageList( wxImageList *imagelist )
|
||||||
|
{
|
||||||
|
if (m_imageList)
|
||||||
|
delete m_imageList;
|
||||||
|
|
||||||
|
m_imageList = imagelist;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeCtrl::AppendItem( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, int iconIndex, wxClientData *data )
|
||||||
|
{
|
||||||
|
wxIcon icon = wxNullIcon;
|
||||||
|
if (m_imageList && (iconIndex != -1))
|
||||||
|
icon = m_imageList->GetIcon( iconIndex );
|
||||||
|
|
||||||
|
return GetStore()->AppendItem( parent, text, icon, data );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeCtrl::PrependItem( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, int iconIndex, wxClientData *data )
|
||||||
|
{
|
||||||
|
wxIcon icon = wxNullIcon;
|
||||||
|
if (m_imageList && (iconIndex != -1))
|
||||||
|
icon = m_imageList->GetIcon( iconIndex );
|
||||||
|
|
||||||
|
return GetStore()->PrependItem( parent, text, icon, data );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeCtrl::InsertItem( const wxDataViewItem& parent, const wxDataViewItem& previous,
|
||||||
|
const wxString &text, int iconIndex, wxClientData *data )
|
||||||
|
{
|
||||||
|
wxIcon icon = wxNullIcon;
|
||||||
|
if (m_imageList && (iconIndex != -1))
|
||||||
|
icon = m_imageList->GetIcon( iconIndex );
|
||||||
|
|
||||||
|
return GetStore()->InsertItem( parent, previous, text, icon, data );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeCtrl::PrependContainer( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, int iconIndex, int expandedIndex, wxClientData *data )
|
||||||
|
{
|
||||||
|
wxIcon icon = wxNullIcon;
|
||||||
|
if (m_imageList && (iconIndex != -1))
|
||||||
|
icon = m_imageList->GetIcon( iconIndex );
|
||||||
|
|
||||||
|
wxIcon expanded = wxNullIcon;
|
||||||
|
if (m_imageList && (expandedIndex != -1))
|
||||||
|
expanded = m_imageList->GetIcon( expandedIndex );
|
||||||
|
|
||||||
|
return GetStore()->PrependContainer( parent, text, icon, expanded, data );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeCtrl::AppendContainer( const wxDataViewItem& parent,
|
||||||
|
const wxString &text, int iconIndex, int expandedIndex, wxClientData *data )
|
||||||
|
{
|
||||||
|
wxIcon icon = wxNullIcon;
|
||||||
|
if (m_imageList && (iconIndex != -1))
|
||||||
|
icon = m_imageList->GetIcon( iconIndex );
|
||||||
|
|
||||||
|
wxIcon expanded = wxNullIcon;
|
||||||
|
if (m_imageList && (expandedIndex != -1))
|
||||||
|
expanded = m_imageList->GetIcon( expandedIndex );
|
||||||
|
|
||||||
|
return GetStore()->AppendContainer( parent, text, icon, expanded, data );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataViewItem wxDataViewTreeCtrl::InsertContainer( const wxDataViewItem& parent, const wxDataViewItem& previous,
|
||||||
|
const wxString &text, int iconIndex, int expandedIndex, wxClientData *data )
|
||||||
|
{
|
||||||
|
wxIcon icon = wxNullIcon;
|
||||||
|
if (m_imageList && (iconIndex != -1))
|
||||||
|
icon = m_imageList->GetIcon( iconIndex );
|
||||||
|
|
||||||
|
wxIcon expanded = wxNullIcon;
|
||||||
|
if (m_imageList && (expandedIndex != -1))
|
||||||
|
expanded = m_imageList->GetIcon( expandedIndex );
|
||||||
|
|
||||||
|
return GetStore()->InsertContainer( parent, previous, text, icon, expanded, data );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void wxDataViewTreeCtrl::OnExpanded( wxDataViewEvent &event )
|
||||||
|
{
|
||||||
|
if (m_imageList) return;
|
||||||
|
|
||||||
|
wxDataViewTreeStoreContainerNode* container = GetStore()->FindContainerNode( event.GetItem() );
|
||||||
|
if (!container) return;
|
||||||
|
|
||||||
|
container->SetExpanded( true );
|
||||||
|
GetStore()->ItemChanged( event.GetItem() );
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDataViewTreeCtrl::OnCollapsed( wxDataViewEvent &event )
|
||||||
|
{
|
||||||
|
if (m_imageList) return;
|
||||||
|
|
||||||
|
wxDataViewTreeStoreContainerNode* container = GetStore()->FindContainerNode( event.GetItem() );
|
||||||
|
if (!container) return;
|
||||||
|
|
||||||
|
container->SetExpanded( false );
|
||||||
|
GetStore()->ItemChanged( event.GetItem() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif // wxUSE_DATAVIEWCTRL
|
#endif // wxUSE_DATAVIEWCTRL
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user