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,24 +616,16 @@ 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); pItem->SetImage(image, which);
CalculateSize(pItem, dc);
RefreshLine(pItem);
}
void wxTreeCtrl::SetItemSelectedImage(const wxTreeItemId& item, int image)
{
wxCHECK_RET( item.IsOk(), _T("invalid tree item") );
wxClientDC dc(this); wxClientDC dc(this);
wxGenericTreeItem *pItem = item.m_pItem;
pItem->SetSelectedImage(image);
CalculateSize(pItem, dc); CalculateSize(pItem, dc);
RefreshLine(pItem); RefreshLine(pItem);
} }
@@ -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
@@ -1076,9 +1114,10 @@ void wxTreeCtrl::SelectItemRange(wxGenericTreeItem *item1, wxGenericTreeItem *it
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);
} }
@@ -1098,16 +1137,17 @@ 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 else if ( unselect_others && item->IsSelected() )
if (unselect_others && item->HasHilight())
{ {
// 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() );
@@ -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() )
@@ -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 ) );
@@ -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;
@@ -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;
} }