Exemple #1
0
void wxGxTreeViewBase::OnObjectAdded(wxGxCatalogEvent& event)
{
    wxGxObject* pGxObject = m_pCatalog->GetRegisterObject(event.GetObjectID());
	if(!pGxObject)
		return;
    wxGxObject* pParentObject = pGxObject->GetParent();
	wxTreeItemId ParentTreeItemId = m_TreeMap[pParentObject->GetId()];
	if(ParentTreeItemId.IsOk())
	{
		wxGxTreeItemData* pData = (wxGxTreeItemData*)GetItemData(ParentTreeItemId);
		if(pData != NULL)
		{
            wxGxObjectContainer* pGxObjectContainer = wxDynamicCast(pParentObject, wxGxObjectContainer);
            if(pGxObjectContainer->AreChildrenViewable())
            {
			    if(pData->m_bExpandedOnce)
                {
				    AddTreeItem(pGxObject, ParentTreeItemId);
                    SortChildren(ParentTreeItemId);
                }
			    else
                {
				    SetItemHasChildren(ParentTreeItemId, true);
                }
            }
		}
	}
}
Exemple #2
0
void wxGxTreeViewBase::OnObjectRefreshed(wxGxCatalogEvent& event)
{
	wxTreeItemId TreeItemId = m_TreeMap[event.GetObjectID()];
	if(TreeItemId.IsOk())
	{
		wxGxTreeItemData* pData = (wxGxTreeItemData*)GetItemData(TreeItemId);
		if(pData != NULL)
		{
			if(pData->m_bExpandedOnce)
			{
                //deleted via refresh
				//DeleteChildren(TreeItemId);
				pData->m_bExpandedOnce = false;
				Expand(TreeItemId);
			}
            else
            {
                wxGxObject* pGxObject = m_pCatalog->GetRegisterObject(event.GetObjectID());
			    wxGxObjectContainer* pGxObjectContainer = dynamic_cast<wxGxObjectContainer*>(pGxObject);
				wxBusyCursor wait;
			    if(pGxObjectContainer && pGxObjectContainer->HasChildren() && !ItemHasChildren(TreeItemId))
                {
                    SetItemHasChildren(TreeItemId);
                }
            }
		}
	}
}
void wxTreeViewComboPopup::AddTreeItem(wxGxObject* pGxObject, wxTreeItemId hParent)
{
	if(NULL == pGxObject)
		return;
	wxGxObjectContainer* pContainer = wxDynamicCast(pGxObject, wxGxObjectContainer);
	if(NULL == pContainer)
		return;

    if (m_TreeMap[pGxObject->GetId()].IsOk())
    {
        return;
    }

	IGxObjectUI* pObjUI =  dynamic_cast<IGxObjectUI*>(pGxObject);
	wxIcon icon;
	if(pObjUI != NULL)
		icon = pObjUI->GetSmallImage();

	int pos(wxNOT_FOUND);
	if(icon.IsOk())
    {
        for(size_t i = 0; i < m_IconsArray.size(); ++i)
        {
            if(m_IconsArray[i].oIcon.IsSameAs(icon))
            {
                pos = m_IconsArray[i].iImageIndex;
                break;
            }
        }
        if(pos == wxNOT_FOUND)
        {
            pos = m_TreeImageList.Add(icon);
            ICONDATA myicondata = {icon, pos};
            m_IconsArray.push_back(myicondata);
        }
    }
	else
		pos = 0;//0 col img, 1 - col img

	wxGxTreeItemData* pData = new wxGxTreeItemData(pGxObject->GetId(), pos, false);

    wxString sName;
    if(m_pCatalog->GetShowExt())
        sName = pGxObject->GetName();
    else
        sName = pGxObject->GetBaseName();


	wxTreeItemId NewTreeItem = AppendItem(hParent, sName, pos, -1, pData);
	m_TreeMap[pGxObject->GetId()] = NewTreeItem;

	if(pContainer->AreChildrenViewable())
		SetItemHasChildren(NewTreeItem);

//	SortChildren(hParent);
	wxTreeCtrl::Refresh();
}
Exemple #4
0
void wxGxTreeViewBase::OnItemExpanding(wxTreeEvent& event)
{
	wxTreeItemId item = event.GetItem();

	if(!item.IsOk())
		return;

	wxGxTreeItemData* pData = (wxGxTreeItemData*)GetItemData(item);
	if(pData != NULL)
	{
        wxGxObject* pGxObject = m_pCatalog->GetRegisterObject(pData->m_nObjectID);
		wxGxObjectContainer* pGxObjectContainer = wxDynamicCast(pGxObject, wxGxObjectContainer);
		if(pGxObjectContainer != NULL)
		{
			wxBusyCursor wait;
			if(pGxObjectContainer->HasChildren() && pGxObjectContainer->AreChildrenViewable())
			{
				if(pData->m_bExpandedOnce == false)
				{
					const wxGxObjectList ObjectList = pGxObjectContainer->GetChildren();
                    wxGxObjectList::const_iterator iter;
                    for (iter = ObjectList.begin(); iter != ObjectList.end(); ++iter)
                    {
                        wxGxObject *current = *iter;
						AddTreeItem(current, item);//false
                        m_pCatalog->ObjectAdded(current->GetId());
                    }
					pData->m_bExpandedOnce = true;
                    SetItemHasChildren(item, GetChildrenCount(item, false) > 0);
                    SortChildren(item);
					return;                    
                }
				else
					return;
			}
			else
			{
				SetItemHasChildren(item, false);
				return;
			}
		}
	}
	SetItemHasChildren(item, false);
}
// create a new tree item and insert it into the tree
RegTreeCtrl::TreeNode *RegTreeCtrl::InsertNewTreeNode(
    TreeNode *pParent,
    const wxString& strName,
    int idImage,
    const wxString *pstrValue,
    wxRegKey::WOW64ViewMode viewMode)
{
    // create new item & insert it
    TreeNode *pNewNode = new TreeNode;
    pNewNode->m_pTree  = this;
    pNewNode->m_pParent = pParent;
    pNewNode->m_strName = strName;
    pNewNode->m_bKey    = pstrValue == NULL;
    pNewNode->m_pKey    = NULL;
    pNewNode->m_viewMode = viewMode;
    if (pParent)
    {
        pNewNode->m_id  = AppendItem(pParent->Id(),
            pNewNode->IsKey() ? strName : *pstrValue,
            idImage);
    }
    else
    {
        pNewNode->m_id  = AddRoot(strName);
    }

    wxASSERT_MSG( pNewNode->m_id, wxT("can't create tree control item!"));

    // save the pointer in the item
    SetItemData(pNewNode->m_id, pNewNode);

    // add it to the list of parent's children
    if ( pParent != NULL )
    {
        pParent->m_aChildren.Add(pNewNode);
    }

    if ( pNewNode->IsKey() )
    {
        SetItemHasChildren(pNewNode->Id());

        if ( !pNewNode->IsRoot() )
        {
            // set the expanded icon as well
            SetItemImage(pNewNode->Id(),
                RegImageList::OpenedKey,
                wxTreeItemIcon_Expanded);
        }
    }

    return pNewNode;
}
Exemple #6
0
void DirectoryTree::AddChildren(const wxTreeItemId& tid)
	{
	if(!tid.IsOk())
    {
    wxLogDebug(wxT("DirectoryTree::AddChildren(): invalid wxTreeItemId %u"), (int) tid);
    return;
    }

  wxString sPath;
  bool bGotPath = GetItemPath(tid, sPath);
  if(!bGotPath)
    {
    wxLogDebug(wxT("DirectoryTree::AddChildren(): GetItemPath(%u) returned \"\""), (int) tid);
    return;
    }
  wxLogTrace(DIRECTORYTREE_EVENTS, wxT("AddChildren('%s')"), sPath.c_str());

	DirectoryTreeItem * dti = (DirectoryTreeItem *) GetItemData(tid);
	if(dti->IsPopulated())
		return;

	// Tell the tree to stop (falsely) showing the button...
	SetItemHasChildren(tid, false);
	dti->SetIsPopulated();

  // Can we enter this directory?
  bool bCanExecute = psn.CanExecute(sPath);
  if(!bCanExecute)
    {
    wxLogDebug(wxT("DirectoryTree::AddChildren(): Cannot enter directory '%s'"), sPath.c_str());
    return;
    }
  
  // Enumerate sub-directories
  wxLogTrace(DIRECTORYTREE_EVENTS, wxT("sPath: %s"), sPath.c_str());
  DirectoryEntryArray dea(desFILENAME, 0, m_bShowHidden);
  dea.AddDirectories(sPath);
  dea.Sort();
  
  // Add them to the tree
  int nCount = dea.GetCount();
  for(int i = 0; i < nCount; i++)
    {
    const DirectoryEntry * dre = dea.GetItem(i);
    wxString sPathName = dre->GetPathName();
    wxTreeItemId tidChild = AddChild(tid, sPathName);
    }
	}
Exemple #7
0
void wxGxTreeView::BeginRename(long nObjectID)
{
    if(nObjectID == wxNOT_FOUND)
        return;

	wxTreeItemId ItemId = m_TreeMap[nObjectID];
	if(!ItemId.IsOk())
    {
        SetItemHasChildren(GetSelection());
        Expand(GetSelection());  
        ItemId = m_TreeMap[nObjectID];
    }

	if(ItemId.IsOk())
	{
		SelectItem(ItemId);//, false
		SetFocus();
        m_pSelection->Select(nObjectID, true, GetId());
        EditLabel(GetSelection());
	}
}
Exemple #8
0
void wxGxTreeView::OnObjectAdded(wxGxCatalogEvent& event)
{
    wxGxObject* pGxObject = m_pCatalog->GetRegisterObject(event.GetObjectID());
	if(!pGxObject)
		return;
    wxGxObject* pParentObject = pGxObject->GetParent();
	wxTreeItemId ParentTreeItemId = m_TreeMap[pParentObject->GetId()];
	if(ParentTreeItemId.IsOk())
	{
		wxGxTreeItemData* pData = (wxGxTreeItemData*)GetItemData(ParentTreeItemId);
		if(pData != NULL)
		{
            wxGxAutoRenamer* pGxAutoRenamer = dynamic_cast<wxGxAutoRenamer*>(pParentObject);
			if(pData->m_bExpandedOnce)
            {
				AddTreeItem(pGxObject, ParentTreeItemId);
                SortChildren(ParentTreeItemId);
                if(pGxAutoRenamer && pGxAutoRenamer->IsBeginRename(this, pGxObject->GetPath()))
                {
                    BeginRename(pGxObject->GetId());
                }
            }
			else
            {
                if(pGxAutoRenamer && pGxAutoRenamer->IsBeginRename(this, pGxObject->GetPath()))
                {
                    Expand(ParentTreeItemId);
				    AddTreeItem(pGxObject, ParentTreeItemId);
                    SortChildren(ParentTreeItemId);
                    BeginRename(pGxObject->GetId());
                }
                else
                {
				    SetItemHasChildren(ParentTreeItemId, true);
                }
            }
		}
	}
}
Exemple #9
0
wxTreeItemId DirectoryTree::AddChild(const wxTreeItemId& tidParent, const wxString& sPath)
  {
  DirectoryTreeItem * dti = new DirectoryTreeItem(sPath);
  
	wxTreeItemId tid;
	if(sPath == FILE_SYSTEM_ROOT)
		{
		// TBI: ASSERT tree is empty
		tid = AddRoot(FILE_SYSTEM_ROOT, 0, 1, dti);
		}
  else
		{
		if(!tidParent.IsOk())
			{
      wxLogDebug(wxT("DirectoryTree::AddChild(): invalid parent wxTreeItemId %u"), (int) tidParent);
			return wxTreeItemId();
			}
#ifdef __WXMSW__
    // Treat drives differently
		wxString sDirectory;
    if(sPath.Length() == 3)
      sDirectory = sPath;
    else
      {
		  wxFileName fil(sPath);
		  sDirectory = fil.GetFullName();
      }
#else
		wxFileName fil(sPath);
		wxString sDirectory = fil.GetFullName();
#endif // def __WXMSW__
		tid = AppendItem(tidParent, sDirectory, 0, 1, dti);
		}

	// Show the '+' button
	SetItemHasChildren(tid, true);
	
  return tid;
  }
Exemple #10
0
void wxGxTreeViewBase::OnObjectChanged(wxGxCatalogEvent& event)
{
	wxTreeItemId TreeItemId = m_TreeMap[event.GetObjectID()];
	if(TreeItemId.IsOk())
	{
		wxGxTreeItemData* pData = (wxGxTreeItemData*)GetItemData(TreeItemId);
		if(pData != NULL)
		{
            wxGxObject* pGxObject = m_pCatalog->GetRegisterObject(pData->m_nObjectID);
			IGxObjectUI* pGxObjectUI = dynamic_cast<IGxObjectUI*>(pGxObject);
			wxGxObjectContainer* pGxObjectContainer = dynamic_cast<wxGxObjectContainer*>(pGxObject);
            IGxObjectTreeAttr* pGxObjectAttr = dynamic_cast<IGxObjectTreeAttr*>(pGxObject);
			if(pGxObjectUI != NULL)
			{
                wxString sName;
                if(m_pCatalog->GetShowExt())
                    sName = pGxObject->GetName();
                else
                    sName = pGxObject->GetBaseName();

                if(pGxObjectAttr && pGxObjectAttr->ShowCount())
                {
                    sName.Append(wxString::Format(wxT(" [%d]"), pGxObjectAttr->GetCount()));
                }

				wxIcon icon = pGxObjectUI->GetSmallImage();

                int pos(wxNOT_FOUND);
				if(icon.IsOk())
                {
                    for(size_t i = 0; i < m_IconsArray.size(); ++i)
                    {
                        if(m_IconsArray[i].oIcon.IsSameAs(icon))
                        {
                            pos = m_IconsArray[i].iImageIndex;
                            break;
                        }
                    }
                    if(pos == wxNOT_FOUND)
                    {
                        pos = m_TreeImageList.Add(icon);
                        ICONDATA myicondata = {icon, pos};
                        m_IconsArray.push_back(myicondata);
                    }
                    SetItemImage(TreeItemId, pos);
					//m_TreeImageList.Replace(pData->m_smallimage_index, icon);
                }
				SetItemText(TreeItemId, sName);
				if(pGxObjectContainer != NULL)
				{
					wxBusyCursor wait;
					bool bItemHasChildren = pGxObjectContainer->HasChildren();
					if(ItemHasChildren(TreeItemId) && !bItemHasChildren)
					{						
						CollapseAndReset(TreeItemId);
						pData->m_bExpandedOnce = false;
                        UpdateGxSelection();
					}
					SetItemHasChildren(TreeItemId, bItemHasChildren && pGxObjectContainer->AreChildrenViewable());
				}
                
                if(pGxObjectAttr)
                {
                    SetItemBold(TreeItemId, pGxObjectAttr->IsBold());
                    SetItemTextColour(TreeItemId, pGxObjectAttr->GetColor());                    
                }
				//wxTreeCtrl::Refresh();
			}
		}
	}
}
Exemple #11
0
void wxGxTreeViewBase::AddTreeItem(wxGxObject* pGxObject, wxTreeItemId hParent)
{
	if(NULL == pGxObject)
		return;

    wxTreeItemId TreeItemId = m_TreeMap[pGxObject->GetId()];
	if(TreeItemId.IsOk())
        return;

	IGxObjectUI* pObjUI =  dynamic_cast<IGxObjectUI*>(pGxObject);
	wxIcon icon;
	if(pObjUI != NULL)
		icon = pObjUI->GetSmallImage();

	int pos(wxNOT_FOUND);
	if(icon.IsOk())
    {
        for(size_t i = 0; i < m_IconsArray.size(); ++i)
        {
            if(m_IconsArray[i].oIcon.IsSameAs(icon))
            {
                pos = m_IconsArray[i].iImageIndex;
                break;
            }
        }
        if(pos == wxNOT_FOUND)
        {
            pos = m_TreeImageList.Add(icon);
            ICONDATA myicondata = {icon, pos};
            m_IconsArray.push_back(myicondata);
        }
    }
	else
		pos = 0;//m_ImageListSmall.Add(m_ImageListSmall.GetIcon(2));//0 col img, 1 - col img

	wxGxTreeItemData* pData = new wxGxTreeItemData(pGxObject->GetId(), pos, false);
    
    IGxObjectTreeAttr* pGxObjectAttr = dynamic_cast<IGxObjectTreeAttr*>(pGxObject);

    wxString sName;
    if(m_pCatalog->GetShowExt())
        sName = pGxObject->GetName();
    else
        sName = pGxObject->GetBaseName();

    if(pGxObjectAttr && pGxObjectAttr->ShowCount())
    {
        sName.Append(wxString::Format(wxT(" [%d]"), pGxObjectAttr->GetCount()));
    }


	wxTreeItemId NewTreeItem = AppendItem(hParent, sName, pos, wxNOT_FOUND, pData);
	m_TreeMap[pGxObject->GetId()] = NewTreeItem;

	wxGxObjectContainer* pContainer = wxDynamicCast(pGxObject, wxGxObjectContainer);//dynamic_cast<IGxObjectContainer*>(pGxObject);
	if(pContainer != NULL)
    {
		if(pContainer->AreChildrenViewable())
			SetItemHasChildren(NewTreeItem);
    }

    if(pGxObjectAttr)
    {
        SetItemBold(NewTreeItem, pGxObjectAttr->IsBold());
        SetItemTextColour(NewTreeItem, pGxObjectAttr->GetColor());                    
    }

    //SortChildren(hParent);
	wxTreeCtrl::Refresh();
}
// ============================================================================
// uwTreeList - Tree
// ============================================================================
void uwTreeList::AddPlaceholder( unDataTree& parent )
{
	if( parent.ShouldExpand() )
		SetItemHasChildren( parent.GetTreeID(), true );
}