#if wxUSE_FILEDLG
-#if !defined(__UNIX__) && !defined(__DOS__)
-#error wxFileDialog currently only supports Unix and DOS
+#if !defined(__UNIX__) && !defined(__DOS__) && !defined(__WIN32__)
+#error wxFileDialog currently only supports Unix, win32 and DOS
#endif
#include "wx/checkbox.h"
#endif
#include <time.h>
+#if defined(__UNIX__) || defined(__DOS__)
#include <unistd.h>
+#endif
// ----------------------------------------------------------------------------
// constants
static wxBitmap CreateAntialiasedBitmap(const wxImage& img)
{
- wxImage small(16, 16);
+ wxImage smallimg (16, 16);
unsigned char *p1, *p2, *ps;
unsigned char mr = img.GetMaskRed(),
mg = img.GetMaskGreen(),
unsigned x, y;
unsigned sr, sg, sb, smask;
- p1 = img.GetData(), p2 = img.GetData() + 3 * 32, ps = small.GetData();
- small.SetMaskColour(mr, mr, mr);
+ p1 = img.GetData(), p2 = img.GetData() + 3 * 32, ps = smallimg.GetData();
+ smallimg.SetMaskColour(mr, mr, mr);
for (y = 0; y < 16; y++)
{
p1 += 32 * 3, p2 += 32 * 3;
}
- return wxBitmap(small);
+ return wxBitmap(smallimg);
}
// finds empty borders and return non-empty area of image:
m_HashTable.Put(extension, new wxFileIconEntry(newid));
return newid;
}
+#ifdef __WIN32__
+ wxBitmap myBitmap (ic.GetWidth(), ic.GetHeight() ) ;
+ wxMemoryDC memDC;
+ memDC.SelectObject( myBitmap );
+ memDC.DrawIcon(ic,0,0);
+ memDC.SelectObject( wxNullBitmap );
+ wxImage img = myBitmap.ConvertToImage();
+#else
wxImage img = ic.ConvertToImage();
+#endif
delete ft;
int id = m_ImageList.GetImageCount();
// ----------------------------------------------------------------------------
static
-int ListCompare( long data1, long data2, long WXUNUSED(data) )
+int ListCompare( long data1, long data2, long WXUNUSED(data))
{
wxFileData *fd1 = (wxFileData*)data1 ;
wxFileData *fd2 = (wxFileData*)data2 ;
// struct passwd *user = getpwuid( buff.st_uid );
// struct group *grp = getgrgid( buff.st_gid );
- m_isDir = S_ISDIR( buff.st_mode );
- m_isExe = ((buff.st_mode & S_IXUSR ) == S_IXUSR );
+#ifdef __VISUALC__
+ m_isDir = ((buff.st_mode & _S_IFDIR ) == _S_IFDIR );
+#else
+ m_isDir = S_ISDIR( buff.st_mode );
+#endif // VC++
+ m_isExe = ((buff.st_mode & wxS_IXUSR ) == wxS_IXUSR );
m_size = buff.st_size;
char buffer[10];
sprintf( buffer, "%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' : '-') );
+ ((( buff.st_mode & wxS_IRUSR ) == wxS_IRUSR ) ? 'r' : '-'),
+ ((( buff.st_mode & wxS_IWUSR ) == wxS_IWUSR ) ? 'w' : '-'),
+ ((( buff.st_mode & wxS_IXUSR ) == wxS_IXUSR ) ? 'x' : '-') );
#if wxUSE_UNICODE
m_permissions = wxConvUTF8.cMB2WC( buffer );
#else
}
}
- SortItems(ListCompare, 0);
+ SortItems((wxListCtrlCompare)ListCompare, 0);
if ( my_style & wxLC_REPORT )
{
if (id != -1)
{
- SortItems( ListCompare, 0 );
+ SortItems( (wxListCtrlCompare) ListCompare, 0 );
id = FindItem( 0, (long)fd );
EnsureVisible( id );
EditLabel( id );
EVT_LIST_ITEM_ACTIVATED(ID_LIST_CTRL, wxFileDialog::OnActivated)
EVT_CHOICE(ID_CHOICE,wxFileDialog::OnChoiceFilter)
EVT_TEXT_ENTER(ID_TEXT,wxFileDialog::OnTextEnter)
+ EVT_TEXT(ID_TEXT,wxFileDialog::OnTextChange)
EVT_CHECKBOX(ID_CHECK,wxFileDialog::OnCheck)
END_EVENT_TABLE()
GetEventHandler()->ProcessEvent( cevent );
}
+static bool ignoreChanges = FALSE;
+
+void wxFileDialog::OnTextChange( wxCommandEvent &WXUNUSED(event) )
+{
+ if (!ignoreChanges)
+ {
+ // Clear selections. Otherwise when the user types in a value they may
+ // not get the file whose name they typed.
+ if (m_list->GetSelectedItemCount() > 0)
+ {
+ long item = m_list->GetNextItem(-1, wxLIST_NEXT_ALL,
+ wxLIST_STATE_SELECTED);
+ while ( item != -1 )
+ {
+ m_list->SetItemState(item,0, wxLIST_STATE_SELECTED);
+ item = m_list->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
+ }
+ }
+ }
+}
+
void wxFileDialog::OnSelected( wxListEvent &event )
{
wxString filename( event.m_item.m_text );
dir += filename;
if (wxDirExists(dir)) return;
+ ignoreChanges = TRUE;
m_text->SetValue( filename );
+ ignoreChanges = FALSE;
}
void wxFileDialog::HandleAction( const wxString &fn )