Patch level : 10.0
Files correlati : Ricompilazione Demo : [ ] Commento : Riportato wxTreeListCtrl Dalla 11.0 git-svn-id: svn://10.65.10.50/branches/R_10_00@21912 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									2ebb52552c
								
							
						
					
					
						commit
						377c121076
					
				@ -4,7 +4,7 @@
 | 
				
			|||||||
// Author:      Robert Roebling
 | 
					// Author:      Robert Roebling
 | 
				
			||||||
// Maintainer:  $Author: guy $
 | 
					// Maintainer:  $Author: guy $
 | 
				
			||||||
// Created:     01/02/97
 | 
					// Created:     01/02/97
 | 
				
			||||||
// RCS-ID:      $Id: treelistctrl.cpp,v 1.1 2010-08-11 12:53:55 guy Exp $
 | 
					// RCS-ID:      $Id: treelistctrl.cpp,v 1.1.2.1 2011-04-06 14:09:31 guy Exp $
 | 
				
			||||||
// Copyright:   (c) 2004-2008 Robert Roebling, Julian Smart, Alberto Griggio,
 | 
					// Copyright:   (c) 2004-2008 Robert Roebling, Julian Smart, Alberto Griggio,
 | 
				
			||||||
//              Vadim Zeitlin, Otto Wyss, Ronan Chartois
 | 
					//              Vadim Zeitlin, Otto Wyss, Ronan Chartois
 | 
				
			||||||
// Licence:     wxWindows
 | 
					// Licence:     wxWindows
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@
 | 
				
			|||||||
// Author:      Robert Roebling
 | 
					// Author:      Robert Roebling
 | 
				
			||||||
// Maintainer:  Otto Wyss
 | 
					// Maintainer:  Otto Wyss
 | 
				
			||||||
// Created:     01/02/97
 | 
					// Created:     01/02/97
 | 
				
			||||||
// RCS-ID:      $Id: treelistctrl.h,v 1.1 2010-08-11 12:53:55 guy Exp $
 | 
					// RCS-ID:      $Id: treelistctrl.h,v 1.1.2.1 2011-04-06 14:09:31 guy Exp $
 | 
				
			||||||
// Copyright:   (c) 2004 Robert Roebling, Julian Smart, Alberto Griggio,
 | 
					// Copyright:   (c) 2004 Robert Roebling, Julian Smart, Alberto Griggio,
 | 
				
			||||||
//              Vadim Zeitlin, Otto Wyss
 | 
					//              Vadim Zeitlin, Otto Wyss
 | 
				
			||||||
// Licence:     wxWindows
 | 
					// Licence:     wxWindows
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										28
									
								
								xvaga/xvt.h
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								xvaga/xvt.h
									
									
									
									
									
								
							@ -408,7 +408,7 @@ XVTDLL int      xvt_sys_get_profile_string(const char* file, const char* paragra
 | 
				
			|||||||
                                           const char* defval,  char* value, int maxsize);
 | 
					                                           const char* defval,  char* value, int maxsize);
 | 
				
			||||||
XVTDLL long     xvt_sys_get_profile_int(const char* file, const char* paragraph, const char* name, long defval);
 | 
					XVTDLL long     xvt_sys_get_profile_int(const char* file, const char* paragraph, const char* name, long defval);
 | 
				
			||||||
XVTDLL BOOLEAN  xvt_sys_set_profile_string(const char* file, const char* paragraph, const char* name, const char* value);
 | 
					XVTDLL BOOLEAN  xvt_sys_set_profile_string(const char* file, const char* paragraph, const char* name, const char* value);
 | 
				
			||||||
XVTDLL int           xvt_sys_get_session_id();                                   
 | 
					XVTDLL int           xvt_sys_get_session_id();
 | 
				
			||||||
XVTDLL unsigned long xvt_sys_get_free_memory();
 | 
					XVTDLL unsigned long xvt_sys_get_free_memory();
 | 
				
			||||||
XVTDLL unsigned long xvt_sys_get_free_memory_kb();
 | 
					XVTDLL unsigned long xvt_sys_get_free_memory_kb();
 | 
				
			||||||
XVTDLL int           xvt_sys_get_os_version();
 | 
					XVTDLL int           xvt_sys_get_os_version();
 | 
				
			||||||
@ -500,6 +500,32 @@ XVTDLL BOOLEAN           xvt_prop_set_data(WINDOW win, XVT_TREEVIEW_NODE node, c
 | 
				
			|||||||
XVTDLL BOOLEAN           xvt_prop_set_read_only(WINDOW win, XVT_TREEVIEW_NODE node, BOOLEAN ro);
 | 
					XVTDLL BOOLEAN           xvt_prop_set_read_only(WINDOW win, XVT_TREEVIEW_NODE node, BOOLEAN ro);
 | 
				
			||||||
XVTDLL BOOLEAN           xvt_prop_suspend(WINDOW win);
 | 
					XVTDLL BOOLEAN           xvt_prop_suspend(WINDOW win);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					XVTDLL XVT_TREEVIEW_NODE xvt_treelist_add_child_node(WINDOW win, 
 | 
				
			||||||
 | 
					  XVT_TREEVIEW_NODE parent, XVT_TREEVIEW_NODE_TYPE type,
 | 
				
			||||||
 | 
					  XVT_IMAGE item_image, XVT_IMAGE collapsed_image, XVT_IMAGE expanded_image, 
 | 
				
			||||||
 | 
					  const char* string, XVT_TREEVIEW_CALLBACK callback, const char* data);
 | 
				
			||||||
 | 
					XVTDLL WINDOW xvt_treelist_create(WINDOW parent_win,
 | 
				
			||||||
 | 
					  RCT * rct_p, char * title, long ctl_flags, long app_data, int ctl_id, 
 | 
				
			||||||
 | 
					  XVT_IMAGE item_image, XVT_IMAGE collapsed_image, XVT_IMAGE expanded_image,
 | 
				
			||||||
 | 
					  long attrs, int line_height);
 | 
				
			||||||
 | 
					XVTDLL void              xvt_treelist_destroy_node(WINDOW win, XVT_TREEVIEW_NODE node);
 | 
				
			||||||
 | 
					XVTDLL BOOLEAN           xvt_treelist_enable_node(WINDOW win, XVT_TREEVIEW_NODE node, BOOLEAN on);
 | 
				
			||||||
 | 
					XVTDLL BOOLEAN           xvt_treelist_expand_node(WINDOW win, XVT_TREEVIEW_NODE node, BOOLEAN recurse);
 | 
				
			||||||
 | 
					XVTDLL XVT_TREEVIEW_NODE xvt_treelist_find_node_string(WINDOW win, const char* text);
 | 
				
			||||||
 | 
					XVTDLL XVT_TREEVIEW_NODE xvt_treelist_get_child_node(WINDOW win, XVT_TREEVIEW_NODE parent_node, int position);
 | 
				
			||||||
 | 
					XVTDLL const char*       xvt_treelist_get_node_data(WINDOW win, XVT_TREEVIEW_NODE node);
 | 
				
			||||||
 | 
					XVTDLL XVT_TREEVIEW_NODE xvt_treelist_get_root_node(WINDOW win);
 | 
				
			||||||
 | 
					XVTDLL XVT_TREEVIEW_NODE xvt_treelist_get_selected_node(WINDOW win);
 | 
				
			||||||
 | 
					XVTDLL BOOLEAN           xvt_treelist_remove_child_node(WINDOW win, XVT_TREEVIEW_NODE node);
 | 
				
			||||||
 | 
					XVTDLL BOOLEAN           xvt_treelist_remove_node_children(WINDOW win, XVT_TREEVIEW_NODE node);
 | 
				
			||||||
 | 
					XVTDLL void              xvt_treelist_resume(WINDOW win);
 | 
				
			||||||
 | 
					XVTDLL void              xvt_treelist_select_node(WINDOW win, XVT_TREEVIEW_NODE node, BOOLEAN sel);
 | 
				
			||||||
 | 
					XVTDLL void              xvt_treelist_set_node_bold(WINDOW win, XVT_TREEVIEW_NODE node, BOOLEAN bold);
 | 
				
			||||||
 | 
					XVTDLL void              xvt_treelist_set_node_images(WINDOW win, XVT_TREEVIEW_NODE node, 
 | 
				
			||||||
 | 
					                             XVT_IMAGE item_image, XVT_IMAGE collapsed_image, XVT_IMAGE expanded_image);
 | 
				
			||||||
 | 
					XVTDLL void              xvt_treelist_set_node_string(WINDOW win, XVT_TREEVIEW_NODE node, const char* text);
 | 
				
			||||||
 | 
					XVTDLL void              xvt_treelist_suspend(WINDOW win);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
XVTDLL BOOLEAN  xvt_mail_send(const char* to, const char* cc, const char* ccn,
 | 
					XVTDLL BOOLEAN  xvt_mail_send(const char* to, const char* cc, const char* ccn,
 | 
				
			||||||
                              const char* subject, const char* msg, const char* attach, short flags); // 0x1=UI; 0x2=Receipt
 | 
					                              const char* subject, const char* msg, const char* attach, short flags); // 0x1=UI; 0x2=Receipt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -237,6 +237,7 @@ WC_VSLIDER,     /* vertical slider control */
 | 
				
			|||||||
WC_POPUP,       /* list of listedit control or popup menu */
 | 
					WC_POPUP,       /* list of listedit control or popup menu */
 | 
				
			||||||
WC_PROPGRID,    /* property grid */
 | 
					WC_PROPGRID,    /* property grid */
 | 
				
			||||||
WC_MVC,         /* model view controller */
 | 
					WC_MVC,         /* model view controller */
 | 
				
			||||||
 | 
					WC_TREELIST,    /* tree list */
 | 
				
			||||||
} WIN_TYPE;
 | 
					} WIN_TYPE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef enum {
 | 
					typedef enum {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										524
									
								
								xvaga/xvtctl.cpp
									
									
									
									
									
								
							
							
						
						
									
										524
									
								
								xvaga/xvtctl.cpp
									
									
									
									
									
								
							@ -3,9 +3,11 @@
 | 
				
			|||||||
#include "xvtart.h"
 | 
					#include "xvtart.h"
 | 
				
			||||||
#include "xvtwin.h"
 | 
					#include "xvtwin.h"
 | 
				
			||||||
#include "statbar.h"
 | 
					#include "statbar.h"
 | 
				
			||||||
 | 
					#include "treelistctrl.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <wx/artprov.h>
 | 
					#include <wx/artprov.h>
 | 
				
			||||||
#include <wx/filename.h>
 | 
					#include <wx/filename.h>
 | 
				
			||||||
 | 
					#include <wx/tokenzr.h>
 | 
				
			||||||
#include <wx/treectrl.h>
 | 
					#include <wx/treectrl.h>
 | 
				
			||||||
#include <wx/vlbox.h>
 | 
					#include <wx/vlbox.h>
 | 
				
			||||||
#include <wx/aui/aui.h>
 | 
					#include <wx/aui/aui.h>
 | 
				
			||||||
@ -124,9 +126,10 @@ public:
 | 
				
			|||||||
  ~TwxNoteBook();
 | 
					  ~TwxNoteBook();
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WX_DECLARE_VOIDPTR_HASH_MAP(int, XVT_IMAGE_Map);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TwxTreeCtrl : public wxTreeCtrl
 | 
					class TwxTreeCtrl : public wxTreeCtrl
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  WX_DECLARE_VOIDPTR_HASH_MAP(int, XVT_IMAGE_Map);
 | 
					 | 
				
			||||||
	XVT_IMAGE_Map m_img;
 | 
						XVT_IMAGE_Map m_img;
 | 
				
			||||||
  wxColour m_clrSelFore, m_clrSelBack, m_clrDisFore;
 | 
					  wxColour m_clrSelFore, m_clrSelBack, m_clrDisFore;
 | 
				
			||||||
  int m_nFrozen;
 | 
					  int m_nFrozen;
 | 
				
			||||||
@ -156,6 +159,32 @@ public:
 | 
				
			|||||||
  TwxTreeCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size);
 | 
					  TwxTreeCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TwxTreeListCtrl : public wxTreeListCtrl
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						XVT_IMAGE_Map m_img;
 | 
				
			||||||
 | 
					  wxColour m_clrSelFore, m_clrSelBack, m_clrDisFore;
 | 
				
			||||||
 | 
					  int m_nFrozen;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					  int img2int(XVT_IMAGE img); // Store img into internal image list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					  DECLARE_EVENT_TABLE();
 | 
				
			||||||
 | 
					  void OnExpanding(wxTreeEvent& e);  // Called when node is about to be expanded
 | 
				
			||||||
 | 
					  void OnExpanded(wxTreeEvent& e);   // Called when node has been expanded
 | 
				
			||||||
 | 
					  void OnCollapsed(wxTreeEvent& e);  // Called when node has been collapsed
 | 
				
			||||||
 | 
					  void OnSelChanged(wxTreeEvent& e); // Called when node has been selected
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					  void SetNodeImages(const wxTreeItemId& id, XVT_IMAGE item_image, 
 | 
				
			||||||
 | 
					                     XVT_IMAGE collapsed_image, XVT_IMAGE expanded_image);
 | 
				
			||||||
 | 
					  void SetColors(const XVT_COLOR_COMPONENT* colors);
 | 
				
			||||||
 | 
					  void Suspend();
 | 
				
			||||||
 | 
					  void Resume();
 | 
				
			||||||
 | 
					  void Enable(const wxTreeItemId& id, bool on);
 | 
				
			||||||
 | 
					  TwxTreeListCtrl(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct TwxOutlookItem
 | 
					struct TwxOutlookItem
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  wxString m_strText;
 | 
					  wxString m_strText;
 | 
				
			||||||
@ -2635,3 +2664,496 @@ BOOLEAN xvt_prop_set_read_only(WINDOW win, XVT_TREEVIEW_NODE node, BOOLEAN ro)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  return pg != NULL;
 | 
					  return pg != NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// TwxTreeListCtrl
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BEGIN_EVENT_TABLE(TwxTreeListCtrl, wxTreeListCtrl)
 | 
				
			||||||
 | 
					  EVT_TREE_ITEM_EXPANDING(wxID_ANY, TwxTreeListCtrl::OnExpanding)
 | 
				
			||||||
 | 
					  EVT_TREE_ITEM_EXPANDED (wxID_ANY, TwxTreeListCtrl::OnExpanded)
 | 
				
			||||||
 | 
					  EVT_TREE_ITEM_COLLAPSED(wxID_ANY, TwxTreeListCtrl::OnCollapsed)
 | 
				
			||||||
 | 
					  EVT_TREE_SEL_CHANGED   (wxID_ANY, TwxTreeListCtrl::OnSelChanged)
 | 
				
			||||||
 | 
					END_EVENT_TABLE();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int TwxTreeListCtrl::img2int(XVT_IMAGE xvt_img)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int i = -1;
 | 
				
			||||||
 | 
					  if (xvt_img != NULL)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    i = m_img[xvt_img] - 1;       // Ho memorizzato indice+1
 | 
				
			||||||
 | 
					    if (i < 0)                    // Immagine sconosciuta
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const wxImage& img = *(wxImage*)xvt_img;
 | 
				
			||||||
 | 
					      wxImageList* il = GetImageList();
 | 
				
			||||||
 | 
					      if (il == NULL)             // Lista non ancora creata
 | 
				
			||||||
 | 
					      { 
 | 
				
			||||||
 | 
					        il = new wxImageList;
 | 
				
			||||||
 | 
					        il->Create(img.GetWidth(), img.GetHeight(), true, 3);
 | 
				
			||||||
 | 
					        AssignImageList(il);      // DON'T CALL SetImageList!
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        int old_w, old_h; il->GetSize(0, old_w, old_h); 
 | 
				
			||||||
 | 
					        const int new_w = img.GetWidth(), new_h = img.GetHeight();
 | 
				
			||||||
 | 
					        if (new_w > old_w)  // L'immagine nuova e' troppo grande?
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          const int old_ratio = old_w * 100 / old_h;
 | 
				
			||||||
 | 
					          const int new_ratio = new_w * 100 / new_h;
 | 
				
			||||||
 | 
					          const int old_count = il->GetImageCount();
 | 
				
			||||||
 | 
					          wxImageList* nil = new wxImageList;
 | 
				
			||||||
 | 
					          nil->Create(new_w, new_h, true, 3*old_count/2);
 | 
				
			||||||
 | 
					          for (int k = 0; k < old_count; k++)
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            wxImage old = il->GetBitmap(k).ConvertToImage();
 | 
				
			||||||
 | 
					            if (old_ratio == new_ratio)
 | 
				
			||||||
 | 
					              old.Rescale(new_w, new_h, wxIMAGE_QUALITY_HIGH);
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					              old.Resize(wxSize(new_w, new_h), wxPoint((new_w-old_w)/2, (new_h-old_h)/2));
 | 
				
			||||||
 | 
					            nil->Add(old);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          AssignImageList(il = nil);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (!img.HasMask())
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        wxImage& trans = (wxImage&)img;
 | 
				
			||||||
 | 
					        const int r = img.GetRed(0,0);
 | 
				
			||||||
 | 
					        const int g = img.GetGreen(0,0);
 | 
				
			||||||
 | 
					        const int b = img.GetBlue(0,0);
 | 
				
			||||||
 | 
					        trans.SetMask();
 | 
				
			||||||
 | 
					        trans.SetMaskColour(r, g, b);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      const wxBitmap bmp(img);
 | 
				
			||||||
 | 
					      i = il->Add(bmp);
 | 
				
			||||||
 | 
					      m_img[xvt_img] = i+1;       // Memorizzo indice+1
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (i < 0)
 | 
				
			||||||
 | 
					      SORRY_BOX();   
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return i;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TwxTreeListCtrl::OnExpanding(wxTreeEvent& evt)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const wxTreeItemId id = evt.GetItem();
 | 
				
			||||||
 | 
					  XVT_EVENT e(E_CONTROL);
 | 
				
			||||||
 | 
					  e.v.ctl.id = evt.GetId();
 | 
				
			||||||
 | 
					  e.v.ctl.ci.type = WC_TREELIST;
 | 
				
			||||||
 | 
					  e.v.ctl.ci.win = WINDOW(this);
 | 
				
			||||||
 | 
					  e.v.ctl.ci.v.treeview.node = id.m_pItem;
 | 
				
			||||||
 | 
					  e.v.ctl.ci.v.treeview.expanded  = TRUE;   
 | 
				
			||||||
 | 
					  if (GetChildrenCount(id) == 0) // Trucco perfido ...
 | 
				
			||||||
 | 
					    e.v.ctl.ci.v.treeview.collapsed = TRUE; // ... stato indeterminato = EXPANDING
 | 
				
			||||||
 | 
					  TwxWindow* win = wxStaticCast(GetParent(), TwxWindow);
 | 
				
			||||||
 | 
					  win->DoXvtEvent(e);
 | 
				
			||||||
 | 
					  if (GetChildrenCount(id) == 0) // Allora e' proprio vero ...
 | 
				
			||||||
 | 
					    SetItemHasChildren(id, false);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TwxTreeListCtrl::OnExpanded(wxTreeEvent& WXUNUSED(evt))
 | 
				
			||||||
 | 
					{ Refresh(false); } // Non dovrebbe servire ma ...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TwxTreeListCtrl::OnCollapsed(wxTreeEvent& WXUNUSED(evt))
 | 
				
			||||||
 | 
					{ Refresh(false); } // Non dovrebbe servire ma ...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TwxTreeListCtrl::OnSelChanged(wxTreeEvent& evt)
 | 
				
			||||||
 | 
					{ 
 | 
				
			||||||
 | 
					  if (!m_nFrozen)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    Suspend();
 | 
				
			||||||
 | 
					    XVT_EVENT e(E_CONTROL);
 | 
				
			||||||
 | 
					    e.v.ctl.id = evt.GetId();
 | 
				
			||||||
 | 
					    e.v.ctl.ci.type = WC_TREELIST;
 | 
				
			||||||
 | 
					    e.v.ctl.ci.win = WINDOW(this);
 | 
				
			||||||
 | 
					    e.v.ctl.ci.v.treeview.node = evt.GetItem().m_pItem;
 | 
				
			||||||
 | 
					    e.v.ctl.ci.v.treeview.sgl_click = TRUE;
 | 
				
			||||||
 | 
					    TwxWindow* win = wxStaticCast(GetParent(), TwxWindow);
 | 
				
			||||||
 | 
					    win->DoXvtEvent(e);
 | 
				
			||||||
 | 
					    Resume();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  Refresh(false); // Non dovrebbe servire ma ...
 | 
				
			||||||
 | 
					} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TwxTreeListCtrl::Enable(const wxTreeItemId& id, bool on)
 | 
				
			||||||
 | 
					{ SetItemTextColour(id, on ? m_clrSelFore : m_clrDisFore); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TwxTreeListCtrl::Suspend()
 | 
				
			||||||
 | 
					{ m_nFrozen++; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TwxTreeListCtrl::Resume()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  wxASSERT(m_nFrozen > 0);
 | 
				
			||||||
 | 
					  if (m_nFrozen > 0)
 | 
				
			||||||
 | 
					    m_nFrozen--;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TwxTreeListCtrl::SetColors(const XVT_COLOR_COMPONENT* colors)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  for (int i = 0; colors[i].type; i++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    CAST_COLOR(colors[i].color, rgb);
 | 
				
			||||||
 | 
					    switch(colors[i].type)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    case XVT_COLOR_BACKGROUND: SetOwnBackgroundColour(rgb); break;
 | 
				
			||||||
 | 
					    case XVT_COLOR_FOREGROUND: SetOwnForegroundColour(rgb); break;
 | 
				
			||||||
 | 
					    case XVT_COLOR_HIGHLIGHT : m_clrSelBack = rgb; break;
 | 
				
			||||||
 | 
					    case XVT_COLOR_SELECT    : m_clrSelFore = rgb; break;
 | 
				
			||||||
 | 
					    case XVT_COLOR_TROUGH    : m_clrDisFore = rgb; break;
 | 
				
			||||||
 | 
					    default                  : break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TwxTreeListCtrl::SetNodeImages(const wxTreeItemId& id, XVT_IMAGE item_image, 
 | 
				
			||||||
 | 
					                                    XVT_IMAGE collapsed_image, XVT_IMAGE expanded_image)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const int ii = img2int(item_image);
 | 
				
			||||||
 | 
					  if (ii >= 0)
 | 
				
			||||||
 | 
					    SetItemImage(id, ii);
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    const int ic = img2int(collapsed_image);
 | 
				
			||||||
 | 
					    if (ic >= 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      SetItemImage(id, ic);
 | 
				
			||||||
 | 
					      const int ie = img2int(expanded_image);
 | 
				
			||||||
 | 
					      if (ie >= 0)
 | 
				
			||||||
 | 
					        SetItemImage(id, ie, wxTreeItemIcon_Selected);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TwxTreeListCtrl::TwxTreeListCtrl(wxWindow *parent, wxWindowID id, 
 | 
				
			||||||
 | 
					                         const wxPoint& pos, const wxSize& size)
 | 
				
			||||||
 | 
					               : wxTreeListCtrl(parent, id, pos, size, 
 | 
				
			||||||
 | 
					                 wxTR_HAS_BUTTONS|wxTR_HIDE_ROOT|wxTR_ROW_LINES|wxTR_COLUMN_LINES|wxTR_SINGLE), 
 | 
				
			||||||
 | 
					                 m_nFrozen(0)
 | 
				
			||||||
 | 
					{ 
 | 
				
			||||||
 | 
					  AddColumn(wxEmptyString, size.x);
 | 
				
			||||||
 | 
					  AddRoot("Root");
 | 
				
			||||||
 | 
					  SetIndent(GetIndent()/2);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CAST_TREELIST(win, tv) TwxTreeListCtrl& tv = *wxStaticCast((wxObject*)win, TwxTreeListCtrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WINDOW xvt_treelist_create(WINDOW parent_win,
 | 
				
			||||||
 | 
					  RCT * rct_p, char * title, long ctl_flags,
 | 
				
			||||||
 | 
					  long app_data, int ctl_id, XVT_IMAGE WXUNUSED(item_image),
 | 
				
			||||||
 | 
					  XVT_IMAGE WXUNUSED(collapsed_image), XVT_IMAGE WXUNUSED(expanded_image),
 | 
				
			||||||
 | 
					  long WXUNUSED(attrs), int line_height)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  wxASSERT(parent_win != NULL_WIN);
 | 
				
			||||||
 | 
					  // La xvt_ctl_create_def accetta un array di controlli da inizializzare, 
 | 
				
			||||||
 | 
					  // per cui le passero' un elemento valido ed uno nullo che funga da terminatore
 | 
				
			||||||
 | 
					  WIN_DEF win_def[2]; memset(win_def, 0, sizeof(WIN_DEF));
 | 
				
			||||||
 | 
					  win_def->wtype = WC_TREELIST;
 | 
				
			||||||
 | 
					  if (xvt_rect_is_empty(rct_p))
 | 
				
			||||||
 | 
					    xvt_vobj_get_client_rect(parent_win, &win_def->rct);
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    win_def->rct = *rct_p;
 | 
				
			||||||
 | 
					  win_def->text = title;
 | 
				
			||||||
 | 
					  win_def->v.ctl.ctrl_id = ctl_id;
 | 
				
			||||||
 | 
					  win_def->v.ctl.flags = ctl_flags;
 | 
				
			||||||
 | 
					  WINDOW win = xvt_ctl_create_def(win_def, parent_win, app_data);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (win != NULL_WIN && line_height > 12)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    tv.SetLineSpacing(line_height);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return win;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					XVT_TREEVIEW_NODE xvt_treelist_add_child_node(WINDOW win,
 | 
				
			||||||
 | 
					  XVT_TREEVIEW_NODE parent, XVT_TREEVIEW_NODE_TYPE type,
 | 
				
			||||||
 | 
					  XVT_IMAGE item_image, XVT_IMAGE collapsed_image, XVT_IMAGE expanded_image,
 | 
				
			||||||
 | 
					  const char* string, XVT_TREEVIEW_CALLBACK WXUNUSED(callback), const char* data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  XVT_TREEVIEW_NODE node = NULL;
 | 
				
			||||||
 | 
					  if (win != NULL_WIN)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    TwxTreeItemData* pData = new TwxTreeItemData;
 | 
				
			||||||
 | 
					    pData->m_strData = data;
 | 
				
			||||||
 | 
					    wxTreeItemId pa(parent);
 | 
				
			||||||
 | 
					    if (!pa.IsOk())
 | 
				
			||||||
 | 
					      pa = tv.GetRootItem();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    wxStringTokenizer tok(string, "\t", wxTOKEN_RET_EMPTY);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    wxTreeItemId id = tv.AppendItem(pa, tok.GetNextToken(), -1, -1, pData);
 | 
				
			||||||
 | 
					    if (id.IsOk())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const int nColumns = tv.GetColumnCount();
 | 
				
			||||||
 | 
					      for (int c = 1; c < nColumns && tok.HasMoreTokens(); c++)
 | 
				
			||||||
 | 
					        tv.SetItemText(id, c, tok.GetNextToken());
 | 
				
			||||||
 | 
					      tv.SetItemHasChildren(pa, true);
 | 
				
			||||||
 | 
					      tv.SetItemHasChildren(id, type == XVT_TREEVIEW_NODE_NONTERMINAL);
 | 
				
			||||||
 | 
					      tv.SetNodeImages(id, item_image, collapsed_image, expanded_image);
 | 
				
			||||||
 | 
					      tv.SetItemFont(id, tv.GetFont());
 | 
				
			||||||
 | 
					      node = id.m_pItem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return node;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					XVT_TREEVIEW_NODE xvt_treelist_get_child_node(WINDOW win, XVT_TREEVIEW_NODE parent_node, 
 | 
				
			||||||
 | 
					                                              int position)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  XVT_TREEVIEW_NODE child_node = NULL;
 | 
				
			||||||
 | 
					  if (win != NULL_WIN && position >= 0)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    wxTreeItemId parent(parent_node);
 | 
				
			||||||
 | 
					    if (!parent.IsOk())
 | 
				
			||||||
 | 
					      parent = tv.GetRootItem();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (parent.IsOk() && position < (int)tv.GetChildrenCount(parent))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      wxTreeItemIdValue cookie;
 | 
				
			||||||
 | 
					      wxTreeItemId id;
 | 
				
			||||||
 | 
					      int i = -1;
 | 
				
			||||||
 | 
					      for (id = tv.GetFirstChild(parent, cookie), i = -1; 
 | 
				
			||||||
 | 
					           i < position && id.IsOk(); id = tv.GetNextChild(parent, cookie), i++);
 | 
				
			||||||
 | 
					      child_node = id.m_pItem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return child_node;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const char* xvt_treelist_get_node_data(WINDOW win, XVT_TREEVIEW_NODE node)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const char* data = NULL;
 | 
				
			||||||
 | 
					  if (win != NULL_WIN && node != NULL)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    const wxTreeItemId id(node);
 | 
				
			||||||
 | 
					    TwxTreeItemData* pData = (TwxTreeItemData*)tv.GetItemData(id);
 | 
				
			||||||
 | 
					    if (pData != NULL)
 | 
				
			||||||
 | 
					      data = (const char*)pData->m_strData;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return data;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void xvt_treelist_destroy_node(WINDOW win, XVT_TREEVIEW_NODE node)
 | 
				
			||||||
 | 
					{ 
 | 
				
			||||||
 | 
					  if (win != NULL_WIN && node != NULL)
 | 
				
			||||||
 | 
					  {  
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    wxTreeItemId id(node);
 | 
				
			||||||
 | 
					    tv.Delete(id);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BOOLEAN xvt_treelist_enable_node(WINDOW win, XVT_TREEVIEW_NODE node, BOOLEAN on)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  BOOLEAN ok = (win != NULL_WIN) && (node != NULL);
 | 
				
			||||||
 | 
					  if (ok)
 | 
				
			||||||
 | 
					  {  
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    wxTreeItemId id(node);
 | 
				
			||||||
 | 
					    tv.Enable(id, on != FALSE);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return ok;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BOOLEAN xvt_treelist_expand_node(WINDOW win, XVT_TREEVIEW_NODE node, BOOLEAN recurse)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  BOOLEAN ok = (win != NULL_WIN) && (node != NULL);
 | 
				
			||||||
 | 
					  if (ok)
 | 
				
			||||||
 | 
					  {  
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    tv.Suspend();
 | 
				
			||||||
 | 
					    const wxTreeItemId id(node);
 | 
				
			||||||
 | 
					    if (recurse)
 | 
				
			||||||
 | 
					      tv.ExpandAll(id);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      tv.Expand(id);
 | 
				
			||||||
 | 
					    tv.Resume();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return ok;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					XVT_TREEVIEW_NODE xvt_treelist_get_root_node(WINDOW win)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  XVT_TREEVIEW_NODE pRoot = NULL;
 | 
				
			||||||
 | 
					  if (win != NULL_WIN)
 | 
				
			||||||
 | 
					  {  
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    const wxTreeItemId id = tv.GetRootItem();
 | 
				
			||||||
 | 
					    pRoot = id.m_pItem;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return pRoot;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					XVT_TREEVIEW_NODE xvt_treelist_get_selected_node(WINDOW win)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					  const wxTreeItemId id = tv.GetSelection();
 | 
				
			||||||
 | 
					  return id.m_pItem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BOOLEAN xvt_treelist_remove_child_node(WINDOW win, XVT_TREEVIEW_NODE node)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  BOOLEAN ok = (win != NULL_WIN) && (node != NULL);
 | 
				
			||||||
 | 
					  if (ok)
 | 
				
			||||||
 | 
					  {  
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    const wxTreeItemId id(node);
 | 
				
			||||||
 | 
					    if (id == tv.GetRootItem())
 | 
				
			||||||
 | 
					      tv.DeleteChildren(id);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      tv.Suspend();
 | 
				
			||||||
 | 
					      tv.Delete(id);
 | 
				
			||||||
 | 
					      tv.Resume();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return ok;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BOOLEAN xvt_treelist_remove_node_children(WINDOW win, XVT_TREEVIEW_NODE node)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  BOOLEAN ok = FALSE;
 | 
				
			||||||
 | 
					  if (win != NULL_WIN)
 | 
				
			||||||
 | 
					  {  
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    tv.Suspend();
 | 
				
			||||||
 | 
					    wxTreeItemId id(node);
 | 
				
			||||||
 | 
					    if (!id.IsOk()) 
 | 
				
			||||||
 | 
					      id = tv.GetRootItem();
 | 
				
			||||||
 | 
					    tv.DeleteChildren(id);
 | 
				
			||||||
 | 
					    tv.Resume();
 | 
				
			||||||
 | 
					    ok = TRUE;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return ok;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void xvt_treelist_resume(WINDOW win)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					  tv.Resume();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void xvt_treelist_select_node(WINDOW win, XVT_TREEVIEW_NODE node, BOOLEAN sel)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (win != NULL_WIN && node != NULL)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    const wxTreeItemId id(node);
 | 
				
			||||||
 | 
					    if (sel)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      tv.Suspend();
 | 
				
			||||||
 | 
					      tv.SelectItem(id, id, true);
 | 
				
			||||||
 | 
					      tv.EnsureVisible(id);
 | 
				
			||||||
 | 
					      tv.Resume();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      tv.UnselectAll();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void xvt_treelist_set_node_images(WINDOW win, XVT_TREEVIEW_NODE node, XVT_IMAGE item_image, 
 | 
				
			||||||
 | 
					                                  XVT_IMAGE collapsed_image, XVT_IMAGE expanded_image)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (win != NULL_WIN && node != NULL)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    const wxTreeItemId id(node);
 | 
				
			||||||
 | 
					    tv.SetNodeImages(id, item_image, collapsed_image, expanded_image);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void xvt_treelist_set_node_string(WINDOW win, XVT_TREEVIEW_NODE node, const char* text)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (win != NULL_WIN)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    const int cc = tv.GetColumnCount();
 | 
				
			||||||
 | 
					    wxStringTokenizer tok(text, "\t", wxTOKEN_RET_EMPTY);
 | 
				
			||||||
 | 
					    if (node != NULL)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const wxTreeItemId id(node);
 | 
				
			||||||
 | 
					      for (int c = 0; c < cc && tok.HasMoreTokens(); c++)
 | 
				
			||||||
 | 
					        tv.SetItemText(id, c, tok.GetNextToken());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      for (int c = 0; tok.HasMoreTokens(); c++)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        wxString str = tok.GetNextToken();
 | 
				
			||||||
 | 
					        int width = 0;
 | 
				
			||||||
 | 
					        bool bRightAlign = false;
 | 
				
			||||||
 | 
					        const int a = str.Find('@');
 | 
				
			||||||
 | 
					        if (a > 0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          width = 10*wxAtoi(str.Mid(a+1));
 | 
				
			||||||
 | 
					          bRightAlign = str.Find('R', true) > a;
 | 
				
			||||||
 | 
					          str.Truncate(a);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					          width = 10*str.Len();
 | 
				
			||||||
 | 
					        if (c >= cc)
 | 
				
			||||||
 | 
					          tv.AddColumn(str, width, bRightAlign ? wxALIGN_RIGHT : wxALIGN_LEFT);
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          tv.SetColumnText(c, str);
 | 
				
			||||||
 | 
					          const int oldw = tv.GetColumnWidth(c);
 | 
				
			||||||
 | 
					          if (width < 2*oldw/3 || width > 3*oldw/2)
 | 
				
			||||||
 | 
					            tv.SetColumnWidth(c, width);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void xvt_treelist_suspend(WINDOW win)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					  tv.Suspend();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void  xvt_treelist_set_node_bold(WINDOW win, XVT_TREEVIEW_NODE node, BOOLEAN bold)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (win != NULL_WIN && node != NULL)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    const wxTreeItemId id(node);
 | 
				
			||||||
 | 
					    tv.SetItemBold(id, bold != FALSE);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static XVT_TREEVIEW_NODE FindTreeListNodeString(wxTreeListCtrl& tv, const wxTreeItemId& parent, const char* text)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (parent.IsOk())
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    TwxTreeItemData* pData = (TwxTreeItemData*)tv.GetItemData(parent);
 | 
				
			||||||
 | 
					    if (pData != NULL && pData->m_strData == text)
 | 
				
			||||||
 | 
					      return parent.m_pItem;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    wxTreeItemIdValue cookie;
 | 
				
			||||||
 | 
					    for (wxTreeItemId id = tv.GetFirstChild(parent, cookie); id.IsOk(); 
 | 
				
			||||||
 | 
					         id = tv.GetNextChild(parent, cookie))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      XVT_TREEVIEW_NODE node = FindTreeListNodeString(tv, id, text);
 | 
				
			||||||
 | 
					      if (node != NULL)
 | 
				
			||||||
 | 
					        return node;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					XVT_TREEVIEW_NODE xvt_treelist_find_node_string(WINDOW win, const char* text)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  XVT_TREEVIEW_NODE node = NULL;
 | 
				
			||||||
 | 
					  if (win != NULL_WIN && text && *text)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    CAST_TREELIST(win, tv);
 | 
				
			||||||
 | 
					    node = FindTreeListNodeString(tv, tv.GetSelection(), text);
 | 
				
			||||||
 | 
					    if (node == NULL)
 | 
				
			||||||
 | 
					      node = FindTreeListNodeString(tv, tv.GetRootItem(), text);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return node;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user