]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/dirdlgg.cpp
Changed grid line positioning slightly to line up the cells with the labels.
[wxWidgets.git] / src / generic / dirdlgg.cpp
index 8ea3fa571ed1402726ecb97103e72ed69366b06d..ba118204be019390aff54238d03caadd9e1bcac4 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     12/12/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Harm van der Heijden and Robert Roebling
-// Licence:    wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
 #undef GetFirstChild
 #endif
 
+#ifndef __WXMSW__
 /* XPM */
 static char * icon1_xpm[] = {
 /* width height ncolors chars_per_pixel */
 "16 16 6 1",
 /* colors */
-"      s None  c None",
-".     c #000000",
-"+     c #c0c0c0",
-"@     c #808080",
-"#     c #ffff00",
-"$     c #ffffff",
+"   s None  c None",
+".  c #000000",
+"+  c #c0c0c0",
+"@  c #808080",
+"#  c #ffff00",
+"$  c #ffffff",
 /* pixels */
 "                ",
 "   @@@@@        ",
@@ -84,12 +85,12 @@ static char * icon2_xpm[] = {
 /* width height ncolors chars_per_pixel */
 "16 16 6 1",
 /* colors */
-"      s None  c None",
-".     c #000000",
-"+     c #c0c0c0",
-"@     c #808080",
-"#     c #ffff00",
-"$     c #ffffff",
+"   s None  c None",
+".  c #000000",
+"+  c #c0c0c0",
+"@  c #808080",
+"#  c #ffff00",
+"$  c #ffffff",
 /* pixels */
 "                ",
 "   @@@@@        ",
@@ -108,6 +109,8 @@ static char * icon2_xpm[] = {
 "                ",
 "                "};
 
+#endif // !wxMSW
+
 static const int ID_DIRCTRL = 1000;
 static const int ID_TEXTCTRL = 1001;
 static const int ID_OK = 1002;
@@ -123,8 +126,8 @@ wxDirItemData::wxDirItemData(wxString& path, wxString& name)
 {
     m_path = path;
     m_name = name;
-    /* Insert logic to detect hidden files here 
-     * In UnixLand we just check whether the first char is a dot 
+    /* Insert logic to detect hidden files here
+     * In UnixLand we just check whether the first char is a dot
      * For FileNameFromPath read LastDirNameInThisPath ;-) */
     // m_isHidden = (bool)(wxFileNameFromPath(*m_path)[0] == '.');
     m_isHidden = FALSE;
@@ -143,7 +146,7 @@ void wxDirItemData::SetNewDirName( wxString path )
 
 bool wxDirItemData::HasSubDirs()
 {
-    wxString search = m_path + "/*";
+    wxString search = m_path + wxT("/*");
     wxLogNull log;
     wxString path = wxFindFirstFile( search, wxDIR );
     return (bool)(!path.IsNull());
@@ -173,11 +176,13 @@ wxDirCtrl::wxDirCtrl(wxWindow *parent, const wxWindowID id, const wxString &WXUN
  :
   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
+
     m_showHidden = FALSE;
     m_rootId = AddRoot( _("Sections") );
     SetItemHasChildren(m_rootId);
@@ -188,21 +193,26 @@ wxDirCtrl::wxDirCtrl(wxWindow *parent, const wxWindowID id, const wxString &WXUN
 #define ADD_SECTION(a,b) \
   if (wxPathExists((a))) { m_paths.Add( (a) ); m_names.Add( (b) ); };
 
-void wxDirCtrl::SetupSections() 
+void wxDirCtrl::SetupSections()
 {
   wxString home;
 
   m_paths.Clear();
   m_names.Clear();
-  ADD_SECTION(_T("/"), _("The Computer") )
+#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(_T("/mnt"), _("Mounted Devices") )
-  ADD_SECTION(_T("/usr"), _("User") )
-  ADD_SECTION(_T("/usr/local"), _("User Local") )
-  ADD_SECTION(_T("/var"), _("Variables") )
-  ADD_SECTION(_T("/etc"), _("Etcetera") )
-  ADD_SECTION(_T("/tmp"), _("Temporary") )
+  ADD_SECTION(wxT("/mnt"), _("Mounted Devices") )
+  ADD_SECTION(wxT("/usr"), _("User") )
+  ADD_SECTION(wxT("/usr/local"), _("User Local") )
+  ADD_SECTION(wxT("/var"), _("Variables") )
+  ADD_SECTION(wxT("/etc"), _("Etcetera") )
+  ADD_SECTION(wxT("/tmp"), _("Temporary") )
+#endif
 }
 #undef ADD_SECTION
 
@@ -212,11 +222,16 @@ void wxDirCtrl::CreateItems(const wxTreeItemId &parent)
     wxDirItemData *dir_item;
 
 //  wxASSERT(m_paths.Count() == m_names.Count());  ?
-  
-    for (unsigned int i=0; i<m_paths.Count(); i++) 
+
+    for (unsigned int i=0; i<m_paths.Count(); i++)
     {
         dir_item = new wxDirItemData(m_paths[i],m_names[i]);
-        id = AppendItem( parent, m_names[i], 0, 1, dir_item);
+#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);
     }
 }
@@ -229,7 +244,7 @@ void wxDirCtrl::OnBeginEditItem(wxTreeEvent &event)
         event.Veto();
         return;
     }
-    
+
     // don't rename the individual sections
     if (GetParent( event.GetItem() ) == m_rootId)
     {
@@ -243,31 +258,31 @@ void wxDirCtrl::OnEndEditItem(wxTreeEvent &event)
     if ((event.GetLabel().IsEmpty()) ||
         (event.GetLabel() == _(".")) ||
         (event.GetLabel() == _("..")) ||
-       (event.GetLabel().First( _T("/") ) != wxNOT_FOUND))
+  (event.GetLabel().First( wxT("/") ) != wxNOT_FOUND))
     {
         wxMessageDialog dialog(this, _("Illegal directory name."), _("Error"), wxOK | wxICON_ERROR );
-       dialog.ShowModal();
+  dialog.ShowModal();
         event.Veto();
-       return;
+  return;
     }
 
     wxTreeItemId id = event.GetItem();
     wxDirItemData *data = (wxDirItemData*)GetItemData( id );
     wxASSERT( data );
-    
+
     wxString new_name( wxPathOnly( data->m_path ) );
-    new_name += _T("/");
+    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();
+  dialog.ShowModal();
         event.Veto();
     }
-    
+
     if (wxRenameFile(data->m_path,new_name))
     {
         data->SetNewDirName( new_name );
@@ -275,7 +290,7 @@ void wxDirCtrl::OnEndEditItem(wxTreeEvent &event)
     else
     {
         wxMessageDialog dialog(this, _("Operation not permitted."), _("Error"), wxOK | wxICON_ERROR );
-       dialog.ShowModal();
+  dialog.ShowModal();
         event.Veto();
     }
 }
@@ -299,24 +314,28 @@ void wxDirCtrl::OnExpandItem(wxTreeEvent &event)
 
     m_paths.Clear();
     m_names.Clear();
+#ifdef __WXMSW__
+    search = data->m_path + "\\*.*";
+#else
     search = data->m_path + "/*";
-    for (path = wxFindFirstFile( search, wxDIR ); !path.IsNull(); 
-       path=wxFindNextFile() ) 
+#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 != "..")) 
+        if ((filename != ".") && (filename != ".."))
         {
             m_paths.Add(path);
             m_names.Add(filename);
         }
     }
-    
+
     CreateItems( event.GetItem() );
     SortChildren( event.GetItem() );
-      
+
     wxEndBusyCursor();
 }
 
@@ -327,10 +346,10 @@ void wxDirCtrl::OnCollapseItem(wxTreeEvent &event )
     /* Workaround because DeleteChildren has disapeared (why?) and
      * CollapseAndReset doesn't work as advertised (deletes parent too) */
     child = GetFirstChild(parent, cookie);
-    while (child.IsOk()) 
+    while (child.IsOk())
     {
         Delete(child);
-        /* Not GetNextChild below, because the cookie mechanism can't 
+        /* Not GetNextChild below, because the cookie mechanism can't
          * handle disappearing children! */
         child = GetFirstChild(parent, cookie);
     }
@@ -341,11 +360,7 @@ void wxDirCtrl::OnCollapseItem(wxTreeEvent &event )
 //-----------------------------------------------------------------------------
 
 
-#if !USE_SHARED_LIBRARY
-IMPLEMENT_CLASS(wxDirDialog, wxDialog)
-#else
 IMPLEMENT_DYNAMIC_CLASS( wxDirDialog, wxDialog )
-#endif
 
 BEGIN_EVENT_TABLE( wxDirDialog, wxDialog )
   EVT_TREE_KEY_DOWN        (ID_DIRCTRL,   wxDirDialog::OnTreeKeyDown)
@@ -359,33 +374,33 @@ BEGIN_EVENT_TABLE( wxDirDialog, wxDialog )
 END_EVENT_TABLE()
 
 wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
-                        const wxString& defaultPath, long style, 
-                        const wxPoint& pos) : 
+       const wxString& defaultPath, long style,
+       const wxPoint& pos) :
   wxDialog(parent, -1, message, pos, wxSize(300,300),
-          wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
+     wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
 {
     m_message = message;
     m_dialogStyle = style;
     m_parent = parent;
-  
+
     m_path = defaultPath;
-  
+
     wxBeginBusyCursor();
-    
+
     wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
 
     // 1) dir ctrl
-    m_dir = new wxDirCtrl( this, ID_DIRCTRL, "/", wxDefaultPosition, wxSize(200,200), 
-      wxTR_HAS_BUTTONS | wxSUNKEN_BORDER | wxTR_EDIT_LABELS); 
+    m_dir = new wxDirCtrl( this, ID_DIRCTRL, "/", wxDefaultPosition, wxSize(200,200),
+      wxTR_HAS_BUTTONS | wxSUNKEN_BORDER | wxTR_EDIT_LABELS);
     topsizer->Add( m_dir, 1, wxTOP|wxLEFT|wxRIGHT | wxEXPAND, 10 );
+
     // 2) text ctrl
-    m_input = new wxTextCtrl( this, ID_TEXTCTRL, m_path, wxDefaultPosition ); 
+    m_input = new wxTextCtrl( this, ID_TEXTCTRL, m_path, wxDefaultPosition );
     topsizer->Add( m_input, 0, wxTOP|wxLEFT|wxRIGHT | wxEXPAND, 10 );
-    
+
     // m_check = new wxCheckBox( this, ID_CHECK, _("Show hidden") );
     // m_check->SetValue(TRUE);
-    
+
 #if wxUSE_STATLINE
     // 3) static line
     topsizer->Add( new wxStaticLine( this, -1 ), 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10 );
@@ -399,15 +414,15 @@ wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
     buttonsizer->Add( m_cancel, 0, wxLEFT|wxRIGHT, 10 );
     m_new = new wxButton( this, ID_NEW, _("New...") );
     buttonsizer->Add( m_new, 0, wxLEFT|wxRIGHT, 10 );
-    
+
     topsizer->Add( buttonsizer, 0, wxALL | wxCENTER, 10 );
 
     m_ok->SetDefault();
     m_dir->SetFocus();
-    
+
     SetAutoLayout( TRUE );
     SetSizer( topsizer );
-    
+
     topsizer->SetSizeHints( this );
     topsizer->Fit( this );
 
@@ -425,14 +440,14 @@ int wxDirDialog::ShowModal()
 void wxDirDialog::OnTreeSelected( wxTreeEvent &event )
 {
     wxDirItemData *data = (wxDirItemData*)m_dir->GetItemData(event.GetItem());
-    if (data) 
+    if (data)
        m_input->SetValue( data->m_path );
 };
 
 void wxDirDialog::OnTreeKeyDown( wxTreeEvent &WXUNUSED(event) )
 {
     wxDirItemData *data = (wxDirItemData*)m_dir->GetItemData(m_dir->GetSelection());
-    if (data) 
+    if (data)
         m_input->SetValue( data->m_path );
 };
 
@@ -461,7 +476,7 @@ void wxDirDialog::OnOK( wxCommandEvent& WXUNUSED(event) )
     else {
       // Trouble...
       msg = _("Failed to create directory ")+m_path+
-       _("\n(Do you have the required permissions?)");
+  _("\n(Do you have the required permissions?)");
       wxMessageDialog errmsg(this, msg, _("Error creating directory"), wxOK | wxICON_ERROR);
       errmsg.ShowModal();
       // We still don't have a valid dir. Back to the main dialog.
@@ -481,8 +496,8 @@ void wxDirDialog::OnNew( wxCommandEvent& WXUNUSED(event) )
     if ((id == m_dir->GetRootItem()) ||
         (m_dir->GetParent(id) == m_dir->GetRootItem()))
     {
-        wxMessageDialog msg(this, _("You cannot add a new directory to this section."), 
-                                 _("Create directory"), wxOK | wxICON_INFORMATION );
+        wxMessageDialog msg(this, _("You cannot add a new directory to this section."),
+                            _("Create directory"), wxOK | wxICON_INFORMATION );
         msg.ShowModal();
         return;
     }
@@ -490,33 +505,33 @@ void wxDirDialog::OnNew( wxCommandEvent& WXUNUSED(event) )
     wxTreeItemId parent = m_dir->GetParent( id );
     wxDirItemData *data = (wxDirItemData*)m_dir->GetItemData( parent );
     wxASSERT( data );
-    
-    wxString new_name( _T("NewName") );
+
+    wxString new_name( wxT("NewName") );
     wxString path( data->m_path );
-    path += _T( "/" );
+    path += wxT("/");
     path += new_name;
     if (wxFileExists(path))
     {
         // try NewName0, NewName1 etc.
         int i = 0;
-       do {
-            new_name = _T("NewName");
-           wxString num;
-           num.Printf( "%d", i );
-           new_name += num;
-           
+  do {
+            new_name = wxT("NewName");
+      wxString num;
+      num.Printf( wxT("%d"), i );
+      new_name += num;
+
             path = data->m_path;
-            path += _T( "/" );
+            path += wxT("/");
             path += new_name;
-           i++;
-       } while (wxFileExists(path));
+      i++;
+  } while (wxFileExists(path));
     }
-       
+
     wxLogNull log;
-    if (!wxMkdir(path)) 
+    if (!wxMkdir(path))
     {
         wxMessageDialog dialog(this, _("Operation not permitted."), _("Error"), wxOK | wxICON_ERROR );
-       dialog.ShowModal();
+  dialog.ShowModal();
         return;
     }