-/////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
// Name: filedlgg.cpp
// Purpose: wxGenericFileDialog
// Author: Robert Roebling
// Created: 12/12/98
// RCS-ID: $Id$
// Copyright: (c) Robert Roebling
-// Licence: wxWindows licence
+// Licence: wxWidgets licence
/////////////////////////////////////////////////////////////////////////////
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
// wxFileData
//-----------------------------------------------------------------------------
-wxFileData::wxFileData( const wxFileData& fileData )
-{
- m_fileName = fileData.GetFileName();
- m_filePath = fileData.GetFilePath();
- m_size = fileData.GetSize();
- m_dateTime = fileData.GetDateTime();
- m_permissions = fileData.GetPermissions();
- m_type = fileData.GetType();
- m_image = GetImageId();
-}
-
wxFileData::wxFileData( const wxString &filePath, const wxString &fileName, fileType type, int image_id )
{
m_fileName = fileName;
ReadData();
}
+void wxFileData::Copy( const wxFileData& fileData )
+{
+ m_fileName = fileData.GetFileName();
+ m_filePath = fileData.GetFilePath();
+ m_size = fileData.GetSize();
+ m_dateTime = fileData.GetDateTime();
+ m_permissions = fileData.GetPermissions();
+ m_type = fileData.GetType();
+ m_image = GetImageId();
+}
+
void wxFileData::ReadData()
{
if (IsDrive())
// try to get a better icon
if (m_image == wxFileIconsTable::file)
{
- if (IsExe())
+ if (m_fileName.Find(wxT('.'), TRUE) != wxNOT_FOUND)
+ {
+ m_image = wxTheFileIconsTable->GetIconID( m_fileName.AfterLast(wxT('.')));
+ } else if (IsExe())
+ {
m_image = wxFileIconsTable::executable;
- else if (m_fileName.Find(wxT('.'), TRUE) != wxNOT_FOUND)
- m_image = wxTheFileIconsTable->GetIconID(m_fileName.AfterLast(wxT('.')));
+ }
}
m_size = buff.st_size;
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)
EVT_LIST_COL_CLICK(-1, wxFileCtrl::OnListColClick)
END_EVENT_TABLE()
wxBusyCursor bcur; // this may take a while...
- FreeAllItemsData();
DeleteAllItems();
wxListItem item;
for (n=0; n<count; n++)
{
wxFileData *fd = new wxFileData(paths[n], names[n], wxFileData::is_drive, icons[n]);
- Add(fd, item);
+ if (Add(fd, item) != -1)
item.m_itemId++;
+ else
+ delete fd;
}
}
else
if (p.IsEmpty()) p = wxT("/");
#endif // __UNIX__
wxFileData *fd = new wxFileData(p, wxT(".."), wxFileData::is_dir, wxFileIconsTable::folder);
- Add(fd, item);
+ if (Add(fd, item) != -1)
item.m_itemId++;
+ else
+ delete fd;
}
wxString dirname(m_dirName);
while (cont)
{
wxFileData *fd = new wxFileData(dirPrefix + f, f, wxFileData::is_dir, wxFileIconsTable::folder);
- Add(fd, item);
+ if (Add(fd, item) != -1)
item.m_itemId++;
+ else
+ delete fd;
+
cont = dir.GetNext(&f);
}
while (cont)
{
wxFileData *fd = new wxFileData(dirPrefix + f, f, wxFileData::is_file, wxFileIconsTable::file);
- Add(fd, item);
+ if (Add(fd, item) != -1)
item.m_itemId++;
+ else
+ delete fd;
+
cont = dir.GetNext(&f);
}
}
EnsureVisible( id );
EditLabel( id );
}
+ else
+ delete fd;
}
void wxFileCtrl::GoToParentDir()
EnsureVisible( 0 );
}
-void wxFileCtrl::FreeItemData(const wxListItem& item)
+void wxFileCtrl::FreeItemData(wxListItem& item)
{
- wxFileData *fd = (wxFileData*)item.m_data;
- delete fd;
+ if ( item.m_data )
+ {
+ wxFileData *fd = (wxFileData*)item.m_data;
+ delete fd;
+
+ item.m_data = 0;
+ }
}
void wxFileCtrl::OnListDeleteItem( wxListEvent &event )
FreeItemData(event.m_item);
}
+void wxFileCtrl::OnListDeleteAllItems( wxListEvent & WXUNUSED(event) )
+{
+ FreeAllItemsData();
+}
+
void wxFileCtrl::FreeAllItemsData()
{
wxListItem item;
wxFileCtrl::~wxFileCtrl()
{
- FreeAllItemsData();
}
//-----------------------------------------------------------------------------
if (wxConfig::Get(FALSE))
{
- wxConfig::Get()->Read(wxT("/wxWindows/wxFileDialog/ViewStyle"),
+ wxConfig::Get()->Read(wxT("/wxWidgets/wxFileDialog/ViewStyle"),
&ms_lastViewStyle);
- wxConfig::Get()->Read(wxT("/wxWindows/wxFileDialog/ShowHidden"),
+ wxConfig::Get()->Read(wxT("/wxWidgets/wxFileDialog/ShowHidden"),
&ms_lastShowHidden);
}
// PDAs have a different screen layout
mainsizer->Add( m_list, 1, wxEXPAND | wxLEFT|wxRIGHT, 5 );
- wxBoxSizer *choicesizer = new wxBoxSizer( wxHORIZONTAL );
- m_choice = new wxChoice( this, ID_CHOICE );
- choicesizer->Add( m_choice, 1, wxCENTER|wxALL, 5 );
- mainsizer->Add( choicesizer, 0, wxEXPAND );
-
wxBoxSizer *textsizer = new wxBoxSizer( wxHORIZONTAL );
m_text = new wxTextCtrl( this, ID_TEXT, m_fileName, wxDefaultPosition, wxDefaultSize, wxPROCESS_ENTER );
textsizer->Add( m_text, 1, wxCENTER | wxALL, 5 );
mainsizer->Add( textsizer, 0, wxEXPAND );
- m_check = new wxCheckBox( this, ID_CHECK, _("Show hidden files") );
- m_check->SetValue( ms_lastShowHidden );
- textsizer->Add( m_check, 0, wxCENTER|wxALL, 5 );
+ m_check = NULL;
+ m_choice = new wxChoice( this, ID_CHOICE );
+ textsizer->Add( m_choice, 1, wxCENTER|wxALL, 5 );
buttonsizer = new wxBoxSizer( wxHORIZONTAL );
buttonsizer->Add( new wxButton( this, wxID_OK, _("OK") ), 0, wxCENTER | wxALL, 5 );
{
if (wxConfig::Get(FALSE))
{
- wxConfig::Get()->Write(wxT("/wxWindows/wxFileDialog/ViewStyle"),
+ wxConfig::Get()->Write(wxT("/wxWidgets/wxFileDialog/ViewStyle"),
ms_lastViewStyle);
- wxConfig::Get()->Write(wxT("/wxWindows/wxFileDialog/ShowHidden"),
+ wxConfig::Get()->Write(wxT("/wxWidgets/wxFileDialog/ShowHidden"),
ms_lastShowHidden);
}
return wxDialog::ShowModal();
}
+bool wxGenericFileDialog::Show( bool show )
+{
+ if (show)
+ {
+ m_list->GoToDir(m_dir);
+ UpdateControls();
+ m_text->SetValue(m_fileName);
+ }
+
+ return wxDialog::Show( show );
+}
+
void wxGenericFileDialog::DoSetFilterIndex(int filterindex)
{
wxString *str = (wxString*) m_choice->GetClientData( filterindex );