fixed compilation and added support for all 4 images (as a side effect) to the

generic tree control


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3768 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1999-09-30 23:25:19 +00:00
parent 37f6a9770c
commit 8dc9904630
7 changed files with 302 additions and 195 deletions

View File

@@ -271,7 +271,7 @@ public:
void SetItemText(const wxTreeItemId& item, const wxString& text); void SetItemText(const wxTreeItemId& item, const wxString& text);
// get one of the images associated with the item (normal by default) // get one of the images associated with the item (normal by default)
void SetItemImage(const wxTreeItemId& item, int image, void SetItemImage(const wxTreeItemId& item, int image,
wxTreeItemIcon which = wxTreeItemIcon_Normal) const; wxTreeItemIcon which = wxTreeItemIcon_Normal);
// associate some data with the item // associate some data with the item
void SetItemData(const wxTreeItemId& item, wxTreeItemData *data); void SetItemData(const wxTreeItemId& item, wxTreeItemData *data);

View File

@@ -1,45 +1,42 @@
/* XPM */ /* XPM */
static char *icon2_xpm[] = { static char *icon2_xpm[] = {
/* width height num_colors chars_per_pixel */ /* width height num_colors chars_per_pixel */
" 32 32 6 1", " 32 32 3 1",
/* colors */ /* colors */
". c #b2c0dc", ". c #000000",
"# c #000000", "# c #ff0000",
"a c #c0c0c0", "a c #ffffff",
"b c #808080",
"c c #ffff00",
"d c #ffffff",
/* pixels */ /* pixels */
"................................", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"................................", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"......bbbbbbbbbb................", "aaaa................aaaaaaaaaaaa",
"......bbbbbbbbbb................", "aaaa................aaaaaaaaaaaa",
"....bbccaaccaaccbb..............", "aaaa..############....aaaaaaaaaa",
"....bbccaaccaaccbb..............", "aaaa..############....aaaaaaaaaa",
"..bbccaaccaaccaaccbbbbbbbbbbbb..", "aaaa..##..##..####..aa..aaaaaaaa",
"..bbccaaccaaccaaccbbbbbbbbbbbb..", "aaaa..##..##..####..aa..aaaaaaaa",
"..bbddddddddddddddddddddddddbb##", "aaaa..############........aaaaaa",
"..bbddddddddddddddddddddddddbb##", "aaaa..############........aaaaaa",
"..bbddccaaccaaccaaccaaccaaccbb##", "aaaa..##..##..##########..aaaaaa",
"..bbddccaaccaaccaaccaaccaaccbb##", "aaaa..##..##..##########..aaaaaa",
"..bbddaaccaaccaaccaaccaaccaabb##", "aaaa..##################..aaaaaa",
"..bbddaaccaaccaaccaaccaaccaabb##", "aaaa..##################..aaaaaa",
"..bbddccaaccaaccaaccaaccaaccbb##", "aaaa..##..##..##..##..##..aaaaaa",
"..bbddccaaccaaccaaccaaccaaccbb##", "aaaa..##..##..##..##..##..aaaaaa",
"..bbddaaccaaccaaccaaccaaccaabb##", "aaaa..##################..aaaaaa",
"..bbddaaccaaccaaccaaccaaccaabb##", "aaaa..##################..aaaaaa",
"..bbddccaaccaaccaaccaaccaaccbb##", "aaaa..##..##..##..##..##..aaaaaa",
"..bbddccaaccaaccaaccaaccaaccbb##", "aaaa..##..##..##..##..##..aaaaaa",
"..bbddaaccaaccaaccaaccaaccaabb##", "aaaa..##################..aaaaaa",
"..bbddaaccaaccaaccaaccaaccaabb##", "aaaa..##################..aaaaaa",
"..bbddccaaccaaccaaccaaccaaccbb##", "aaaa..##..##..##..##..##..aaaaaa",
"..bbddccaaccaaccaaccaaccaaccbb##", "aaaa..##..##..##..##..##..aaaaaa",
"..bbbbbbbbbbbbbbbbbbbbbbbbbbbb##", "aaaa..##################..aaaaaa",
"..bbbbbbbbbbbbbbbbbbbbbbbbbbbb##", "aaaa..##################..aaaaaa",
"....############################", "aaaa......................aaaaaa",
"....############################", "aaaa......................aaaaaa",
"................................", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"................................", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"................................", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"................................" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}; };

View File

@@ -1,45 +1,44 @@
/* XPM */ /* XPM */
static char *icon2_xpm[] = { static char *icon3_xpm[] = {
/* width height num_colors chars_per_pixel */ /* width height num_colors chars_per_pixel */
" 32 32 6 1", " 32 32 5 1",
/* colors */ /* colors */
". c #b2c0dc", ". c #000000",
"# c #000000", "# c #c0c0c0",
"a c #c0c0c0", "a c #808080",
"b c #808080", "b c #ffff00",
"c c #ffff00", "c c #ffffff",
"d c #ffffff",
/* pixels */ /* pixels */
"................................", "cccccccccccccccccccccccccccccccc",
"................................", "cccccccccccccccccccccccccccccccc",
"......bbbbbbbbbb................", "ccccccaaaaaaaaaacccccccccccccccc",
"......bbbbbbbbbb................", "ccccccaaaaaaaaaacccccccccccccccc",
"....bbccaaccaaccbb..............", "ccccaabb##bb##bbaacccccccccccccc",
"....bbccaaccaaccbb..............", "ccccaabb##bb##bbaacccccccccccccc",
"..bbccaaccaaccaaccbbbbbbbbbbbb..", "ccaabb##bb##bb##bbaaaaaaaaaaaacc",
"..bbccaaccaaccaaccbbbbbbbbbbbb..", "ccaabb##bb##bb##bbaaaaaaaaaaaacc",
"..bbddddddddddddddddddddddddbb##", "ccaaccccccccccccccccccccccccaa..",
"..bbddddddddddddddddddddddddbb##", "ccaaccccccccccccccccccccccccaa..",
"..bbddccaaccaaccaaccaaccaaccbb##", "ccaaccbb##bb##bb##bb##bb##bbaa..",
"..bbddccaaccaaccaaccaaccaaccbb##", "ccaaccbb##bb##bb##bb##bb##bbaa..",
"..bbddaaccaaccaaccaaccaaccaabb##", "ccaacc##bb##bb##bb##bb##bb##aa..",
"..bbddaaccaaccaaccaaccaaccaabb##", "ccaacc##bb##bb##bb##bb##bb##aa..",
"..bbddccaaccaaccaaccaaccaaccbb##", "ccaaccbb##bb##bb##bb##bb##bbaa..",
"..bbddccaaccaaccaaccaaccaaccbb##", "ccaaccbb##bb##bb##bb##bb##bbaa..",
"..bbddaaccaaccaaccaaccaaccaabb##", "ccaacc##bb##bb##bb##bb##bb##aa..",
"..bbddaaccaaccaaccaaccaaccaabb##", "ccaacc##bb##bb##bb##bb##bb##aa..",
"..bbddccaaccaaccaaccaaccaaccbb##", "ccaaccbb##bb##bb##bb##bb##bbaa..",
"..bbddccaaccaaccaaccaaccaaccbb##", "ccaaccbb##bb##bb##bb##bb##bbaa..",
"..bbddaaccaaccaaccaaccaaccaabb##", "ccaacc##bb##bb##bb##bb##bb##aa..",
"..bbddaaccaaccaaccaaccaaccaabb##", "ccaacc##bb##bb##bb##bb##bb##aa..",
"..bbddccaaccaaccaaccaaccaaccbb##", "ccaaccbb##bb##bb##bb##bb##bbaa..",
"..bbddccaaccaaccaaccaaccaaccbb##", "ccaaccbb##bb##bb##bb##bb##bbaa..",
"..bbbbbbbbbbbbbbbbbbbbbbbbbbbb##", "ccaaaaaaaaaaaaaaaaaaaaaaaaaaaa..",
"..bbbbbbbbbbbbbbbbbbbbbbbbbbbb##", "ccaaaaaaaaaaaaaaaaaaaaaaaaaaaa..",
"....############################", "cccc............................",
"....############################", "cccc............................",
"................................", "cccccccccccccccccccccccccccccccc",
"................................", "cccccccccccccccccccccccccccccccc",
"................................", "cccccccccccccccccccccccccccccccc",
"................................" "cccccccccccccccccccccccccccccccc"
}; };

View File

@@ -0,0 +1,44 @@
/* XPM */
static char *icon4_xpm[] = {
/* width height num_colors chars_per_pixel */
" 32 32 5 1",
/* colors */
". c #000000",
"# c #c0c0c0",
"a c #808080",
"b c #ff0000",
"c c #ffffff",
/* pixels */
"cccccccccccccccccccccccccccccccc",
"cccccccccccccccccccccccccccccccc",
"ccccccaaaaaaaaaacccccccccccccccc",
"ccccccaaaaaaaaaacccccccccccccccc",
"ccccaabb##bb##bbaacccccccccccccc",
"ccccaabb##bb##bbaacccccccccccccc",
"ccaabb##bb##bb##bbaaaaaaaaaaaacc",
"ccaabb##bb##bb##bbaaaaaaaaaaaacc",
"ccaaccccccccccccccccccccccccaa..",
"ccaaccccccccccccccccccccccccaa..",
"ccaaccbb##bb##bb##bb##bb##bbaa..",
"ccaaccbb##bb##bb##bb##bb##bbaa..",
"ccaacc##bb##bb##bb##bb##bb##aa..",
"ccaacc##bb##bb##bb##bb##bb##aa..",
"ccaaccbb##bb##bb##bb##bb##bbaa..",
"ccaaccbb##bb##bb##bb##bb##bbaa..",
"ccaacc##bb##bb##bb##bb##bb##aa..",
"ccaacc##bb##bb##bb##bb##bb##aa..",
"ccaaccbb##bb##bb##bb##bb##bbaa..",
"ccaaccbb##bb##bb##bb##bb##bbaa..",
"ccaacc##bb##bb##bb##bb##bb##aa..",
"ccaacc##bb##bb##bb##bb##bb##aa..",
"ccaaccbb##bb##bb##bb##bb##bbaa..",
"ccaaccbb##bb##bb##bb##bb##bbaa..",
"ccaaaaaaaaaaaaaaaaaaaaaaaaaaaa..",
"ccaaaaaaaaaaaaaaaaaaaaaaaaaaaa..",
"cccc............................",
"cccc............................",
"cccccccccccccccccccccccccccccccc",
"cccccccccccccccccccccccccccccccc",
"cccccccccccccccccccccccccccccccc",
"cccccccccccccccccccccccccccccccc"
};

View File

@@ -0,0 +1,43 @@
/* XPM */
static char *icon5_xpm[] = {
/* width height num_colors chars_per_pixel */
" 32 32 4 1",
/* colors */
". c #000000",
"# c #808000",
"a c #ffffff",
"b c #ffff00",
/* pixels */
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aa..........aaaaaaaaaaaaaaaaaaaa",
"aa..........aaaaaaaaaaaaaaaaaaaa",
"aa..bbbbbb................aaaaaa",
"aa..bbbbbb................aaaaaa",
"aa..bbbbbbbbbbbbbbbbbbbb..aaaaaa",
"aa..bbbbbbbbbbbbbbbbbbbb..aaaaaa",
"aa..bbbbbbbbbbbbbbbbbbbb..aaaaaa",
"aa..bbbbbbbbbbbbbbbbbbbb..aaaaaa",
"aa..bbbb......................aa",
"aa..bbbb......................aa",
"aa..bbb.####################..aa",
"aa..bbb.####################..aa",
"aa..bb..####################.aaa",
"aa..bb..####################.aaa",
"aa..b.####################..aaaa",
"aa..b.####################..aaaa",
"aa....####################.aaaaa",
"aa....####################.aaaaa",
"aa..####################..aaaaaa",
"aa..####################..aaaaaa",
"aa......................aaaaaaaa",
"aa......................aaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
};

View File

@@ -34,10 +34,13 @@
#include "math.h" #include "math.h"
#ifdef __WXMSW__ #ifdef __WXMSW__
// comment out this line to test multiple selection even under MSW (where
// it looks ugly - but works)
#define NO_MULTIPLE_SELECTION #define NO_MULTIPLE_SELECTION
#define NO_VARIABLE_HEIGHT
#endif #endif
#define NO_VARIABLE_HEIGHT
#include "treetest.h" #include "treetest.h"
// under Windows the icons are in the .rc file // under Windows the icons are in the .rc file
@@ -46,6 +49,7 @@
#include "icon2.xpm" #include "icon2.xpm"
#include "icon3.xpm" #include "icon3.xpm"
#include "icon4.xpm" #include "icon4.xpm"
#include "icon5.xpm"
#include "mondrian.xpm" #include "mondrian.xpm"
#endif #endif

View File

@@ -47,6 +47,12 @@ class WXDLLEXPORT wxGenericTreeItem;
WX_DEFINE_ARRAY(wxGenericTreeItem *, wxArrayGenericTreeItems); WX_DEFINE_ARRAY(wxGenericTreeItem *, wxArrayGenericTreeItems);
WX_DEFINE_OBJARRAY(wxArrayTreeItemIds); WX_DEFINE_OBJARRAY(wxArrayTreeItemIds);
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
static const int NO_IMAGE = -1;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// private classes // private classes
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
@@ -69,13 +75,16 @@ public:
wxArrayGenericTreeItems& GetChildren() { return m_children; } wxArrayGenericTreeItems& GetChildren() { return m_children; }
const wxString& GetText() const { return m_text; } const wxString& GetText() const { return m_text; }
int GetImage() const { return m_image; } int GetImage(wxTreeItemIcon which = wxTreeItemIcon_Normal) const
int GetSelectedImage() const { return m_selImage; } { return m_images[which]; }
wxTreeItemData *GetData() const { return m_data; } wxTreeItemData *GetData() const { return m_data; }
// returns the current image for the item (depending on its
// selected/expanded/whatever state)
int GetCurrentImage() const;
void SetText( const wxString &text ); void SetText( const wxString &text );
void SetImage(int image) { m_image = image; } void SetImage(int image, wxTreeItemIcon which) { m_images[which] = image; }
void SetSelectedImage(int image) { m_selImage = image; }
void SetData(wxTreeItemData *data) { m_data = data; } void SetData(wxTreeItemData *data) { m_data = data; }
void SetHasPlus(bool has = TRUE) { m_hasPlus = has; } void SetHasPlus(bool has = TRUE) { m_hasPlus = has; }
@@ -125,7 +134,7 @@ public:
// status inquiries // status inquiries
bool HasChildren() const { return !m_children.IsEmpty(); } bool HasChildren() const { return !m_children.IsEmpty(); }
bool HasHilight() const { return m_hasHilight; } bool IsSelected() const { return m_hasHilight; }
bool IsExpanded() const { return !m_isCollapsed; } bool IsExpanded() const { return !m_isCollapsed; }
bool HasPlus() const { return m_hasPlus || HasChildren(); } bool HasPlus() const { return m_hasPlus || HasChildren(); }
bool IsBold() const { return m_isBold; } bool IsBold() const { return m_isBold; }
@@ -133,8 +142,9 @@ public:
private: private:
wxString m_text; wxString m_text;
int m_image, // tree ctrl images for the normal, selected, expanded and expanded+selected
m_selImage; // states
int m_images[wxTreeItemIcon_Max];
wxTreeItemData *m_data; wxTreeItemData *m_data;
@@ -251,8 +261,11 @@ wxGenericTreeItem::wxGenericTreeItem(wxGenericTreeItem *parent,
wxTreeItemData *data) wxTreeItemData *data)
: m_text(text) : m_text(text)
{ {
m_image = image; m_images[wxTreeItemIcon_Normal] = image;
m_selImage = selImage; m_images[wxTreeItemIcon_Selected] = selImage;
m_images[wxTreeItemIcon_Expanded] = NO_IMAGE;
m_images[wxTreeItemIcon_SelectedExpanded] = NO_IMAGE;
m_data = data; m_data = data;
m_x = m_y = 0; m_x = m_y = 0;
m_xCross = m_yCross = 0; m_xCross = m_yCross = 0;
@@ -307,8 +320,11 @@ void wxGenericTreeItem::SetText( const wxString &text )
void wxGenericTreeItem::Reset() void wxGenericTreeItem::Reset()
{ {
m_text.Empty(); m_text.Empty();
m_image = for ( int i = 0; i < wxTreeItemIcon_Max; i++ )
m_selImage = -1; {
m_images[i] = NO_IMAGE;
}
m_data = NULL; m_data = NULL;
m_x = m_y = m_x = m_y =
m_height = m_width = 0; m_height = m_width = 0;
@@ -367,11 +383,12 @@ wxGenericTreeItem *wxGenericTreeItem::HitTest( const wxPoint& point,
{ {
if ((point.y > m_y) && (point.y < m_y + theTree->GetLineHeight(this))) if ((point.y > m_y) && (point.y < m_y + theTree->GetLineHeight(this)))
{ {
if (point.y<m_y+theTree->GetLineHeight(this)/2) flags|=wxTREE_HITTEST_ONITEMUPPERPART; if (point.y<m_y+theTree->GetLineHeight(this)/2)
else flags|=wxTREE_HITTEST_ONITEMLOWERPART; flags |= wxTREE_HITTEST_ONITEMUPPERPART;
else
flags |= wxTREE_HITTEST_ONITEMLOWERPART;
// FIXME why +5? // 5 is the size of the plus sign
// Because that is the size of the plus sign, RR
if ((point.x > m_xCross-5) && (point.x < m_xCross+5) && if ((point.x > m_xCross-5) && (point.x < m_xCross+5) &&
(point.y > m_yCross-5) && (point.y < m_yCross+5) && (point.y > m_yCross-5) && (point.y < m_yCross+5) &&
(IsExpanded() || HasPlus())) (IsExpanded() || HasPlus()))
@@ -386,19 +403,21 @@ wxGenericTreeItem *wxGenericTreeItem::HitTest( const wxPoint& point,
int image_h; int image_h;
// assuming every image (normal and selected ) has the same size ! // assuming every image (normal and selected ) has the same size !
if ((m_image!=-1) && theTree->m_imageListNormal) if ( (GetImage() != NO_IMAGE) && theTree->m_imageListNormal )
theTree->m_imageListNormal->GetSize(m_image, image_w, image_h); theTree->m_imageListNormal->GetSize(GetImage(), image_w, image_h);
if ((image_w != -1) && (point.x <= m_x + image_w + 1)) if ((image_w != -1) && (point.x <= m_x + image_w + 1))
flags|=wxTREE_HITTEST_ONITEMICON; flags |= wxTREE_HITTEST_ONITEMICON;
else else
flags|=wxTREE_HITTEST_ONITEMLABEL; flags |= wxTREE_HITTEST_ONITEMLABEL;
return this; return this;
} }
if (point.x < m_x) flags|=wxTREE_HITTEST_ONITEMIDENT; if (point.x < m_x)
if (point.x > m_x+m_width) flags|=wxTREE_HITTEST_ONITEMRIGHT; flags |= wxTREE_HITTEST_ONITEMIDENT;
if (point.x > m_x+m_width)
flags |= wxTREE_HITTEST_ONITEMRIGHT;
return this; return this;
} }
@@ -420,6 +439,39 @@ wxGenericTreeItem *wxGenericTreeItem::HitTest( const wxPoint& point,
return NULL; return NULL;
} }
int wxGenericTreeItem::GetCurrentImage() const
{
int image = NO_IMAGE;
if ( IsExpanded() )
{
if ( IsSelected() )
{
image = GetImage(wxTreeItemIcon_SelectedExpanded);
}
if ( image == NO_IMAGE )
{
// we usually fall back to the normal item, but try just the
// expanded one (and not selected) first in this case
image = GetImage(wxTreeItemIcon_Expanded);
}
}
else // not expanded
{
if ( IsSelected() )
image = GetImage(wxTreeItemIcon_Selected);
}
// may be it doesn't have the specific image we want, try the default one
// instead
if ( image == NO_IMAGE )
{
image = GetImage();
}
return image;
}
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// wxTreeCtrl implementation // wxTreeCtrl implementation
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
@@ -538,18 +590,12 @@ wxString wxTreeCtrl::GetItemText(const wxTreeItemId& item) const
return item.m_pItem->GetText(); return item.m_pItem->GetText();
} }
int wxTreeCtrl::GetItemImage(const wxTreeItemId& item) const int wxTreeCtrl::GetItemImage(const wxTreeItemId& item,
wxTreeItemIcon which) const
{ {
wxCHECK_MSG( item.IsOk(), -1, _T("invalid tree item") ); wxCHECK_MSG( item.IsOk(), -1, _T("invalid tree item") );
return item.m_pItem->GetImage(); return item.m_pItem->GetImage(which);
}
int wxTreeCtrl::GetItemSelectedImage(const wxTreeItemId& item) const
{
wxCHECK_MSG( item.IsOk(), -1, _T("invalid tree item") );
return item.m_pItem->GetSelectedImage();
} }
wxTreeItemData *wxTreeCtrl::GetItemData(const wxTreeItemId& item) const wxTreeItemData *wxTreeCtrl::GetItemData(const wxTreeItemId& item) const
@@ -570,26 +616,18 @@ void wxTreeCtrl::SetItemText(const wxTreeItemId& item, const wxString& text)
RefreshLine(pItem); RefreshLine(pItem);
} }
void wxTreeCtrl::SetItemImage(const wxTreeItemId& item, int image) void wxTreeCtrl::SetItemImage(const wxTreeItemId& item,
int image,
wxTreeItemIcon which)
{ {
wxCHECK_RET( item.IsOk(), _T("invalid tree item") ); wxCHECK_RET( item.IsOk(), _T("invalid tree item") );
wxClientDC dc(this); wxGenericTreeItem *pItem = item.m_pItem;
wxGenericTreeItem *pItem = item.m_pItem; pItem->SetImage(image, which);
pItem->SetImage(image);
CalculateSize(pItem, dc);
RefreshLine(pItem);
}
void wxTreeCtrl::SetItemSelectedImage(const wxTreeItemId& item, int image) wxClientDC dc(this);
{ CalculateSize(pItem, dc);
wxCHECK_RET( item.IsOk(), _T("invalid tree item") ); RefreshLine(pItem);
wxClientDC dc(this);
wxGenericTreeItem *pItem = item.m_pItem;
pItem->SetSelectedImage(image);
CalculateSize(pItem, dc);
RefreshLine(pItem);
} }
void wxTreeCtrl::SetItemData(const wxTreeItemId& item, wxTreeItemData *data) void wxTreeCtrl::SetItemData(const wxTreeItemId& item, wxTreeItemData *data)
@@ -650,7 +688,7 @@ bool wxTreeCtrl::IsSelected(const wxTreeItemId& item) const
{ {
wxCHECK_MSG( item.IsOk(), FALSE, _T("invalid tree item") ); wxCHECK_MSG( item.IsOk(), FALSE, _T("invalid tree item") );
return item.m_pItem->HasHilight(); return item.m_pItem->IsSelected();
} }
bool wxTreeCtrl::IsBold(const wxTreeItemId& item) const bool wxTreeCtrl::IsBold(const wxTreeItemId& item) const
@@ -1066,19 +1104,20 @@ void wxTreeCtrl::SelectItemRange(wxGenericTreeItem *item1, wxGenericTreeItem *it
// choice first' and 'last' between item1 and item2 // choice first' and 'last' between item1 and item2
if (item1->GetY()<item2->GetY()) if (item1->GetY()<item2->GetY())
{ {
first=item1; first=item1;
last=item2; last=item2;
} }
else else
{ {
first=item2; first=item2;
last=item1; last=item1;
} }
bool select=m_current->HasHilight(); bool select = m_current->IsSelected();
if (TagAllChildrenUntilLast(first,last,select)) return; if ( TagAllChildrenUntilLast(first,last,select) )
return;
TagNextChildren(first,last,select); TagNextChildren(first,last,select);
} }
@@ -1097,18 +1136,19 @@ void wxTreeCtrl::SelectItem(const wxTreeItemId& itemId,
// to keep going anyhow !!! // to keep going anyhow !!!
if (is_single) if (is_single)
{ {
if (item->HasHilight()) return; // nothing to do if (item->IsSelected())
unselect_others=TRUE; return; // nothing to do
extended_select=FALSE; unselect_others = TRUE;
} extended_select = FALSE;
else // check if selection will really change }
if (unselect_others && item->HasHilight()) else if ( unselect_others && item->IsSelected() )
{ {
// selection change if there is more than one item currently selected // selection change if there is more than one item currently selected
wxArrayTreeItemIds selected_items; wxArrayTreeItemIds selected_items;
if (GetSelections(selected_items)==1) return; if ( GetSelections(selected_items) == 1 )
} return;
}
wxTreeEvent event( wxEVT_COMMAND_TREE_SEL_CHANGING, GetId() ); wxTreeEvent event( wxEVT_COMMAND_TREE_SEL_CHANGING, GetId() );
event.m_item = item; event.m_item = item;
@@ -1139,7 +1179,7 @@ void wxTreeCtrl::SelectItem(const wxTreeItemId& itemId,
// Check if we need to toggle hilight (ctrl mode) // Check if we need to toggle hilight (ctrl mode)
if (!unselect_others) if (!unselect_others)
select=!item->HasHilight(); select=!item->IsSelected();
m_current = m_key_current = item; m_current = m_key_current = item;
m_current->SetHilight(select); m_current->SetHilight(select);
@@ -1153,7 +1193,7 @@ void wxTreeCtrl::SelectItem(const wxTreeItemId& itemId,
void wxTreeCtrl::FillArray(wxGenericTreeItem *item, void wxTreeCtrl::FillArray(wxGenericTreeItem *item,
wxArrayTreeItemIds &array) const wxArrayTreeItemIds &array) const
{ {
if ( item->HasHilight() ) if ( item->IsSelected() )
array.Add(wxTreeItemId(item)); array.Add(wxTreeItemId(item));
if ( item->HasChildren() ) if ( item->HasChildren() )
@@ -1183,7 +1223,7 @@ void wxTreeCtrl::EnsureVisible(const wxTreeItemId& item)
wxGenericTreeItem *parent = gitem->GetParent(); wxGenericTreeItem *parent = gitem->GetParent();
while ( parent ) while ( parent )
{ {
Expand(parent); Expand(parent);
parent = parent->GetParent(); parent = parent->GetParent();
} }
@@ -1205,7 +1245,7 @@ void wxTreeCtrl::ScrollTo(const wxTreeItemId &item)
// now scroll to the item // now scroll to the item
int item_y = gitem->GetY(); int item_y = gitem->GetY();
int start_x = 0; int start_x = 0;
int start_y = 0; int start_y = 0;
ViewStart( &start_x, &start_y ); ViewStart( &start_x, &start_y );
@@ -1381,14 +1421,10 @@ void wxTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
int image_h = 0; int image_h = 0;
int image_w = 0; int image_w = 0;
if ((item->IsExpanded()) && (item->GetSelectedImage() != -1)) int image = item->GetCurrentImage();
if ( image != NO_IMAGE )
{ {
m_imageListNormal->GetSize( item->GetSelectedImage(), image_w, image_h ); m_imageListNormal->GetSize( image, image_w, image_h );
image_w += 4;
}
else if (item->GetImage() != -1)
{
m_imageListNormal->GetSize( item->GetImage(), image_w, image_h );
image_w += 4; image_w += 4;
} }
@@ -1396,19 +1432,10 @@ void wxTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
dc.DrawRectangle( item->GetX()-2, item->GetY(), item->GetWidth()+2, total_h ); dc.DrawRectangle( item->GetX()-2, item->GetY(), item->GetWidth()+2, total_h );
if ((item->IsExpanded()) && (item->GetSelectedImage() != -1)) if ( image != NO_IMAGE )
{ {
dc.SetClippingRegion( item->GetX(), item->GetY(), image_w-2, total_h ); dc.SetClippingRegion( item->GetX(), item->GetY(), image_w-2, total_h );
m_imageListNormal->Draw( item->GetSelectedImage(), dc, m_imageListNormal->Draw( image, dc,
item->GetX(),
item->GetY() +((total_h > image_h)?((total_h-image_h)/2):0),
wxIMAGELIST_DRAW_TRANSPARENT );
dc.DestroyClippingRegion();
}
else if (item->GetImage() != -1)
{
dc.SetClippingRegion( item->GetX(), item->GetY(), image_w-2, total_h );
m_imageListNormal->Draw( item->GetImage(), dc,
item->GetX(), item->GetX(),
item->GetY() +((total_h > image_h)?((total_h-image_h)/2):0), item->GetY() +((total_h > image_h)?((total_h-image_h)/2):0),
wxIMAGELIST_DRAW_TRANSPARENT ); wxIMAGELIST_DRAW_TRANSPARENT );
@@ -1467,7 +1494,7 @@ void wxTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level, int &
dc.SetPen( m_dottedPen ); dc.SetPen( m_dottedPen );
} }
if (item->HasHilight()) if (item->IsSelected())
{ {
dc.SetTextForeground( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_HIGHLIGHTTEXT ) ); dc.SetTextForeground( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_HIGHLIGHTTEXT ) );
@@ -1818,7 +1845,7 @@ void wxTreeCtrl::Edit( const wxTreeItemId& item )
GetEventHandler()->ProcessEvent( te ); GetEventHandler()->ProcessEvent( te );
if (!te.IsAllowed()) return; if (!te.IsAllowed()) return;
// We have to call this here because the label in // We have to call this here because the label in
// question might just have been added and no screen // question might just have been added and no screen
// update taken place. // update taken place.
@@ -1832,14 +1859,11 @@ void wxTreeCtrl::Edit( const wxTreeItemId& item )
int image_h = 0; int image_h = 0;
int image_w = 0; int image_w = 0;
if ((m_currentEdit->IsExpanded()) && (m_currentEdit->GetSelectedImage() != -1))
int image = m_currentEdit->GetCurrentImage();
if ( image != NO_IMAGE )
{ {
m_imageListNormal->GetSize( m_currentEdit->GetSelectedImage(), image_w, image_h ); m_imageListNormal->GetSize( image, image_w, image_h );
image_w += 4;
}
else if (m_currentEdit->GetImage() != -1)
{
m_imageListNormal->GetSize( m_currentEdit->GetImage(), image_w, image_h );
image_w += 4; image_w += 4;
} }
x += image_w; x += image_w;
@@ -1891,20 +1915,20 @@ void wxTreeCtrl::OnMouse( wxMouseEvent &event )
if (event.Dragging()) if (event.Dragging())
{ {
if (m_dragCount == 0) if (m_dragCount == 0)
m_dragStart = wxPoint(x,y); m_dragStart = wxPoint(x,y);
m_dragCount++; m_dragCount++;
if (m_dragCount != 3) return; if (m_dragCount != 3) return;
int command = wxEVT_COMMAND_TREE_BEGIN_DRAG; int command = wxEVT_COMMAND_TREE_BEGIN_DRAG;
if (event.RightIsDown()) command = wxEVT_COMMAND_TREE_BEGIN_RDRAG; if (event.RightIsDown()) command = wxEVT_COMMAND_TREE_BEGIN_RDRAG;
wxTreeEvent nevent( command, GetId() ); wxTreeEvent nevent( command, GetId() );
nevent.m_item = m_current; nevent.m_item = m_current;
nevent.SetEventObject(this); nevent.SetEventObject(this);
GetEventHandler()->ProcessEvent(nevent); GetEventHandler()->ProcessEvent(nevent);
return; return;
} }
else else
{ {
@@ -1994,14 +2018,10 @@ void wxTreeCtrl::CalculateSize( wxGenericTreeItem *item, wxDC &dc )
int image_h = 0; int image_h = 0;
int image_w = 0; int image_w = 0;
if ((item->IsExpanded()) && (item->GetSelectedImage() != -1)) int image = item->GetCurrentImage();
if ( image != NO_IMAGE )
{ {
m_imageListNormal->GetSize( item->GetSelectedImage(), image_w, image_h ); m_imageListNormal->GetSize( image, image_w, image_h );
image_w += 4;
}
else if (item->GetImage() != -1)
{
m_imageListNormal->GetSize( item->GetImage(), image_w, image_h );
image_w += 4; image_w += 4;
} }
@@ -2055,7 +2075,7 @@ void wxTreeCtrl::CalculatePositions()
//if(GetImageList() == NULL) //if(GetImageList() == NULL)
// m_lineHeight = (int)(dc.GetCharHeight() + 4); // m_lineHeight = (int)(dc.GetCharHeight() + 4);
int y = 2; int y = 2;
CalculateLevel( m_anchor, dc, 0, y ); // start recursion CalculateLevel( m_anchor, dc, 0, y ); // start recursion
} }