]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/filedlgg.cpp
More stubs
[wxWidgets.git] / src / generic / filedlgg.cpp
index 234b5b841a79b85ca3a2260e5dfc8a6d8439f54c..6dfcb6a23445d731da06050980cc39e3b5a8c2d2 100644 (file)
     #include "wx/tooltip.h"
 #endif
 
-#include "sys/types.h"
-#include "sys/stat.h"
-#include "dirent.h"
-#include "pwd.h"
-#include "grp.h"
-#include "time.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <pwd.h>
+#include <grp.h>
+#include <time.h>
+#include <unistd.h>
 
 #include "wx/generic/home.xpm"
 #include "wx/generic/listview.xpm"
@@ -522,14 +523,15 @@ void wxFileCtrl::OnListEndLabelEdit( wxListEvent &event )
 // wxFileDialog
 //-----------------------------------------------------------------------------
 
-#define  ID_LIST_MODE     5000
-#define  ID_REPORT_MODE   5001
-#define  ID_UP_DIR        5005
-#define  ID_PARENT_DIR    5006
-#define  ID_NEW_DIR       5007
-#define  ID_CHOICE        5008
-#define  ID_TEXT          5009
-#define  ID_LIST_CTRL     5010
+#define  ID_LIST_MODE     wxID_FILEDLGG
+#define  ID_REPORT_MODE   wxID_FILEDLGG + 1
+#define  ID_UP_DIR        wxID_FILEDLGG + 5
+#define  ID_PARENT_DIR    wxID_FILEDLGG + 6
+#define  ID_NEW_DIR       wxID_FILEDLGG + 7
+#define  ID_CHOICE        wxID_FILEDLGG + 8
+#define  ID_TEXT          wxID_FILEDLGG + 9
+#define  ID_LIST_CTRL     wxID_FILEDLGG + 10
+#define  ID_ACTIVATED     wxID_FILEDLGG + 11
 
 IMPLEMENT_DYNAMIC_CLASS(wxFileDialog,wxDialog)
 
@@ -553,14 +555,18 @@ wxFileDialog::wxFileDialog(wxWindow *parent,
                  const wxString& wildCard,
                  long style,
                  const wxPoint& pos ) :
-  wxDialog( parent, -1, message, pos, wxDefaultSize, style | wxRESIZE_BORDER )
+  wxDialog( parent, -1, message, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER )
 {
     wxBeginBusyCursor();
     
     m_message = message;
     m_dialogStyle = style;
     m_dir = defaultDir;
-    if (m_dir.IsEmpty()) m_dir = wxGetUserHome();
+    if (m_dir.IsEmpty())
+    {
+        char buf[200];
+       m_dir = getcwd( buf, sizeof(buf) );
+    }
     m_path = defaultDir;
     m_path += _T("/");
     m_path += defaultFile;
@@ -632,6 +638,12 @@ wxFileDialog::wxFileDialog(wxWindow *parent,
     
     mainsizer->Add( buttonsizer, 0, wxALL | wxEXPAND, 5 );
     
+    wxBoxSizer *staticsizer = new wxBoxSizer( wxHORIZONTAL );
+    staticsizer->Add( new wxStaticText( this, -1, _("Current directory:") ), 0, wxRIGHT, 10 );
+    m_static = new wxStaticText( this, -1, m_dir );
+    staticsizer->Add( m_static, 1 );
+    mainsizer->Add( staticsizer, 0, wxEXPAND | wxLEFT|wxRIGHT|wxBOTTOM, 10 );
+
     m_list = new wxFileCtrl( this, ID_LIST_CTRL, m_dir, firstWild, wxDefaultPosition, wxSize(440,180), 
       wxLC_LIST | wxSUNKEN_BORDER | wxLC_SINGLE_SEL );
     mainsizer->Add( m_list, 1, wxEXPAND | wxLEFT|wxRIGHT, 10 );
@@ -664,8 +676,11 @@ wxFileDialog::wxFileDialog(wxWindow *parent,
     mainsizer->SetSizeHints( this );
     
     Centre( wxBOTH );
-    
-    m_list->SetFocus();
+
+    if (m_fileName.IsEmpty())
+        m_list->SetFocus();
+    else
+        m_text->SetFocus();
     
     wxEndBusyCursor();
 }
@@ -712,8 +727,28 @@ void wxFileDialog::OnListOk( wxCommandEvent &event )
     {
         m_list->GoToParentDir();
         m_list->SetFocus();
+        m_list->GetDir( dir );
+        m_static->SetLabel( dir );
+       return;
+    }
+
+    if (filename == _T("~"))
+    {
+        m_list->GoToHomeDir();
+        m_list->SetFocus();
+        m_list->GetDir( dir );
+        m_static->SetLabel( dir );
        return;
     }
+    
+    if (filename[0] == _T('~'))
+    {
+        filename.Remove( 0, 1 );
+       wxString tmp( wxGetUserHome() );
+       tmp += _T('/');
+       tmp += filename;
+       filename = tmp;
+    }
 
     if ((filename.Find(_T('*')) != wxNOT_FOUND) ||
         (filename.Find(_T('?')) != wxNOT_FOUND))
@@ -728,13 +763,21 @@ void wxFileDialog::OnListOk( wxCommandEvent &event )
     }
 
     if (dir != _T("/")) dir += _T("/");
-    dir += filename;
-    filename = dir;
+    if (filename[0] != _T('/'))
+    {
+        dir += filename;
+        filename = dir;
+    }
     
     if (wxDirExists(filename))
     {
         m_list->GoToDir( filename );
-       m_text->SetValue( _T("") );
+       if (filename == _T("/"))
+           m_text->SetValue( _T("") );
+       else
+           m_text->SetValue( _T("..") );
+        m_list->GetDir( dir );
+        m_static->SetLabel( dir );
        return;
     }
     
@@ -779,12 +822,18 @@ void wxFileDialog::OnUp( wxCommandEvent &WXUNUSED(event) )
 {
     m_list->GoToParentDir();
     m_list->SetFocus();
+    wxString dir;
+    m_list->GetDir( dir );
+    m_static->SetLabel( dir );
 }
 
 void wxFileDialog::OnHome( wxCommandEvent &WXUNUSED(event) )
 {
     m_list->GoToHomeDir();
     m_list->SetFocus();
+    wxString dir;
+    m_list->GetDir( dir );
+    m_static->SetLabel( dir );
 }
 
 void wxFileDialog::OnNew( wxCommandEvent &WXUNUSED(event) )