bool wxIsDriveAvailable(const wxString& dirName);
+// ----------------------------------------------------------------------------
+// events
+// ----------------------------------------------------------------------------
+
+wxDEFINE_EVENT( wxEVT_DIRCTRL_SELECTIONCHANGED, wxTreeEvent );
+wxDEFINE_EVENT( wxEVT_DIRCTRL_FILEACTIVATED, wxTreeEvent );
+
// ----------------------------------------------------------------------------
// wxGetAvailableDrives, for WINDOWS, DOS, OS2, MAC, UNIX (returns "/")
// ----------------------------------------------------------------------------
EVT_TREE_ITEM_COLLAPSED (wxID_TREECTRL, wxGenericDirCtrl::OnCollapseItem)
EVT_TREE_BEGIN_LABEL_EDIT (wxID_TREECTRL, wxGenericDirCtrl::OnBeginEditItem)
EVT_TREE_END_LABEL_EDIT (wxID_TREECTRL, wxGenericDirCtrl::OnEndEditItem)
+ EVT_TREE_SEL_CHANGED (wxID_TREECTRL, wxGenericDirCtrl::OnTreeSelChange)
+ EVT_TREE_ITEM_ACTIVATED (wxID_TREECTRL, wxGenericDirCtrl::OnItemActivated)
EVT_SIZE (wxGenericDirCtrl::OnSize)
END_EVENT_TABLE()
m_treeCtrl = CreateTreeCtrl(this, wxID_TREECTRL,
wxPoint(0,0), GetClientSize(), treeStyle);
- if (!filter.empty())
+ if (!filter.empty() && (style & wxDIRCTRL_SHOW_FILTERS))
m_filterListCtrl = new wxDirFilterListCtrl(this, wxID_FILTERLISTCTRL);
m_defaultPath = dir;
}
wxTreeItemId treeid = event.GetItem();
- wxDirItemData *data = (wxDirItemData*)m_treeCtrl->GetItemData( treeid );
+ wxDirItemData *data = GetItemData( treeid );
wxASSERT( data );
wxString new_name( wxPathOnly( data->m_path ) );
}
}
+void wxGenericDirCtrl::OnTreeSelChange(wxTreeEvent &event)
+{
+ wxTreeEvent changedEvent(wxEVT_DIRCTRL_SELECTIONCHANGED, GetId());
+
+ changedEvent.SetEventObject(this);
+ changedEvent.SetItem(event.GetItem());
+ changedEvent.SetClientObject(m_treeCtrl->GetItemData(event.GetItem()));
+
+ if (GetEventHandler()->SafelyProcessEvent(changedEvent) && !changedEvent.IsAllowed())
+ event.Veto();
+ else
+ event.Skip();
+}
+
+void wxGenericDirCtrl::OnItemActivated(wxTreeEvent &event)
+{
+ wxTreeItemId treeid = event.GetItem();
+ const wxDirItemData *data = GetItemData(treeid);
+
+ if (data->m_isDir)
+ {
+ // is dir
+ event.Skip();
+ }
+ else
+ {
+ // is file
+ wxTreeEvent changedEvent(wxEVT_DIRCTRL_FILEACTIVATED, GetId());
+
+ changedEvent.SetEventObject(this);
+ changedEvent.SetItem(treeid);
+ changedEvent.SetClientObject(m_treeCtrl->GetItemData(treeid));
+
+ if (GetEventHandler()->SafelyProcessEvent(changedEvent) && !changedEvent.IsAllowed())
+ event.Veto();
+ else
+ event.Skip();
+ }
+}
+
void wxGenericDirCtrl::OnExpandItem(wxTreeEvent &event)
{
wxTreeItemId parentId = event.GetItem();
{
wxTreeItemId child;
- wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(parentId);
+ wxDirItemData *data = GetItemData(parentId);
if (!data->m_isExpanded)
return;
void wxGenericDirCtrl::PopulateNode(wxTreeItemId parentId)
{
- wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(parentId);
+ wxDirItemData *data = GetItemData(parentId);
if (data->m_isExpanded)
return;
wxTreeItemId childId = m_treeCtrl->GetFirstChild(parentId, cookie);
while (childId.IsOk())
{
- wxDirItemData* data = (wxDirItemData*) m_treeCtrl->GetItemData(childId);
+ wxDirItemData* data = GetItemData(childId);
if (data && !data->m_path.empty())
{
if (!lastId.IsOk())
return false;
- wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(lastId);
+ wxDirItemData *data = GetItemData(lastId);
if (data->m_isDir)
{
m_treeCtrl->Expand(lastId);
bool selectedChild = false;
while (childId.IsOk())
{
- data = (wxDirItemData*) m_treeCtrl->GetItemData(childId);
+ data = GetItemData(childId);
if (data && data->m_path != wxEmptyString && !data->m_isDir)
{
return true;
}
+wxDirItemData* wxGenericDirCtrl::GetItemData(wxTreeItemId itemId)
+{
+ return static_cast<wxDirItemData*>(m_treeCtrl->GetItemData(itemId));
+}
+
+wxString wxGenericDirCtrl::GetPath(wxTreeItemId itemId) const
+{
+ const wxDirItemData*
+ data = static_cast<wxDirItemData*>(m_treeCtrl->GetItemData(itemId));
+
+ return data->m_path;
+}
wxString wxGenericDirCtrl::GetPath() const
{
{
// return first string only
wxTreeItemId treeid = items[0];
- wxDirItemData* data = (wxDirItemData*) m_treeCtrl->GetItemData(treeid);
- return data->m_path;
+ return GetPath(treeid);
}
return wxEmptyString;
wxTreeItemId treeid = m_treeCtrl->GetSelection();
if (treeid)
{
- wxDirItemData* data = (wxDirItemData*) m_treeCtrl->GetItemData(treeid);
- return data->m_path;
+ return GetPath(treeid);
}
else
return wxEmptyString;
for ( unsigned n = 0; n < items.size(); n++ )
{
wxTreeItemId treeid = items[n];
- wxDirItemData* data = (wxDirItemData*) m_treeCtrl->GetItemData(treeid);
- paths.Add(data->m_path);
+ paths.push_back(GetPath(treeid));
}
}
{
m_filter = filter;
- if (!filter.empty() && !m_filterListCtrl)
+ if (!filter.empty() && !m_filterListCtrl && HasFlag(wxDIRCTRL_SHOW_FILTERS))
m_filterListCtrl = new wxDirFilterListCtrl(this, wxID_FILTERLISTCTRL);
else if (filter.empty() && m_filterListCtrl)
{