Add wxEVT_DIRCTRL_FILEACTIVATED wxDirCtrl event.

Allow processing double clicks on the files in the directory control.

Closes #15208.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74003 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2013-05-16 14:33:07 +00:00
parent 40c7c7f473
commit 4d623b67ee
5 changed files with 48 additions and 2 deletions

View File

@ -635,6 +635,7 @@ All (GUI):
- Implement clipping for wxSVGFileDC (Steve Benbow). - Implement clipping for wxSVGFileDC (Steve Benbow).
- Add wxDirCtrl::GetPath() (troelsk). - Add wxDirCtrl::GetPath() (troelsk).
- Add wxEVT_DIRCTRL_SELECTIONCHANGED event (troelsk). - Add wxEVT_DIRCTRL_SELECTIONCHANGED event (troelsk).
- Add wxEVT_DIRCTRL_FILEACTIVATED event (troelsk).
- Add wxControl::GetSizeFromTextSize() (Manuel Martin). - Add wxControl::GetSizeFromTextSize() (Manuel Martin).
- Optionally allow showing tooltips for disabled ribbon buttons (wxBen). - Optionally allow showing tooltips for disabled ribbon buttons (wxBen).
- Add wxTL_NO_HEADER style to wxTreeListCtrl (robboto). - Add wxTL_NO_HEADER style to wxTreeListCtrl (robboto).

View File

@ -110,6 +110,7 @@ public:
void OnBeginEditItem(wxTreeEvent &event ); void OnBeginEditItem(wxTreeEvent &event );
void OnEndEditItem(wxTreeEvent &event ); void OnEndEditItem(wxTreeEvent &event );
void OnTreeSelChange(wxTreeEvent &event); void OnTreeSelChange(wxTreeEvent &event);
void OnItemActivated(wxTreeEvent &event);
void OnSize(wxSizeEvent &event ); void OnSize(wxSizeEvent &event );
// Try to expand as much of the given path as possible. // Try to expand as much of the given path as possible.
@ -210,11 +211,13 @@ private:
}; };
wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_CORE, wxEVT_DIRCTRL_SELECTIONCHANGED, wxTreeEvent ); wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_CORE, wxEVT_DIRCTRL_SELECTIONCHANGED, wxTreeEvent );
wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_CORE, wxEVT_DIRCTRL_FILEACTIVATED, wxTreeEvent );
#define wx__DECLARE_DIRCTRL_EVT(evt, id, fn) \ #define wx__DECLARE_DIRCTRL_EVT(evt, id, fn) \
wx__DECLARE_EVT1(wxEVT_DIRCTRL_ ## evt, id, wxTreeEventHandler(fn)) wx__DECLARE_EVT1(wxEVT_DIRCTRL_ ## evt, id, wxTreeEventHandler(fn))
#define EVT_DIRCTRL_SELECTIONCHANGED(id, fn) wx__DECLARE_DIRCTRL_EVT(SELECTIONCHANGED, id, fn) #define EVT_DIRCTRL_SELECTIONCHANGED(id, fn) wx__DECLARE_DIRCTRL_EVT(SELECTIONCHANGED, id, fn)
#define EVT_DIRCTRL_FILEACTIVATED(id, fn) wx__DECLARE_DIRCTRL_EVT(FILEACTIVATED, id, fn)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxDirFilterListCtrl // wxDirFilterListCtrl
@ -310,6 +313,7 @@ extern WXDLLIMPEXP_DATA_CORE(wxFileIconsTable *) wxTheFileIconsTable;
// old wxEVT_COMMAND_* constants // old wxEVT_COMMAND_* constants
#define wxEVT_COMMAND_DIRCTRL_SELECTIONCHANGED wxEVT_DIRCTRL_SELECTIONCHANGED #define wxEVT_COMMAND_DIRCTRL_SELECTIONCHANGED wxEVT_DIRCTRL_SELECTIONCHANGED
#define wxEVT_COMMAND_DIRCTRL_FILEACTIVATED wxEVT_DIRCTRL_FILEACTIVATED
#endif #endif
// _WX_DIRCTRLG_H_ // _WX_DIRCTRLG_H_

View File

@ -57,6 +57,9 @@ enum
Notice that this event is generated even for the changes done by the Notice that this event is generated even for the changes done by the
program itself and not only those done by the user. program itself and not only those done by the user.
@since 2.9.5 @since 2.9.5
@event{EVT_DIRCTRL_FILEACTIVATED(id, func)}
The user activated a file by double-clicking or pressing Enter.
@since 2.9.5
*/ */
class wxGenericDirCtrl : public wxControl class wxGenericDirCtrl : public wxControl
{ {
@ -279,3 +282,4 @@ public:
}; };
wxEventType wxEVT_DIRCTRL_SELECTIONCHANGED; wxEventType wxEVT_DIRCTRL_SELECTIONCHANGED;
wxEventType wxEVT_DIRCTRL_FILEACTIVATED;

View File

@ -113,6 +113,7 @@ protected:
void OnCheckBox(wxCommandEvent& event); void OnCheckBox(wxCommandEvent& event);
void OnRadioBox(wxCommandEvent& event); void OnRadioBox(wxCommandEvent& event);
void OnSelChanged(wxTreeEvent& event); void OnSelChanged(wxTreeEvent& event);
void OnFileActivated(wxTreeEvent& event);
// reset the control parameters // reset the control parameters
void Reset(); void Reset();
@ -157,6 +158,7 @@ BEGIN_EVENT_TABLE(DirCtrlWidgetsPage, WidgetsPage)
EVT_CHECKBOX(wxID_ANY, DirCtrlWidgetsPage::OnCheckBox) EVT_CHECKBOX(wxID_ANY, DirCtrlWidgetsPage::OnCheckBox)
EVT_RADIOBOX(wxID_ANY, DirCtrlWidgetsPage::OnRadioBox) EVT_RADIOBOX(wxID_ANY, DirCtrlWidgetsPage::OnRadioBox)
EVT_DIRCTRL_SELECTIONCHANGED(DirCtrlPage_Ctrl, DirCtrlWidgetsPage::OnSelChanged) EVT_DIRCTRL_SELECTIONCHANGED(DirCtrlPage_Ctrl, DirCtrlWidgetsPage::OnSelChanged)
EVT_DIRCTRL_FILEACTIVATED(DirCtrlPage_Ctrl, DirCtrlWidgetsPage::OnFileActivated)
END_EVENT_TABLE() END_EVENT_TABLE()
// ============================================================================ // ============================================================================
@ -377,4 +379,15 @@ void DirCtrlWidgetsPage::OnSelChanged(wxTreeEvent& event)
event.Skip(); event.Skip();
} }
void DirCtrlWidgetsPage::OnFileActivated(wxTreeEvent& event)
{
if ( m_dirCtrl )
{
wxLogMessage("File activated \"%s\"",
m_dirCtrl->GetPath(event.GetItem()));
}
event.Skip();
}
#endif // wxUSE_DIRDLG #endif // wxUSE_DIRDLG

View File

@ -107,6 +107,7 @@ bool wxIsDriveAvailable(const wxString& dirName);
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
wxDEFINE_EVENT( wxEVT_DIRCTRL_SELECTIONCHANGED, wxTreeEvent ); wxDEFINE_EVENT( wxEVT_DIRCTRL_SELECTIONCHANGED, wxTreeEvent );
wxDEFINE_EVENT( wxEVT_DIRCTRL_FILEACTIVATED, wxTreeEvent );
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxGetAvailableDrives, for WINDOWS, DOS, OS2, MAC, UNIX (returns "/") // wxGetAvailableDrives, for WINDOWS, DOS, OS2, MAC, UNIX (returns "/")
@ -448,6 +449,7 @@ BEGIN_EVENT_TABLE(wxGenericDirCtrl, wxControl)
EVT_TREE_BEGIN_LABEL_EDIT (wxID_TREECTRL, wxGenericDirCtrl::OnBeginEditItem) EVT_TREE_BEGIN_LABEL_EDIT (wxID_TREECTRL, wxGenericDirCtrl::OnBeginEditItem)
EVT_TREE_END_LABEL_EDIT (wxID_TREECTRL, wxGenericDirCtrl::OnEndEditItem) EVT_TREE_END_LABEL_EDIT (wxID_TREECTRL, wxGenericDirCtrl::OnEndEditItem)
EVT_TREE_SEL_CHANGED (wxID_TREECTRL, wxGenericDirCtrl::OnTreeSelChange) EVT_TREE_SEL_CHANGED (wxID_TREECTRL, wxGenericDirCtrl::OnTreeSelChange)
EVT_TREE_ITEM_ACTIVATED (wxID_TREECTRL, wxGenericDirCtrl::OnItemActivated)
EVT_SIZE (wxGenericDirCtrl::OnSize) EVT_SIZE (wxGenericDirCtrl::OnSize)
END_EVENT_TABLE() END_EVENT_TABLE()
@ -710,12 +712,34 @@ void wxGenericDirCtrl::OnTreeSelChange(wxTreeEvent &event)
changedEvent.SetClientObject(m_treeCtrl->GetItemData(event.GetItem())); changedEvent.SetClientObject(m_treeCtrl->GetItemData(event.GetItem()));
if (GetEventHandler()->SafelyProcessEvent(changedEvent) && !changedEvent.IsAllowed()) if (GetEventHandler()->SafelyProcessEvent(changedEvent) && !changedEvent.IsAllowed())
{
event.Veto(); 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 else
{ {
event.Skip(); // 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();
} }
} }