select the initially specified path in the tree

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_2_BRANCH@6995 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2000-03-30 18:14:24 +00:00
parent bbeed8c707
commit 266f6c261f
2 changed files with 86 additions and 37 deletions

View File

@@ -6,7 +6,7 @@
// Created: 12/12/98 // Created: 12/12/98
// Copyright: (c) Harm van der Heijden and Robert Roebling // Copyright: (c) Harm van der Heijden and Robert Roebling
// RCS-ID: $Id$ // RCS-ID: $Id$
// Licence: wxWindows licence // Licence: wxWindows licence
// //
// Notes: wxDirDialog class written by Harm van der Heijden, // Notes: wxDirDialog class written by Harm van der Heijden,
// uses wxDirCtrl class written by Robert Roebling for the // uses wxDirCtrl class written by Robert Roebling for the
@@ -106,11 +106,11 @@ public:
wxDirCtrl(); wxDirCtrl();
wxDirCtrl(wxWindow *parent, const wxWindowID id = -1, wxDirCtrl(wxWindow *parent, const wxWindowID id = -1,
const wxString &dir = wxDirDialogDefaultFolderStr, const wxString &dir = wxDirDialogDefaultFolderStr,
const wxPoint& pos = wxDefaultPosition, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, const wxSize& size = wxDefaultSize,
const long style = wxTR_HAS_BUTTONS, const long style = wxTR_HAS_BUTTONS,
const wxString& name = wxTreeCtrlNameStr ); const wxString& name = wxTreeCtrlNameStr );
void ShowHidden( const bool yesno ); void ShowHidden( const bool yesno );
void OnExpandItem(wxTreeEvent &event ); void OnExpandItem(wxTreeEvent &event );
void OnCollapseItem(wxTreeEvent &event ); void OnCollapseItem(wxTreeEvent &event );
@@ -136,9 +136,9 @@ class WXDLLEXPORT wxDirDialog: public wxDialog
public: public:
wxDirDialog() {} wxDirDialog() {}
wxDirDialog(wxWindow *parent, wxDirDialog(wxWindow *parent,
const wxString& message = wxFileSelectorPromptStr, const wxString& message = wxFileSelectorPromptStr,
const wxString& defaultPath = wxEmptyString, const wxString& defaultPath = wxEmptyString,
long style = 0, const wxPoint& pos = wxDefaultPosition); long style = 0, const wxPoint& pos = wxDefaultPosition);
inline void SetMessage(const wxString& message) { m_message = message; } inline void SetMessage(const wxString& message) { m_message = message; }
inline void SetPath(const wxString& path) { m_path = path; } inline void SetPath(const wxString& path) { m_path = path; }
inline void SetStyle(long style) { m_dialogStyle = style; } inline void SetStyle(long style) { m_dialogStyle = style; }

View File

@@ -38,6 +38,7 @@
#include "wx/icon.h" #include "wx/icon.h"
#include "wx/log.h" #include "wx/log.h"
#include "wx/sizer.h" #include "wx/sizer.h"
#include "wx/tokenzr.h"
#if wxUSE_STATLINE #if wxUSE_STATLINE
#include "wx/statline.h" #include "wx/statline.h"
@@ -170,18 +171,21 @@ wxDirCtrl::wxDirCtrl(void)
m_showHidden = FALSE; m_showHidden = FALSE;
} }
wxDirCtrl::wxDirCtrl(wxWindow *parent, const wxWindowID id, const wxString &WXUNUSED(dir), wxDirCtrl::wxDirCtrl(wxWindow *parent,
const wxPoint& pos, const wxSize& size, const wxWindowID id,
const long style, const wxString& name ) const wxString &WXUNUSED(dir),
: const wxPoint& pos,
wxTreeCtrl( parent, id, pos, size, style, wxDefaultValidator, name ) const wxSize& size,
const long style,
const wxString& name )
: wxTreeCtrl( parent, id, pos, size, style, wxDefaultValidator, name )
{ {
#ifndef __WXMSW__ #ifndef __WXMSW__
m_imageListNormal = new wxImageList(16, 16, TRUE); m_imageListNormal = new wxImageList(16, 16, TRUE);
m_imageListNormal->Add(wxICON(icon1)); m_imageListNormal->Add(wxICON(icon1));
m_imageListNormal->Add(wxICON(icon2)); m_imageListNormal->Add(wxICON(icon2));
SetImageList(m_imageListNormal); SetImageList(m_imageListNormal);
#endif #endif // !MSW
m_showHidden = FALSE; m_showHidden = FALSE;
m_rootId = AddRoot( _("Sections") ); m_rootId = AddRoot( _("Sections") );
@@ -223,14 +227,15 @@ void wxDirCtrl::CreateItems(const wxTreeItemId &parent)
// wxASSERT(m_paths.Count() == m_names.Count()); ? // wxASSERT(m_paths.Count() == m_names.Count()); ?
for (unsigned int i=0; i<m_paths.Count(); i++) size_t count = m_paths.GetCount();
for ( size_t i=0; i<count; i++)
{ {
dir_item = new wxDirItemData(m_paths[i],m_names[i]); dir_item = new wxDirItemData(m_paths[i],m_names[i]);
#ifdef __WXMSW__ #ifdef __WXMSW__
id = AppendItem( parent, m_names[i], -1, -1, dir_item); id = AppendItem( parent, m_names[i], -1, -1, dir_item);
#else #else
id = AppendItem( parent, m_names[i], 0, -1, dir_item); id = AppendItem( parent, m_names[i], 0, -1, dir_item);
SetItemImage( id, 1, wxTreeItemIcon_Expanded ); SetItemImage( id, 1, wxTreeItemIcon_Expanded );
#endif #endif
if (dir_item->m_hasSubDirs) SetItemHasChildren(id); if (dir_item->m_hasSubDirs) SetItemHasChildren(id);
} }
@@ -261,9 +266,9 @@ void wxDirCtrl::OnEndEditItem(wxTreeEvent &event)
(event.GetLabel().First( wxT("/") ) != wxNOT_FOUND)) (event.GetLabel().First( wxT("/") ) != wxNOT_FOUND))
{ {
wxMessageDialog dialog(this, _("Illegal directory name."), _("Error"), wxOK | wxICON_ERROR ); wxMessageDialog dialog(this, _("Illegal directory name."), _("Error"), wxOK | wxICON_ERROR );
dialog.ShowModal(); dialog.ShowModal();
event.Veto(); event.Veto();
return; return;
} }
wxTreeItemId id = event.GetItem(); wxTreeItemId id = event.GetItem();
@@ -279,7 +284,7 @@ void wxDirCtrl::OnEndEditItem(wxTreeEvent &event)
if (wxFileExists(new_name)) if (wxFileExists(new_name))
{ {
wxMessageDialog dialog(this, _("File name exists already."), _("Error"), wxOK | wxICON_ERROR ); wxMessageDialog dialog(this, _("File name exists already."), _("Error"), wxOK | wxICON_ERROR );
dialog.ShowModal(); dialog.ShowModal();
event.Veto(); event.Veto();
} }
@@ -290,7 +295,7 @@ void wxDirCtrl::OnEndEditItem(wxTreeEvent &event)
else else
{ {
wxMessageDialog dialog(this, _("Operation not permitted."), _("Error"), wxOK | wxICON_ERROR ); wxMessageDialog dialog(this, _("Operation not permitted."), _("Error"), wxOK | wxICON_ERROR );
dialog.ShowModal(); dialog.ShowModal();
event.Veto(); event.Veto();
} }
} }
@@ -373,11 +378,13 @@ BEGIN_EVENT_TABLE( wxDirDialog, wxDialog )
// EVT_CHECKBOX (ID_CHECK, wxDirDialog::OnCheck) // EVT_CHECKBOX (ID_CHECK, wxDirDialog::OnCheck)
END_EVENT_TABLE() END_EVENT_TABLE()
wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message, wxDirDialog::wxDirDialog(wxWindow *parent,
const wxString& defaultPath, long style, const wxString& message,
const wxPoint& pos) : const wxString& defaultPath,
wxDialog(parent, -1, message, pos, wxSize(300,300), long style,
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) const wxPoint& pos)
: wxDialog(parent, -1, message, pos, wxSize(300,300),
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{ {
m_message = message; m_message = message;
m_dialogStyle = style; m_dialogStyle = style;
@@ -390,8 +397,12 @@ wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
// 1) dir ctrl // 1) dir ctrl
m_dir = new wxDirCtrl( this, ID_DIRCTRL, "/", wxDefaultPosition, wxSize(200,200), m_dir = new wxDirCtrl( this, ID_DIRCTRL, "/",
wxTR_HAS_BUTTONS | wxSUNKEN_BORDER | wxTR_EDIT_LABELS); wxDefaultPosition,
wxSize(200,200),
wxTR_HAS_BUTTONS |
wxSUNKEN_BORDER |
wxTR_EDIT_LABELS );
topsizer->Add( m_dir, 1, wxTOP|wxLEFT|wxRIGHT | wxEXPAND, 10 ); topsizer->Add( m_dir, 1, wxTOP|wxLEFT|wxRIGHT | wxEXPAND, 10 );
// 2) text ctrl // 2) text ctrl
@@ -428,6 +439,44 @@ wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
Centre( wxBOTH ); Centre( wxBOTH );
// choose the directory corresponding to defaultPath in the tree
// VZ: using wxStringTokenizer is probably unsafe here (escaped slashes
// will not be processed correctly...)
wxStringTokenizer tk(defaultPath, wxFILE_SEP_PATH, wxTOKEN_STRTOK);
// we start from "My Computer" section because we're not sure to find the
// path among the predefined ones - ideally, we'd first look there and
// then do what we do now, but I don't have time to do it right now (VZ)
long cookie;
wxTreeItemId item = m_dir->GetFirstChild(m_dir->GetRootItem(), cookie);
wxString path;
while ( tk.HasMoreTokens() && item.IsOk() )
{
path << wxFILE_SEP_PATH << tk.GetNextToken();
m_dir->Expand(item);
wxTreeItemId child = m_dir->GetFirstChild(item, cookie);
while ( child.IsOk() )
{
wxDirItemData *data = (wxDirItemData*)m_dir->GetItemData(child);
if ( data->m_path == path )
break;
child = m_dir->GetNextChild(item, cookie);
}
item = child;
}
if ( item.IsOk() )
{
m_dir->Expand(item);
m_dir->SelectItem(item);
m_dir->EnsureVisible(item);
}
wxEndBusyCursor(); wxEndBusyCursor();
} }
@@ -514,24 +563,24 @@ void wxDirDialog::OnNew( wxCommandEvent& WXUNUSED(event) )
{ {
// try NewName0, NewName1 etc. // try NewName0, NewName1 etc.
int i = 0; int i = 0;
do { do {
new_name = wxT("NewName"); new_name = wxT("NewName");
wxString num; wxString num;
num.Printf( wxT("%d"), i ); num.Printf( wxT("%d"), i );
new_name += num; new_name += num;
path = data->m_path; path = data->m_path;
path += wxT("/"); path += wxT("/");
path += new_name; path += new_name;
i++; i++;
} while (wxFileExists(path)); } while (wxFileExists(path));
} }
wxLogNull log; wxLogNull log;
if (!wxMkdir(path)) if (!wxMkdir(path))
{ {
wxMessageDialog dialog(this, _("Operation not permitted."), _("Error"), wxOK | wxICON_ERROR ); wxMessageDialog dialog(this, _("Operation not permitted."), _("Error"), wxOK | wxICON_ERROR );
dialog.ShowModal(); dialog.ShowModal();
return; return;
} }
@@ -548,4 +597,4 @@ void wxDirDialog::OnCheck( wxCommandEvent& WXUNUSED(event) )
} }
*/ */
#endif #endif // wxUSE_DIRDLG