Indentation/coding style adjustments.
Make the columns resize when dragging the columns in the header control intercepting the EVT_HEADER_RESIZING event git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59360 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -79,7 +79,7 @@ public:
|
|||||||
|
|
||||||
void SetHasAttr( bool set ) { m_hasAttr = set; }
|
void SetHasAttr( bool set ) { m_hasAttr = set; }
|
||||||
void SetAttr( const wxDataViewItemAttr &attr ) { m_attr = attr; }
|
void SetAttr( const wxDataViewItemAttr &attr ) { m_attr = attr; }
|
||||||
bool GetWantsAttr() { return m_wantsAttr; }
|
bool GetWantsAttr() const { return m_wantsAttr; }
|
||||||
|
|
||||||
// implementation
|
// implementation
|
||||||
int CalculateAlignment() const;
|
int CalculateAlignment() const;
|
||||||
@@ -134,8 +134,9 @@ public:
|
|||||||
wxSize GetSize() const;
|
wxSize GetSize() const;
|
||||||
|
|
||||||
// in-place editing
|
// in-place editing
|
||||||
virtual bool HasEditorCtrl();
|
virtual bool HasEditorCtrl() const;
|
||||||
virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value );
|
virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect,
|
||||||
|
const wxVariant &value );
|
||||||
virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value );
|
virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -259,7 +260,8 @@ public:
|
|||||||
virtual wxSize GetSize() const;
|
virtual wxSize GetSize() const;
|
||||||
|
|
||||||
virtual bool HasEditorCtrl() { return true; }
|
virtual bool HasEditorCtrl() { return true; }
|
||||||
virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect, const wxVariant &value );
|
virtual wxControl* CreateEditorCtrl( wxWindow *parent, wxRect labelRect,
|
||||||
|
const wxVariant &value );
|
||||||
virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value );
|
virtual bool GetValueFromEditorCtrl( wxControl* editor, wxVariant &value );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -286,7 +288,9 @@ public:
|
|||||||
virtual bool Render( wxRect cell, wxDC *dc, int state );
|
virtual bool Render( wxRect cell, wxDC *dc, int state );
|
||||||
virtual wxSize GetSize() const;
|
virtual wxSize GetSize() const;
|
||||||
virtual bool Activate( wxRect cell,
|
virtual bool Activate( wxRect cell,
|
||||||
wxDataViewModel *model, const wxDataViewItem & item, unsigned int col );
|
wxDataViewModel *model,
|
||||||
|
const wxDataViewItem& item,
|
||||||
|
unsigned int col );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxDateTime m_date;
|
wxDateTime m_date;
|
||||||
@@ -441,8 +445,10 @@ public:
|
|||||||
|
|
||||||
virtual void EnsureVisible( const wxDataViewItem & item,
|
virtual void EnsureVisible( const wxDataViewItem & item,
|
||||||
const wxDataViewColumn *column = NULL );
|
const wxDataViewColumn *column = NULL );
|
||||||
virtual void HitTest( const wxPoint & point, wxDataViewItem & item, wxDataViewColumn* &column ) const;
|
virtual void HitTest( const wxPoint & point, wxDataViewItem & item,
|
||||||
virtual wxRect GetItemRect( const wxDataViewItem & item, const wxDataViewColumn *column = NULL ) const;
|
wxDataViewColumn* &column ) const;
|
||||||
|
virtual wxRect GetItemRect( const wxDataViewItem & item,
|
||||||
|
const wxDataViewColumn *column = NULL ) const;
|
||||||
|
|
||||||
virtual void Expand( const wxDataViewItem & item );
|
virtual void Expand( const wxDataViewItem & item );
|
||||||
virtual void Collapse( const wxDataViewItem & item );
|
virtual void Collapse( const wxDataViewItem & item );
|
||||||
|
@@ -69,8 +69,9 @@ static const int EXPANDER_OFFSET = 4;
|
|||||||
static const int EXPANDER_OFFSET = 1;
|
static const int EXPANDER_OFFSET = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//Below is the compare stuff
|
// Below is the compare stuff.
|
||||||
//For the generic implements, both the leaf nodes and the nodes are sorted for fast search when needed
|
// For the generic implementation, both the leaf nodes and the nodes are sorted for
|
||||||
|
// fast search when needed
|
||||||
static wxDataViewModel* g_model;
|
static wxDataViewModel* g_model;
|
||||||
static int g_column = -2;
|
static int g_column = -2;
|
||||||
static bool g_asending = true;
|
static bool g_asending = true;
|
||||||
@@ -176,7 +177,7 @@ private:
|
|||||||
event.Skip();
|
event.Skip();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnEndResize(wxHeaderCtrlEvent& event)
|
void OnResize(wxHeaderCtrlEvent& event)
|
||||||
{
|
{
|
||||||
wxDataViewCtrl * const owner = GetOwner();
|
wxDataViewCtrl * const owner = GetOwner();
|
||||||
|
|
||||||
@@ -200,7 +201,8 @@ BEGIN_EVENT_TABLE(wxDataViewHeaderWindow, wxHeaderCtrl)
|
|||||||
EVT_HEADER_CLICK(wxID_ANY, wxDataViewHeaderWindow::OnClick)
|
EVT_HEADER_CLICK(wxID_ANY, wxDataViewHeaderWindow::OnClick)
|
||||||
EVT_HEADER_RIGHT_CLICK(wxID_ANY, wxDataViewHeaderWindow::OnRClick)
|
EVT_HEADER_RIGHT_CLICK(wxID_ANY, wxDataViewHeaderWindow::OnRClick)
|
||||||
|
|
||||||
EVT_HEADER_END_RESIZE(wxID_ANY, wxDataViewHeaderWindow::OnEndResize)
|
EVT_HEADER_RESIZING(wxID_ANY, wxDataViewHeaderWindow::OnResize)
|
||||||
|
EVT_HEADER_END_RESIZE(wxID_ANY, wxDataViewHeaderWindow::OnResize)
|
||||||
|
|
||||||
EVT_HEADER_END_REORDER(wxID_ANY, wxDataViewHeaderWindow::OnEndReorder)
|
EVT_HEADER_END_REORDER(wxID_ANY, wxDataViewHeaderWindow::OnEndReorder)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
@@ -222,11 +224,13 @@ public:
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxDataViewTreeNode
|
// wxDataViewTreeNode
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
class wxDataViewTreeNode;
|
class wxDataViewTreeNode;
|
||||||
WX_DEFINE_ARRAY( wxDataViewTreeNode *, wxDataViewTreeNodes );
|
WX_DEFINE_ARRAY( wxDataViewTreeNode *, wxDataViewTreeNodes );
|
||||||
WX_DEFINE_ARRAY( void* , wxDataViewTreeLeaves);
|
WX_DEFINE_ARRAY( void* , wxDataViewTreeLeaves);
|
||||||
|
|
||||||
int LINKAGEMODE wxGenericTreeModelNodeCmp( wxDataViewTreeNode ** node1, wxDataViewTreeNode ** node2);
|
int LINKAGEMODE wxGenericTreeModelNodeCmp( wxDataViewTreeNode ** node1,
|
||||||
|
wxDataViewTreeNode ** node2);
|
||||||
int LINKAGEMODE wxGenericTreeModelItemCmp( void ** id1, void ** id2);
|
int LINKAGEMODE wxGenericTreeModelItemCmp( void ** id1, void ** id2);
|
||||||
|
|
||||||
class wxDataViewTreeNode
|
class wxDataViewTreeNode
|
||||||
@@ -346,7 +350,8 @@ private:
|
|||||||
int m_subTreeCount;
|
int m_subTreeCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
int LINKAGEMODE wxGenericTreeModelNodeCmp( wxDataViewTreeNode ** node1, wxDataViewTreeNode ** node2)
|
int LINKAGEMODE wxGenericTreeModelNodeCmp( wxDataViewTreeNode ** node1,
|
||||||
|
wxDataViewTreeNode ** node2)
|
||||||
{
|
{
|
||||||
return g_model->Compare( (*node1)->GetItem(), (*node2)->GetItem(), g_column, g_asending );
|
return g_model->Compare( (*node1)->GetItem(), (*node2)->GetItem(), g_column, g_asending );
|
||||||
}
|
}
|
||||||
@@ -357,7 +362,6 @@ int LINKAGEMODE wxGenericTreeModelItemCmp( void ** id1, void ** id2)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxDataViewMainWindow
|
// wxDataViewMainWindow
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -445,13 +449,17 @@ public:
|
|||||||
int GetCountPerPage() const;
|
int GetCountPerPage() const;
|
||||||
int GetEndOfLastCol() const;
|
int GetEndOfLastCol() const;
|
||||||
unsigned int GetFirstVisibleRow() const;
|
unsigned int GetFirstVisibleRow() const;
|
||||||
//I change this method to un const because in the tree view, the displaying number of the tree are changing along with the expanding/collapsing of the tree nodes
|
|
||||||
|
// I change this method to un const because in the tree view,
|
||||||
|
// the displaying number of the tree are changing along with the
|
||||||
|
// expanding/collapsing of the tree nodes
|
||||||
unsigned int GetLastVisibleRow();
|
unsigned int GetLastVisibleRow();
|
||||||
unsigned int GetRowCount();
|
unsigned int GetRowCount();
|
||||||
|
|
||||||
wxDataViewItem GetSelection() const;
|
wxDataViewItem GetSelection() const;
|
||||||
wxDataViewSelection GetSelections(){ return m_selection; }
|
wxDataViewSelection GetSelections(){ return m_selection; }
|
||||||
void SetSelections( const wxDataViewSelection & sel ) { m_selection = sel; UpdateDisplay(); }
|
void SetSelections( const wxDataViewSelection & sel )
|
||||||
|
{ m_selection = sel; UpdateDisplay(); }
|
||||||
void Select( const wxArrayInt& aSelections );
|
void Select( const wxArrayInt& aSelections );
|
||||||
void SelectAllRows( bool on );
|
void SelectAllRows( bool on );
|
||||||
void SelectRow( unsigned int row, bool on );
|
void SelectRow( unsigned int row, bool on );
|
||||||
@@ -555,8 +563,10 @@ private:
|
|||||||
// This is the tree structure of the model
|
// This is the tree structure of the model
|
||||||
wxDataViewTreeNode * m_root;
|
wxDataViewTreeNode * m_root;
|
||||||
int m_count;
|
int m_count;
|
||||||
|
|
||||||
// This is the tree node under the cursor
|
// This is the tree node under the cursor
|
||||||
wxDataViewTreeNode * m_underMouse;
|
wxDataViewTreeNode * m_underMouse;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DECLARE_DYNAMIC_CLASS(wxDataViewMainWindow)
|
DECLARE_DYNAMIC_CLASS(wxDataViewMainWindow)
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
@@ -661,14 +671,17 @@ wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype,
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state )
|
void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset,
|
||||||
|
wxRect cell, wxDC *dc, int state )
|
||||||
{
|
{
|
||||||
wxDataViewCtrl *view = GetOwner()->GetOwner();
|
wxDataViewCtrl *view = GetOwner()->GetOwner();
|
||||||
wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ?
|
wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ?
|
||||||
wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) :
|
wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) :
|
||||||
view->GetForegroundColour();
|
view->GetForegroundColour();
|
||||||
dc->SetTextForeground(col);
|
dc->SetTextForeground(col);
|
||||||
dc->DrawText( text, cell.x + xoffset, cell.y + ((cell.height - dc->GetCharHeight()) / 2));
|
dc->DrawText( text,
|
||||||
|
cell.x + xoffset,
|
||||||
|
cell.y + ((cell.height - dc->GetCharHeight()) / 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
@@ -695,7 +708,7 @@ bool wxDataViewTextRenderer::GetValue( wxVariant& WXUNUSED(value) ) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxDataViewTextRenderer::HasEditorCtrl()
|
bool wxDataViewTextRenderer::HasEditorCtrl() const
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1281,7 +1294,8 @@ void wxDataViewRenameTimer::Notify()
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
// The tree building helper, declared firstly
|
// The tree building helper, declared firstly
|
||||||
static void BuildTreeHelper( wxDataViewModel * model, wxDataViewItem & item, wxDataViewTreeNode * node);
|
static void BuildTreeHelper( wxDataViewModel * model, wxDataViewItem & item,
|
||||||
|
wxDataViewTreeNode * node);
|
||||||
|
|
||||||
int LINKAGEMODE wxDataViewSelectionCmp( unsigned int row1, unsigned int row2 )
|
int LINKAGEMODE wxDataViewSelectionCmp( unsigned int row1, unsigned int row2 )
|
||||||
{
|
{
|
||||||
@@ -1340,9 +1354,10 @@ wxDataViewMainWindow::wxDataViewMainWindow( wxDataViewCtrl *parent, wxWindowID i
|
|||||||
|
|
||||||
m_penRule = wxPen(GetRuleColour());
|
m_penRule = wxPen(GetRuleColour());
|
||||||
|
|
||||||
//Here I compose a pen can draw black lines, maybe there are something system colour to use
|
// compose a pen whichcan draw black lines
|
||||||
|
// TODO: maybe there is something system colour to use
|
||||||
m_penExpander = wxPen(wxColour(0,0,0));
|
m_penExpander = wxPen(wxColour(0,0,0));
|
||||||
//Some new added code to deal with the tree structure
|
|
||||||
m_root = new wxDataViewTreeNode( NULL );
|
m_root = new wxDataViewTreeNode( NULL );
|
||||||
m_root->SetHasChildren(true);
|
m_root->SetHasChildren(true);
|
||||||
|
|
||||||
@@ -1389,7 +1404,8 @@ void wxDataViewMainWindow::RemoveDropHint()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wxDragResult wxDataViewMainWindow::OnDragOver( wxDataFormat format, wxCoord x, wxCoord y, wxDragResult def )
|
wxDragResult wxDataViewMainWindow::OnDragOver( wxDataFormat format, wxCoord x,
|
||||||
|
wxCoord y, wxDragResult def )
|
||||||
{
|
{
|
||||||
int xx = x;
|
int xx = x;
|
||||||
int yy = y;
|
int yy = y;
|
||||||
@@ -1463,7 +1479,8 @@ bool wxDataViewMainWindow::OnDrop( wxDataFormat format, wxCoord x, wxCoord y )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxDragResult wxDataViewMainWindow::OnData( wxDataFormat format, wxCoord x, wxCoord y, wxDragResult def )
|
wxDragResult wxDataViewMainWindow::OnData( wxDataFormat format, wxCoord x, wxCoord y,
|
||||||
|
wxDragResult def )
|
||||||
{
|
{
|
||||||
int xx = x;
|
int xx = x;
|
||||||
int yy = y;
|
int yy = y;
|
||||||
@@ -1519,7 +1536,8 @@ wxBitmap wxDataViewMainWindow::CreateItemBitmap( unsigned int row, int &indent )
|
|||||||
{
|
{
|
||||||
wxDataViewTreeNode *node = GetTreeNodeByRow(row);
|
wxDataViewTreeNode *node = GetTreeNodeByRow(row);
|
||||||
indent = GetOwner()->GetIndent() * node->GetIndentLevel();
|
indent = GetOwner()->GetIndent() * node->GetIndentLevel();
|
||||||
indent = indent + m_lineHeight; //try to use the m_lineHeight as the expander space
|
indent = indent + m_lineHeight;
|
||||||
|
// try to use the m_lineHeight as the expander space
|
||||||
|
|
||||||
if(!node->HasChildren())
|
if(!node->HasChildren())
|
||||||
delete node;
|
delete node;
|
||||||
@@ -1776,7 +1794,8 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
|
|||||||
|
|
||||||
dataitem = node->GetItem();
|
dataitem = node->GetItem();
|
||||||
|
|
||||||
if ((i > 0) && model->IsContainer(dataitem) && !model->HasContainerColumns(dataitem))
|
if ((i > 0) && model->IsContainer(dataitem) &&
|
||||||
|
!model->HasContainerColumns(dataitem))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1798,7 +1817,7 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
|
|||||||
|
|
||||||
// update cell_rect
|
// update cell_rect
|
||||||
cell_rect.y = GetLineStart( item );
|
cell_rect.y = GetLineStart( item );
|
||||||
cell_rect.height = GetLineHeight( item ); // -1 is for the horizontal rules (?)
|
cell_rect.height = GetLineHeight( item );
|
||||||
|
|
||||||
// Draw the expander here.
|
// Draw the expander here.
|
||||||
int indent = 0;
|
int indent = 0;
|
||||||
@@ -1810,10 +1829,15 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
|
|||||||
indent = cell_rect.x + GetOwner()->GetIndent() * indent;
|
indent = cell_rect.x + GetOwner()->GetIndent() * indent;
|
||||||
|
|
||||||
int expander_width = m_lineHeight - 2*EXPANDER_MARGIN;
|
int expander_width = m_lineHeight - 2*EXPANDER_MARGIN;
|
||||||
|
|
||||||
// change the cell_rect.x to the appropriate pos
|
// change the cell_rect.x to the appropriate pos
|
||||||
int expander_x = indent + EXPANDER_MARGIN;
|
int expander_x = indent + EXPANDER_MARGIN;
|
||||||
int expander_y = cell_rect.y + EXPANDER_MARGIN + (GetLineHeight(item) / 2) - (expander_width/2) - EXPANDER_OFFSET;
|
int expander_y = cell_rect.y + EXPANDER_MARGIN + (GetLineHeight(item) / 2)
|
||||||
indent = indent + m_lineHeight; //try to use the m_lineHeight as the expander space
|
- (expander_width/2) - EXPANDER_OFFSET;
|
||||||
|
|
||||||
|
indent = indent + m_lineHeight;
|
||||||
|
// try to use the m_lineHeight as the expander space
|
||||||
|
|
||||||
dc.SetPen( m_penExpander );
|
dc.SetPen( m_penExpander );
|
||||||
dc.SetBrush( wxNullBrush );
|
dc.SetBrush( wxNullBrush );
|
||||||
if( node->HasChildren() )
|
if( node->HasChildren() )
|
||||||
@@ -1825,10 +1849,12 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
|
|||||||
flag |= wxCONTROL_CURRENT;
|
flag |= wxCONTROL_CURRENT;
|
||||||
}
|
}
|
||||||
if( node->IsOpen() )
|
if( node->IsOpen() )
|
||||||
wxRendererNative::Get().DrawTreeItemButton( this, dc, rect, flag|wxCONTROL_EXPANDED );
|
wxRendererNative::Get().DrawTreeItemButton( this, dc, rect,
|
||||||
|
flag|wxCONTROL_EXPANDED );
|
||||||
else
|
else
|
||||||
wxRendererNative::Get().DrawTreeItemButton( this, dc, rect, flag);
|
wxRendererNative::Get().DrawTreeItemButton( this, dc, rect, flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
// force the expander column to left-center align
|
// force the expander column to left-center align
|
||||||
cell->SetAlignment( wxALIGN_CENTER_VERTICAL );
|
cell->SetAlignment( wxALIGN_CENTER_VERTICAL );
|
||||||
}
|
}
|
||||||
@@ -1841,7 +1867,9 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
|
|||||||
|
|
||||||
// cannot be bigger than allocated space
|
// cannot be bigger than allocated space
|
||||||
wxSize size = cell->GetSize();
|
wxSize size = cell->GetSize();
|
||||||
// Because of the tree structure indent, here we should minus the width of the cell for drawing
|
|
||||||
|
// Because of the tree structure indent, here we should minus the width
|
||||||
|
// of the cell for drawing
|
||||||
size.x = wxMin( size.x + 2*PADDING_RIGHTLEFT, cell_rect.width - indent );
|
size.x = wxMin( size.x + 2*PADDING_RIGHTLEFT, cell_rect.width - indent );
|
||||||
// size.y = wxMin( size.y, cell_rect.height );
|
// size.y = wxMin( size.y, cell_rect.height );
|
||||||
size.y = cell_rect.height;
|
size.y = cell_rect.height;
|
||||||
@@ -1942,9 +1970,9 @@ void wxDataViewMainWindow::OnRenameTimer()
|
|||||||
m_currentCol->GetRenderer()->StartEditing( item, labelRect );
|
m_currentCol->GetRenderer()->StartEditing( item, labelRect );
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Helper class for do operation on the tree node
|
// Helper class for do operation on the tree node
|
||||||
//------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
class DoJob
|
class DoJob
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -2068,11 +2096,12 @@ bool wxDataViewMainWindow::ItemDeleted(const wxDataViewItem& parent,
|
|||||||
wxDataViewTreeNode * node = FindNode(parent);
|
wxDataViewTreeNode * node = FindNode(parent);
|
||||||
|
|
||||||
wxCHECK_MSG( node != NULL, false, "item not found" );
|
wxCHECK_MSG( node != NULL, false, "item not found" );
|
||||||
wxCHECK_MSG( node->GetChildren().Index( item.GetID() ) != wxNOT_FOUND, false, "item not found" );
|
wxCHECK_MSG( node->GetChildren().Index( item.GetID() ) != wxNOT_FOUND,
|
||||||
|
false, "item not found" );
|
||||||
|
|
||||||
int sub = -1;
|
int sub = -1;
|
||||||
node->GetChildren().Remove( item.GetID() );
|
node->GetChildren().Remove( item.GetID() );
|
||||||
//Manuplate selection
|
// Manipolate selection
|
||||||
if( m_selection.GetCount() > 1 )
|
if( m_selection.GetCount() > 1 )
|
||||||
{
|
{
|
||||||
m_selection.Empty();
|
m_selection.Empty();
|
||||||
@@ -2696,7 +2725,8 @@ int wxDataViewMainWindow::GetLineHeight( unsigned int row ) const
|
|||||||
class RowToItemJob: public DoJob
|
class RowToItemJob: public DoJob
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RowToItemJob( unsigned int row , int current ) { this->row = row; this->current = current;}
|
RowToItemJob( unsigned int row , int current )
|
||||||
|
{ this->row = row; this->current = current; }
|
||||||
virtual ~RowToItemJob() {}
|
virtual ~RowToItemJob() {}
|
||||||
|
|
||||||
virtual int operator() ( wxDataViewTreeNode * node )
|
virtual int operator() ( wxDataViewTreeNode * node )
|
||||||
@@ -2715,8 +2745,10 @@ public:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//If the current has no child node, we can find the desired item of the row number directly.
|
// If the current has no child node, we can find the desired item of the row
|
||||||
//This if can speed up finding in some case, and will has a very good effect when it comes to list view
|
// number directly.
|
||||||
|
// This if can speed up finding in some case, and will has a very good effect
|
||||||
|
// when it comes to list view
|
||||||
if( node->GetNodes().GetCount() == 0)
|
if( node->GetNodes().GetCount() == 0)
|
||||||
{
|
{
|
||||||
int index = static_cast<int>(row) - current - 1;
|
int index = static_cast<int>(row) - current - 1;
|
||||||
@@ -2737,7 +2769,10 @@ public:
|
|||||||
}
|
}
|
||||||
return DoJob::CONT;
|
return DoJob::CONT;
|
||||||
}
|
}
|
||||||
wxDataViewItem GetResult(){ return ret; }
|
|
||||||
|
wxDataViewItem GetResult() const
|
||||||
|
{ return ret; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned int row;
|
unsigned int row;
|
||||||
int current;
|
int current;
|
||||||
@@ -2787,8 +2822,11 @@ public:
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
parent = node;
|
parent = node;
|
||||||
//If the current has no child node, we can find the desired item of the row number directly.
|
|
||||||
//This if can speed up finding in some case, and will has a very good effect when it comes to list view
|
// If the current node has no children, we can find the desired item of the
|
||||||
|
// row number directly.
|
||||||
|
// This if can speed up finding in some case, and will have a very good
|
||||||
|
// effect for list views.
|
||||||
if( node->GetNodes().GetCount() == 0)
|
if( node->GetNodes().GetCount() == 0)
|
||||||
{
|
{
|
||||||
int index = static_cast<int>(row) - current - 1;
|
int index = static_cast<int>(row) - current - 1;
|
||||||
@@ -2800,8 +2838,6 @@ public:
|
|||||||
}
|
}
|
||||||
return DoJob::CONT;
|
return DoJob::CONT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int operator() ( void * n )
|
virtual int operator() ( void * n )
|
||||||
@@ -2817,7 +2853,10 @@ public:
|
|||||||
|
|
||||||
return DoJob::CONT;
|
return DoJob::CONT;
|
||||||
}
|
}
|
||||||
wxDataViewTreeNode * GetResult(){ return ret; }
|
|
||||||
|
wxDataViewTreeNode * GetResult() const
|
||||||
|
{ return ret; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned int row;
|
unsigned int row;
|
||||||
int current;
|
int current;
|
||||||
@@ -2825,7 +2864,6 @@ private:
|
|||||||
wxDataViewTreeNode * parent;
|
wxDataViewTreeNode * parent;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
wxDataViewTreeNode * wxDataViewMainWindow::GetTreeNodeByRow(unsigned int row) const
|
wxDataViewTreeNode * wxDataViewMainWindow::GetTreeNodeByRow(unsigned int row) const
|
||||||
{
|
{
|
||||||
wxASSERT( !IsVirtualList() );
|
wxASSERT( !IsVirtualList() );
|
||||||
@@ -2835,7 +2873,8 @@ wxDataViewTreeNode * wxDataViewMainWindow::GetTreeNodeByRow(unsigned int row) co
|
|||||||
return job.GetResult();
|
return job.GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
wxDataViewEvent wxDataViewMainWindow::SendExpanderEvent( wxEventType type, const wxDataViewItem & item )
|
wxDataViewEvent wxDataViewMainWindow::SendExpanderEvent( wxEventType type,
|
||||||
|
const wxDataViewItem & item )
|
||||||
{
|
{
|
||||||
wxWindow *parent = GetParent();
|
wxWindow *parent = GetParent();
|
||||||
wxDataViewEvent le(type, parent->GetId());
|
wxDataViewEvent le(type, parent->GetId());
|
||||||
@@ -2848,7 +2887,6 @@ wxDataViewEvent wxDataViewMainWindow::SendExpanderEvent( wxEventType type, const
|
|||||||
return le;
|
return le;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool wxDataViewMainWindow::IsExpanded( unsigned int row ) const
|
bool wxDataViewMainWindow::IsExpanded( unsigned int row ) const
|
||||||
{
|
{
|
||||||
if (IsVirtualList())
|
if (IsVirtualList())
|
||||||
@@ -2880,13 +2918,16 @@ void wxDataViewMainWindow::OnExpanding( unsigned int row )
|
|||||||
{
|
{
|
||||||
if( !node->IsOpen())
|
if( !node->IsOpen())
|
||||||
{
|
{
|
||||||
wxDataViewEvent e = SendExpanderEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING,node->GetItem());
|
wxDataViewEvent e =
|
||||||
|
SendExpanderEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, node->GetItem());
|
||||||
|
|
||||||
// Check if the user prevent expanding
|
// Check if the user prevent expanding
|
||||||
if( e.GetSkipped() )
|
if( e.GetSkipped() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
node->ToggleOpen();
|
node->ToggleOpen();
|
||||||
//Here I build the children of current node
|
|
||||||
|
// build the children of current node
|
||||||
if( node->GetChildrenNumber() == 0 )
|
if( node->GetChildrenNumber() == 0 )
|
||||||
{
|
{
|
||||||
SortPrepare();
|
SortPrepare();
|
||||||
@@ -2939,7 +2980,8 @@ void wxDataViewMainWindow::OnCollapsing(unsigned int row)
|
|||||||
|
|
||||||
if( node->HasChildren() && node->IsOpen() )
|
if( node->HasChildren() && node->IsOpen() )
|
||||||
{
|
{
|
||||||
wxDataViewEvent e = SendExpanderEvent(wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING,node->GetItem());
|
wxDataViewEvent e =
|
||||||
|
SendExpanderEvent(wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING,node->GetItem());
|
||||||
if( e.GetSkipped() )
|
if( e.GetSkipped() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -3073,7 +3115,8 @@ wxDataViewTreeNode * wxDataViewMainWindow::FindNode( const wxDataViewItem & item
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDataViewMainWindow::HitTest( const wxPoint & point, wxDataViewItem & item, wxDataViewColumn* &column )
|
void wxDataViewMainWindow::HitTest( const wxPoint & point, wxDataViewItem & item,
|
||||||
|
wxDataViewColumn* &column )
|
||||||
{
|
{
|
||||||
wxDataViewColumn *col = NULL;
|
wxDataViewColumn *col = NULL;
|
||||||
unsigned int cols = GetOwner()->GetColumnCount();
|
unsigned int cols = GetOwner()->GetColumnCount();
|
||||||
@@ -3097,7 +3140,8 @@ void wxDataViewMainWindow::HitTest( const wxPoint & point, wxDataViewItem & item
|
|||||||
item = GetItemByRow( GetLineAt( y ) );
|
item = GetItemByRow( GetLineAt( y ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxRect wxDataViewMainWindow::GetItemRect( const wxDataViewItem & item, const wxDataViewColumn* column )
|
wxRect wxDataViewMainWindow::GetItemRect( const wxDataViewItem & item,
|
||||||
|
const wxDataViewColumn* column )
|
||||||
{
|
{
|
||||||
int row = GetRowByItem(item);
|
int row = GetRowByItem(item);
|
||||||
int y = GetLineStart( row );
|
int y = GetLineStart( row );
|
||||||
@@ -3120,7 +3164,8 @@ int wxDataViewMainWindow::RecalculateCount()
|
|||||||
{
|
{
|
||||||
if (!m_root)
|
if (!m_root)
|
||||||
{
|
{
|
||||||
wxDataViewIndexListModel *list_model = (wxDataViewIndexListModel*) GetOwner()->GetModel();
|
wxDataViewIndexListModel *list_model =
|
||||||
|
(wxDataViewIndexListModel*) GetOwner()->GetModel();
|
||||||
#ifndef __WXMAC__
|
#ifndef __WXMAC__
|
||||||
return list_model->GetLastIndex() + 1;
|
return list_model->GetLastIndex() + 1;
|
||||||
#else
|
#else
|
||||||
@@ -3172,8 +3217,10 @@ public:
|
|||||||
return DoJob::OK;
|
return DoJob::OK;
|
||||||
return DoJob::CONT;
|
return DoJob::CONT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// the row number is begin from zero
|
// the row number is begin from zero
|
||||||
int GetResult() { return ret -1; }
|
int GetResult() const
|
||||||
|
{ return ret -1; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ItemList::const_iterator m_iter;
|
ItemList::const_iterator m_iter;
|
||||||
@@ -3217,7 +3264,8 @@ int wxDataViewMainWindow::GetRowByItem(const wxDataViewItem & item) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void BuildTreeHelper( wxDataViewModel * model, wxDataViewItem & item, wxDataViewTreeNode * node)
|
static void BuildTreeHelper( wxDataViewModel * model, wxDataViewItem & item,
|
||||||
|
wxDataViewTreeNode * node)
|
||||||
{
|
{
|
||||||
if( !model->IsContainer( item ) )
|
if( !model->IsContainer( item ) )
|
||||||
return;
|
return;
|
||||||
@@ -3273,13 +3321,10 @@ static void DestroyTreeHelper( wxDataViewTreeNode * node )
|
|||||||
if( node->GetNodeNumber() != 0 )
|
if( node->GetNodeNumber() != 0 )
|
||||||
{
|
{
|
||||||
int len = node->GetNodeNumber();
|
int len = node->GetNodeNumber();
|
||||||
int i = 0;
|
|
||||||
wxDataViewTreeNodes& nodes = node->GetNodes();
|
wxDataViewTreeNodes& nodes = node->GetNodes();
|
||||||
for(; i < len; i ++ )
|
for (int i = 0; i < len; i++)
|
||||||
{
|
|
||||||
DestroyTreeHelper(nodes[i]);
|
DestroyTreeHelper(nodes[i]);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
delete node;
|
delete node;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3485,7 +3530,8 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
|||||||
|
|
||||||
if (event.LeftIsDown())
|
if (event.LeftIsDown())
|
||||||
{
|
{
|
||||||
m_owner->CalcUnscrolledPosition( m_dragStart.x, m_dragStart.y, &m_dragStart.x, &m_dragStart.y );
|
m_owner->CalcUnscrolledPosition( m_dragStart.x, m_dragStart.y,
|
||||||
|
&m_dragStart.x, &m_dragStart.y );
|
||||||
unsigned int drag_item_row = GetLineAt( m_dragStart.y );
|
unsigned int drag_item_row = GetLineAt( m_dragStart.y );
|
||||||
wxDataViewItem item = GetItemByRow( drag_item_row );
|
wxDataViewItem item = GetItemByRow( drag_item_row );
|
||||||
|
|
||||||
@@ -3548,7 +3594,6 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
|||||||
wxRect cell_rect( xpos, GetLineStart( current ),
|
wxRect cell_rect( xpos, GetLineStart( current ),
|
||||||
col->GetWidth(), GetLineHeight( current ) );
|
col->GetWidth(), GetLineHeight( current ) );
|
||||||
cell->Activate( cell_rect, model, item, col->GetModelColumn() );
|
cell->Activate( cell_rect, model, item, col->GetModelColumn() );
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -3580,7 +3625,8 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
|||||||
SendSelectionChangedEvent( GetItemByRow(m_lineSelectSingleOnUp) );
|
SendSelectionChangedEvent( GetItemByRow(m_lineSelectSingleOnUp) );
|
||||||
}
|
}
|
||||||
|
|
||||||
//If the user click the expander, we do not do editing even if the column with expander are editable
|
// If the user click the expander, we do not do editing even if the column
|
||||||
|
// with expander are editable
|
||||||
if (m_lastOnSame && !ignore_other_columns)
|
if (m_lastOnSame && !ignore_other_columns)
|
||||||
{
|
{
|
||||||
if ((col == m_currentCol) && (current == m_currentRow) &&
|
if ((col == m_currentCol) && (current == m_currentRow) &&
|
||||||
@@ -3634,7 +3680,9 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
|||||||
if((event.LeftDown() || simulateClick) && hoverOverExpander)
|
if((event.LeftDown() || simulateClick) && hoverOverExpander)
|
||||||
{
|
{
|
||||||
wxDataViewTreeNode* node = GetTreeNodeByRow(current);
|
wxDataViewTreeNode* node = GetTreeNodeByRow(current);
|
||||||
// hoverOverExpander being true tells us that our node must be valid and have children.
|
|
||||||
|
// hoverOverExpander being true tells us that our node must be
|
||||||
|
// valid and have children.
|
||||||
// So we don't need any extra checks.
|
// So we don't need any extra checks.
|
||||||
if( node->IsOpen() )
|
if( node->IsOpen() )
|
||||||
OnCollapsing(current);
|
OnCollapsing(current);
|
||||||
@@ -3718,7 +3766,8 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
|||||||
cell->SetValue( value );
|
cell->SetValue( value );
|
||||||
wxRect cell_rect( xpos, GetLineStart( current ),
|
wxRect cell_rect( xpos, GetLineStart( current ),
|
||||||
col->GetWidth(), GetLineHeight( current ) );
|
col->GetWidth(), GetLineHeight( current ) );
|
||||||
/* ignore ret */ cell->LeftClick( event.GetPosition(), cell_rect, model, item, col->GetModelColumn());
|
/* ignore ret */ cell->LeftClick( event.GetPosition(), cell_rect,
|
||||||
|
model, item, col->GetModelColumn());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3754,10 +3803,10 @@ wxDataViewItem wxDataViewMainWindow::GetSelection() const
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxDataViewCtrl
|
// wxDataViewCtrl
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
WX_DEFINE_LIST(wxDataViewColumnList)
|
WX_DEFINE_LIST(wxDataViewColumnList)
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxDataViewCtrl, wxDataViewCtrlBase)
|
IMPLEMENT_DYNAMIC_CLASS(wxDataViewCtrl, wxDataViewCtrlBase)
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(wxDataViewCtrl, wxDataViewCtrlBase)
|
BEGIN_EVENT_TABLE(wxDataViewCtrl, wxDataViewCtrlBase)
|
||||||
EVT_SIZE(wxDataViewCtrl::OnSize)
|
EVT_SIZE(wxDataViewCtrl::OnSize)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
@@ -4232,12 +4281,14 @@ void wxDataViewCtrl::EnsureVisible( const wxDataViewItem & item, const wxDataVie
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDataViewCtrl::HitTest( const wxPoint & point, wxDataViewItem & item, wxDataViewColumn* &column ) const
|
void wxDataViewCtrl::HitTest( const wxPoint & point, wxDataViewItem & item,
|
||||||
|
wxDataViewColumn* &column ) const
|
||||||
{
|
{
|
||||||
m_clientArea->HitTest(point, item, column);
|
m_clientArea->HitTest(point, item, column);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxRect wxDataViewCtrl::GetItemRect( const wxDataViewItem & item, const wxDataViewColumn* column ) const
|
wxRect wxDataViewCtrl::GetItemRect( const wxDataViewItem & item,
|
||||||
|
const wxDataViewColumn* column ) const
|
||||||
{
|
{
|
||||||
return m_clientArea->GetItemRect(item, column);
|
return m_clientArea->GetItemRect(item, column);
|
||||||
}
|
}
|
||||||
@@ -4274,7 +4325,6 @@ bool wxDataViewCtrl::IsExpanded( const wxDataViewItem & item ) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// !wxUSE_GENERICDATAVIEWCTRL
|
// !wxUSE_GENERICDATAVIEWCTRL
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user