]> git.saurik.com Git - wxWidgets.git/commitdiff
Added new file dialog
authorRobert Roebling <robert@roebling.de>
Tue, 17 Aug 1999 15:55:25 +0000 (15:55 +0000)
committerRobert Roebling <robert@roebling.de>
Tue, 17 Aug 1999 15:55:25 +0000 (15:55 +0000)
  Minor changes to docs and other generic dialogs
  Minor changes to makefiles

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3401 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

16 files changed:
Makefile.in
distrib/msw/tmake/filelist.txt
docs/latex/wx/listctrl.tex
docs/latex/wx/listevt.tex
include/wx/filedlg.h
include/wx/generic/dirdlgg.h
include/wx/generic/extdlgg.h [deleted file]
include/wx/generic/filedlgg.h [new file with mode: 0644]
include/wx/generic/find.xpm [new file with mode: 0644]
include/wx/generic/folder.xpm [new file with mode: 0644]
include/wx/generic/list.xpm [new file with mode: 0644]
include/wx/generic/txt.xpm [new file with mode: 0644]
src/generic/dirdlgg.cpp
src/generic/filedlgg.cpp [new file with mode: 0644]
src/generic/msgdlgg.cpp
src/generic/textdlgg.cpp

index ad0e8f9ce3da51b1a68347d880d2b2c8ee95ad46..b5502050b0cafc523fe8911c6f274eb8ff90d4e6 100644 (file)
@@ -1,6 +1,6 @@
 
 #
-# This file was automatically generated by tmake at 20:13, 1999/08/14
+# This file was automatically generated by tmake at 16:27, 1999/08/17
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE UNX.T!
 
 #
@@ -66,7 +66,10 @@ top_builddir = .
 INSTALL = @INSTALL@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
+# my autoconf doesn't set this
+#INSTALL_SCRIPT = @INSTALL_SCRIPT@
+# maybe do an additional chmod if needed?
+INSTALL_SCRIPT = @INSTALL@ 
 transform = @program_transform_name@
 
 NORMAL_INSTALL = :
@@ -174,6 +177,7 @@ WX_HEADERS = \
                gdicmn.h \
                gdiobj.h \
                grid.h \
+               gsocket.h \
                hash.h \
                help.h \
                helpbase.h \
@@ -556,6 +560,7 @@ GTK_GENERICOBJS = \
                src/generic/colrdlgg.o \
                src/generic/dcpsg.o \
                src/generic/dirdlgg.o \
+               src/generic/filedlgg.o \
                src/generic/fontdlgg.o \
                src/generic/gridg.o \
                src/generic/helphtml.o \
@@ -684,7 +689,6 @@ GTK_GUIOBJS = \
                src/gtk/dcscreen.o \
                src/gtk/dialog.o \
                src/gtk/dnd.o \
-               src/gtk/filedlg.o \
                src/gtk/font.o \
                src/gtk/frame.o \
                src/gtk/gauge.o \
@@ -727,6 +731,7 @@ MOTIF_GENERICOBJS = \
                src/generic/colrdlgg.o \
                src/generic/dcpsg.o \
                src/generic/dirdlgg.o \
+               src/generic/filedlgg.o \
                src/generic/fontdlgg.o \
                src/generic/gridg.o \
                src/generic/helphtml.o \
@@ -1219,17 +1224,17 @@ $(REQUIRED_DIRS):       $(WXDIR)/include/wx/defs.h $(WXDIR)/include/wx/object.h $(WXDI
        $(SHARED_LD) ./lib/$@ $(OBJECTS) $(EXTRALIBS)
        
 CREATE_LINKS:  ./lib/@WX_TARGET_LIBRARY@
-       @if test -e ./lib/@WX_LIBRARY_LINK1@; then rm -f ./lib/@WX_LIBRARY_LINK1@; fi
-       @if test -e ./lib/@WX_LIBRARY_LINK2@; then rm -f ./lib/@WX_LIBRARY_LINK2@; fi
-       @if test -e ./lib/@WX_LIBRARY_LINK3@; then rm -f ./lib/@WX_LIBRARY_LINK3@; fi
+       @if test -e ./lib/@WX_LIBRARY_LINK1@; then $(RM) ./lib/@WX_LIBRARY_LINK1@; fi
+       @if test -e ./lib/@WX_LIBRARY_LINK2@; then $(RM) ./lib/@WX_LIBRARY_LINK2@; fi
+       @if test -e ./lib/@WX_LIBRARY_LINK3@; then $(RM) ./lib/@WX_LIBRARY_LINK3@; fi
        $(LN_S) @WX_TARGET_LIBRARY@ ./lib/@WX_LIBRARY_LINK1@
        $(LN_S) @WX_TARGET_LIBRARY@ ./lib/@WX_LIBRARY_LINK2@
        $(LN_S) @WX_TARGET_LIBRARY@ ./lib/@WX_LIBRARY_LINK3@
        
 CREATE_INSTALLED_LINKS:  $(libdir)/@WX_TARGET_LIBRARY@
-       @if test -e $(libdir)/@WX_LIBRARY_LINK1@; then rm -f $(libdir)/@WX_LIBRARY_LINK1@; fi
-       @if test -e $(libdir)/@WX_LIBRARY_LINK2@; then rm -f $(libdir)/@WX_LIBRARY_LINK2@; fi
-       @if test -e $(libdir)/@WX_LIBRARY_LINK3@; then rm -f $(libdir)/@WX_LIBRARY_LINK3@; fi
+       @if test -e $(libdir)/@WX_LIBRARY_LINK1@; then $(RM) $(libdir)/@WX_LIBRARY_LINK1@; fi
+       @if test -e $(libdir)/@WX_LIBRARY_LINK2@; then $(RM) $(libdir)/@WX_LIBRARY_LINK2@; fi
+       @if test -e $(libdir)/@WX_LIBRARY_LINK3@; then $(RM) $(libdir)/@WX_LIBRARY_LINK3@; fi
        $(LN_S) @WX_TARGET_LIBRARY@ $(libdir)/@WX_LIBRARY_LINK1@
        $(LN_S) @WX_TARGET_LIBRARY@ $(libdir)/@WX_LIBRARY_LINK2@
        $(LN_S) @WX_TARGET_LIBRARY@ $(libdir)/@WX_LIBRARY_LINK3@
@@ -1262,23 +1267,28 @@ preinstall: $(top_builddir)/lib/@WX_TARGET_LIBRARY@ $(top_builddir)/wx-config $(
        @echo " Installing wxWindows..."
        @echo " "
 
+
+       $(INSTALL) -d $(prefix)
+       $(INSTALL) -d $(bindir)
+       $(INSTALL) -d $(libdir)
+
        $(INSTALL_SCRIPT) $(top_builddir)/wx-config $(bindir)/wx-config
        $(INSTALL_PROGRAM) $(top_builddir)/lib/@WX_TARGET_LIBRARY@ $(libdir)/@WX_TARGET_LIBRARY@
-       
-       @mkdir -p $(libdir)/wx
-       @mkdir -p $(libdir)/wx/include
-       @mkdir -p $(libdir)/wx/include/wx
-       @mkdir -p $(libdir)/wx/include/wx/@TOOLKIT_DIR@
+
+       $(INSTALL) -d $(libdir)/wx
+       $(INSTALL) -d $(libdir)/wx/include
+       $(INSTALL) -d $(libdir)/wx/include/wx
+       $(INSTALL) -d $(libdir)/wx/include/wx/@TOOLKIT_DIR@
        $(INSTALL_DATA) $(top_builddir)/setup.h $(libdir)/wx/include/wx/@TOOLKIT_DIR@/setup.h
        
-       @mkdir -p $(includedir)/wx
-       @mkdir -p $(includedir)/wx/msw
-       @mkdir -p $(includedir)/wx/gtk
-       @mkdir -p $(includedir)/wx/motif
-       @mkdir -p $(includedir)/wx/html
-       @mkdir -p $(includedir)/wx/protocol
-       @mkdir -p $(includedir)/wx/unix
-       @mkdir -p $(includedir)/wx/generic
+       $(INSTALL) -d $(includedir)/wx
+       $(INSTALL) -d $(includedir)/wx/msw
+       $(INSTALL) -d $(includedir)/wx/gtk
+       $(INSTALL) -d $(includedir)/wx/motif
+       $(INSTALL) -d $(includedir)/wx/html
+       $(INSTALL) -d $(includedir)/wx/protocol
+       $(INSTALL) -d $(includedir)/wx/unix
+       $(INSTALL) -d $(includedir)/wx/generic
        @list='$(HEADERS)'; for p in $$list; do \
          $(INSTALL_DATA) $(top_srcdir)/include/wx/$$p $(includedir)/wx/$$p; \
          echo "$(INSTALL_DATA) $(top_srcdir)/include/wx/$$p $(includedir)/wx/$$p"; \
@@ -1303,16 +1313,16 @@ uninstall:
        @echo " Uninstalling wxWindows..."
        @echo " "
        @echo " Removing library..."
-       @rm -f $(libdir)/@WX_TARGET_LIBRARY@
-       @rm -f $(libdir)/@WX_LIBRARY_LINK1@
-       @rm -f $(libdir)/@WX_LIBRARY_LINK2@
-       @rm -f $(libdir)/@WX_LIBRARY_LINK3@
+       @$(RM) $(libdir)/@WX_TARGET_LIBRARY@
+       @$(RM) $(libdir)/@WX_LIBRARY_LINK1@
+       @$(RM) $(libdir)/@WX_LIBRARY_LINK2@
+       @$(RM) $(libdir)/@WX_LIBRARY_LINK3@
        @echo " Removing helper files..."
-       @rm -f $(libdir)/wx/include/wx/@TOOLKIT_DIR@/setup.h
-       @rm -f $(bindir)/wx-config
+       @$(RM) $(libdir)/wx/include/wx/@TOOLKIT_DIR@/setup.h
+       @$(RM) $(bindir)/wx-config
        @echo " Removing headers..."
        @list='$(HEADERS)'; for p in $$list; do \
-         rm -f $(includedir)/wx/$$p; \
+         $(RM) $(includedir)/wx/$$p; \
        done
        @echo " Removing directories..."
        @if test -d $(libdir)/wx/include/wx/@TOOLKIT_DIR@; then rmdir $(libdir)/wx/include/wx/@TOOLKIT_DIR@; fi
@@ -1461,22 +1471,22 @@ SAMPLES_DIST:
 
 dist: ALL_DIST @GUIDIST@ SAMPLES_DIST
        cd _dist_dir; tar ch wx$(TOOLKIT) | gzip -f9 > $(WXARCHIVE); mv $(WXARCHIVE) ..
-       rm -f -r _dist_dir
+       $(RM) -r _dist_dir
 
 clean:
-       rm -f ./src/msw/*.o
-       rm -f ./src/gtk/*.o
-       rm -f ./src/motif/*.o
-       rm -f ./src/html/*.o
-       rm -f ./src/common/*.o
-       rm -f ./src/unix/*.o
-       rm -f ./src/generic/*.o
-       rm -f ./src/png/*.o
-       rm -f ./src/jpeg/*.o
-       rm -f ./src/zlib/*.o
-       rm -f *.o
-       rm -f parser.c
-       rm -f lexer.c
-       rm -f ./lib/*
+       $(RM) ./src/msw/*.o
+       $(RM) ./src/gtk/*.o
+       $(RM) ./src/motif/*.o
+       $(RM) ./src/html/*.o
+       $(RM) ./src/common/*.o
+       $(RM) ./src/unix/*.o
+       $(RM) ./src/generic/*.o
+       $(RM) ./src/png/*.o
+       $(RM) ./src/jpeg/*.o
+       $(RM) ./src/zlib/*.o
+       $(RM) *.o
+       $(RM) parser.c
+       $(RM) lexer.c
+       $(RM) ./lib/*
 
 cleanall: clean
index 76ae68bfbd79c84adabaa5281eb761fad7e88869..fade826d5d70c0f72e2b3b880c4b59ef93e648bb 100644 (file)
@@ -58,6 +58,7 @@ colrdlgg.cpp  G       G
 dcpsg.cpp      G       U
 dirdlgg.cpp    G       16
 fontdlgg.cpp   G       G
+filedlgg.cpp   G       U
 gridg.cpp      G
 helphtml.cpp   G       G
 helpwxht.cpp   G       G
@@ -264,7 +265,6 @@ xpmhand.cpp M
 threadpsx.cpp  U
 utilsunx.cpp   U
 gsocket.c      U
-gsockunx.h     U
 
 gsockgtk.c     R
 win_gtk.c      R
@@ -290,7 +290,6 @@ dcmemory.cpp        R
 dcscreen.cpp   R
 dialog.cpp     R
 dnd.cpp        R
-filedlg.cpp    R
 font.cpp       R
 frame.cpp      R
 gauge.cpp      R
index afa9e5e5eb6ed0a95cfd2be5da66511c51010529..0adf77c4de5eafc76d36f2ff996e2f1a249a8de2 100644 (file)
@@ -56,6 +56,7 @@ functions that take a \helpref{wxListEvent}{wxlistevent} argument.
 \twocolitem{{\bf EVT\_LIST\_SET\_INFO(id, func)}}{Information is being supplied (not implemented).}
 \twocolitem{{\bf EVT\_LIST\_ITEM\_SELECTED(id, func)}}{The item has been selected.}
 \twocolitem{{\bf EVT\_LIST\_ITEM\_DESELECTED(id, func)}}{The item has been deselected.}
+\twocolitem{{\bf EVT\_LIST\_ITEM\_ACTIVATED(id, func)}}{The item has been activated (ENTER or double click).}
 \twocolitem{{\bf EVT\_LIST\_KEY\_DOWN(id, func)}}{A key has been pressed.}
 \twocolitem{{\bf EVT\_LIST\_INSERT\_ITEM(id, func)}}{An item has been inserted.}
 \twocolitem{{\bf EVT\_LIST\_COL\_CLICK(id, func)}}{A column ({\bf m\_col}) has been left-clicked.}
@@ -129,6 +130,12 @@ Arranges the items in icon or small icon view. This only has effect on Win32. {\
 
 Creates the list control. See \helpref{wxListCtrl::wxListCtrl}{wxlistctrlconstr} for further details.
 
+\membersection{wxListCtrl::ClearAll}\label{wxlistctrlclearall}
+
+\func{void}{ClearAll}{}
+
+Deletes all items and all columns.
+
 \membersection{wxListCtrl::DeleteItem}\label{wxlistctrldeleteitem}
 
 \func{bool}{DeleteItem}{\param{long }{item}}
@@ -137,7 +144,7 @@ Deletes the specified item.
 
 \membersection{wxListCtrl::DeleteAllItems}\label{wxlistctrldeleteallitems}
 
-\func{bool}{DeleteAllItems}{\void}
+\func{bool}{DeleteAllItems}{}
 
 Deletes all the items in the list control.
 
index 6dbb70d0dd9d2817ce317d0526adc52ae68bb844..1723a34d794cfa28ae83f0c218016de2e6f845a2 100644 (file)
@@ -30,6 +30,7 @@ functions that take a wxListEvent argument.
 \twocolitem{{\bf EVT\_LIST\_SET\_INFO(id, func)}}{Information is being supplied (not implemented).}
 \twocolitem{{\bf EVT\_LIST\_ITEM\_SELECTED(id, func)}}{The item has been selected.}
 \twocolitem{{\bf EVT\_LIST\_ITEM\_DESELECTED(id, func)}}{The item has been deselected.}
+\twocolitem{{\bf EVT\_LIST\_ITEM\_ACTIVATED(id, func)}}{The item has been activated (ENTER or double click).}
 \twocolitem{{\bf EVT\_LIST\_KEY\_DOWN(id, func)}}{A key has been pressed.}
 \twocolitem{{\bf EVT\_LIST\_INSERT\_ITEM(id, func)}}{An item has been inserted.}
 \twocolitem{{\bf EVT\_LIST\_COL\_CLICK(id, func)}}{A column ({\bf m\_col}) has been left-clicked.}
index 7ce866145b2566d06cb109cc0ab7c68668343b75..14b00101847173732b1e3e04fee131c915e94e8c 100644 (file)
@@ -6,7 +6,7 @@
 #elif defined(__WXMOTIF__)
 #include "wx/motif/filedlg.h"
 #elif defined(__WXGTK__)
-#include "wx/gtk/filedlg.h"
+#include "wx/generic/filedlgg.h"
 #elif defined(__WXQT__)
 #include "wx/qt/filedlg.h"
 #elif defined(__WXMAC__)
index f42f9bffac286f89145e9b6b71cdbddc5f9107a0..27ea3c4e69e8d4a9da1946ed0c6581df5f651807 100644 (file)
@@ -5,6 +5,7 @@
 // Modified by:
 // Created:     12/12/98
 // Copyright:   (c) Harm van der Heijden and Robert Roebling
+// RCS-ID:      $Id$
 // Licence:    wxWindows licence
 //
 // Notes:       wxDirDialog class written by Harm van der Heijden, 
diff --git a/include/wx/generic/extdlgg.h b/include/wx/generic/extdlgg.h
deleted file mode 100644 (file)
index 04d6980..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Name:        extdlgg.h
-// Purpose:     Extended Generic dialogs
-// Author:      Robert Roebling
-// Modified by:
-// Created:     01/02/97
-// RCS-ID:      $Id$
-// Copyright:   (c) Robert Roebling
-// Licence:     wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef __EXTDLGH_G__
-#define __EXTDLGH_G__
-
-#ifdef __GNUG__
-    #pragma interface "extdlgg.h"
-#endif
-
-#include "wx/setup.h"
-#include "wx/dialog.h"
-#include "wx/button.h"
-
-//-----------------------------------------------------------------------------
-// classes
-//-----------------------------------------------------------------------------
-
-class WXDLLEXPORT wxExtDialog;
-class WXDLLEXPORT wxStaticLine;
-
-//-----------------------------------------------------------------------------
-// global data
-//-----------------------------------------------------------------------------
-
-extern const wxChar *wxDialogNameStr;
-
-//-----------------------------------------------------------------------------
-// wxExtDialog
-//-----------------------------------------------------------------------------
-
-class WXDLLEXPORT wxExtDialog: public wxDialog
-{
-    DECLARE_DYNAMIC_CLASS(wxExtDialog)
-
-public:
-    wxExtDialog() {}
-    wxExtDialog( wxWindow *parent, wxWindowID id,
-                 const wxString& title,
-                long extraStyle = (wxOK|wxCANCEL|wxCENTRE),
-                 const wxPoint& pos = wxDefaultPosition, 
-                const wxSize& size = wxDefaultSize,
-                 long style = wxEXT_DIALOG_STYLE,
-                 const wxString &name = wxDialogNameStr );
-    bool Create( wxWindow *parent, wxWindowID id,
-                 const wxString& title,
-                long extraStyle = (wxOK|wxCANCEL|wxCENTRE),
-                 const wxPoint& pos = wxDefaultPosition, 
-                const wxSize& size = wxDefaultSize,
-                 long style = wxEXT_DIALOG_STYLE,
-                 const wxString &name = wxDialogNameStr );
-
-    void SetClientWindow( wxWindow *clientWindow ) 
-        { m_clientWindow = clientWindow; }
-    wxWindow *GetClientWindow() 
-        { return m_clientWindow; }
-    void SetClientWindowMargin( int margin )
-        { m_clientWindowMargin = margin; }
-    int GetClientWindowMargin()
-        { return m_clientWindowMargin; }
-    void SetSpacePerButton( wxSize space )
-        { m_spacePerButton = space; }
-    wxSize GetSpacePerButton()
-        { return m_spacePerButton; }
-
-    void AddButton( wxButton *button );
-
-    void SetDefaultButton( wxWindowID button );
-
-    void EnableButton( wxWindowID button, bool enable=TRUE );
-    bool ButtonIsEnabled( wxWindowID button );
-    
-    wxSize GetButtonAreaSize();
-    
-    void OnSize( wxSizeEvent &event );
-    
-    void OnYes(wxCommandEvent& event);
-    void OnNo(wxCommandEvent& event);
-    void OnCancel(wxCommandEvent& event);
-    
-protected:
-    wxWindow      *m_clientWindow;
-    long           m_extraStyle;
-    wxList         m_buttons;
-#if wxUSE_STATLINE
-    wxStaticLine  *m_statLine;
-#endif
-    int            m_clientWindowMargin;    
-    wxSize         m_spacePerButton;
-
-    wxSize LayoutButtons();
-
-private:
-    DECLARE_EVENT_TABLE()
-};
-
-
-#endif
diff --git a/include/wx/generic/filedlgg.h b/include/wx/generic/filedlgg.h
new file mode 100644 (file)
index 0000000..04f081b
--- /dev/null
@@ -0,0 +1,229 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        filedlgg.h
+// Purpose:     wxFileDialog
+// Author:      Robert Roebling
+// Modified by:
+// Created:     8/17/99
+// Copyright:   (c) Robert Roebling
+// RCS-ID:      $Id$
+// Licence:    wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_FILEDLGG_H_
+#define _WX_FILEDLGG_H_
+
+#ifdef __GNUG__
+#pragma interface "filedlgg.h"
+#endif
+
+#include "wx/defs.h"
+
+#include "wx/dialog.h"
+#include "wx/checkbox.h"
+#include "wx/listctrl.h"
+#include "wx/button.h"
+#include "wx/validate.h"
+#include "wx/textctrl.h"
+#include "wx/choice.h"
+
+//-----------------------------------------------------------------------------
+// data
+//-----------------------------------------------------------------------------
+
+WXDLLEXPORT_DATA(extern const wxChar *)wxFileSelectorPromptStr;
+WXDLLEXPORT_DATA(extern const wxChar *)wxFileSelectorDefaultWildcardStr;
+
+//-----------------------------------------------------------------------------
+// classes
+//-----------------------------------------------------------------------------
+
+class wxFileData;
+class wxFileCtrl;
+class wxFileDialog;
+
+//-----------------------------------------------------------------------------
+//  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( const int num );
+    bool IsDir();
+    bool IsLink();
+    bool IsExe();
+    long GetSize();
+    bool NewNameIsLegal( const wxString &s );
+    bool Rename( const wxString &s );
+    void MakeItem( wxListItem &item );
+    
+private:
+    DECLARE_DYNAMIC_CLASS(wxFileData);
+};
+
+//-----------------------------------------------------------------------------
+//  wxFileCtrl
+//-----------------------------------------------------------------------------
+
+class wxFileCtrl : public wxListCtrl
+{
+private:
+    wxString      m_dirName;
+    bool          m_showHidden;
+
+public:
+    wxFileCtrl();
+    wxFileCtrl( wxWindow *win, const wxWindowID id, const wxString &dirName,
+      const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, 
+      const long style = wxLC_LIST, const wxValidator &validator = wxDefaultValidator,
+      const wxString &name = _T("filelist") );
+    void ChangeToListMode();
+    void ChangeToReportMode();
+    void ChangeToIconMode();
+    void ShowHidden( bool show = TRUE );
+    void Update();
+    virtual void StatusbarText( char *WXUNUSED(text) ) {};
+    int FillList( wxStringList &list );
+    void DeleteFiles();
+    void CopyFiles( char *dest );
+    void MoveFiles( char *dest );
+    void RenameFile();
+    void MakeDir();
+    void GoToParentDir();
+    void GoToHomeDir();
+    void GoToDir( const wxString &dir );
+    void GetDir( wxString &dir );
+    void OnListDeleteItem( wxListEvent &event );
+    void OnListKeyDown( wxListEvent &event );
+    void OnListEndLabelEdit( wxListEvent &event );
+
+private:    
+    DECLARE_DYNAMIC_CLASS(wxFileCtrl);
+    DECLARE_EVENT_TABLE()
+};
+
+//-------------------------------------------------------------------------
+// File selector
+//-------------------------------------------------------------------------
+
+class wxFileDialog: public wxDialog
+{
+public:
+    wxFileDialog() { }
+
+    wxFileDialog(wxWindow *parent,
+                 const wxString& message = wxFileSelectorPromptStr,
+                 const wxString& defaultDir = "",
+                 const wxString& defaultFile = "",
+                 const wxString& wildCard = wxFileSelectorDefaultWildcardStr,
+                 long style = 0,
+                 const wxPoint& pos = wxDefaultPosition);
+
+    void SetMessage(const wxString& message) { m_message = message; }
+    void SetPath(const wxString& path);
+    void SetDirectory(const wxString& dir) { m_dir = dir; }
+    void SetFilename(const wxString& name) { m_fileName = name; }
+    void SetWildcard(const wxString& wildCard) { m_wildCard = wildCard; }
+    void SetStyle(long style) { m_dialogStyle = style; }
+    void SetFilterIndex(int filterIndex) { m_filterIndex = filterIndex; }
+
+    wxString GetMessage() const { return m_message; }
+    wxString GetPath() const { return m_path; }
+    wxString GetDirectory() const { return m_dir; }
+    wxString GetFilename() const { return m_fileName; }
+    wxString GetWildcard() const { return m_wildCard; }
+    long GetStyle() const { return m_dialogStyle; }
+    int GetFilterIndex() const { return m_filterIndex ; }
+    
+    void OnSelected( wxListEvent &event );
+    void OnActivated( wxListEvent &event );
+    void OnList( wxCommandEvent &event );
+    void OnReport( wxCommandEvent &event );
+    void OnIcon( wxCommandEvent &event );
+    void OnUp( wxCommandEvent &event );
+    void OnHome( wxCommandEvent &event );
+    void OnListOk( wxCommandEvent &event );
+    
+protected:    
+    wxString    m_message;
+    long        m_dialogStyle;
+    wxString    m_dir;
+    wxString    m_path; // Full path
+    wxString    m_fileName;
+    wxString    m_wildCard;
+    int         m_filterIndex;
+    wxChoice   *m_choice;
+    wxTextCtrl *m_text;
+    wxFileCtrl *m_list;
+    
+private:
+    DECLARE_DYNAMIC_CLASS(wxFileDialog)
+    DECLARE_EVENT_TABLE()
+};
+
+#define wxOPEN 1
+#define wxSAVE 2
+#define wxOVERWRITE_PROMPT 4
+#define wxHIDE_READONLY 8
+#define wxFILE_MUST_EXIST 16
+
+// File selector - backward compatibility
+WXDLLEXPORT wxString
+wxFileSelector(const wxChar *message = wxFileSelectorPromptStr,
+               const wxChar *default_path = NULL,
+               const wxChar *default_filename = NULL,
+               const wxChar *default_extension = NULL,
+               const wxChar *wildcard = wxFileSelectorDefaultWildcardStr,
+               int flags = 0,
+               wxWindow *parent = NULL,
+               int x = -1, int y = -1);
+
+// An extended version of wxFileSelector
+WXDLLEXPORT wxString
+wxFileSelectorEx(const wxChar *message = wxFileSelectorPromptStr,
+                 const wxChar *default_path = NULL,
+                 const wxChar *default_filename = NULL,
+                 int *indexDefaultExtension = NULL,
+                 const wxChar *wildcard = wxFileSelectorDefaultWildcardStr,
+                 int flags = 0,
+                 wxWindow *parent = NULL,
+                 int x = -1, int y = -1);
+
+// Ask for filename to load
+WXDLLEXPORT wxString
+wxLoadFileSelector(const wxChar *what,
+                   const wxChar *extension,
+                   const wxChar *default_name = (const wxChar *)NULL,
+                   wxWindow *parent = (wxWindow *) NULL);
+
+// Ask for filename to save
+WXDLLEXPORT wxString
+wxSaveFileSelector(const wxChar *what,
+                   const wxChar *extension,
+                   const wxChar *default_name = (const wxChar *) NULL,
+                   wxWindow *parent = (wxWindow *) NULL);
+
+
+
+#endif
+    // _WX_DIRDLGG_H_
+
diff --git a/include/wx/generic/find.xpm b/include/wx/generic/find.xpm
new file mode 100644 (file)
index 0000000..82e5ccb
--- /dev/null
@@ -0,0 +1,99 @@
+/* XPM */
+static char * find_xpm[] = {
+"32 32 64 1",
+"      s background    c None",
+".     c black",
+"X     c #FFFFFBEEFFFF",
+"o     c #AEBAAAAAAEBA",
+"O     c #4924618579E7",
+"+     c #AEBA8A286185",
+"@     c #BEFB8A2871C6",
+"#     c #71C682078617",
+"$     c #4924410330C2",
+"%     c #492451446185",
+"&     c #49243CF338E3",
+"*     c #EFBEAAAA8E38",
+"=     c #AEBA71C66185",
+"-     c #9E79820769A6",
+";     c #5144410338E3",
+":     c #514434D338E3",
+">     c #D75CA28971C6",
+",     c #514430C230C2",
+"<     c #618541034103",
+"1     c #BEFB8A286185",
+"2     c #B6DA7DF75965",
+"3     c #410338E330C2",
+"4     c #514441034103",
+"5     c #AEBA9A696185",
+"6     c #9E7971C65144",
+"7     c #9E7971C66185",
+"8     c #DF7DAEBA9E79",
+"9     c #38E338E330C2",
+"0     c #410330C22081",
+"q     c #A69961855144",
+"w     c #618549244924",
+"e     c #30C230C22081",
+"r     c #38E32CB230C2",
+"t     c #8E3851445144",
+"y     c #28A228A230C2",
+"u     c #79E759654924",
+"i     c #A69969A65965",
+"p     c #8E3861855144",
+"a     c #71C661854103",
+"s     c #208120812081",
+"d     c #596538E330C2",
+"f     c #8E3871C65144",
+"g     c #71C651445144",
+"h     c #186118611861",
+"j     c #8E3861854103",
+"k     c #71C651444103",
+"l     c #71C641034103",
+"z     c #514451445144",
+"x     c #5144514430C2",
+"c     c #104010401040",
+"v     c #410330C230C2",
+"b     c #30C220812081",
+"n     c #618551444103",
+"m     c #79E779E779E7",
+"M     c #6185410330C2",
+"N     c #38E330C22081",
+"B     c #6185514430C2",
+"V     c #38E324922081",
+"C     c #514400000000",
+"Z     c #E79DD34CD75C",
+"A     c #C71BC71BBEFB",
+"S     c #8E387DF769A6",
+"D     c #208128A228A2",
+"F     c #30C238E34103",
+"       ........   XXXo          ",
+"     ..O......O..Xoo+@          ",
+"    .#..$.###%..&.@+*X=-        ",
+"   ...;;;.%$:;;;...XX>XXXo      ",
+"  ...$$,$+XXX.##<#..o111@2      ",
+" .&.34&+XXoo5.XX#%.$.@@5*X=6    ",
+" ..3378X+@@++@@++@@..XX>XXoo+2  ",
+".9.0qXXX2++12+XXX.X.w.XXo11@@1  ",
+"..erX66==66=11111.o1..1111*XX>>t",
+"..yuXi76678X+@2++@@+..:+XXX>+ppa",
+"..sdXpppXX=++@=++=8X..w+fqppupge",
+"..h<XajtX67==67=*XX*..&qqpjttak.",
+"..h<XkwlXfqqiXX*=66=..9qqjjtukd.",
+"..h0Xz<xXpppX*i6-==6..yfpppaak,.",
+".c.vXz4dXzguXi=&-=7.9.rputgawk.z",
+"X..bX,d<XwklX+2==66..rettakkln.m",
+"X.c.Xb0,XkM<X$i=q6.v.NjtulkllB. ",
+"X4..XbVvXz:hX==66...Nytaakknn<. ",
+"X<c...bnX,v0>=76.....pganknwBMz ",
+"XM.w.h..Xb0,*6..v..CC.kklkB<<;m ",
+"ZMzX#..;......9..N.rC...lBM<dem ",
+" =zXXsc........9eNN..CCC.<M:dVm ",
+" =oXA<.##hc$9vNryrye.VCCC.4de.z ",
+" SoXZMzXXyc;vrNttaVV..VCCC.V.z  ",
+" -Xk82zXXM.*qjjtukkbb..sCCC.z   ",
+" SXlA=oXZM.Xpptaakknss..VCCC.   ",
+"  ..z-oXA=zXatganknBx.D..FCCC.  ",
+"   zmSXk82zXtakllBB<.zDD..FCCC. ",
+"      Xl.SoXuknl<.zz   FF..%CCC.",
+"      ..z-oXakkn.zz     %%..OCC.",
+"         SXkn.zzz        %O..OO.",
+"          Xk.z            OO... "};
diff --git a/include/wx/generic/folder.xpm b/include/wx/generic/folder.xpm
new file mode 100644 (file)
index 0000000..7a36fa2
--- /dev/null
@@ -0,0 +1,48 @@
+/* XPM */
+static char * folder_xpm[] = {
+"33 33 12 1",
+"      c None",
+".     c #D75CA69979E7",
+"X     c #208120812081",
+"o     c #FFFFFFFFFFFF",
+"O     c #B6DA79E74924",
+"+     c #596559655965",
+"@     c #410341034103",
+"#     c #514451445144",
+"$     c #000000000820",
+"%     c #8E38596530C2",
+"&     c #8E3886178617",
+"*     c #492479E769A6",
+"                                 ",
+"     ..   XXX                    ",
+"     .o.. X.XXX                  ",
+"     .ooo..OOOXXX                ",
+"     .ooooo..OOOXXX    ++        ",
+"XXX  .ooooooo..OOOXXX  @#++@     ",
+"XOX@X.ooooooooo...OOO@XX+X#+++   ",
+"X...@@$.oooooooooo...OOXXX@X@+   ",
+"O.....@XXOooooooooooo..OOOX@@X   ",
+"XO......@%X.ooooooooooo..%%OX@   ",
+".O........@XX.oooooooooo.X%XX    ",
+" %O.........@@$.oooooooo.XX%X    ",
+" %O...........@@$.oooooo.X%X#    ",
+" %O.............@@X.oooo.XX%&    ",
+" .@...............@XX.oo.@XX     ",
+"  %.................@X.o.XXX     ",
+"  OO................O%X..XX@     ",
+"  +OO.......O..OOOOOOO@..@X&     ",
+"  .%O....OOOOOOOOOOOOOX.+XX      ",
+"   XOOOOOOOOOOOOOOOOOOX+*XX      ",
+"   @OOOOO.OOOOOOOOOOOOX*+XX      ",
+"   .%OOOOOOOOOOOOOOO%OXX#XX      ",
+"    XOOOOOOOOOOO%O%O%%OX++&      ",
+"    @O%O%OO%O%%O%%%%%%%XXX       ",
+"     XXXO%%%%%%%%%%%%%%XXX       ",
+"      OXXX%%%%%%%%%%%%@XX#       ",
+"        OX@X%%%%%%%%%%%XXX       ",
+"          OXXX%%%O%%%%%XXX       ",
+"            OXXX%%%%%%%XX*       ",
+"              OX@X%%%%X%X&       ",
+"                OXXX%%%XX        ",
+"                  OXXX%%@        ",
+"                    OXXX         "};
diff --git a/include/wx/generic/list.xpm b/include/wx/generic/list.xpm
new file mode 100644 (file)
index 0000000..b0162e2
--- /dev/null
@@ -0,0 +1,45 @@
+/* XPM */
+static char * list_xpm[] = {
+"32 32 10 1",
+"      c #DF7DDF7DDF7D",
+".     c #9E799E79A699",
+"X     c #AEBAAEBAAEBA",
+"o     c #FFFFFFFFFFFF",
+"O     c #514451445144",
+"+     c #410341034103",
+"@     c #596559655965",
+"#     c #000000000000",
+"$     c #BEFBBEFBBEFB",
+"%     c #208120812081",
+"                                ",
+"                .               ",
+"               Xo..             ",
+"              Xoooo.X           ",
+"             Xooooooo.X         ",
+"            XooooO+ooooXX       ",
+"           XoooooooO+ooo..      ",
+"          XooooOOoooo@@ooo..    ",
+"         XoooooooOOooooooooo.X  ",
+"        Xoooo@Ooooo+@oooO+oooo.X",
+"       Xooooooo@OoooooooooO+oooo",
+"      XooooooooooO@oooOOoooo@@oo",
+"     XooooO+ooooooooooooOOoooooo",
+"    XoooooooO+oooooo@Ooooo+@oooX",
+"   XooooOOoooo@@oooooo@OooooooOX",
+"  XoooooooOOooooooooooooO@oooOX#",
+" Xoooo@Ooooo+@oooO+oooooooooOX#X",
+"Xooooooo@OoooooooooO+ooooooOX#XX",
+"O@$oooooooO@oooOOoooo@@oooOX#XX ",
+"X#+@$ooooooooooooOOooooooOX#XX  ",
+" XX#O@ooooooo@Ooooo+@oooOX#XX   ",
+"   XX#OXooooooo@OooooooOX#X     ",
+"     XXO@XoooooooO@oooOX#X      ",
+"      XX#%@XoooooooooOX#X       ",
+"        XX#%@XooooooOX#X        ",
+"          XX#%@XoooOX#X         ",
+"            XX#%@XOX#X          ",
+"              XX#+X#X           ",
+"                XXXX            ",
+"                                ",
+"                                ",
+"                                "};
diff --git a/include/wx/generic/txt.xpm b/include/wx/generic/txt.xpm
new file mode 100644 (file)
index 0000000..a313814
--- /dev/null
@@ -0,0 +1,53 @@
+/* XPM */
+static char * txt_xpm[] = {
+"32 32 18 1",
+"      c None",
+".     c #D75CA69979E7",
+"X     c #BEFBBEFBBEFB",
+"o     c #208120812081",
+"O     c #F7DE28A22081",
+"+     c #AEBAAEBAAEBA",
+"@     c #FFFFD75C0000",
+"#     c #8E38596530C2",
+"$     c #FFFFFFFFFFFF",
+"%     c #B6DA79E74924",
+"&     c #9E799E79A699",
+"*     c #514451445144",
+"=     c #492479E769A6",
+"-     c #410341034103",
+";     c #000000000000",
+":     c #596559655965",
+">     c #8E3886178617",
+",     c #410341038E38",
+"                                ",
+"                      .X        ",
+"                     Xoo.       ",
+"                     O.Xo       ",
+"             ++    +X@O#o       ",
+"            +$$++ +$$%%#o       ",
+"           +$$$$$+$$$@%#o&      ",
+"          +$$$$$+$$$$O%#o$&&    ",
+"         +$$$$$+$$$$$@##o$$$&+  ",
+"        +$$**$+$$$$$$%O#o$$$$$& ",
+"       +$$$$$+$$**$$+@%#o$$$$$$=",
+"      +$$**$+$$$$$*&$O%-o$$$$$-+",
+"     +$$$$$+$$**$$+$$@%o;+$$$*+;",
+"    +$$**$+$$$$$*+$$$O##o$+$*+;+",
+"   +$$$$$+$$**$$+$$$$@#oo$$++;+ ",
+"  +$$**$+$$$$$*+$$$$$%%#;$$$$++ ",
+" +$$$$$+$$**$$+$$*-$$%#oo$$$$$$*",
+"+$$$$$+$$$$$*+$$$$$*-O##;$$$$$-+",
+"*:X$$+oo+$$$+$$**$$$$%%;o$$$$*+;",
+"+;-:X$$+oo:&$$$$$**$$ooo;$$$*+;+",
+"  +;*:X$$*+$$**$$$$*-X%o$$$*+;+ ",
+"    +;**++$$$$$**$$$$.#o$$*+;+  ",
+"      +*+$$=:$$$$*-$$$##$>Xo+   ",
+"       +$$$$$:*$$$$-*$;X-+-+    ",
+"      *+$$$$$$$:*$$$$$;,+;&     ",
+"      +*:+$$$$$$$*:$$$=+;+      ",
+"       +;o:+$$$$$$$$$*+;+       ",
+"         +;o:+$$$$$$*+;+        ",
+"           +;o:+$$$*+;+         ",
+"             +;o:+*+;+          ",
+"               +;-+;+           ",
+"                 +;+            "};
index 02f91965e4bd9d4375b19a45e78e04f37586a3c9..8ea3fa571ed1402726ecb97103e72ed69366b06d 100644 (file)
@@ -4,6 +4,7 @@
 // Author:      Harm van der Heijden and Robert Roebling
 // Modified by:
 // Created:     12/12/98
+// RCS-ID:      $Id$
 // Copyright:   (c) Harm van der Heijden and Robert Roebling
 // Licence:    wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
diff --git a/src/generic/filedlgg.cpp b/src/generic/filedlgg.cpp
new file mode 100644 (file)
index 0000000..ad39eb3
--- /dev/null
@@ -0,0 +1,808 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        filedlgg.cpp
+// Purpose:     wxFileDialog
+// Author:      Robert Roebling
+// Modified by:
+// Created:     12/12/98
+// RCS-ID:      $Id$
+// Copyright:   (c) Robert Roebling
+// Licence:    wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifdef __GNUG__
+#pragma implementation "filedlgg.h"
+#endif
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+#pragma hdrstop
+#endif
+
+#ifndef __UNIX__
+#error wxFileDialog currently only supports unix
+#endif
+
+#include "wx/filedlg.h"
+#include "wx/dnd.h"
+#include "wx/debug.h"
+#include "wx/log.h"
+#include "wx/intl.h"
+#include "wx/msgdlg.h"
+#include "wx/sizer.h"
+
+#include "sys/types.h"
+#include "sys/stat.h"
+#include "dirent.h"
+#include "pwd.h"
+#include "grp.h"
+#include "time.h"
+
+#include "wx/generic/folder.xpm"
+#include "wx/generic/txt.xpm"
+#include "wx/generic/list.xpm"
+#include "wx/generic/find.xpm"
+
+//-----------------------------------------------------------------------------
+//  wxFileData
+//-----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxFileData,wxObject);
+
+wxFileData::wxFileData( const wxString &name, const wxString &fname )
+{
+    m_name = name;
+    m_fileName = fname;
+
+    struct stat buff;
+    stat( m_fileName.GetData(), &buff );
+    struct stat lbuff;
+    lstat( m_fileName.GetData(), &lbuff );
+
+    struct tm *t = localtime( &lbuff.st_mtime );
+//  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;
+
+    m_hour = t->tm_hour;
+    m_minute = t->tm_min;
+    m_month = t->tm_mon+1;
+    m_day = t->tm_mday;
+    m_year = t->tm_year;
+
+    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' : '-') );
+}
+
+wxString wxFileData::GetName() const
+{
+    return m_name;
+}
+
+wxString wxFileData::GetFullName() const
+{
+    return m_fileName;
+}
+
+wxString wxFileData::GetHint() const
+{
+    wxString s = m_fileName;
+    s += "  ";
+    if (m_isDir) s += _("<DIR> ");
+    else if (m_isLink) s += _("<LINK> ");
+    else
+    {
+        s += LongToString( m_size );
+        s += _(" bytes ");
+    }
+    s += IntToString( m_day );
+    s += _T(".");
+    s += IntToString( m_month );
+    s += _T(".");
+    s += IntToString( m_year );
+    s += _T("  ");
+    s += IntToString( m_hour );
+    s += _T(":");
+    s += IntToString( m_minute );
+    s += _T("  ");
+    s += m_permissions;
+    return s;
+};
+
+wxString wxFileData::GetEntry( const int num )
+{
+    wxString s;
+    switch (num)
+    {
+        case 0:
+            s = m_name;
+            break;
+        case 1:
+            if (m_isDir) s = _("<DIR>");
+            else if (m_isLink) s = _("<LINK>");
+            else s = LongToString( m_size );
+            break;
+        case 2:
+            if (m_day < 10) s = _T("0"); else s = _T("");
+            s += IntToString( m_day );
+            s += _T(".");
+            if (m_month < 10) s += _T("0"); 
+            s += IntToString( m_month );
+            s += _T(".");
+            if (m_year < 10) s += _T("0"); // this should happen real soon...
+            s += IntToString( m_year );
+            break;
+        case 3:
+            if (m_hour < 10) s = _T("0"); else s = _T("");
+            s += IntToString( m_hour );
+            s += _T(":");
+            if (m_minute < 10) s += _T("0");
+            s += IntToString( m_minute );
+            break;
+        case 4:
+            s = m_permissions;
+            break;
+        default:
+            s = _T("No entry");
+            break;
+    }
+    return s;
+}
+
+bool wxFileData::IsDir()
+{
+    return m_isDir;
+}
+
+bool wxFileData::IsExe()
+{
+    return m_isExe;
+}
+
+bool wxFileData::IsLink()
+{
+    return m_isLink;
+}
+
+long wxFileData::GetSize()
+{
+    return m_size;
+}
+
+bool wxFileData::NewNameIsLegal( const wxString &s )
+{
+    wxString fileName = wxPathOnly( m_fileName );
+    fileName += _T("/");
+    fileName += s;
+    return (!wxFileExists( fileName ));
+}
+
+bool wxFileData::Rename( const wxString &s )
+{
+    wxString fileName = wxPathOnly( m_fileName );
+    fileName += _T("/");
+    fileName += s;
+    bool ret = wxRenameFile( m_fileName, fileName );
+    if (ret)
+    {
+        m_fileName = fileName;
+        m_name = s;
+    }
+    return ret;
+}
+
+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 (IsLink())
+    {
+        wxColour *dg = wxTheColourDatabase->FindColour( "MEDIUM GREY" );
+        item.m_colour = dg;
+    }
+    item.m_data = (long)this;
+}
+  
+//-----------------------------------------------------------------------------
+//  wxFileCtrl
+//-----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxFileCtrl,wxListCtrl);
+
+BEGIN_EVENT_TABLE(wxFileCtrl,wxListCtrl)
+END_EVENT_TABLE()
+
+wxFileCtrl::wxFileCtrl()
+{
+    m_dirName = _T("/");
+    m_showHidden = FALSE;
+}
+
+wxFileCtrl::wxFileCtrl( wxWindow *win, wxWindowID id, const wxString &dirName,
+    const wxPoint &pos, const wxSize &size,
+    long style, const wxValidator &validator, const wxString &name ) :
+  wxListCtrl( win, id, pos, size, style, validator, name )
+{
+    SetItemSpacing( 40 );
+    wxImageList *imageList = new wxImageList( 30, 30 );
+    imageList->Add( wxBitmap( folder_xpm ) );
+    imageList->Add( wxBitmap( txt_xpm ) );
+    imageList->Add( wxBitmap( list_xpm ) );
+    imageList->Add( wxBitmap( find_xpm ) );
+  
+    SetImageList( imageList, wxIMAGE_LIST_NORMAL );
+  
+    m_dirName = dirName;
+    m_showHidden = FALSE;
+    Update();
+  
+//  SetDropTarget( new wxFileDropTarget() );
+}
+
+void wxFileCtrl::ChangeToListMode()
+{
+    SetSingleStyle( wxLC_LIST );
+    Update();
+}
+
+void wxFileCtrl::ChangeToReportMode()
+{
+    SetSingleStyle( wxLC_REPORT );
+    Update();
+}
+
+void wxFileCtrl::ChangeToIconMode()
+{
+    SetSingleStyle( wxLC_ICON );
+    Update();
+}
+
+void wxFileCtrl::ShowHidden( bool show )
+{
+    m_showHidden = show;
+    Update();
+}
+
+int ListCompare( const long data1, const long data2, const long WXUNUSED(data) )
+{
+     wxFileData *fd1 = (wxFileData*)data1 ;
+     wxFileData *fd2 = (wxFileData*)data2 ;
+     if (fd1->IsDir() && !fd2->IsDir()) return -1;
+     if (fd2->IsDir() && !fd1->IsDir()) return 1;
+     return strcmp( fd1->GetName(), fd2->GetName() );
+}
+
+void wxFileCtrl::Update()
+{ 
+    ClearAll();
+    long my_style = GetWindowStyleFlag();
+    if (my_style & wxLC_REPORT)
+    {
+        InsertColumn( 0, _("Name"), wxLIST_FORMAT_LEFT, 110 );
+        InsertColumn( 1, _("Size"), wxLIST_FORMAT_LEFT, 60 );
+        InsertColumn( 2, _("Date"), wxLIST_FORMAT_LEFT, 55 );
+        InsertColumn( 3, _("Time"), wxLIST_FORMAT_LEFT, 50 );
+        InsertColumn( 4, _("Permissions"), wxLIST_FORMAT_LEFT, 120 );
+    }
+    wxFileData *fd = (wxFileData *) NULL;
+    wxListItem item;
+    item.m_mask = wxLIST_MASK_TEXT + wxLIST_MASK_DATA;
+    if (my_style & wxLC_ICON) item.m_mask += wxLIST_MASK_IMAGE;
+    item.m_itemId = 0;
+    item.m_col = 0;
+    wxString s;
+    wxString res = m_dirName + _T("/*");
+    wxString f( wxFindFirstFile( res.GetData(), 0 ) );
+    while (!f.IsEmpty())
+    {
+        res = wxFileNameFromPath( f );
+        fd = new wxFileData( res, f );
+        s = fd->GetName();
+        if (m_showHidden || (s[0] != '.'))
+        {
+            fd->MakeItem( item );
+            if (my_style & wxLC_REPORT)
+            {
+                InsertItem( item );
+                for (int i = 1; i < 5; i++) SetItem( item.m_itemId, i, fd->GetEntry( i) );
+            }
+            else if (my_style & wxLC_LIST)
+            {
+                InsertItem( item );
+            } 
+            else if (my_style & wxLC_ICON)
+            {
+                if (fd->IsDir()) item.m_image = 0; else item.m_image = 1;
+                InsertItem( item );
+            } 
+            item.m_itemId++;
+        }
+        f = wxFindNextFile();
+    }
+    SortItems( ListCompare, 0 );
+}
+
+int wxFileCtrl::FillList( wxStringList &list )
+{
+    long index = -1;
+    int count = 0;
+    wxString s;
+    for (;;)
+    {
+        index = GetNextItem( index, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
+        if (index == -1) break;
+        wxListItem item;
+        item.m_itemId = index;
+        GetItem( item );
+        wxFileData *fd = (wxFileData*)item.m_data;
+        list.Add( fd->GetFullName() );
+        index++;
+        count++;
+    }
+    if (count == 0)
+    {
+        index = GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_FOCUSED );
+        if (index == -1) return 0;
+        wxListItem item;
+        item.m_itemId = index;
+        GetItem( item );
+        wxFileData *fd = (wxFileData*)item.m_data;
+        list.Add( fd->GetFullName() );
+        count = 1;
+    }
+    return count;
+}
+
+void wxFileCtrl::DeleteFiles()
+{
+/*
+  wxStringList list;
+  int count = FillList( list );
+  if (count > 0)
+  { 
+    wxString s = "Delete ";
+    s += wxIntToString( count );
+    s += " selected file";
+    if (count > 1) s += "s";
+    s += " or director";
+    if (count > 1) s += "ies?"; else s+= "y?";
+    if (wxYES == wxMessageBox( s, "Delete", wxYES_NO ))
+      wxDeleteStatusDia( NULL, &list );
+  };
+*/
+}
+
+void wxFileCtrl::CopyFiles( char *WXUNUSED(dest) )
+{
+/*
+  wxStringList list;
+  int count = FillList( list );
+  wxString s = dest;
+  int ret = 0; // 0 = nix, 1 = copy, 2 = move
+  wxCopyMoveDia( (wxFrame*)GetParent(), count, &ret, &s );
+  if (ret == 1) 
+    wxCopyStatusDia( NULL, s, &list );
+*/
+}
+
+void wxFileCtrl::MoveFiles( char *WXUNUSED(dest) )
+{
+}
+
+void wxFileCtrl::RenameFile()
+{
+}
+
+void wxFileCtrl::MakeDir()
+{
+/*
+  wxString s = wxGetTextFromUser( "Enter new directory name:", "Make directory" );
+  if (s.IsNull()) return;
+  if (s == "") return;
+  if ((s == ".") || (s == ".."))
+  {
+    wxMessageBox( "This was obviously an invalid directory name.", "Go away." );
+    return;
+  };
+  wxString dir;
+  GetDir( dir );
+  dir += "/";
+  dir += s;
+  if (wxFileExists( dir ))
+  {
+    wxMessageBox( "Filename exists already. Cannot create directoy.", "Make directory" );
+    return;
+  };
+  wxMkdir( dir );
+  Update();
+*/
+}
+
+void wxFileCtrl::GoToParentDir()
+{
+    wxString s = m_dirName;
+    int pos = s.Last( _T('/') );  
+    if ((pos >= 0) && (s != _T("/")))
+    {
+        s.Remove( pos, s.Length()-pos );
+        if (s.Length() == 0) s = _T("/");
+        m_dirName = s;
+        Update();
+    }
+}
+
+void wxFileCtrl::GoToHomeDir()
+{
+    wxString s = wxGetUserHome( wxString() );
+    m_dirName = s;
+    Update();
+}
+
+void wxFileCtrl::GoToDir( const wxString &dir )
+{
+    m_dirName = dir;
+    Update();
+}
+
+void wxFileCtrl::GetDir( wxString &dir )
+{
+    dir = m_dirName;
+}
+
+/*
+void wxFileCtrl::OnDropFiles( int WXUNUSED(n), char **WXUNUSED(data), int WXUNUSED(x), int WXUNUSED(y) )
+{
+  wxString destDir;
+  wxPoint pt( x, y );
+  int flag = wxLIST_HITTEST_ONITEM;
+  long hit = HitTest( pt, flag );
+  if (hit > -1)
+  {
+    wxListItem li;
+    li.m_itemId = hit;
+    GetItem( li );
+    wxFileData *fd = (wxFileData*)li.m_data;
+    if (fd->IsDir()) fd->GetFullName( destDir );
+  };
+  if (destDir.IsNull()) destDir = m_dirName;
+  int ret = 0; // 0 = nix, 1 = copy, 2 = move
+  wxCopyMoveDia( (wxFrame*)GetParent(), n, &ret, &destDir );
+  if (ret == 1)
+  {  
+     wxStringList slist;
+     for (int i = 0; i < n; i++) slist.Add( data[i] );
+     wxCopyStatusDia( NULL, destDir.GetData(), &slist );
+     Update();
+  };
+};
+*/
+
+void wxFileCtrl::OnListDeleteItem( wxListEvent &event )
+{
+    wxFileData *fd = (wxFileData*)event.m_item.m_data;
+    delete fd;
+}
+
+void wxFileCtrl::OnListKeyDown( wxListEvent &event )
+{
+    wxFileData *fd = (wxFileData*)event.m_item.m_data;
+    if (fd->IsDir())
+    {
+        m_dirName = fd->GetFullName();
+        Update();
+        Refresh();
+        return;
+    }
+    if (fd->IsExe())
+    {
+        wxExecute( fd->GetFullName() );
+        return;
+    }
+}
+
+void wxFileCtrl::OnListEndLabelEdit( wxListEvent &event )
+{
+    wxFileData *fd = (wxFileData*)event.m_item.m_data;
+    wxString newName = event.m_item.m_text;
+    if (fd->NewNameIsLegal( newName ))
+    {
+        if (fd->Rename( newName ))
+        {
+            Update();
+        }
+        else
+        {
+            wxString s = _("Could not rename file to ");
+            s += newName;
+            s += ".";
+            wxMessageBox( s, _("File dialog"), wxOK );
+        }
+    }
+    else
+    {
+        wxString s = "File name ";
+        s += newName;
+        s += " exists already or is invalid.\n";
+        s += "Could not rename file.";
+        wxMessageBox( s, _("File dialog"), wxOK );
+    }
+    return;
+}
+
+//-----------------------------------------------------------------------------
+// wxFileDialog
+//-----------------------------------------------------------------------------
+
+/* **** */
+
+#define  ID_LIST_CTRL     5010
+#define  ID_LIST_MODE     5000
+#define  ID_REPORT_MODE   5001
+#define  ID_ICON_MODE     5002
+#define  ID_UP_DIR        5005
+#define  ID_PARENT_DIR    5006
+
+IMPLEMENT_DYNAMIC_CLASS(wxFileDialog,wxDialog)
+
+BEGIN_EVENT_TABLE(wxFileDialog,wxDialog)
+        EVT_BUTTON(ID_LIST_MODE, wxFileDialog::OnList)
+        EVT_BUTTON(ID_REPORT_MODE, wxFileDialog::OnReport)
+        EVT_BUTTON(ID_ICON_MODE, wxFileDialog::OnIcon)
+        EVT_BUTTON(ID_UP_DIR, wxFileDialog::OnUp)
+        EVT_BUTTON(ID_PARENT_DIR, wxFileDialog::OnHome)
+        EVT_BUTTON(wxID_OK, wxFileDialog::OnListOk)
+        EVT_LIST_ITEM_SELECTED(ID_LIST_CTRL, wxFileDialog::OnSelected)
+       EVT_LIST_ITEM_ACTIVATED(ID_LIST_CTRL, wxFileDialog::OnActivated)
+END_EVENT_TABLE()
+
+wxFileDialog::wxFileDialog(wxWindow *parent,
+                 const wxString& message,
+                 const wxString& defaultDir,
+                 const wxString& defaultFile,
+                 const wxString& wildCard,
+                 long style,
+                 const wxPoint& pos ) :
+  wxDialog( parent, -1, message )
+{
+    wxBeginBusyCursor();
+    
+    m_message = message;
+    m_dialogStyle = style;
+    m_dir = defaultDir;
+    if (m_dir.IsEmpty()) m_dir = wxGetUserHome();
+    m_path = defaultDir;
+    m_path += _T("/");
+    m_path += defaultFile;
+    m_fileName = defaultFile;
+    m_wildCard = wildCard;
+    m_filterIndex = 0;
+    
+    wxBoxSizer *mainsizer = new wxBoxSizer( wxVERTICAL );
+    
+    wxBoxSizer *buttonsizer = new wxBoxSizer( wxHORIZONTAL );
+    
+    buttonsizer->Add( new wxButton( this, ID_LIST_MODE, "List" ), 0, wxALL, 5 );
+    buttonsizer->Add( new wxButton( this, ID_REPORT_MODE, "Report" ), 0, wxALL, 5 );
+    buttonsizer->Add( new wxButton( this, ID_ICON_MODE, "Icon" ), 0, wxALL, 5 );
+    buttonsizer->Add( 30, 5 );
+    buttonsizer->Add( new wxButton( this, ID_UP_DIR, "Up" ), 0, wxALL, 5 );
+    buttonsizer->Add( new wxButton( this, ID_PARENT_DIR, "Home" ), 0, wxALL, 5 );
+    buttonsizer->Add( new wxButton( this, -1, "New..." ), 0, wxALL, 5 );
+    mainsizer->Add( buttonsizer, 0, wxALL | wxALIGN_RIGHT, 5 );
+    
+    m_list = new wxFileCtrl( this, ID_LIST_CTRL, "/", wxDefaultPosition, wxSize(200,180), 
+      wxLC_LIST | wxSUNKEN_BORDER | wxLC_SINGLE_SEL );
+    mainsizer->Add( m_list, 1, wxEXPAND | wxALL, 10 );
+    
+    wxBoxSizer *textsizer = new wxBoxSizer( wxHORIZONTAL );
+    m_text = new wxTextCtrl( this, -1, m_fileName );
+    textsizer->Add( m_text, 1, wxCENTER|wxALL, 10 );
+    textsizer->Add( new wxButton( this, wxID_OK, _("OK") ), 0, wxCENTER | wxLEFT|wxRIGHT|wxTOP, 10 );
+    mainsizer->Add( textsizer, 0, wxEXPAND );
+
+    wxBoxSizer *choicesizer = new wxBoxSizer( wxHORIZONTAL );
+    m_choice = new wxChoice( this, -1 );
+    m_choice->Append( "*.txt" );
+    choicesizer->Add( m_choice, 1, wxCENTER|wxALL, 10 );
+    choicesizer->Add( new wxButton( this, wxID_CANCEL, _("Cancel") ), 0, wxCENTER | wxALL, 10 );
+    mainsizer->Add( choicesizer, 0, wxEXPAND );
+
+    SetAutoLayout( TRUE );
+    SetSizer( mainsizer );
+    
+    mainsizer->Fit( this );
+    mainsizer->SetSizeHints( this );
+    
+    Centre( wxBOTH );
+    
+    wxEndBusyCursor();
+}
+
+void wxFileDialog::OnActivated( wxListEvent &WXUNUSED(event) )
+{
+    wxCommandEvent cevent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK);
+    cevent.SetEventObject( this );
+    GetEventHandler()->ProcessEvent( cevent );
+}
+
+void wxFileDialog::OnSelected( wxListEvent &event )
+{
+    m_text->SetValue( event.m_item.m_text );
+}
+
+void wxFileDialog::OnListOk( wxCommandEvent &event )
+{
+    wxString filename( m_text->GetValue() );
+    wxString dir;
+    m_list->GetDir( dir );
+    if (filename.IsEmpty()) return;
+    
+    dir += _T("/");
+    dir += filename;
+    filename = dir;
+    
+    if (wxDirExists(filename))
+    {
+        m_list->GoToDir( filename );
+       m_text->SetValue( _T("") );
+       return;
+    }
+    
+    if ( (m_dialogStyle & wxSAVE) && (m_dialogStyle & wxOVERWRITE_PROMPT) )
+    {
+        if (wxFileExists( filename ))
+        {
+            wxString msg;
+            msg.Printf( _("File '%s' already exists, do you really want to "
+                         "overwrite it?"), filename.c_str() );
+
+            if (wxMessageBox(msg, _("Confirm"), wxYES_NO) != wxYES)
+                return;
+        }
+    }
+    else if ( (m_dialogStyle & wxOPEN) && (m_dialogStyle & wxFILE_MUST_EXIST) )
+    {
+        if ( !wxFileExists( filename ) )
+        {
+            wxMessageBox(_("Please choose an existing file."), _("Error"), wxOK);
+
+            return;
+        }
+    }
+
+    SetPath( filename );
+    event.Skip();
+}
+
+void wxFileDialog::OnList( wxCommandEvent &WXUNUSED(event) )
+{
+    m_list->ChangeToListMode();
+}
+
+void wxFileDialog::OnReport( wxCommandEvent &WXUNUSED(event) )
+{
+    m_list->ChangeToReportMode();
+}
+
+void wxFileDialog::OnIcon( wxCommandEvent &WXUNUSED(event) )
+{
+    m_list->ChangeToIconMode();
+}
+
+void wxFileDialog::OnUp( wxCommandEvent &WXUNUSED(event) )
+{
+    m_list->GoToParentDir();
+}
+
+void wxFileDialog::OnHome( wxCommandEvent &WXUNUSED(event) )
+{
+    m_list->GoToHomeDir();
+}
+
+void wxFileDialog::SetPath( const wxString& path )
+{
+    // not only set the full path but also update filename and dir
+    m_path = path;
+    if ( !!path )
+    {
+        wxString ext;
+        wxSplitPath(path, &m_dir, &m_fileName, &ext);
+       if (!ext.IsEmpty())
+       {
+           m_fileName += _T(".");
+            m_fileName += ext;
+       }
+    }
+}
+    
+// ----------------------------------------------------------------------------
+// global functions
+// ----------------------------------------------------------------------------
+
+wxString
+wxFileSelectorEx(const wxChar *message,
+                 const wxChar *default_path,
+                 const wxChar *default_filename,
+                 int *indexDefaultExtension,
+                 const wxChar *wildcard,
+                 int flags,
+                 wxWindow *parent,
+                 int x, int y)
+{
+    // TODO: implement this somehow
+    return wxFileSelector(message, default_path, default_filename, _T(""),
+                          wildcard, flags, parent, x, y);
+}
+
+wxString wxFileSelector( const wxChar *title,
+                      const wxChar *defaultDir, const wxChar *defaultFileName,
+                      const wxChar *defaultExtension, const wxChar *filter, int flags,
+                      wxWindow *parent, int x, int y )
+{
+    wxString filter2;
+    if ( defaultExtension && !filter )
+        filter2 = wxString(_T("*.")) + wxString(defaultExtension) ;
+    else if ( filter )
+        filter2 = filter;
+
+    wxString defaultDirString;
+    if (defaultDir)
+        defaultDirString = defaultDir;
+
+    wxString defaultFilenameString;
+    if (defaultFileName)
+        defaultFilenameString = defaultFileName;
+
+    wxFileDialog fileDialog( parent, title, defaultDirString, defaultFilenameString, filter2, flags, wxPoint(x, y) );
+
+    if ( fileDialog.ShowModal() == wxID_OK )
+    {
+        return fileDialog.GetPath();
+    }
+    else
+    {
+        return wxEmptyString;
+    }
+}
+
+wxString wxLoadFileSelector( const wxChar *what, const wxChar *extension, const wxChar *default_name, wxWindow *parent )
+{
+    wxChar *ext = (wxChar *)extension;
+
+    wxChar prompt[50];
+    wxString str = _("Load %s file");
+    wxSprintf(prompt, str, what);
+
+    if (*ext == _T('.')) ext++;
+    wxChar wild[60];
+    wxSprintf(wild, _T("*.%s"), ext);
+
+    return wxFileSelector (prompt, (const wxChar *) NULL, default_name, ext, wild, 0, parent);
+}
+
+wxString wxSaveFileSelector(const wxChar *what, const wxChar *extension, const wxChar *default_name,
+         wxWindow *parent )
+{
+    wxChar *ext = (wxChar *)extension;
+
+    wxChar prompt[50];
+    wxString str = _("Save %s file");
+    wxSprintf(prompt, str, what);
+
+    if (*ext == _T('.')) ext++;
+    wxChar wild[60];
+    wxSprintf(wild, _T("*.%s"), ext);
+
+    return wxFileSelector (prompt, (const wxChar *) NULL, default_name, ext, wild, 0, parent);
+}
+
index 06450f44a0b5e077f52556f4231fabf30ea5374a..2cc9da5c5d184c3c01aeeeb946a7030316b5ea08 100644 (file)
@@ -92,10 +92,17 @@ wxGenericMessageDialog::wxGenericMessageDialog( wxWindow *parent,
     // 4) buttons
     topsizer->Add( CreateButtonSizer( style ), 0, wxCENTRE | wxALL, 10 );
 
+    SetAutoLayout( TRUE );
+    SetSizer( topsizer );
+    
     topsizer->SetSizeHints( this );
     topsizer->Fit( this );
-    SetSizer( topsizer );
-    SetAutoLayout( TRUE );
+    wxSize size( GetSize() );
+    if (size.x < size.y*2)
+    {
+        size.x = size.y*2;
+       SetSize( size );
+    }
 
     Centre( wxBOTH | wxCENTER_FRAME);
 
index b828f7529482d1dee7ceb0ff0d6e79afa38d549d..40ca7ba6a348d304586ddd54f4ede83296d668d4 100644 (file)
@@ -100,10 +100,11 @@ wxTextEntryDialog::wxTextEntryDialog(wxWindow *parent,
     // 4) buttons
     topsizer->Add( CreateButtonSizer( style ), 0, wxCENTRE | wxALL, 10 );
     
+    SetAutoLayout( TRUE );
+    SetSizer( topsizer );
+    
     topsizer->SetSizeHints( this );
     topsizer->Fit( this );
-    SetSizer( topsizer );
-    SetAutoLayout( TRUE );
 
     Centre( wxBOTH );