X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/94799627ee0ad217b2fc41df5bd5bccf59494e00..7948c0c24401c496c04da3c28f1f1f2f282ba327:/src/generic/treelay.cpp?ds=sidebyside diff --git a/src/generic/treelay.cpp b/src/generic/treelay.cpp index f75f813744..701a0f14b7 100644 --- a/src/generic/treelay.cpp +++ b/src/generic/treelay.cpp @@ -2,7 +2,7 @@ // Name: treelay.h // Purpose: wxTreeLayout class // Author: Julian Smart -// Modified by: +// Modified by: // Created: 7/4/98 // RCS-ID: $Id$ // Copyright: (c) 1998 Julian Smart @@ -14,19 +14,20 @@ #endif // For compilers that support precompilation, includes "wx.h". -#include +#include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP -#include +#include "wx/dc.h" +#include "wx/event.h" #endif #if wxUSE_TREELAYOUT -#include +#include "wx/treelay.h" /* * Abstract tree @@ -49,7 +50,7 @@ void wxTreeLayout::DoLayout(wxDC& dc, long topId) { if (topId != -1) SetTopNode(topId); - + long actualTopId = GetTopNode(); long id = actualTopId; while (id != -1) @@ -72,7 +73,7 @@ void wxTreeLayout::Draw(wxDC& dc) } void wxTreeLayout::DrawNodes(wxDC& dc) -{ +{ long id = GetTopNode(); while (id != -1) { @@ -83,7 +84,7 @@ void wxTreeLayout::DrawNodes(wxDC& dc) } void wxTreeLayout::DrawBranches(wxDC& dc) -{ +{ long id = GetTopNode(); while (id != -1) { @@ -99,13 +100,13 @@ void wxTreeLayout::DrawBranches(wxDC& dc) void wxTreeLayout::DrawNode(long id, wxDC& dc) { - char buf[80]; + wxChar buf[80]; wxString name(GetNodeName(id)); - if (name != "") - sprintf(buf, "%s", (const char*) name); + if (name != wxT("")) + wxSprintf(buf, wxT("%s"), (const wxChar*) name); else - sprintf(buf, ""); - + wxSprintf(buf, wxT("")); + long x = 80; long y = 20; dc.GetTextExtent(buf, &x, &y); @@ -127,7 +128,7 @@ void wxTreeLayout::Initialize(void) void wxTreeLayout::GetNodeSize(long id, long *x, long *y, wxDC& dc) { wxString name(GetNodeName(id)); - if (name != "") + if (name != wxT("")) dc.GetTextExtent(name, x, y); else { @@ -140,7 +141,7 @@ void wxTreeLayout::CalcLayout(long nodeId, int level, wxDC& dc) wxList children; GetChildren(nodeId, children); int n = children.Number(); - + if (m_orientation == FALSE) { // Left to right @@ -156,18 +157,18 @@ void wxTreeLayout::CalcLayout(long nodeId, int level, wxDC& dc) GetNodeSize(parentId, &x, &y, dc); SetNodeX(nodeId, (long)(GetNodeX(parentId) + m_xSpacing + x)); } - + wxNode *node = children.First(); while (node) { CalcLayout((long)node->Data(), level+1, dc); node = node->Next(); } - + // Y Calculations long averageY; ActivateNode(nodeId, TRUE); - + if (n > 0) { averageY = 0; @@ -185,14 +186,14 @@ void wxTreeLayout::CalcLayout(long nodeId, int level, wxDC& dc) SetNodeY(nodeId, m_lastY); long x, y; GetNodeSize(nodeId, &x, &y, dc); - + m_lastY = m_lastY + y + m_ySpacing; } } else { // Top to bottom - + // Y Calculations if (level == 0) SetNodeY(nodeId, m_topMargin); @@ -205,18 +206,18 @@ void wxTreeLayout::CalcLayout(long nodeId, int level, wxDC& dc) GetNodeSize(parentId, &x, &y, dc); SetNodeY(nodeId, (long)(GetNodeY(parentId) + m_ySpacing + y)); } - + wxNode *node = children.First(); while (node) { CalcLayout((long)node->Data(), level+1, dc); node = node->Next(); } - + // X Calculations long averageX; ActivateNode(nodeId, TRUE); - + if (n > 0) { averageX = 0; @@ -234,7 +235,7 @@ void wxTreeLayout::CalcLayout(long nodeId, int level, wxDC& dc) SetNodeX(nodeId, m_lastX); long x, y; GetNodeSize(nodeId, &x, &y, dc); - + m_lastX = m_lastX + x + m_xSpacing; } } @@ -283,9 +284,35 @@ long wxTreeLayoutStored::AddChild(const wxString& name, const wxString& parent) if (m_num < (m_maxNodes -1 )) { long i = -1; - if (parent != "") + if (parent != wxT("")) i = NameToId(parent); else m_parentNode = m_num; + + m_nodes[m_num].m_parentId = i; + m_nodes[m_num].m_name = name; + m_nodes[m_num].m_x = m_nodes[m_num].m_y = 0; + m_nodes[m_num].m_clientData = 0; + m_num ++; + + return (m_num - 1); + } + else + return -1; +} + +long wxTreeLayoutStored::AddChild(const wxString& name, long parent) +{ + if (m_num < (m_maxNodes -1 ) && parent < m_num) + { + long i = -1; + if (parent != -1) + { + i = parent; + } + else + { + m_parentNode = m_num; + } m_nodes[m_num].m_parentId = i; m_nodes[m_num].m_name = name; @@ -322,49 +349,49 @@ void wxTreeLayoutStored::GetChildren(long id, wxList& list) wxStoredNode* wxTreeLayoutStored::GetNode(long idx) const { wxASSERT(idx < m_num); - + return &m_nodes[idx]; }; long wxTreeLayoutStored::GetNodeX(long id) { wxASSERT(id < m_num); - + return (long)m_nodes[id].m_x; } long wxTreeLayoutStored::GetNodeY(long id) { wxASSERT(id < m_num); - + return (long)m_nodes[id].m_y; } void wxTreeLayoutStored::SetNodeX(long id, long x) { wxASSERT(id < m_num); - + m_nodes[id].m_x = (int)x; } void wxTreeLayoutStored::SetNodeY(long id, long y) { wxASSERT(id < m_num); - + m_nodes[id].m_y = (int)y; } void wxTreeLayoutStored::SetNodeName(long id, const wxString& name) { wxASSERT(id < m_num); - + m_nodes[id].m_name = name; } wxString wxTreeLayoutStored::GetNodeName(long id) { wxASSERT(id < m_num); - + return m_nodes[id].m_name; } @@ -373,7 +400,7 @@ long wxTreeLayoutStored::GetNodeParent(long id) if (id != -1) { wxASSERT(id < m_num); - + return m_nodes[id].m_parentId; } else @@ -383,7 +410,7 @@ long wxTreeLayoutStored::GetNodeParent(long id) long wxTreeLayoutStored::GetNextNode(long id) { wxASSERT(id < m_num); - + if ((id != -1) && (id < (m_num - 1))) return id + 1; else @@ -393,28 +420,28 @@ long wxTreeLayoutStored::GetNextNode(long id) void wxTreeLayoutStored::SetClientData(long id, long clientData) { wxASSERT(id < m_num); - + m_nodes[id].m_clientData = clientData; } long wxTreeLayoutStored::GetClientData(long id) const { wxASSERT(id < m_num); - + return m_nodes[id].m_clientData; } void wxTreeLayoutStored::ActivateNode(long id, bool active) { wxASSERT(id < m_num); - + m_nodes[id].m_active = active; } bool wxTreeLayoutStored::NodeActive(long id) { wxASSERT(id < m_num); - + return m_nodes[id].m_active; } @@ -423,22 +450,20 @@ wxString wxTreeLayoutStored::HitTest(wxMouseEvent& event, wxDC& dc) wxPoint pt = event.GetPosition(); wxCoord x = pt.x; wxCoord y = pt.y; - + int i; for (i = 0; i < m_maxNodes; i++) { - wxStoredNode* item = &m_nodes[i]; - long width, height; dc.GetTextExtent(m_nodes[i].m_name, &width, &height); - + if ( (x >= (m_nodes[i].m_x-10)) && (x < (m_nodes[i].m_x + width+10)) && (y >= m_nodes[i].m_y-10) && (y < (m_nodes[i].m_y + height+10)) ) { return m_nodes[i].m_name; } } - + return wxString(""); }