applied Greg's refinment of hist treectrl patch
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12626 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
717510eb58
commit
2b84e565c6
@ -110,22 +110,15 @@ enum wxTreeItemIcon
|
||||
wxTreeItemIcon_Max
|
||||
};
|
||||
|
||||
enum wxButtonImage // effectively the same as wxTreeItemIcon
|
||||
{
|
||||
wxCLOSED_BUTTON = 0, // closed, not selected
|
||||
wxCLOSED_BUTTON_SELECTED, // closed, selected
|
||||
wxOPEN_BUTTON, // open, not selected
|
||||
wxOPEN_BUTTON_SELECTED // open, selected
|
||||
};
|
||||
|
||||
/*
|
||||
* wxTreeCtrl flags
|
||||
*/
|
||||
// TODO: maybe renumber these?
|
||||
#define wxTR_NO_BUTTONS 0x0000 // for convenience
|
||||
#define wxTR_HAS_BUTTONS 0x0004 // generates a +/- button
|
||||
#define wxTR_TWIST_BUTTONS 0x0008 // twister buttons
|
||||
#define wxTR_NO_LINES 0x0100 // don't generate level connectors
|
||||
#define wxTR_HAS_BUTTONS 0x0001 // generates a +/- button
|
||||
#define wxTR_TWIST_BUTTONS 0x0002 // generates a twister button
|
||||
#define wxTR_NO_LINES 0x0004 // don't generate level connectors
|
||||
#define wxTR_LINES_AT_ROOT 0x0008 // connect top-level nodes
|
||||
#define wxTR_MAC_BUTTONS wxTR_TWIST_BUTTONS // backward compatibility
|
||||
|
||||
#define wxTR_SINGLE 0x0000 // for convenience
|
||||
@ -133,9 +126,8 @@ enum wxButtonImage // effectively the same as wxTreeItemIcon
|
||||
#define wxTR_EXTENDED 0x0040 // TODO: allow extended selection
|
||||
|
||||
#define wxTR_EDIT_LABELS 0x0200 // can edit item labels
|
||||
#define wxTR_LINES_AT_ROOT 0x0010 // specific to wxMSW
|
||||
#define wxTR_HIDE_ROOT 0x0800 // don't display root node
|
||||
#define wxTR_ROW_LINES 0x0400 // put border around items
|
||||
#define wxTR_HIDE_ROOT 0x0800 // don't display root node
|
||||
#define wxTR_HAS_VARIABLE_ROW_HEIGHT 0x0080 // what it says
|
||||
|
||||
// TODO: different default styles for wxGTK, wxMotif, whatever?
|
||||
|
@ -108,7 +108,6 @@ public:
|
||||
wxGenericTreeItem() { m_data = NULL; }
|
||||
wxGenericTreeItem( wxGenericTreeItem *parent,
|
||||
const wxString& text,
|
||||
wxDC& dc,
|
||||
int image,
|
||||
int selImage,
|
||||
wxTreeItemData *data );
|
||||
@ -366,7 +365,6 @@ void wxTreeTextCtrl::OnKillFocus( wxFocusEvent &WXUNUSED(event) )
|
||||
|
||||
wxGenericTreeItem::wxGenericTreeItem(wxGenericTreeItem *parent,
|
||||
const wxString& text,
|
||||
wxDC& WXUNUSED(dc),
|
||||
int image, int selImage,
|
||||
wxTreeItemData *data)
|
||||
: m_text(text)
|
||||
@ -1077,9 +1075,8 @@ wxTreeItemId wxGenericTreeCtrl::DoInsertItem(const wxTreeItemId& parentId,
|
||||
|
||||
m_dirty = TRUE; // do this first so stuff below doesn't cause flicker
|
||||
|
||||
wxClientDC dc(this);
|
||||
wxGenericTreeItem *item =
|
||||
new wxGenericTreeItem( parent, text, dc, image, selImage, data );
|
||||
new wxGenericTreeItem( parent, text, image, selImage, data );
|
||||
|
||||
if ( data != NULL )
|
||||
{
|
||||
@ -1099,8 +1096,7 @@ wxTreeItemId wxGenericTreeCtrl::AddRoot(const wxString& text,
|
||||
|
||||
m_dirty = TRUE; // do this first so stuff below doesn't cause flicker
|
||||
|
||||
wxClientDC dc(this);
|
||||
m_anchor = new wxGenericTreeItem((wxGenericTreeItem *)NULL, text, dc,
|
||||
m_anchor = new wxGenericTreeItem((wxGenericTreeItem *)NULL, text,
|
||||
image, selImage, data);
|
||||
if (HasFlag(wxTR_HIDE_ROOT))
|
||||
{
|
||||
@ -1889,10 +1885,26 @@ void wxGenericTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level
|
||||
}
|
||||
else if (level == 0)
|
||||
{
|
||||
// always expand hidden root
|
||||
int origY = y;
|
||||
wxArrayGenericTreeItems& children = item->GetChildren();
|
||||
size_t n, count = children.Count();
|
||||
for (n = 0; n < count; ++n)
|
||||
PaintLevel(children[n], dc, 1, y);
|
||||
int count = children.Count();
|
||||
if (count > 0)
|
||||
{
|
||||
int n = 0, oldY;
|
||||
do {
|
||||
oldY = y;
|
||||
PaintLevel(children[n], dc, 1, y);
|
||||
} while (++n < count);
|
||||
|
||||
if (!HasFlag(wxTR_NO_LINES) && HasFlag(wxTR_LINES_AT_ROOT) && count > 1)
|
||||
{
|
||||
// draw line down to last child
|
||||
origY += GetLineHeight(children[0])>>1;
|
||||
oldY += GetLineHeight(children[n-1])>>1;
|
||||
dc.DrawLine(3, origY, 3, oldY);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1913,18 +1925,20 @@ void wxGenericTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level
|
||||
{
|
||||
if (!HasFlag(wxTR_NO_LINES))
|
||||
{
|
||||
if (x > (signed)m_indent || HasFlag(wxTR_LINES_AT_ROOT))
|
||||
if (x > (signed)m_indent)
|
||||
dc.DrawLine(x - m_indent, y_mid, x - 5, y_mid);
|
||||
else if (HasFlag(wxTR_LINES_AT_ROOT))
|
||||
dc.DrawLine(3, y_mid, x - 5, y_mid);
|
||||
dc.DrawLine(x + 5, y_mid, x + m_spacing, y_mid);
|
||||
}
|
||||
|
||||
if (m_imageListButtons != NULL)
|
||||
{
|
||||
// draw the image button here
|
||||
int image_h = 0, image_w = 0, image = wxCLOSED_BUTTON;
|
||||
if (item->IsExpanded()) image = wxOPEN_BUTTON;
|
||||
int image_h = 0, image_w = 0, image = wxTreeItemIcon_Normal;
|
||||
if (item->IsExpanded()) image = wxTreeItemIcon_Expanded;
|
||||
if (item->IsSelected())
|
||||
image += wxOPEN_BUTTON_SELECTED - wxOPEN_BUTTON;
|
||||
image += wxTreeItemIcon_Selected - wxTreeItemIcon_Normal;
|
||||
m_imageListButtons->GetSize(image, image_w, image_h);
|
||||
int xx = x - (image_w>>1);
|
||||
int yy = y_mid - (image_h>>1);
|
||||
@ -1980,8 +1994,10 @@ void wxGenericTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level
|
||||
{
|
||||
// draw the horizontal line here
|
||||
int x_start = x;
|
||||
if (x > (signed)m_indent || HasFlag(wxTR_LINES_AT_ROOT))
|
||||
if (x > (signed)m_indent)
|
||||
x_start -= m_indent;
|
||||
else if (HasFlag(wxTR_LINES_AT_ROOT))
|
||||
x_start = 3;
|
||||
dc.DrawLine(x_start, y_mid, x + m_spacing, y_mid);
|
||||
}
|
||||
|
||||
@ -2016,7 +2032,10 @@ void wxGenericTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level
|
||||
|
||||
if (HasFlag(wxTR_ROW_LINES))
|
||||
{
|
||||
dc.SetPen(*wxWHITE_PEN);
|
||||
// if the background colour is white, choose a
|
||||
// contrasting color for the lines
|
||||
dc.SetPen(*((GetBackgroundColour() == *wxWHITE)
|
||||
? wxMEDIUM_GREY_PEN : wxWHITE_PEN));
|
||||
dc.DrawLine(0, y_top, 10000, y_top);
|
||||
dc.DrawLine(0, y, 10000, y);
|
||||
}
|
||||
@ -2040,10 +2059,10 @@ void wxGenericTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level
|
||||
PaintLevel(children[n], dc, level, y);
|
||||
} while (++n < count);
|
||||
|
||||
if (!HasFlag(wxTR_NO_LINES))
|
||||
if (!HasFlag(wxTR_NO_LINES) && count > 1)
|
||||
{
|
||||
// draw line down to last child
|
||||
oldY += GetLineHeight(children[n-1])/2;
|
||||
oldY += GetLineHeight(children[n-1])>>1;
|
||||
if (HasButtons()) y_mid += 5;
|
||||
dc.DrawLine(x, y_mid, x, oldY);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user