// 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
#endif
// For compilers that support precompilation, includes "wx.h".
-#include <wx/wxprec.h>
+#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
-#include <wx/wx.h>
+#include "wx/dc.h"
+#include "wx/event.h"
#endif
#if wxUSE_TREELAYOUT
-#include <wx/treelay.h>
+#include "wx/treelay.h"
/*
* Abstract tree
{
if (topId != -1)
SetTopNode(topId);
-
+
long actualTopId = GetTopNode();
long id = actualTopId;
while (id != -1)
}
void wxTreeLayout::DrawNodes(wxDC& dc)
-{
+{
long id = GetTopNode();
while (id != -1)
{
}
void wxTreeLayout::DrawBranches(wxDC& dc)
-{
+{
long id = GetTopNode();
while (id != -1)
{
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, "<unnamed>");
-
+ wxSprintf(buf, wxT("<unnamed>"));
+
long x = 80;
long y = 20;
dc.GetTextExtent(buf, &x, &y);
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
{
{
wxList children;
GetChildren(nodeId, children);
- int n = children.Number();
-
+ int n = children.GetCount();
+
if (m_orientation == FALSE)
{
// Left to right
GetNodeSize(parentId, &x, &y, dc);
SetNodeX(nodeId, (long)(GetNodeX(parentId) + m_xSpacing + x));
}
-
- wxNode *node = children.First();
+
+ wxNode *node = children.GetFirst();
while (node)
{
- CalcLayout((long)node->Data(), level+1, dc);
- node = node->Next();
+ CalcLayout((long)node->GetData(), level+1, dc);
+ node = node->GetNext();
}
-
+
// Y Calculations
long averageY;
ActivateNode(nodeId, TRUE);
-
+
if (n > 0)
{
averageY = 0;
- node = children.First();
+ node = children.GetFirst();
while (node)
{
- averageY += GetNodeY((long)node->Data());
- node = node->Next();
+ averageY += GetNodeY((long)node->GetData());
+ node = node->GetNext();
}
averageY = averageY / n;
SetNodeY(nodeId, averageY);
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);
GetNodeSize(parentId, &x, &y, dc);
SetNodeY(nodeId, (long)(GetNodeY(parentId) + m_ySpacing + y));
}
-
- wxNode *node = children.First();
+
+ wxNode *node = children.GetFirst();
while (node)
{
- CalcLayout((long)node->Data(), level+1, dc);
- node = node->Next();
+ CalcLayout((long)node->GetData(), level+1, dc);
+ node = node->GetNext();
}
-
+
// X Calculations
long averageX;
ActivateNode(nodeId, TRUE);
-
+
if (n > 0)
{
averageX = 0;
- node = children.First();
+ node = children.GetFirst();
while (node)
{
- averageX += GetNodeX((long)node->Data());
- node = node->Next();
+ averageX += GetNodeX((long)node->GetData());
+ node = node->GetNext();
}
averageX = averageX / n;
SetNodeX(nodeId, averageX);
SetNodeX(nodeId, m_lastX);
long x, y;
GetNodeSize(nodeId, &x, &y, dc);
-
+
m_lastX = m_lastX + x + m_xSpacing;
}
}
*
*/
-IMPLEMENT_DYNAMIC_CLASS(wxLayoutTreeStored, wxTreeLayout)
+IMPLEMENT_DYNAMIC_CLASS(wxTreeLayoutStored, wxTreeLayout)
-wxLayoutTreeStored::wxLayoutTreeStored(int n):wxTreeLayout()
+wxTreeLayoutStored::wxTreeLayoutStored(int n):wxTreeLayout()
{
m_nodes = NULL;
m_maxNodes = 0;
Initialize(n);
}
-wxLayoutTreeStored::~wxLayoutTreeStored(void)
+wxTreeLayoutStored::~wxTreeLayoutStored(void)
{
if (m_nodes)
delete[] m_nodes;
}
-void wxLayoutTreeStored::Initialize(int n)
+void wxTreeLayoutStored::Initialize(int n)
{
m_maxNodes = n;
wxTreeLayout::Initialize();
int i;
for (i = 0; i < n; i++)
{
- m_nodes[i].m_name = "";
+ m_nodes[i].m_name = wxT("");
m_nodes[i].m_active = FALSE;
m_nodes[i].m_parentId = -1;
m_nodes[i].m_x = 0;
m_num = 0;
}
-long wxLayoutTreeStored::AddChild(const wxString& name, const wxString& parent)
+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;
return -1;
}
-long wxLayoutTreeStored::NameToId(const wxString& name)
+long wxTreeLayoutStored::NameToId(const wxString& name)
{
long i;
for (i = 0; i < m_num; i++)
return -1;
}
-void wxLayoutTreeStored::GetChildren(long id, wxList& list)
+void wxTreeLayoutStored::GetChildren(long id, wxList& list)
{
long currentId = GetTopNode();
while (currentId != -1)
}
}
-wxStoredNode* wxLayoutTreeStored::GetNode(long idx) const
+wxStoredNode* wxTreeLayoutStored::GetNode(long idx) const
{
wxASSERT(idx < m_num);
-
+
return &m_nodes[idx];
};
-long wxLayoutTreeStored::GetNodeX(long id)
+long wxTreeLayoutStored::GetNodeX(long id)
{
wxASSERT(id < m_num);
-
+
return (long)m_nodes[id].m_x;
}
-long wxLayoutTreeStored::GetNodeY(long id)
+long wxTreeLayoutStored::GetNodeY(long id)
{
wxASSERT(id < m_num);
-
+
return (long)m_nodes[id].m_y;
}
-void wxLayoutTreeStored::SetNodeX(long id, long x)
+void wxTreeLayoutStored::SetNodeX(long id, long x)
{
wxASSERT(id < m_num);
-
+
m_nodes[id].m_x = (int)x;
}
-void wxLayoutTreeStored::SetNodeY(long id, long y)
+void wxTreeLayoutStored::SetNodeY(long id, long y)
{
wxASSERT(id < m_num);
-
+
m_nodes[id].m_y = (int)y;
}
-void wxLayoutTreeStored::SetNodeName(long id, const wxString& name)
+void wxTreeLayoutStored::SetNodeName(long id, const wxString& name)
{
wxASSERT(id < m_num);
-
+
m_nodes[id].m_name = name;
}
-wxString wxLayoutTreeStored::GetNodeName(long id)
+wxString wxTreeLayoutStored::GetNodeName(long id)
{
wxASSERT(id < m_num);
-
+
return m_nodes[id].m_name;
}
-long wxLayoutTreeStored::GetNodeParent(long id)
+long wxTreeLayoutStored::GetNodeParent(long id)
{
if (id != -1)
{
wxASSERT(id < m_num);
-
+
return m_nodes[id].m_parentId;
}
else
return -1;
}
-long wxLayoutTreeStored::GetNextNode(long id)
+long wxTreeLayoutStored::GetNextNode(long id)
{
wxASSERT(id < m_num);
-
+
if ((id != -1) && (id < (m_num - 1)))
return id + 1;
else
return -1;
}
-void wxLayoutTreeStored::SetClientData(long id, long clientData)
+void wxTreeLayoutStored::SetClientData(long id, long clientData)
{
wxASSERT(id < m_num);
-
+
m_nodes[id].m_clientData = clientData;
}
-long wxLayoutTreeStored::GetClientData(long id) const
+long wxTreeLayoutStored::GetClientData(long id) const
{
wxASSERT(id < m_num);
-
+
return m_nodes[id].m_clientData;
}
-void wxLayoutTreeStored::ActivateNode(long id, bool active)
+void wxTreeLayoutStored::ActivateNode(long id, bool active)
{
wxASSERT(id < m_num);
-
+
m_nodes[id].m_active = active;
}
-bool wxLayoutTreeStored::NodeActive(long id)
+bool wxTreeLayoutStored::NodeActive(long id)
{
wxASSERT(id < m_num);
-
+
return m_nodes[id].m_active;
}
-wxString wxLayoutTreeStored::HitTest(wxMouseEvent& event, wxDC& dc)
+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("");
+
+ return wxString( wxT("") );
}
#endif