X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e3f084fd47bf7d30722b357724e0c7701a7994f0..931d6a47c32a5b4c283243cb553ce71ee2b535d5:/src/generic/dirctrlg.cpp diff --git a/src/generic/dirctrlg.cpp b/src/generic/dirctrlg.cpp index fab9f5c9c1..bbbc4ef43f 100644 --- a/src/generic/dirctrlg.cpp +++ b/src/generic/dirctrlg.cpp @@ -4,7 +4,6 @@ // Author: Harm van der Heijden, Robert Roebling, Julian Smart // Modified by: // Created: 12/12/98 -// RCS-ID: $Id$ // Copyright: (c) Harm van der Heijden, Robert Roebling and Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -102,6 +101,13 @@ extern WXDLLEXPORT_DATA(const char) wxFileSelectorDefaultWildcardStr[]; 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 "/") // ---------------------------------------------------------------------------- @@ -441,6 +447,8 @@ BEGIN_EVENT_TABLE(wxGenericDirCtrl, wxControl) 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() @@ -511,7 +519,7 @@ bool wxGenericDirCtrl::Create(wxWindow *parent, 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; @@ -666,7 +674,7 @@ void wxGenericDirCtrl::OnEndEditItem(wxTreeEvent &event) } wxTreeItemId treeid = event.GetItem(); - wxDirItemData *data = (wxDirItemData*)m_treeCtrl->GetItemData( treeid ); + wxDirItemData *data = GetItemData( treeid ); wxASSERT( data ); wxString new_name( wxPathOnly( data->m_path ) ); @@ -694,6 +702,46 @@ void wxGenericDirCtrl::OnEndEditItem(wxTreeEvent &event) } } +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(); @@ -716,7 +764,7 @@ void wxGenericDirCtrl::CollapseDir(wxTreeItemId parentId) { wxTreeItemId child; - wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(parentId); + wxDirItemData *data = GetItemData(parentId); if (!data->m_isExpanded) return; @@ -731,7 +779,7 @@ void wxGenericDirCtrl::CollapseDir(wxTreeItemId parentId) void wxGenericDirCtrl::PopulateNode(wxTreeItemId parentId) { - wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(parentId); + wxDirItemData *data = GetItemData(parentId); if (data->m_isExpanded) return; @@ -752,7 +800,7 @@ void wxGenericDirCtrl::PopulateNode(wxTreeItemId parentId) #if (defined(__WINDOWS__) && !defined(__WXWINCE__)) || defined(__DOS__) || defined(__OS2__) // Check if this is a root directory and if so, - // whether the drive is avaiable. + // whether the drive is available. if (!wxIsDriveAvailable(dirName)) { data->m_isExpanded = false; @@ -922,7 +970,7 @@ wxTreeItemId wxGenericDirCtrl::FindChild(wxTreeItemId parentId, const wxString& 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()) { @@ -973,7 +1021,7 @@ bool wxGenericDirCtrl::ExpandPath(const wxString& path) if (!lastId.IsOk()) return false; - wxDirItemData *data = (wxDirItemData *) m_treeCtrl->GetItemData(lastId); + wxDirItemData *data = GetItemData(lastId); if (data->m_isDir) { m_treeCtrl->Expand(lastId); @@ -986,7 +1034,7 @@ bool wxGenericDirCtrl::ExpandPath(const wxString& path) bool selectedChild = false; while (childId.IsOk()) { - data = (wxDirItemData*) m_treeCtrl->GetItemData(childId); + data = GetItemData(childId); if (data && data->m_path != wxEmptyString && !data->m_isDir) { @@ -1038,6 +1086,11 @@ bool wxGenericDirCtrl::CollapsePath(const wxString& path) return true; } +wxDirItemData* wxGenericDirCtrl::GetItemData(wxTreeItemId itemId) +{ + return static_cast(m_treeCtrl->GetItemData(itemId)); +} + wxString wxGenericDirCtrl::GetPath(wxTreeItemId itemId) const { const wxDirItemData* @@ -1221,7 +1274,7 @@ void wxGenericDirCtrl::SetFilter(const wxString& filter) { 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) {