]> git.saurik.com Git - wxWidgets.git/commitdiff
Added and corrected a few more html makefiles,
authorRobert Roebling <robert@roebling.de>
Sun, 15 Aug 1999 15:18:54 +0000 (15:18 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 15 Aug 1999 15:18:54 +0000 (15:18 +0000)
  Corrected wrong buffer size in menu code,
  Turned wxDirDlgg from functional to cool,
  Found a few esoteric bugs in wxListCtrl and
    wxTreeCtrl on the way

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

21 files changed:
Makefile.in
configure.in
distrib/msw/tmake/unx.t
include/wx/generic/dirdlgg.h
samples/dialogs/Makefile.in
samples/html/printing/Makefile.in
samples/html/virtual/.cvsignore
samples/html/virtual/Makefile.am [deleted file]
samples/html/virtual/Makefile.in [new file with mode: 0644]
samples/html/widget/.cvsignore
samples/html/widget/Makefile.am [deleted file]
samples/html/widget/Makefile.in [new file with mode: 0644]
samples/html/zip/.cvsignore
samples/html/zip/Makefile.am [deleted file]
samples/html/zip/Makefile.in [new file with mode: 0644]
src/generic/choicdgg.cpp
src/generic/dirdlgg.cpp
src/generic/listctrl.cpp
src/generic/treectrl.cpp
src/gtk/menu.cpp
src/gtk1/menu.cpp

index c74ae9c87abedbd2b72cb7b5931770ec0e51f0b1..ad0e8f9ce3da51b1a68347d880d2b2c8ee95ad46 100644 (file)
@@ -1,6 +1,6 @@
 
 #
-# This file was automatically generated by tmake at 11:55, 1999/08/14
+# This file was automatically generated by tmake at 20:13, 1999/08/14
 # DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE UNX.T!
 
 #
@@ -1197,19 +1197,19 @@ REQUIRED_DIRS = ./lib ./src ./src/common ./src/gtk ./src/motif ./src/msw \
 all:    $(REQUIRED_DIRS) $(OBJECTS) @WX_TARGET_LIBRARY@ @WX_CREATE_LINKS@
 
 $(REQUIRED_DIRS):      $(WXDIR)/include/wx/defs.h $(WXDIR)/include/wx/object.h $(WXDIR)/include/wx/setup.h
-       mkdir -p ./lib
-       mkdir -p ./src
-       mkdir -p ./src/common
-       mkdir -p ./src/msw
-       mkdir -p ./src/gtk
-       mkdir -p ./src/motif
-       mkdir -p ./src/motif/xmcombo
-       mkdir -p ./src/generic
-       mkdir -p ./src/unix
-       mkdir -p ./src/html
-       mkdir -p ./src/png
-       mkdir -p ./src/jpeg
-       mkdir -p ./src/zlib
+       @mkdir -p ./lib
+       @mkdir -p ./src
+       @mkdir -p ./src/common
+       @mkdir -p ./src/msw
+       @mkdir -p ./src/gtk
+       @mkdir -p ./src/motif
+       @mkdir -p ./src/motif/xmcombo
+       @mkdir -p ./src/generic
+       @mkdir -p ./src/unix
+       @mkdir -p ./src/html
+       @mkdir -p ./src/png
+       @mkdir -p ./src/jpeg
+       @mkdir -p ./src/zlib
 
 @WX_LIBRARY_NAME_STATIC@:  $(OBJECTS)
        $(AR) $(AROPTIONS) ./lib/$@ $(OBJECTS)
index 13fdd3092c338a30c66805dd135e0b9b799eff87..664487763aa28ee496a56dcadbf37e871d580708 100644 (file)
@@ -2733,6 +2733,9 @@ AC_OUTPUT([
            samples/html/help/Makefile
            samples/html/printing/Makefile
            samples/html/test/Makefile
+           samples/html/zip/Makefile
+           samples/html/virtual/Makefile
+           samples/html/widget/Makefile
            utils/Makefile
            utils/wxMMedia2/Makefile
            utils/wxMMedia2/lib/Makefile
index 312eef8eee32b4659a15da07f546beb851577aa0..4293522b8477d8f1fad164508cd1d1e50968d434 100644 (file)
@@ -403,19 +403,19 @@ REQUIRED_DIRS = ./lib ./src ./src/common ./src/gtk ./src/motif ./src/msw \
 all:    $(REQUIRED_DIRS) $(OBJECTS) @WX_TARGET_LIBRARY@ @WX_CREATE_LINKS@
 
 $(REQUIRED_DIRS):      $(WXDIR)/include/wx/defs.h $(WXDIR)/include/wx/object.h $(WXDIR)/include/wx/setup.h
-       mkdir -p ./lib
-       mkdir -p ./src
-       mkdir -p ./src/common
-       mkdir -p ./src/msw
-       mkdir -p ./src/gtk
-       mkdir -p ./src/motif
-       mkdir -p ./src/motif/xmcombo
-       mkdir -p ./src/generic
-       mkdir -p ./src/unix
-       mkdir -p ./src/html
-       mkdir -p ./src/png
-       mkdir -p ./src/jpeg
-       mkdir -p ./src/zlib
+       @mkdir -p ./lib
+       @mkdir -p ./src
+       @mkdir -p ./src/common
+       @mkdir -p ./src/msw
+       @mkdir -p ./src/gtk
+       @mkdir -p ./src/motif
+       @mkdir -p ./src/motif/xmcombo
+       @mkdir -p ./src/generic
+       @mkdir -p ./src/unix
+       @mkdir -p ./src/html
+       @mkdir -p ./src/png
+       @mkdir -p ./src/jpeg
+       @mkdir -p ./src/zlib
 
 @WX_LIBRARY_NAME_STATIC@:  $(OBJECTS)
        $(AR) $(AROPTIONS) ./lib/$@ $(OBJECTS)
index 675bf147b1363d12f2f720726a8b72eaf1897fdb..f42f9bffac286f89145e9b6b71cdbddc5f9107a0 100644 (file)
@@ -76,14 +76,62 @@ class wxDirItemData;
 class wxDirCtrl;
 class wxDirDialog;
 
+//-----------------------------------------------------------------------------
+// wxDirItemData
+//-----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxDirItemData : public wxTreeItemData
+{
+public:
+  wxDirItemData(wxString& path, wxString& name);
+  ~wxDirItemData();
+  bool HasSubDirs();
+  void SetNewDirName( wxString path );
+  wxString m_path, m_name;
+  bool m_isHidden;
+  bool m_hasSubDirs;
+};
+
+//-----------------------------------------------------------------------------
+// wxDirCtrl
+//-----------------------------------------------------------------------------
+
+class WXDLLEXPORT wxDirCtrl: public wxTreeCtrl
+{
+public:
+    bool           m_showHidden;
+    wxTreeItemId   m_rootId;
+  
+    wxDirCtrl();
+    wxDirCtrl(wxWindow *parent, const wxWindowID id = -1, 
+             const wxString &dir = "/",
+             const wxPoint& pos = wxDefaultPosition,
+             const wxSize& size = wxDefaultSize,
+             const long style = wxTR_HAS_BUTTONS,
+             const wxString& name = "wxTreeCtrl" );
+    void ShowHidden( const bool yesno );
+    void OnExpandItem(wxTreeEvent &event );
+    void OnCollapseItem(wxTreeEvent &event );
+    void OnBeginEditItem(wxTreeEvent &event );
+    void OnEndEditItem(wxTreeEvent &event );
+    
+protected:
+    void CreateItems(const wxTreeItemId &parent);
+    void SetupSections();
+    wxArrayString m_paths, m_names;
+    
+private:
+    DECLARE_EVENT_TABLE()
+    DECLARE_DYNAMIC_CLASS(wxDirCtrl)
+};
+
 //-----------------------------------------------------------------------------
 // wxDirDialog
 //-----------------------------------------------------------------------------
 
 class WXDLLEXPORT wxDirDialog: public wxDialog
 {
-  DECLARE_DYNAMIC_CLASS(wxDirDialog)
- public:
+public:
     wxDirDialog(wxWindow *parent, 
                const wxString& message = wxFileSelectorPromptStr,
                const wxString& defaultPath = wxEmptyString,
@@ -100,24 +148,24 @@ class WXDLLEXPORT wxDirDialog: public wxDialog
 
     void OnTreeSelected( wxTreeEvent &event );
     void OnTreeKeyDown( wxTreeEvent &event );
-    void OnSize(wxSizeEvent& event);
     void OnOK(wxCommandEvent& event);
     void OnCancel(wxCommandEvent& event); 
     void OnNew(wxCommandEvent& event);
     // void OnCheck(wxCommandEvent& event);
-    DECLARE_EVENT_TABLE()
 
- protected:
+protected:
     // implementation
-    wxString    m_message;
-    long        m_dialogStyle;
-    wxWindow *  m_parent;
-    wxString    m_path;
-    wxDirCtrl  *m_dir;
-    wxTextCtrl *m_input;
-    // wxCheckBox *m_check;
-    wxButton   *m_ok, *m_cancel, *m_new;
-    void doSize();
+    wxString       m_message;
+    long           m_dialogStyle;
+    wxString       m_path;
+    wxDirCtrl     *m_dir;
+    wxTextCtrl    *m_input;
+    wxCheckBox    *m_check;  // not yet used
+    wxButton      *m_ok, *m_cancel, *m_new;
+    
+private:
+    DECLARE_EVENT_TABLE()
+    DECLARE_DYNAMIC_CLASS(wxDirDialog)
 };
 
 #endif
index 63a8b4ce34d09f9462f5b616da2cb3307e5a0194..ac0f1c29f56cdbccd9e27827e2c3b1b4f49dac43 100644 (file)
@@ -11,7 +11,7 @@
 
 top_srcdir = @top_srcdir@
 top_builddir = ../..
-program_dir = samples/samples/dialogs
+program_dir = samples/dialogs
 
 PROGRAM=dialogs
 
index 133be35a8dbd0b251b3a7bb804d44d9b90019c2c..5bd7d8becaa2334343a43f23ab0c95053a1434a7 100644 (file)
@@ -11,8 +11,9 @@
 
 top_srcdir = @top_srcdir@
 top_builddir = ../../..
+program_dir = samples/html/printing
 
-VPATH = :$(top_srcdir)/samples/html/printing
+DATAFILES = test.htm pic.png
 
 PROGRAM=printing
 
index 70845e08eb0b807b1022dc47cd27e67f726d4a0f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1 +0,0 @@
-Makefile.in
diff --git a/samples/html/virtual/Makefile.am b/samples/html/virtual/Makefile.am
deleted file mode 100644 (file)
index e5fe674..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-AUTOMAKE_OPTIONS = 1.3 no-dependencies
-
-SUFFIXES = .cpp
-
-DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE)
-
-noinst_PROGRAMS = virtual
-
-virtual_SOURCES = virtual.cpp
diff --git a/samples/html/virtual/Makefile.in b/samples/html/virtual/Makefile.in
new file mode 100644 (file)
index 0000000..0b660a7
--- /dev/null
@@ -0,0 +1,23 @@
+#
+# File:                Makefile.in
+# Author:      Julian Smart
+# Created:     1998
+# Updated:     
+# Copyright:   (c) 1998 Julian Smart
+#
+# "%W% %G%"
+#
+# Makefile for html virtual example (UNIX).
+
+top_srcdir = @top_srcdir@
+top_builddir = ../../..
+program_dir = samples/html/virtual
+
+PROGRAM=virtual
+
+OBJECTS=$(PROGRAM).o
+
+DATAFILES=start.htm
+
+include ../../../src/makeprog.env
+
index 70845e08eb0b807b1022dc47cd27e67f726d4a0f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1 +0,0 @@
-Makefile.in
diff --git a/samples/html/widget/Makefile.am b/samples/html/widget/Makefile.am
deleted file mode 100644 (file)
index 5e03a4a..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-AUTOMAKE_OPTIONS = 1.3 no-dependencies
-
-SUFFIXES = .cpp
-
-DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE)
-
-noinst_PROGRAMS = widget
-
-widget_SOURCES = widget.cpp
diff --git a/samples/html/widget/Makefile.in b/samples/html/widget/Makefile.in
new file mode 100644 (file)
index 0000000..1b21882
--- /dev/null
@@ -0,0 +1,23 @@
+#
+# File:                Makefile.in
+# Author:      Julian Smart
+# Created:     1998
+# Updated:     
+# Copyright:   (c) 1998 Julian Smart
+#
+# "%W% %G%"
+#
+# Makefile for html widget example (UNIX).
+
+top_srcdir = @top_srcdir@
+top_builddir = ../../..
+program_dir = samples/html/widget
+
+PROGRAM=widget
+
+OBJECTS=$(PROGRAM).o
+
+DATAFILES=start.htm
+
+include ../../../src/makeprog.env
+
index 70845e08eb0b807b1022dc47cd27e67f726d4a0f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1 +0,0 @@
-Makefile.in
diff --git a/samples/html/zip/Makefile.am b/samples/html/zip/Makefile.am
deleted file mode 100644 (file)
index 814476c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-AUTOMAKE_OPTIONS = 1.3 no-dependencies
-
-SUFFIXES = .cpp
-
-DEFS = @DEFS@ $(TOOLKIT_DEF) $(WXDEBUG_DEFINE)
-
-noinst_PROGRAMS = zip
-
-zip_SOURCES = zip.cpp
diff --git a/samples/html/zip/Makefile.in b/samples/html/zip/Makefile.in
new file mode 100644 (file)
index 0000000..76297fb
--- /dev/null
@@ -0,0 +1,23 @@
+#
+# File:                Makefile.in
+# Author:      Julian Smart
+# Created:     1998
+# Updated:     
+# Copyright:   (c) 1998 Julian Smart
+#
+# "%W% %G%"
+#
+# Makefile for html zip example (UNIX).
+
+top_srcdir = @top_srcdir@
+top_builddir = ../../..
+program_dir = samples/html/zip
+
+PROGRAM=zip
+
+OBJECTS=$(PROGRAM).o
+
+DATAFILES=pages.zip start.htm
+
+include ../../../src/makeprog.env
+
index 608fec4009ea445f66df652810f72b9e82587c9e..5f82eb8ae093444a367b13cebbb92445cb2f0b5e 100644 (file)
@@ -264,10 +264,11 @@ bool wxSingleChoiceDialog::Create( wxWindow *WXUNUSED(parent),
     // 4) buttons
     topsizer->Add( CreateButtonSizer( wxOK|wxCANCEL ), 0, wxCENTRE | wxALL, 10 );
 
+    SetAutoLayout( TRUE );
+    SetSizer( topsizer );
+    
     topsizer->SetSizeHints( this );
     topsizer->Fit( this );
-    SetSizer( topsizer );
-    SetAutoLayout( TRUE );
 
     Centre( wxBOTH );
 
index f43ff6f7b545545b3e1d0c0eb52cddf6cdb7cba0..02f91965e4bd9d4375b19a45e78e04f37586a3c9 100644 (file)
 #include "wx/intl.h"
 #include "wx/imaglist.h"
 #include "wx/icon.h"
+#include "wx/log.h"
+#include "wx/sizer.h"
+
+#if wxUSE_STATLINE
+    #include "wx/statline.h"
+#endif
 
 #include "wx/generic/dirdlgg.h"
 
@@ -112,73 +118,34 @@ static const int ID_NEW = 1004;
 // wxDirItemData
 //-----------------------------------------------------------------------------
 
-class wxDirItemData : public wxTreeItemData
-{
-public:
-  wxDirItemData(wxString& path, wxString& name);
-  ~wxDirItemData();
-  bool HasSubDirs();
-  wxString *m_path, *m_name;
-  bool m_isHidden;
-  bool m_hasSubDirs;
-};
-
-//-----------------------------------------------------------------------------
-// wxDirCtrl
-//-----------------------------------------------------------------------------
-
-class wxDirCtrl: public wxTreeCtrl
+wxDirItemData::wxDirItemData(wxString& path, wxString& name)
 {
-  DECLARE_DYNAMIC_CLASS(wxDirCtrl)
-  
-  public:
-    bool   m_showHidden;
-    wxTreeItemId   m_rootId;
-  
-    wxDirCtrl(void);
-    wxDirCtrl(wxWindow *parent, const wxWindowID id = -1, 
-             const wxString &dir = "/",
-             const wxPoint& pos = wxDefaultPosition,
-             const wxSize& size = wxDefaultSize,
-             const long style = wxTR_HAS_BUTTONS,
-             const wxString& name = "wxTreeCtrl" );
-    void OnExpandItem(wxTreeEvent &event );
-    void OnCollapseItem(wxTreeEvent &event );
-    void ShowHidden( const bool yesno );
-    DECLARE_EVENT_TABLE()
- protected:
-    void CreateItems(const wxTreeItemId &parent);
-    void SetupSections(void);
-    wxArrayString m_paths, m_names;
-};
-
-//-----------------------------------------------------------------------------
-// wxDirItemData
-//-----------------------------------------------------------------------------
+    m_path = path;
+    m_name = name;
+    /* Insert logic to detect hidden files here 
+     * In UnixLand we just check whether the first char is a dot 
+     * For FileNameFromPath read LastDirNameInThisPath ;-) */
+    // m_isHidden = (bool)(wxFileNameFromPath(*m_path)[0] == '.');
+    m_isHidden = FALSE;
+    m_hasSubDirs = HasSubDirs();
+}
 
-wxDirItemData::wxDirItemData(wxString& path, wxString& name)
+wxDirItemData::~wxDirItemData()
 {
-  m_path = new wxString(path);
-  m_name = new wxString(name);
-  /* Insert logic to detect hidden files here 
-   * In UnixLand we just check whether the first char is a dot 
-   * For FileNameFromPath read LastDirNameInThisPath ;-) */
-  // m_isHidden = (bool)(wxFileNameFromPath(*m_path)[0] == '.');
-  m_isHidden = FALSE;
-  m_hasSubDirs = HasSubDirs();
 }
 
-wxDirItemData:: ~wxDirItemData()
+void wxDirItemData::SetNewDirName( wxString path )
 {
-  delete m_path;
-  delete m_name;
+    m_path = path;
+    m_name = wxFileNameFromPath( path );
 }
 
 bool wxDirItemData::HasSubDirs()
 {
-  wxString search = *m_path + "/*";
-  wxString path = wxFindFirstFile( search, wxDIR );
-  return (bool)(!path.IsNull());
+    wxString search = m_path + "/*";
+    wxLogNull log;
+    wxString path = wxFindFirstFile( search, wxDIR );
+    return (bool)(!path.IsNull());
 }
 
 //-----------------------------------------------------------------------------
@@ -190,12 +157,14 @@ IMPLEMENT_DYNAMIC_CLASS(wxDirCtrl,wxTreeCtrl)
 BEGIN_EVENT_TABLE(wxDirCtrl,wxTreeCtrl)
   EVT_TREE_ITEM_EXPANDING     (-1, wxDirCtrl::OnExpandItem)
   EVT_TREE_ITEM_COLLAPSED     (-1, wxDirCtrl::OnCollapseItem)
+  EVT_TREE_BEGIN_LABEL_EDIT   (-1, wxDirCtrl::OnBeginEditItem)
+  EVT_TREE_END_LABEL_EDIT     (-1, wxDirCtrl::OnEndEditItem)
 END_EVENT_TABLE()
 
 wxDirCtrl::wxDirCtrl(void)
 {
-  m_showHidden = FALSE;
-};
+    m_showHidden = FALSE;
+}
 
 wxDirCtrl::wxDirCtrl(wxWindow *parent, const wxWindowID id, const wxString &WXUNUSED(dir),
             const wxPoint& pos, const wxSize& size,
@@ -203,16 +172,16 @@ wxDirCtrl::wxDirCtrl(wxWindow *parent, const wxWindowID id, const wxString &WXUN
  :
   wxTreeCtrl( parent, id, pos, size, style, wxDefaultValidator, name )
 {
-  m_imageListNormal = new wxImageList(16, 16, TRUE);
-  m_imageListNormal->Add(wxICON(icon1));
-  m_imageListNormal->Add(wxICON(icon2));
-  SetImageList(m_imageListNormal);
+    m_imageListNormal = new wxImageList(16, 16, TRUE);
+    m_imageListNormal->Add(wxICON(icon1));
+    m_imageListNormal->Add(wxICON(icon2));
+    SetImageList(m_imageListNormal);
   
-  m_showHidden = FALSE;
-  m_rootId = AddRoot("Sections");
-  SetItemHasChildren(m_rootId);
-  Expand(m_rootId); // automatically expand first level
-};
+    m_showHidden = FALSE;
+    m_rootId = AddRoot( _("Sections") );
+    SetItemHasChildren(m_rootId);
+    Expand(m_rootId); // automatically expand first level
+}
 
 /* Quick macro. Don't worry, I'll #undef it later */
 #define ADD_SECTION(a,b) \
@@ -238,71 +207,133 @@ void wxDirCtrl::SetupSections()
 
 void wxDirCtrl::CreateItems(const wxTreeItemId &parent)
 {
-  wxTreeItemId id;
-  wxDirItemData *dir_item;
+    wxTreeItemId id;
+    wxDirItemData *dir_item;
 
 //  wxASSERT(m_paths.Count() == m_names.Count());  ?
   
-  for (unsigned int i=0; i<m_paths.Count(); i++) 
-  {
-    dir_item = new wxDirItemData(m_paths[i],m_names[i]);
-    id = AppendItem( parent, m_names[i], 0, 1, dir_item);
-    if (dir_item->m_hasSubDirs) SetItemHasChildren(id);
-  }
+    for (unsigned int i=0; i<m_paths.Count(); i++) 
+    {
+        dir_item = new wxDirItemData(m_paths[i],m_names[i]);
+        id = AppendItem( parent, m_names[i], 0, 1, dir_item);
+        if (dir_item->m_hasSubDirs) SetItemHasChildren(id);
+    }
 }
 
-void wxDirCtrl::OnExpandItem(wxTreeEvent &event )
+void wxDirCtrl::OnBeginEditItem(wxTreeEvent &event)
 {
-  if (event.GetItem() == m_rootId)
-  {
-    SetupSections();
-    CreateItems(m_rootId);
-    return;
-  };
-
-  // This may take a longish time. Go to busy cursor
-  wxBeginBusyCursor();
+    // don't rename the main entry "Sections"
+    if (event.GetItem() == m_rootId)
+    {
+        event.Veto();
+        return;
+    }
+    
+    // don't rename the individual sections
+    if (GetParent( event.GetItem() ) == m_rootId)
+    {
+        event.Veto();
+        return;
+    }
+}
 
-  wxDirItemData *data = (wxDirItemData *)GetItemData(event.GetItem());
-  wxASSERT(data);
+void wxDirCtrl::OnEndEditItem(wxTreeEvent &event)
+{
+    if ((event.GetLabel().IsEmpty()) ||
+        (event.GetLabel() == _(".")) ||
+        (event.GetLabel() == _("..")) ||
+       (event.GetLabel().First( _T("/") ) != wxNOT_FOUND))
+    {
+        wxMessageDialog dialog(this, _("Illegal directory name."), _("Error"), wxOK | wxICON_ERROR );
+       dialog.ShowModal();
+        event.Veto();
+       return;
+    }
 
-  wxString search,path,filename;
+    wxTreeItemId id = event.GetItem();
+    wxDirItemData *data = (wxDirItemData*)GetItemData( id );
+    wxASSERT( data );
+    
+    wxString new_name( wxPathOnly( data->m_path ) );
+    new_name += _T("/");
+    new_name += event.GetLabel();
+    
+    wxLogNull log;
+    
+    if (wxFileExists(new_name))
+    {
+        wxMessageDialog dialog(this, _("File name exists already."), _("Error"), wxOK | wxICON_ERROR );
+       dialog.ShowModal();
+        event.Veto();
+    }
+    
+    if (wxRenameFile(data->m_path,new_name))
+    {
+        data->SetNewDirName( new_name );
+    }
+    else
+    {
+        wxMessageDialog dialog(this, _("Operation not permitted."), _("Error"), wxOK | wxICON_ERROR );
+       dialog.ShowModal();
+        event.Veto();
+    }
+}
 
-  m_paths.Clear();
-  m_names.Clear();
-  search = *(data->m_path) + "/*";
-  for (path = wxFindFirstFile( search, wxDIR ); !path.IsNull(); 
-       path=wxFindNextFile() ) {
-    filename = wxFileNameFromPath( path );
-    /* Don't add "." and ".." to the tree. I think wxFindNextFile
-     * also checks this, but I don't quite understand what happens
-     * there. Also wxFindNextFile seems to swallow hidden dirs */
-    if ((filename != ".") && (filename != "..")) {
-      m_paths.Add(path);
-      m_names.Add(filename);
+void wxDirCtrl::OnExpandItem(wxTreeEvent &event)
+{
+    if (event.GetItem() == m_rootId)
+    {
+        SetupSections();
+        CreateItems(m_rootId);
+        return;
     }
-  }
-  CreateItems(event.GetItem());
-  wxEndBusyCursor();
-  
-  SortChildren( event.GetItem() );
-};
 
+    // This may take a longish time. Go to busy cursor
+    wxBeginBusyCursor();
+
+    wxDirItemData *data = (wxDirItemData *)GetItemData(event.GetItem());
+    wxASSERT(data);
+
+    wxString search,path,filename;
+
+    m_paths.Clear();
+    m_names.Clear();
+    search = data->m_path + "/*";
+    for (path = wxFindFirstFile( search, wxDIR ); !path.IsNull(); 
+       path=wxFindNextFile() ) 
+    {
+        filename = wxFileNameFromPath( path );
+        /* Don't add "." and ".." to the tree. I think wxFindNextFile
+         * also checks this, but I don't quite understand what happens
+         * there. Also wxFindNextFile seems to swallow hidden dirs */
+        if ((filename != ".") && (filename != "..")) 
+        {
+            m_paths.Add(path);
+            m_names.Add(filename);
+        }
+    }
+    
+    CreateItems( event.GetItem() );
+    SortChildren( event.GetItem() );
+      
+    wxEndBusyCursor();
+}
 
 void wxDirCtrl::OnCollapseItem(wxTreeEvent &event )
 {
-  wxTreeItemId child, parent = event.GetItem();
-  long cookie;
-  /* Workaround because DeleteChildren has disapeared (why?) and
-   * CollapseAndReset doesn't work as advertised (deletes parent too) */
-  child = GetFirstChild(parent, cookie);
-  while (child.IsOk()) {
-    Delete(child);
-    /* Not GetNextChild below, because the cookie mechanism can't 
-     * handle disappearing children! */
+    wxTreeItemId child, parent = event.GetItem();
+    long cookie;
+    /* Workaround because DeleteChildren has disapeared (why?) and
+     * CollapseAndReset doesn't work as advertised (deletes parent too) */
     child = GetFirstChild(parent, cookie);
-  }
-};
+    while (child.IsOk()) 
+    {
+        Delete(child);
+        /* Not GetNextChild below, because the cookie mechanism can't 
+         * handle disappearing children! */
+        child = GetFirstChild(parent, cookie);
+    }
+}
 
 //-----------------------------------------------------------------------------
 // wxDirDialog
@@ -332,110 +363,76 @@ wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
   wxDialog(parent, -1, message, pos, wxSize(300,300),
           wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
 {
-  m_message = message;
-  m_dialogStyle = style;
-  m_parent = parent;
+    m_message = message;
+    m_dialogStyle = style;
+    m_parent = parent;
   
-  m_path = defaultPath;
-
-  m_dir = new wxDirCtrl( this, ID_DIRCTRL, "/", wxDefaultPosition, wxDefaultSize, wxTR_HAS_BUTTONS | wxSUNKEN_BORDER ); 
-  m_input = new wxTextCtrl( this, ID_TEXTCTRL, m_path, wxDefaultPosition ); 
-  // m_check = new wxCheckBox( this, ID_CHECK, _("Show hidden") );
-  m_ok = new wxButton( this, ID_OK, _("OK") );
-  m_cancel = new wxButton( this, ID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize(75,-1) );
-  m_new = new wxButton( this, ID_NEW, _("New...") );
-
-  // m_check->SetValue(TRUE);
-  m_ok->SetDefault();
-  m_dir->SetFocus();
-
-  doSize();
-}
-
-void wxDirDialog::OnSize(wxSizeEvent& WXUNUSED(event))
-{
-  doSize();
-}
+    m_path = defaultPath;
+  
+    wxBeginBusyCursor();
+    
+    wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
+
+    // 1) dir ctrl
+    m_dir = new wxDirCtrl( this, ID_DIRCTRL, "/", wxDefaultPosition, wxSize(200,200), 
+      wxTR_HAS_BUTTONS | wxSUNKEN_BORDER | wxTR_EDIT_LABELS); 
+    topsizer->Add( m_dir, 1, wxTOP|wxLEFT|wxRIGHT | wxEXPAND, 10 );
+    // 2) text ctrl
+    m_input = new wxTextCtrl( this, ID_TEXTCTRL, m_path, wxDefaultPosition ); 
+    topsizer->Add( m_input, 0, wxTOP|wxLEFT|wxRIGHT | wxEXPAND, 10 );
+    
+    // m_check = new wxCheckBox( this, ID_CHECK, _("Show hidden") );
+    // m_check->SetValue(TRUE);
+    
+#if wxUSE_STATLINE
+    // 3) static line
+    topsizer->Add( new wxStaticLine( this, -1 ), 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10 );
+#endif
 
-void wxDirDialog::doSize()
-{
-  /* Figure out height of DirCtrl, which is what is left over by
-   * the textctrl and the buttons. Manually, because I can't seem
-   * to get the constraints stuff to do this */
-  int w,h,h2;
-
-  GetClientSize(&w, &h);
-  m_input->GetSize(&w,&h2); h -= h2;
-  m_ok->GetSize(&w, &h2); h -= h2;
-  //m_check->GetSize(&w, &h2); h -= h2;
-  h -= 30;
-
-  wxLayoutConstraints *c = new wxLayoutConstraints;
-  c->left.SameAs       (this, wxLeft,5);
-  c->right.SameAs        (this, wxRight,5);
-  c->height.Absolute    (h);
-  c->top.SameAs                (this, wxTop,5);
-  m_dir->SetConstraints(c);
-
-  c = new wxLayoutConstraints;
-  c->left.SameAs       (this, wxLeft,5);
-  c->right.SameAs        (this, wxRight,5);
-  c->height.AsIs       ();
-  c->top.Below         (m_dir,5);
-  m_input->SetConstraints(c);
-
-  /*  c = new wxLayoutConstraints;
-  c->left.SameAs       (this, wxLeft,5);
-  c->right.SameAs        (this, wxRight,5);
-  c->height.AsIs       ();
-  c->top.Below         (m_input,5);
-  m_check->SetConstraints(c); */
-
-  c = new wxLayoutConstraints;
-  c->width.SameAs      (m_cancel, wxWidth);
-  c->height.AsIs       ();
-  c->top.Below         (m_input,10);
-  c->centreX.PercentOf (this, wxWidth, 20);
-  m_ok->SetConstraints(c);
-
-  c = new wxLayoutConstraints;
-  c->width.SameAs      (m_cancel, wxWidth);
-  c->height.AsIs       ();
-  c->top.Below         (m_input,10);
-  c->bottom.SameAs      (this, wxBottom, 5);
-  c->centreX.PercentOf (this, wxWidth, 50);
-  m_new->SetConstraints(c);
-
-  c = new wxLayoutConstraints;
-  c->width.AsIs                ();
-  c->height.AsIs       ();
-  c->top.Below         (m_input,10);
-  c->centreX.PercentOf (this, wxWidth, 80);
-  m_cancel->SetConstraints(c);
-
-  Layout();
+    // 4) buttons
+    wxSizer* buttonsizer = new wxBoxSizer( wxHORIZONTAL );
+    m_ok = new wxButton( this, ID_OK, _("OK") );
+    buttonsizer->Add( m_ok, 0, wxLEFT|wxRIGHT, 10 );
+    m_cancel = new wxButton( this, ID_CANCEL, _("Cancel") );
+    buttonsizer->Add( m_cancel, 0, wxLEFT|wxRIGHT, 10 );
+    m_new = new wxButton( this, ID_NEW, _("New...") );
+    buttonsizer->Add( m_new, 0, wxLEFT|wxRIGHT, 10 );
+    
+    topsizer->Add( buttonsizer, 0, wxALL | wxCENTER, 10 );
+
+    m_ok->SetDefault();
+    m_dir->SetFocus();
+    
+    SetAutoLayout( TRUE );
+    SetSizer( topsizer );
+    
+    topsizer->SetSizeHints( this );
+    topsizer->Fit( this );
+
+    Centre( wxBOTH );
+
+    wxEndBusyCursor();
 }
 
 int wxDirDialog::ShowModal()
 {
-  m_input->SetValue( m_path );
-  return wxDialog::ShowModal();
+    m_input->SetValue( m_path );
+    return wxDialog::ShowModal();
 }
 
 void wxDirDialog::OnTreeSelected( wxTreeEvent &event )
 {
-  wxDirItemData *data = 
-    (wxDirItemData*)m_dir->GetItemData(event.GetItem());
-  if (data) 
-    m_input->SetValue( *(data->m_path) );
+    wxDirItemData *data = (wxDirItemData*)m_dir->GetItemData(event.GetItem());
+    if (data) 
+       m_input->SetValue( data->m_path );
 };
 
 void wxDirDialog::OnTreeKeyDown( wxTreeEvent &WXUNUSED(event) )
 {
-  wxDirItemData *data = 
-    (wxDirItemData*)m_dir->GetItemData(m_dir->GetSelection());
-  if (data) 
-    m_input->SetValue( *(data->m_path) );
+    wxDirItemData *data = (wxDirItemData*)m_dir->GetItemData(m_dir->GetSelection());
+    if (data) 
+        m_input->SetValue( data->m_path );
 };
 
 void wxDirDialog::OnOK( wxCommandEvent& WXUNUSED(event) )
@@ -451,9 +448,10 @@ void wxDirDialog::OnOK( wxCommandEvent& WXUNUSED(event) )
   wxString msg( _("The directory ") );
   msg = msg + m_path;
   msg = msg + _("\ndoes not exist\nCreate it now?") ;
-  wxMessageDialog dialog(this, msg, _("Directory does not exist"), wxYES_NO);
+  wxMessageDialog dialog(this, msg, _("Directory does not exist"), wxYES_NO | wxICON_WARNING );
   if ( dialog.ShowModal() == wxID_YES ) {
     // Okay, let's make it
+    wxLogNull log;
     if (wxMkdir(m_path)) {
       // The new dir was created okay.
       EndModal(wxID_OK);
@@ -463,7 +461,7 @@ void wxDirDialog::OnOK( wxCommandEvent& WXUNUSED(event) )
       // Trouble...
       msg = _("Failed to create directory ")+m_path+
        _("\n(Do you have the required permissions?)");
-      wxMessageDialog errmsg(this, msg, _("Error creating directory"), wxOK);
+      wxMessageDialog errmsg(this, msg, _("Error creating directory"), wxOK | wxICON_ERROR);
       errmsg.ShowModal();
       // We still don't have a valid dir. Back to the main dialog.
     }
@@ -478,24 +476,53 @@ void wxDirDialog::OnCancel( wxCommandEvent& WXUNUSED(event) )
 
 void wxDirDialog::OnNew( wxCommandEvent& WXUNUSED(event) )
 {
-  wxTextEntryDialog dialog(this, _("Enter the name of the directory to create"),
-       _("Create New Directory"), m_input->GetValue(), wxOK|wxCANCEL);
+    wxTreeItemId id = m_dir->GetSelection();
+    if ((id == m_dir->GetRootItem()) ||
+        (m_dir->GetParent(id) == m_dir->GetRootItem()))
+    {
+        wxMessageDialog msg(this, _("You cannot add a new directory to this section."), 
+                                 _("Create directory"), wxOK | wxICON_INFORMATION );
+        msg.ShowModal();
+        return;
+    }
 
-  while (dialog.ShowModal() == wxID_OK)
-  {
-    // Okay, let's make it
-    if (wxMkdir(dialog.GetValue())) {
-      // The new dir was created okay.
-      m_path = dialog.GetValue();
-      return;
+    wxTreeItemId parent = m_dir->GetParent( id );
+    wxDirItemData *data = (wxDirItemData*)m_dir->GetItemData( parent );
+    wxASSERT( data );
+    
+    wxString new_name( _T("NewName") );
+    wxString path( data->m_path );
+    path += _T( "/" );
+    path += new_name;
+    if (wxFileExists(path))
+    {
+        // try NewName0, NewName1 etc.
+        int i = 0;
+       do {
+            new_name = _T("NewName");
+           wxString num;
+           num.Printf( "%d", i );
+           new_name += num;
+           
+            path = data->m_path;
+            path += _T( "/" );
+            path += new_name;
+           i++;
+       } while (wxFileExists(path));
     }
-    wxString msg = _("Failed to create directory ")+dialog.GetValue()+
-      _("\n(Do you have the required permissions?)") ;
-    wxMessageDialog errmsg(this, msg, _("Error creating directory"), wxOK);
-    errmsg.ShowModal();
-    // Show the create dialog again, until user clicks cancel or enters
-    // a valid dir.
-  }
+       
+    wxLogNull log;
+    if (!wxMkdir(path)) 
+    {
+        wxMessageDialog dialog(this, _("Operation not permitted."), _("Error"), wxOK | wxICON_ERROR );
+       dialog.ShowModal();
+        return;
+    }
+
+    wxDirItemData *new_data = new wxDirItemData( path, new_name );
+    wxTreeItemId new_id = m_dir->AppendItem( parent, new_name, 0, 1, new_data );
+    m_dir->EnsureVisible( new_id );
+    m_dir->EditLabel( new_id );
 }
 
 /*
index 65f568eb3ba43c0b5570ef1a92ed962538f33ada..3d271e0111f2a93856bdde059766674ff00c733f 100644 (file)
@@ -1159,6 +1159,11 @@ void wxListMainWindow::EditLabel( long item )
     if (!le.IsAllowed())
         return;
     
+    // We have to call this here because the label in
+    // question might just have been added and no screen
+    // update taken place.
+    if (m_dirty) wxYield();
+
     wxString s;
     m_currentEdit->GetText( 0, s );
     int x = 0;
@@ -2189,6 +2194,11 @@ void wxListMainWindow::DeleteEverything( void )
 
 void wxListMainWindow::EnsureVisible( long index )
 {
+    // We have to call this here because the label in
+    // question might just have been added and no screen
+    // update taken place.
+    if (m_dirty) wxYield();
+
     wxListLineData *oldCurrent = m_current;
     m_current = (wxListLineData *) NULL;
     int i = index;
index db95ab3abec6b5a0278e6f9481ae58f9c1c0dc5f..c47906f3e621999ed7514baa0e86d6732bbbf783 100644 (file)
@@ -1196,11 +1196,16 @@ void wxTreeCtrl::ScrollTo(const wxTreeItemId &item)
 {
     if (!item.IsOk()) return;
 
+    // We have to call this here because the label in
+    // question might just have been added and no screen
+    // update taken place.
+    if (m_dirty) wxYield();
+
     wxGenericTreeItem *gitem = item.m_pItem;
 
     // now scroll to the item
     int item_y = gitem->GetY();
-
+    
     int start_x = 0;
     int start_y = 0;
     ViewStart( &start_x, &start_y );
@@ -1339,10 +1344,10 @@ void wxTreeCtrl::AdjustMyScrollbars()
 
 int wxTreeCtrl::GetLineHeight(wxGenericTreeItem *item) const
 {
-  if (GetWindowStyleFlag() & wxTR_HAS_VARIABLE_ROW_HEIGHT)
-    return item->GetHeight();
-  else
-    return m_lineHeight;
+    if (GetWindowStyleFlag() & wxTR_HAS_VARIABLE_ROW_HEIGHT)
+        return item->GetHeight();
+    else
+        return m_lineHeight;
 }
 
 void wxTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
@@ -1778,6 +1783,11 @@ void wxTreeCtrl::OnChar( wxKeyEvent &event )
 
 wxTreeItemId wxTreeCtrl::HitTest(const wxPoint& point, int& flags)
 {
+    // We have to call this here because the label in
+    // question might just have been added and no screen
+    // update taken place.
+    if (m_dirty) wxYield();
+
     wxClientDC dc(this);
     PrepareDC(dc);
     long x = dc.DeviceToLogicalX( (long)point.x );
@@ -1808,6 +1818,11 @@ void wxTreeCtrl::Edit( const wxTreeItemId& item )
     GetEventHandler()->ProcessEvent( te );
 
     if (!te.IsAllowed()) return;
+    
+    // We have to call this here because the label in
+    // question might just have been added and no screen
+    // update taken place.
+    if (m_dirty) wxYield();
 
     wxString s = m_currentEdit->GetText();
     int x = m_currentEdit->GetX();
index 1fec1d74fceef939057aa57e78d4060ebbf0cc30..282c4a3895b1f96bb0c4b565f534a1b798eb9e0c 100644 (file)
@@ -224,7 +224,7 @@ void wxMenuBar::Append( wxMenu *menu, const wxString &title )
     wxString buf;
     buf << _T('/') << str.c_str();
 
-    char *cbuf = new char[buf.Length()];
+    char *cbuf = new char[buf.Length()+1];
     strcpy(cbuf, buf.mbc_str());
 
     GtkItemFactoryEntry entry;
index 1fec1d74fceef939057aa57e78d4060ebbf0cc30..282c4a3895b1f96bb0c4b565f534a1b798eb9e0c 100644 (file)
@@ -224,7 +224,7 @@ void wxMenuBar::Append( wxMenu *menu, const wxString &title )
     wxString buf;
     buf << _T('/') << str.c_str();
 
-    char *cbuf = new char[buf.Length()];
+    char *cbuf = new char[buf.Length()+1];
     strcpy(cbuf, buf.mbc_str());
 
     GtkItemFactoryEntry entry;