X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5e0201eaa1e299cb5c37246324464e6e2dce7584..617ec45690c340d059726a09ccfe4bab9a42d82e:/src/generic/filedlgg.cpp
diff --git a/src/generic/filedlgg.cpp b/src/generic/filedlgg.cpp
index fb4ea8ab41..bd3124e1e1 100644
--- a/src/generic/filedlgg.cpp
+++ b/src/generic/filedlgg.cpp
@@ -89,11 +89,11 @@ int ListCompare( long data1, long data2, long WXUNUSED(data) )
{
wxFileData *fd1 = (wxFileData*)data1 ;
wxFileData *fd2 = (wxFileData*)data2 ;
- if (fd1->GetName() == _T("..")) return -1;
- if (fd2->GetName() == _T("..")) return 1;
+ if (fd1->GetName() == wxT("..")) return -1;
+ if (fd2->GetName() == wxT("..")) return 1;
if (fd1->IsDir() && !fd2->IsDir()) return -1;
if (fd2->IsDir() && !fd1->IsDir()) return 1;
- return strcmp( fd1->GetName(), fd2->GetName() );
+ return wxStrcmp( fd1->GetName(), fd2->GetName() );
}
//-----------------------------------------------------------------------------
@@ -108,16 +108,22 @@ wxFileData::wxFileData( const wxString &name, const wxString &fname )
m_fileName = fname;
struct stat buff;
- stat( m_fileName.GetData(), &buff );
- struct stat lbuff;
- lstat( m_fileName.GetData(), &lbuff );
+ stat( m_fileName.fn_str(), &buff );
+#ifndef __EMX__
+ struct stat lbuff;
+ lstat( m_fileName.fn_str(), &lbuff );
+ m_isLink = S_ISLNK( lbuff.st_mode );
struct tm *t = localtime( &lbuff.st_mtime );
+#else
+ m_isLink = FALSE;
+ struct tm *t = localtime( &buff.st_mtime );
+#endif
+
// struct passwd *user = getpwuid( buff.st_uid );
// struct group *grp = getgrgid( buff.st_gid );
m_isDir = S_ISDIR( buff.st_mode );
- m_isLink = S_ISLNK( lbuff.st_mode );
m_isExe = ((buff.st_mode & S_IXUSR ) == S_IXUSR );
m_size = buff.st_size;
@@ -127,11 +133,12 @@ wxFileData::wxFileData( const wxString &name, const wxString &fname )
m_month = t->tm_mon+1;
m_day = t->tm_mday;
m_year = t->tm_year;
+ m_year += 1900;
- m_permissions.sprintf( "%c%c%c",
- ((( buff.st_mode & S_IRUSR ) == S_IRUSR ) ? 'r' : '-'),
- ((( buff.st_mode & S_IWUSR ) == S_IWUSR ) ? 'w' : '-'),
- ((( buff.st_mode & S_IXUSR ) == S_IXUSR ) ? 'x' : '-') );
+ m_permissions.sprintf( wxT("%c%c%c"),
+ ((( buff.st_mode & S_IRUSR ) == S_IRUSR ) ? wxT('r') : wxT('-')),
+ ((( buff.st_mode & S_IWUSR ) == S_IWUSR ) ? wxT('w') : wxT('-')),
+ ((( buff.st_mode & S_IXUSR ) == S_IXUSR ) ? wxT('x') : wxT('-')) );
}
wxString wxFileData::GetName() const
@@ -156,15 +163,15 @@ wxString wxFileData::GetHint() const
s += _(" bytes ");
}
s += IntToString( m_day );
- s += _T(".");
+ s += wxT(".");
s += IntToString( m_month );
- s += _T(".");
+ s += wxT(".");
s += IntToString( m_year );
- s += _T(" ");
+ s += wxT(" ");
s += IntToString( m_hour );
- s += _T(":");
+ s += wxT(":");
s += IntToString( m_minute );
- s += _T(" ");
+ s += wxT(" ");
s += m_permissions;
return s;
};
@@ -175,35 +182,42 @@ wxString wxFileData::GetEntry( int num )
switch (num)
{
case 0:
+ {
s = m_name;
- break;
+ }
+ break;
case 1:
+ {
if (m_isDir) s = _("
");
else if (m_isLink) s = _("");
else s = LongToString( m_size );
- break;
+ }
+ break;
case 2:
- if (m_day < 10) s = _T("0"); else s = _T("");
+ {
+ if (m_day < 10) s = wxT("0"); else s = wxT("");
s += IntToString( m_day );
- s += _T(".");
- if (m_month < 10) s += _T("0");
+ s += wxT(".");
+ if (m_month < 10) s += wxT("0");
s += IntToString( m_month );
- s += _T(".");
- if (m_year < 10) s += _T("0"); // this should happen real soon...
+ s += wxT(".");
s += IntToString( m_year );
- break;
+ }
+ break;
case 3:
- if (m_hour < 10) s = _T("0"); else s = _T("");
+ {
+ if (m_hour < 10) s = wxT("0"); else s = wxT("");
s += IntToString( m_hour );
- s += _T(":");
- if (m_minute < 10) s += _T("0");
+ s += wxT(":");
+ if (m_minute < 10) s += wxT("0");
s += IntToString( m_minute );
break;
+ }
case 4:
s = m_permissions;
break;
default:
- s = _T("No entry");
+ s = wxT("No entry");
break;
}
return s;
@@ -238,14 +252,14 @@ void wxFileData::SetNewName( const wxString &name, const wxString &fname )
void wxFileData::MakeItem( wxListItem &item )
{
item.m_text = m_name;
- item.m_colour = wxBLACK;
- if (IsExe()) item.m_colour = wxRED;
- if (IsDir()) item.m_colour = wxBLUE;
- if (IsDir()) item.m_image = 0; else item.m_image = -1;
+ item.ClearAttributes();
+ if (IsExe()) item.SetTextColour(*wxRED);
+ if (IsDir()) item.SetTextColour(*wxBLUE);
+ item.m_image = IsDir() ? 0 : -1;
if (IsLink())
{
wxColour *dg = wxTheColourDatabase->FindColour( "MEDIUM GREY" );
- item.m_colour = dg;
+ item.SetTextColour(*dg);
}
item.m_data = (long)this;
}
@@ -263,7 +277,7 @@ END_EVENT_TABLE()
wxFileCtrl::wxFileCtrl()
{
- m_dirName = _T("/");
+ m_dirName = wxT("/");
m_showHidden = FALSE;
}
@@ -333,7 +347,7 @@ void wxFileCtrl::Update()
{
InsertColumn( 0, _("Name"), wxLIST_FORMAT_LEFT, 130 );
InsertColumn( 1, _("Size"), wxLIST_FORMAT_LEFT, 60 );
- InsertColumn( 2, _("Date"), wxLIST_FORMAT_LEFT, 55 );
+ InsertColumn( 2, _("Date"), wxLIST_FORMAT_LEFT, 65 );
InsertColumn( 3, _("Time"), wxLIST_FORMAT_LEFT, 50 );
InsertColumn( 4, _("Permissions"), wxLIST_FORMAT_LEFT, 120 );
}
@@ -342,23 +356,23 @@ void wxFileCtrl::Update()
item.m_itemId = 0;
item.m_col = 0;
- if (m_dirName != _T("/"))
+ if (m_dirName != wxT("/"))
{
wxString p( wxPathOnly(m_dirName) );
- if (p.IsEmpty()) p = _T("/");
- fd = new wxFileData( _T(".."), p );
+ if (p.IsEmpty()) p = wxT("/");
+ fd = new wxFileData( wxT(".."), p );
Add( fd, item );
item.m_itemId++;
}
- wxString res = m_dirName + _T("/*");
+ wxString res = m_dirName + wxT("/*");
wxString f( wxFindFirstFile( res.GetData(), wxDIR ) );
while (!f.IsEmpty())
{
res = wxFileNameFromPath( f );
fd = new wxFileData( res, f );
wxString s = fd->GetName();
- if (m_showHidden || (s[0] != _T('.')))
+ if (m_showHidden || (s[0] != wxT('.')))
{
Add( fd, item );
item.m_itemId++;
@@ -366,14 +380,14 @@ void wxFileCtrl::Update()
f = wxFindNextFile();
}
- res = m_dirName + _T("/") + m_wild;
+ res = m_dirName + wxT("/") + m_wild;
f = wxFindFirstFile( res.GetData(), wxFILE );
while (!f.IsEmpty())
{
res = wxFileNameFromPath( f );
fd = new wxFileData( res, f );
wxString s = fd->GetName();
- if (m_showHidden || (s[0] != _T('.')))
+ if (m_showHidden || (s[0] != wxT('.')))
{
Add( fd, item );
item.m_itemId++;
@@ -382,6 +396,10 @@ void wxFileCtrl::Update()
}
SortItems( ListCompare, 0 );
+
+ SetColumnWidth( 1, wxLIST_AUTOSIZE );
+ SetColumnWidth( 2, wxLIST_AUTOSIZE );
+ SetColumnWidth( 3, wxLIST_AUTOSIZE );
}
void wxFileCtrl::SetWild( const wxString &wild )
@@ -392,9 +410,9 @@ void wxFileCtrl::SetWild( const wxString &wild )
void wxFileCtrl::MakeDir()
{
- wxString new_name( _T("NewName") );
+ wxString new_name( wxT("NewName") );
wxString path( m_dirName );
- path += _T( "/" );
+ path += wxT("/");
path += new_name;
if (wxFileExists(path))
{
@@ -403,11 +421,11 @@ void wxFileCtrl::MakeDir()
do {
new_name = _("NewName");
wxString num;
- num.Printf( _T("%d"), i );
+ num.Printf( wxT("%d"), i );
new_name += num;
path = m_dirName;
- path += _T("/");
+ path += wxT("/");
path += new_name;
i++;
} while (wxFileExists(path));
@@ -425,7 +443,7 @@ void wxFileCtrl::MakeDir()
wxListItem item;
item.m_itemId = 0;
item.m_col = 0;
- int id = Add( fd, item );
+ long id = Add( fd, item );
if (id != -1)
{
@@ -438,13 +456,13 @@ void wxFileCtrl::MakeDir()
void wxFileCtrl::GoToParentDir()
{
- if (m_dirName != _T("/"))
+ if (m_dirName != wxT("/"))
{
wxString fname( wxFileNameFromPath(m_dirName) );
m_dirName = wxPathOnly( m_dirName );
- if (m_dirName.IsEmpty()) m_dirName = _T("/");
+ if (m_dirName.IsEmpty()) m_dirName = wxT("/");
Update();
- int id = FindItem( 0, fname );
+ long id = FindItem( 0, fname );
if (id != -1)
{
SetItemState( id, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED );
@@ -489,7 +507,7 @@ void wxFileCtrl::OnListEndLabelEdit( wxListEvent &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();
@@ -498,7 +516,7 @@ void wxFileCtrl::OnListEndLabelEdit( wxListEvent &event )
}
wxString new_name( wxPathOnly( fd->GetFullName() ) );
- new_name += _T("/");
+ new_name += wxT("/");
new_name += event.GetLabel();
wxLogNull log;
@@ -537,6 +555,7 @@ void wxFileCtrl::OnListEndLabelEdit( wxListEvent &event )
#define ID_TEXT wxID_FILEDLGG + 9
#define ID_LIST_CTRL wxID_FILEDLGG + 10
#define ID_ACTIVATED wxID_FILEDLGG + 11
+#define ID_CHECK wxID_FILEDLGG + 12
IMPLEMENT_DYNAMIC_CLASS(wxFileDialog,wxDialog)
@@ -551,6 +570,7 @@ BEGIN_EVENT_TABLE(wxFileDialog,wxDialog)
EVT_LIST_ITEM_ACTIVATED(ID_LIST_CTRL, wxFileDialog::OnActivated)
EVT_CHOICE(ID_CHOICE,wxFileDialog::OnChoice)
EVT_TEXT_ENTER(ID_TEXT,wxFileDialog::OnTextEnter)
+ EVT_CHECKBOX(ID_CHECK,wxFileDialog::OnCheck)
END_EVENT_TABLE()
wxFileDialog::wxFileDialog(wxWindow *parent,
@@ -566,14 +586,18 @@ wxFileDialog::wxFileDialog(wxWindow *parent,
m_message = message;
m_dialogStyle = style;
+
+ if ((m_dialogStyle & wxMULTIPLE ) && !(m_dialogStyle & wxOPEN))
+ m_dialogStyle |= wxOPEN;
+
m_dir = defaultDir;
- if (m_dir.IsEmpty())
+ if ((m_dir.IsEmpty()) || (m_dir == wxT(".")))
{
char buf[200];
m_dir = getcwd( buf, sizeof(buf) );
}
m_path = defaultDir;
- m_path += _T("/");
+ m_path += wxT("/");
m_path += defaultFile;
m_fileName = defaultFile;
m_wildCard = wildCard;
@@ -584,7 +608,7 @@ wxFileDialog::wxFileDialog(wxWindow *parent,
if (m_wildCard.IsEmpty())
m_wildCard = _("All files (*)|*");
- wxStringTokenizer tokens( m_wildCard, _T("|") );
+ wxStringTokenizer tokens( m_wildCard, wxT("|") );
wxString firstWild;
wxString firstWildText;
if (tokens.CountTokens() == 1)
@@ -594,7 +618,7 @@ wxFileDialog::wxFileDialog(wxWindow *parent,
}
else
{
- wxASSERT_MSG( tokens.CountTokens() % 2 == 0, _T("Wrong file type descripition") );
+ wxASSERT_MSG( tokens.CountTokens() % 2 == 0, wxT("Wrong file type descripition") );
firstWildText = tokens.GetNextToken();
firstWild = tokens.GetNextToken();
}
@@ -649,8 +673,12 @@ wxFileDialog::wxFileDialog(wxWindow *parent,
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 );
+ if (m_dialogStyle & wxMULTIPLE)
+ m_list = new wxFileCtrl( this, ID_LIST_CTRL, m_dir, firstWild, wxDefaultPosition,
+ wxSize(440,180), wxLC_LIST | wxSUNKEN_BORDER );
+ else
+ 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 );
wxBoxSizer *textsizer = new wxBoxSizer( wxHORIZONTAL );
@@ -662,6 +690,9 @@ wxFileDialog::wxFileDialog(wxWindow *parent,
wxBoxSizer *choicesizer = new wxBoxSizer( wxHORIZONTAL );
m_choice = new wxChoice( this, ID_CHOICE );
choicesizer->Add( m_choice, 1, wxCENTER|wxALL, 10 );
+ m_check = new wxCheckBox( this, ID_CHECK, _("Show hidden files") );
+ m_check->SetValue( FALSE );
+ choicesizer->Add( m_check, 0, wxCENTER|wxALL, 10 );
choicesizer->Add( new wxButton( this, wxID_CANCEL, _("Cancel") ), 0, wxCENTER | wxALL, 10 );
mainsizer->Add( choicesizer, 0, wxEXPAND );
@@ -696,8 +727,15 @@ wxFileDialog::~wxFileDialog()
void wxFileDialog::OnChoice( wxCommandEvent &event )
{
- wxString *str = (wxString*) m_choice->GetClientData( event.GetInt() );
+ int index = (int)event.GetInt();
+ wxString *str = (wxString*) m_choice->GetClientData( index );
m_list->SetWild( *str );
+ m_filterIndex = index;
+}
+
+void wxFileDialog::OnCheck( wxCommandEvent &event )
+{
+ m_list->ShowHidden( event.GetInt() != 0 );
}
void wxFileDialog::OnActivated( wxListEvent &event )
@@ -715,16 +753,16 @@ void wxFileDialog::OnTextEnter( wxCommandEvent &WXUNUSED(event) )
void wxFileDialog::OnSelected( wxListEvent &event )
{
if (FindFocus() != m_list) return;
-
+
wxString filename( event.m_item.m_text );
- if (filename == _T("..")) return;
-
+ if (filename == wxT("..")) return;
+
wxString dir;
m_list->GetDir( dir );
- if (dir != _T("/")) dir += _T("/");
+ if (dir != wxT("/")) dir += wxT("/");
dir += filename;
if (wxDirExists(dir)) return;
-
+
m_text->SetValue( filename );
}
@@ -734,9 +772,9 @@ void wxFileDialog::HandleAction( const wxString &fn )
wxString dir;
m_list->GetDir( dir );
if (filename.IsEmpty()) return;
- if (filename == _T(".")) return;
+ if (filename == wxT(".")) return;
- if (filename == _T(".."))
+ if (filename == wxT(".."))
{
m_list->GoToParentDir();
m_list->SetFocus();
@@ -745,7 +783,7 @@ void wxFileDialog::HandleAction( const wxString &fn )
return;
}
- if (filename == _T("~"))
+ if (filename == wxT("~"))
{
m_list->GoToHomeDir();
m_list->SetFocus();
@@ -754,19 +792,19 @@ void wxFileDialog::HandleAction( const wxString &fn )
return;
}
- if (filename[0] == _T('~'))
+ if (filename[0] == wxT('~'))
{
filename.Remove( 0, 1 );
wxString tmp( wxGetUserHome() );
- tmp += _T('/');
+ tmp += wxT('/');
tmp += filename;
filename = tmp;
}
- if ((filename.Find(_T('*')) != wxNOT_FOUND) ||
- (filename.Find(_T('?')) != wxNOT_FOUND))
+ if ((filename.Find(wxT('*')) != wxNOT_FOUND) ||
+ (filename.Find(wxT('?')) != wxNOT_FOUND))
{
- if (filename.Find(_T('/')) != wxNOT_FOUND)
+ if (filename.Find(wxT('/')) != wxNOT_FOUND)
{
wxMessageBox(_("Illegal file specification."), _("Error"), wxOK | wxICON_ERROR );
return;
@@ -775,8 +813,8 @@ void wxFileDialog::HandleAction( const wxString &fn )
return;
}
- if (dir != _T("/")) dir += _T("/");
- if (filename[0] != _T('/'))
+ if (dir != wxT("/")) dir += wxT("/");
+ if (filename[0] != wxT('/'))
{
dir += filename;
filename = dir;
@@ -812,7 +850,7 @@ void wxFileDialog::HandleAction( const wxString &fn )
}
SetPath( filename );
-
+
wxCommandEvent event;
wxDialog::OnOK(event);
}
@@ -867,12 +905,61 @@ void wxFileDialog::SetPath( const wxString& path )
wxSplitPath(path, &m_dir, &m_fileName, &ext);
if (!ext.IsEmpty())
{
- m_fileName += _T(".");
+ m_fileName += wxT(".");
m_fileName += ext;
}
}
}
+void wxFileDialog::GetPaths( wxArrayString& paths ) const
+{
+ paths.Empty();
+ if (m_list->GetSelectedItemCount() == 0)
+ {
+ paths.Add( GetPath() );
+ return;
+ }
+
+ paths.Alloc( m_list->GetSelectedItemCount() );
+
+ wxString dir;
+ m_list->GetDir( dir );
+ if (dir != wxT("/")) dir += wxT("/");
+
+ wxListItem item;
+ item.m_mask = wxLIST_MASK_TEXT;
+
+ item.m_itemId = m_list->GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
+ while ( item.m_itemId != -1 ) {
+ m_list->GetItem( item );
+ paths.Add( dir + item.m_text );
+ item.m_itemId = m_list->GetNextItem( item.m_itemId + 1,
+ wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
+ }
+}
+
+void wxFileDialog::GetFilenames(wxArrayString& files) const
+{
+ files.Empty();
+ if (m_list->GetSelectedItemCount() == 0)
+ {
+ files.Add( GetFilename() );
+ return;
+ }
+ files.Alloc( m_list->GetSelectedItemCount() );
+
+ wxListItem item;
+ item.m_mask = wxLIST_MASK_TEXT;
+
+ item.m_itemId = m_list->GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
+ while ( item.m_itemId != -1 ) {
+ m_list->GetItem( item );
+ files.Add( item.m_text );
+ item.m_itemId = m_list->GetNextItem( item.m_itemId + 1,
+ wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
+ }
+}
+
// ----------------------------------------------------------------------------
// global functions
// ----------------------------------------------------------------------------
@@ -888,7 +975,7 @@ wxFileSelectorEx(const wxChar *message,
int x, int y)
{
// TODO: implement this somehow
- return wxFileSelector(message, default_path, default_filename, _T(""),
+ return wxFileSelector(message, default_path, default_filename, wxT(""),
wildcard, flags, parent, x, y);
}
@@ -899,7 +986,7 @@ wxString wxFileSelector( const wxChar *title,
{
wxString filter2;
if ( defaultExtension && !filter )
- filter2 = wxString(_T("*.")) + wxString(defaultExtension) ;
+ filter2 = wxString(wxT("*.")) + wxString(defaultExtension) ;
else if ( filter )
filter2 = filter;
@@ -931,9 +1018,9 @@ wxString wxLoadFileSelector( const wxChar *what, const wxChar *extension, const
wxString str = _("Load %s file");
wxSprintf(prompt, str, what);
- if (*ext == _T('.')) ext++;
+ if (*ext == wxT('.')) ext++;
wxChar wild[60];
- wxSprintf(wild, _T("*.%s"), ext);
+ wxSprintf(wild, wxT("*.%s"), ext);
return wxFileSelector (prompt, (const wxChar *) NULL, default_name, ext, wild, 0, parent);
}
@@ -947,9 +1034,9 @@ wxString wxSaveFileSelector(const wxChar *what, const wxChar *extension, const w
wxString str = _("Save %s file");
wxSprintf(prompt, str, what);
- if (*ext == _T('.')) ext++;
+ if (*ext == wxT('.')) ext++;
wxChar wild[60];
- wxSprintf(wild, _T("*.%s"), ext);
+ wxSprintf(wild, wxT("*.%s"), ext);
return wxFileSelector (prompt, (const wxChar *) NULL, default_name, ext, wild, 0, parent);
}