#pragma hdrstop
#endif
+#if wxUSE_FILEDLG
+
#ifndef __UNIX__
#error wxFileDialog currently only supports unix
#endif
+#include "wx/checkbox.h"
+#include "wx/textctrl.h"
+#include "wx/choice.h"
+#include "wx/checkbox.h"
+#include "wx/stattext.h"
#include "wx/filedlg.h"
#include "wx/debug.h"
#include "wx/log.h"
#include "wx/intl.h"
+#include "wx/listctrl.h"
#include "wx/msgdlg.h"
#include "wx/sizer.h"
#include "wx/bmpbuttn.h"
#include <sys/stat.h>
#include <dirent.h>
#include <pwd.h>
-#include <grp.h>
-#include <time.h>
+#ifndef __VMS
+# include <grp.h>
+#endif
+# include <time.h>
#include <unistd.h>
#include "wx/generic/home.xpm"
#include "wx/generic/deffile.xpm"
#include "wx/generic/exefile.xpm"
+//-----------------------------------------------------------------------------
+// wxFileData
+//-----------------------------------------------------------------------------
+
+class wxFileData : public wxObject
+{
+private:
+ wxString m_name;
+ wxString m_fileName;
+ long m_size;
+ int m_hour;
+ int m_minute;
+ int m_year;
+ int m_month;
+ int m_day;
+ wxString m_permissions;
+ bool m_isDir;
+ bool m_isLink;
+ bool m_isExe;
+
+public:
+ wxFileData() { }
+ wxFileData( const wxString &name, const wxString &fname );
+ wxString GetName() const;
+ wxString GetFullName() const;
+ wxString GetHint() const;
+ wxString GetEntry( int num );
+ bool IsDir();
+ bool IsLink();
+ bool IsExe();
+ long GetSize();
+ void MakeItem( wxListItem &item );
+ void SetNewName( const wxString &name, const wxString &fname );
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxFileData);
+};
+
+//-----------------------------------------------------------------------------
+// wxFileCtrl
+//-----------------------------------------------------------------------------
+
+class wxFileCtrl : public wxListCtrl
+{
+private:
+ wxString m_dirName;
+ bool m_showHidden;
+ wxString m_wild;
+
+public:
+ wxFileCtrl();
+ wxFileCtrl( wxWindow *win,
+ wxWindowID id,
+ const wxString &dirName,
+ const wxString &wild,
+ const wxPoint &pos = wxDefaultPosition,
+ const wxSize &size = wxDefaultSize,
+ long style = wxLC_LIST,
+ const wxValidator &validator = wxDefaultValidator,
+ const wxString &name = wxT("filelist") );
+ void ChangeToListMode();
+ void ChangeToReportMode();
+ void ChangeToIconMode();
+ void ShowHidden( bool show = TRUE );
+ long Add( wxFileData *fd, wxListItem &item );
+ void Update();
+ virtual void StatusbarText( wxChar *WXUNUSED(text) ) {};
+ void MakeDir();
+ void GoToParentDir();
+ void GoToHomeDir();
+ void GoToDir( const wxString &dir );
+ void SetWild( const wxString &wild );
+ void GetDir( wxString &dir );
+ void OnListDeleteItem( wxListEvent &event );
+ void OnListDeleteAllItems( wxListEvent &event );
+ void OnListEndLabelEdit( wxListEvent &event );
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxFileCtrl);
+ DECLARE_EVENT_TABLE()
+};
+
// ----------------------------------------------------------------------------
// private classes - icons list management
// ----------------------------------------------------------------------------
struct stat buff;
stat( m_fileName.fn_str(), &buff );
-#ifndef __EMX__
+#if !defined( __EMX__ ) && !defined(__VMS)
struct stat lbuff;
lstat( m_fileName.fn_str(), &lbuff );
m_isLink = S_ISLNK( lbuff.st_mode );
BEGIN_EVENT_TABLE(wxFileCtrl,wxListCtrl)
EVT_LIST_DELETE_ITEM(-1, wxFileCtrl::OnListDeleteItem)
+ EVT_LIST_DELETE_ALL_ITEMS(-1, wxFileCtrl::OnListDeleteAllItems)
EVT_LIST_END_LABEL_EDIT(-1, wxFileCtrl::OnListEndLabelEdit)
END_EVENT_TABLE()
-
wxFileCtrl::wxFileCtrl()
{
m_dirName = wxT("/");
res = wxFileNameFromPath( f );
fd = new wxFileData( res, f );
wxString s = fd->GetName();
- if (m_showHidden || (s[0] != wxT('.')))
+ if (m_showHidden || (s[0u] != wxT('.')))
{
Add( fd, item );
item.m_itemId++;
res = wxFileNameFromPath( f );
fd = new wxFileData( res, f );
wxString s = fd->GetName();
- if (m_showHidden || (s[0] != wxT('.')))
+ if (m_showHidden || (s[0u] != wxT('.')))
{
Add( fd, item );
item.m_itemId++;
SortItems( ListCompare, 0 );
- SetColumnWidth( 1, wxLIST_AUTOSIZE );
- SetColumnWidth( 2, wxLIST_AUTOSIZE );
- SetColumnWidth( 3, wxLIST_AUTOSIZE );
+ if (my_style & wxLC_REPORT)
+ {
+ SetColumnWidth( 1, wxLIST_AUTOSIZE );
+ SetColumnWidth( 2, wxLIST_AUTOSIZE );
+ SetColumnWidth( 3, wxLIST_AUTOSIZE );
+ }
}
void wxFileCtrl::SetWild( const wxString &wild )
delete fd;
}
+void wxFileCtrl::OnListDeleteAllItems( wxListEvent &WXUNUSED(event) )
+{
+ wxListItem item;
+ item.m_mask = wxLIST_MASK_DATA;
+
+ item.m_itemId = GetNextItem( -1, wxLIST_NEXT_ALL );
+ while ( item.m_itemId != -1 )
+ {
+ GetItem( item );
+ wxFileData *fd = (wxFileData*)item.m_data;
+ delete fd;
+ item.m_data = 0;
+ SetItem( item );
+ item.m_itemId = GetNextItem( item.m_itemId, wxLIST_NEXT_ALL );
+ }
+}
+
void wxFileCtrl::OnListEndLabelEdit( wxListEvent &event )
{
wxFileData *fd = (wxFileData*)event.m_item.m_data;
Centre( wxBOTH );
+/*
if (m_fileName.IsEmpty())
m_list->SetFocus();
else
+*/
m_text->SetFocus();
wxEndBusyCursor();
return;
}
- if (filename[0] == wxT('~'))
+ if (filename[0u] == wxT('~'))
{
filename.Remove( 0, 1 );
wxString tmp( wxGetUserHome() );
}
if (dir != wxT("/")) dir += wxT("/");
- if (filename[0] != wxT('/'))
+ if (filename[0u] != wxT('/'))
{
dir += filename;
filename = dir;
SetPath( filename );
+ // change to the directory where the user went if asked
+ if ( m_dialogStyle & wxCHANGE_DIR )
+ {
+ wxString cwd;
+ wxSplitPath(filename, &cwd, NULL, NULL);
+
+ if ( cwd != wxGetWorkingDirectory() )
+ {
+ wxSetWorkingDirectory(cwd);
+ }
+ }
+
wxCommandEvent event;
wxDialog::OnOK(event);
}
item.m_mask = wxLIST_MASK_TEXT;
item.m_itemId = m_list->GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
- while ( item.m_itemId != -1 )
+ while ( item.m_itemId != -1 )
{
m_list->GetItem( item );
paths.Add( dir + item.m_text );
item.m_mask = wxLIST_MASK_TEXT;
item.m_itemId = m_list->GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
- while ( item.m_itemId != -1 )
+ while ( item.m_itemId != -1 )
{
m_list->GetItem( item );
files.Add( item.m_text );
}
}
-wxString wxLoadFileSelector( const wxChar *what, const wxChar *extension, const wxChar *default_name, wxWindow *parent )
+wxString wxLoadFileSelector( const wxChar *what, const wxChar *ext, const wxChar *default_name, wxWindow *parent )
{
- wxChar *ext = (wxChar *)extension;
+ wxString prompt = wxString::Format(_("Load %s file"), what);
- wxChar prompt[50];
- wxString str = _("Load %s file");
- wxSprintf(prompt, str, what);
+ if (*ext == wxT('.'))
+ ext++;
- if (*ext == wxT('.')) ext++;
- wxChar wild[60];
- wxSprintf(wild, wxT("*.%s"), ext);
+ wxString wild = wxString::Format(_T("*.%s"), ext);
- return wxFileSelector (prompt, (const wxChar *) NULL, default_name, ext, wild, 0, parent);
+ return wxFileSelector(prompt, (const wxChar *) NULL, default_name,
+ ext, wild, 0, parent);
}
wxString wxSaveFileSelector(const wxChar *what, const wxChar *extension, const wxChar *default_name,
{
wxChar *ext = (wxChar *)extension;
- wxChar prompt[50];
- wxString str = _("Save %s file");
- wxSprintf(prompt, str, what);
+ wxString prompt = wxString::Format(_("Save %s file"), what);
- if (*ext == wxT('.')) ext++;
- wxChar wild[60];
- wxSprintf(wild, wxT("*.%s"), ext);
+ if (*ext == wxT('.'))
+ ext++;
- return wxFileSelector (prompt, (const wxChar *) NULL, default_name, ext, wild, 0, parent);
+ wxString wild = wxString::Format(_T("*.%s"), ext);
+
+ return wxFileSelector(prompt, (const wxChar *) NULL, default_name,
+ ext, wild, 0, parent);
}
};
IMPLEMENT_DYNAMIC_CLASS(wxFileDialogGenericModule, wxModule)
+
+#endif // wxUSE_FILEDLG