- m_showHidden = FALSE;
-}
-
-wxDirCtrl::wxDirCtrl(wxWindow *parent,
- const wxWindowID id,
- const wxString &WXUNUSED(dir),
- const wxPoint& pos,
- const wxSize& size,
- const long style,
- const wxString& name )
- : wxTreeCtrl( parent, id, pos, size, style, wxDefaultValidator, name )
-{
-#ifndef __WXMSW__
- m_imageListNormal = new wxImageList(16, 16, TRUE);
- m_imageListNormal->Add(wxICON(icon1));
- m_imageListNormal->Add(wxICON(icon2));
- SetImageList(m_imageListNormal);
-#endif // !MSW
-
- m_showHidden = FALSE;
- m_rootId = AddRoot( _("Sections") );
- SetItemHasChildren(m_rootId);
- Expand(m_rootId); // automatically expand first level
-}
-
-/* Quick macro. Don't worry, I'll #undef it later */
-#define ADD_SECTION(a,b) \
- if (wxPathExists((a))) { m_paths.Add( (a) ); m_names.Add( (b) ); };
-
-void wxDirCtrl::SetupSections()
-{
- wxString home;
-
- m_paths.Clear();
- m_names.Clear();
-#ifdef __WXMSW__
- // better than nothing
- ADD_SECTION(wxT("c:\\"), _("My Harddisk") )
-#else
- ADD_SECTION(wxT("/"), _("The Computer") )
- wxGetHomeDir(&home);
- ADD_SECTION(home, _("My Home") )
- ADD_SECTION(wxT("/mnt"), _("Mounted Devices") )
- ADD_SECTION(wxT("/usr/local"), _("User Local") )
- ADD_SECTION(wxT("/usr"), _("User") )
- ADD_SECTION(wxT("/var"), _("Variables") )
- ADD_SECTION(wxT("/etc"), _("Etcetera") )
- ADD_SECTION(wxT("/tmp"), _("Temporary") )
-#endif
-}
-#undef ADD_SECTION
-
-void wxDirCtrl::CreateItems(const wxTreeItemId &parent)
-{
- wxTreeItemId id;
- wxDirItemData *dir_item;
-
-// wxASSERT(m_paths.Count() == m_names.Count()); ?
-
- size_t count = m_paths.GetCount();
- for ( size_t i=0; i<count; i++)
- {
- dir_item = new wxDirItemData(m_paths[i],m_names[i]);
-#ifdef __WXMSW__
- id = AppendItem( parent, m_names[i], -1, -1, dir_item);
-#else
- id = AppendItem( parent, m_names[i], 0, -1, dir_item);
- SetItemImage( id, 1, wxTreeItemIcon_Expanded );
-#endif
- if (dir_item->m_hasSubDirs) SetItemHasChildren(id);
- }
-}
-
-void wxDirCtrl::OnBeginEditItem(wxTreeEvent &event)
-{
- // don't rename the main entry "Sections"
- if (event.GetItem() == m_rootId)
- {
- event.Veto();
- return;
- }
-
- // don't rename the individual sections
- if (GetParent( event.GetItem() ) == m_rootId)
- {
- event.Veto();
- return;
- }
-}
-
-void wxDirCtrl::OnEndEditItem(wxTreeEvent &event)
-{
- if ((event.GetLabel().IsEmpty()) ||
- (event.GetLabel() == _(".")) ||
- (event.GetLabel() == _("..")) ||
- (event.GetLabel().First( wxT("/") ) != wxNOT_FOUND))
- {
- wxMessageDialog dialog(this, _("Illegal directory name."), _("Error"), wxOK | wxICON_ERROR );
- dialog.ShowModal();
- event.Veto();
- return;
- }
-
- wxTreeItemId id = event.GetItem();
- wxDirItemData *data = (wxDirItemData*)GetItemData( id );
- wxASSERT( data );
-
- wxString new_name( wxPathOnly( data->m_path ) );
- new_name += wxT("/");
- new_name += event.GetLabel();
-
- wxLogNull log;
-
- if (wxFileExists(new_name))
- {
- wxMessageDialog dialog(this, _("File name exists already."), _("Error"), wxOK | wxICON_ERROR );
- dialog.ShowModal();
- event.Veto();
- }
-
- if (wxRenameFile(data->m_path,new_name))
- {
- data->SetNewDirName( new_name );
- }
- else
- {
- wxMessageDialog dialog(this, _("Operation not permitted."), _("Error"), wxOK | wxICON_ERROR );
- dialog.ShowModal();
- event.Veto();
- }
-}
-
-void wxDirCtrl::OnExpandItem(wxTreeEvent &event)
-{
- if (event.GetItem() == m_rootId)
- {
- SetupSections();
- CreateItems(m_rootId);
- return;
- }
-
- // This may take a longish time. Go to busy cursor
- wxBeginBusyCursor();
-
- wxDirItemData *data = (wxDirItemData *)GetItemData(event.GetItem());
- wxASSERT(data);
-
- wxString search,path,filename;
-
- m_paths.Clear();
- m_names.Clear();
-#ifdef __WXMSW__
- search = data->m_path + "\\*.*";
-#else
- search = data->m_path + "/*";
-#endif
- for (path = wxFindFirstFile( search, wxDIR ); !path.IsNull();
- path=wxFindNextFile() )
- {
- filename = wxFileNameFromPath( path );
- /* Don't add "." and ".." to the tree. I think wxFindNextFile
- * also checks this, but I don't quite understand what happens
- * there. Also wxFindNextFile seems to swallow hidden dirs */
- if ((filename != ".") && (filename != ".."))
- {
- m_paths.Add(path);
- m_names.Add(filename);
- }
- }
-
- CreateItems( event.GetItem() );
- SortChildren( event.GetItem() );
-
- wxEndBusyCursor();
-}
-
-void wxDirCtrl::OnCollapseItem(wxTreeEvent &event )
-{
- wxTreeItemId child, parent = event.GetItem();
- long cookie;
- /* Workaround because DeleteChildren has disapeared (why?) and
- * CollapseAndReset doesn't work as advertised (deletes parent too) */
- child = GetFirstChild(parent, cookie);
- while (child.IsOk())
- {
- Delete(child);
- /* Not GetNextChild below, because the cookie mechanism can't
- * handle disappearing children! */
- child = GetFirstChild(parent, cookie);
- }
-}
-
-//-----------------------------------------------------------------------------
-// wxDirDialog
-//-----------------------------------------------------------------------------
-
-
-IMPLEMENT_DYNAMIC_CLASS( wxDirDialog, wxDialog )
-
-BEGIN_EVENT_TABLE( wxDirDialog, wxDialog )
- EVT_TREE_KEY_DOWN (ID_DIRCTRL, wxDirDialog::OnTreeKeyDown)
- EVT_TREE_SEL_CHANGED (ID_DIRCTRL, wxDirDialog::OnTreeSelected)
- EVT_SIZE ( wxDirDialog::OnSize)
- EVT_BUTTON (ID_OK, wxDirDialog::OnOK)
- EVT_BUTTON (ID_CANCEL, wxDirDialog::OnCancel)
- EVT_BUTTON (ID_NEW, wxDirDialog::OnNew)
- EVT_TEXT_ENTER (ID_TEXTCTRL, wxDirDialog::OnOK)
- // EVT_CHECKBOX (ID_CHECK, wxDirDialog::OnCheck)
-END_EVENT_TABLE()
-
-wxDirDialog::wxDirDialog(wxWindow *parent,
- const wxString& message,
- const wxString& defaultPath,
- long style,
- const wxPoint& pos)
- : wxDialog(parent, -1, message, pos, wxSize(300,300),
- wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
-{
- m_message = message;
- m_dialogStyle = style;
- m_parent = parent;