From 8b17ba727c69f66dfa0a73dfdd04ff7d30e3c188 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Tue, 17 Aug 1999 15:55:25 +0000 Subject: [PATCH] Added new file dialog 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 --- Makefile.in | 98 ++-- distrib/msw/tmake/filelist.txt | 3 +- docs/latex/wx/listctrl.tex | 9 +- docs/latex/wx/listevt.tex | 1 + include/wx/filedlg.h | 2 +- include/wx/generic/dirdlgg.h | 1 + include/wx/generic/extdlgg.h | 106 ----- include/wx/generic/filedlgg.h | 229 ++++++++++ include/wx/generic/find.xpm | 99 ++++ include/wx/generic/folder.xpm | 48 ++ include/wx/generic/list.xpm | 45 ++ include/wx/generic/txt.xpm | 53 +++ src/generic/dirdlgg.cpp | 1 + src/generic/filedlgg.cpp | 808 +++++++++++++++++++++++++++++++++ src/generic/msgdlgg.cpp | 11 +- src/generic/textdlgg.cpp | 5 +- 16 files changed, 1361 insertions(+), 158 deletions(-) delete mode 100644 include/wx/generic/extdlgg.h create mode 100644 include/wx/generic/filedlgg.h create mode 100644 include/wx/generic/find.xpm create mode 100644 include/wx/generic/folder.xpm create mode 100644 include/wx/generic/list.xpm create mode 100644 include/wx/generic/txt.xpm create mode 100644 src/generic/filedlgg.cpp diff --git a/Makefile.in b/Makefile.in index ad0e8f9ce3..b5502050b0 100644 --- a/Makefile.in +++ b/Makefile.in @@ -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 diff --git a/distrib/msw/tmake/filelist.txt b/distrib/msw/tmake/filelist.txt index 76ae68bfbd..fade826d5d 100644 --- a/distrib/msw/tmake/filelist.txt +++ b/distrib/msw/tmake/filelist.txt @@ -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 diff --git a/docs/latex/wx/listctrl.tex b/docs/latex/wx/listctrl.tex index afa9e5e5eb..0adf77c4de 100644 --- a/docs/latex/wx/listctrl.tex +++ b/docs/latex/wx/listctrl.tex @@ -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. diff --git a/docs/latex/wx/listevt.tex b/docs/latex/wx/listevt.tex index 6dbb70d0dd..1723a34d79 100644 --- a/docs/latex/wx/listevt.tex +++ b/docs/latex/wx/listevt.tex @@ -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.} diff --git a/include/wx/filedlg.h b/include/wx/filedlg.h index 7ce866145b..14b0010184 100644 --- a/include/wx/filedlg.h +++ b/include/wx/filedlg.h @@ -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__) diff --git a/include/wx/generic/dirdlgg.h b/include/wx/generic/dirdlgg.h index f42f9bffac..27ea3c4e69 100644 --- a/include/wx/generic/dirdlgg.h +++ b/include/wx/generic/dirdlgg.h @@ -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 index 04d6980dda..0000000000 --- a/include/wx/generic/extdlgg.h +++ /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 index 0000000000..04f081b6bf --- /dev/null +++ b/include/wx/generic/filedlgg.h @@ -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 index 0000000000..82e5ccbf61 --- /dev/null +++ b/include/wx/generic/find.xpm @@ -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=76.....pganknwBMz ", +"XM.w.h..Xb0,*6..v..CC.kklkB<<;m ", +"ZMzX#..;......9..N.rC...lBM 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:+*+;+ ", +" +;-+;+ ", +" +;+ "}; diff --git a/src/generic/dirdlgg.cpp b/src/generic/dirdlgg.cpp index 02f91965e4..8ea3fa571e 100644 --- a/src/generic/dirdlgg.cpp +++ b/src/generic/dirdlgg.cpp @@ -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 index 0000000000..ad39eb36b6 --- /dev/null +++ b/src/generic/filedlgg.cpp @@ -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 += _(" "); + else if (m_isLink) s += _(" "); + 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 = _(""); + else if (m_isLink) s = _(""); + 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); +} + diff --git a/src/generic/msgdlgg.cpp b/src/generic/msgdlgg.cpp index 06450f44a0..2cc9da5c5d 100644 --- a/src/generic/msgdlgg.cpp +++ b/src/generic/msgdlgg.cpp @@ -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); diff --git a/src/generic/textdlgg.cpp b/src/generic/textdlgg.cpp index b828f75294..40ca7ba6a3 100644 --- a/src/generic/textdlgg.cpp +++ b/src/generic/textdlgg.cpp @@ -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 ); -- 2.45.2