Added and corrected a few more html makefiles,

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
This commit is contained in:
Robert Roebling
1999-08-15 15:18:54 +00:00
parent 354616b046
commit dc6c62a931
21 changed files with 453 additions and 309 deletions

View 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! # 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@ 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 $(REQUIRED_DIRS): $(WXDIR)/include/wx/defs.h $(WXDIR)/include/wx/object.h $(WXDIR)/include/wx/setup.h
mkdir -p ./lib @mkdir -p ./lib
mkdir -p ./src @mkdir -p ./src
mkdir -p ./src/common @mkdir -p ./src/common
mkdir -p ./src/msw @mkdir -p ./src/msw
mkdir -p ./src/gtk @mkdir -p ./src/gtk
mkdir -p ./src/motif @mkdir -p ./src/motif
mkdir -p ./src/motif/xmcombo @mkdir -p ./src/motif/xmcombo
mkdir -p ./src/generic @mkdir -p ./src/generic
mkdir -p ./src/unix @mkdir -p ./src/unix
mkdir -p ./src/html @mkdir -p ./src/html
mkdir -p ./src/png @mkdir -p ./src/png
mkdir -p ./src/jpeg @mkdir -p ./src/jpeg
mkdir -p ./src/zlib @mkdir -p ./src/zlib
@WX_LIBRARY_NAME_STATIC@: $(OBJECTS) @WX_LIBRARY_NAME_STATIC@: $(OBJECTS)
$(AR) $(AROPTIONS) ./lib/$@ $(OBJECTS) $(AR) $(AROPTIONS) ./lib/$@ $(OBJECTS)

View File

@@ -2733,6 +2733,9 @@ AC_OUTPUT([
samples/html/help/Makefile samples/html/help/Makefile
samples/html/printing/Makefile samples/html/printing/Makefile
samples/html/test/Makefile samples/html/test/Makefile
samples/html/zip/Makefile
samples/html/virtual/Makefile
samples/html/widget/Makefile
utils/Makefile utils/Makefile
utils/wxMMedia2/Makefile utils/wxMMedia2/Makefile
utils/wxMMedia2/lib/Makefile utils/wxMMedia2/lib/Makefile

View 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@ 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 $(REQUIRED_DIRS): $(WXDIR)/include/wx/defs.h $(WXDIR)/include/wx/object.h $(WXDIR)/include/wx/setup.h
mkdir -p ./lib @mkdir -p ./lib
mkdir -p ./src @mkdir -p ./src
mkdir -p ./src/common @mkdir -p ./src/common
mkdir -p ./src/msw @mkdir -p ./src/msw
mkdir -p ./src/gtk @mkdir -p ./src/gtk
mkdir -p ./src/motif @mkdir -p ./src/motif
mkdir -p ./src/motif/xmcombo @mkdir -p ./src/motif/xmcombo
mkdir -p ./src/generic @mkdir -p ./src/generic
mkdir -p ./src/unix @mkdir -p ./src/unix
mkdir -p ./src/html @mkdir -p ./src/html
mkdir -p ./src/png @mkdir -p ./src/png
mkdir -p ./src/jpeg @mkdir -p ./src/jpeg
mkdir -p ./src/zlib @mkdir -p ./src/zlib
@WX_LIBRARY_NAME_STATIC@: $(OBJECTS) @WX_LIBRARY_NAME_STATIC@: $(OBJECTS)
$(AR) $(AROPTIONS) ./lib/$@ $(OBJECTS) $(AR) $(AROPTIONS) ./lib/$@ $(OBJECTS)

View File

@@ -76,14 +76,62 @@ class wxDirItemData;
class wxDirCtrl; class wxDirCtrl;
class wxDirDialog; 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 // wxDirDialog
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
class WXDLLEXPORT wxDirDialog: public wxDialog class WXDLLEXPORT wxDirDialog: public wxDialog
{ {
DECLARE_DYNAMIC_CLASS(wxDirDialog) public:
public:
wxDirDialog(wxWindow *parent, wxDirDialog(wxWindow *parent,
const wxString& message = wxFileSelectorPromptStr, const wxString& message = wxFileSelectorPromptStr,
const wxString& defaultPath = wxEmptyString, const wxString& defaultPath = wxEmptyString,
@@ -100,24 +148,24 @@ class WXDLLEXPORT wxDirDialog: public wxDialog
void OnTreeSelected( wxTreeEvent &event ); void OnTreeSelected( wxTreeEvent &event );
void OnTreeKeyDown( wxTreeEvent &event ); void OnTreeKeyDown( wxTreeEvent &event );
void OnSize(wxSizeEvent& event);
void OnOK(wxCommandEvent& event); void OnOK(wxCommandEvent& event);
void OnCancel(wxCommandEvent& event); void OnCancel(wxCommandEvent& event);
void OnNew(wxCommandEvent& event); void OnNew(wxCommandEvent& event);
// void OnCheck(wxCommandEvent& event); // void OnCheck(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
protected: protected:
// implementation // implementation
wxString m_message; wxString m_message;
long m_dialogStyle; long m_dialogStyle;
wxWindow * m_parent; wxString m_path;
wxString m_path; wxDirCtrl *m_dir;
wxDirCtrl *m_dir; wxTextCtrl *m_input;
wxTextCtrl *m_input; wxCheckBox *m_check; // not yet used
// wxCheckBox *m_check; wxButton *m_ok, *m_cancel, *m_new;
wxButton *m_ok, *m_cancel, *m_new;
void doSize(); private:
DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS(wxDirDialog)
}; };
#endif #endif

View File

@@ -11,7 +11,7 @@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
top_builddir = ../.. top_builddir = ../..
program_dir = samples/samples/dialogs program_dir = samples/dialogs
PROGRAM=dialogs PROGRAM=dialogs

View File

@@ -11,8 +11,9 @@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
top_builddir = ../../.. top_builddir = ../../..
program_dir = samples/html/printing
VPATH = :$(top_srcdir)/samples/html/printing DATAFILES = test.htm pic.png
PROGRAM=printing PROGRAM=printing

View File

@@ -1 +0,0 @@
Makefile.in

View File

@@ -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

View File

@@ -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

View File

@@ -1 +0,0 @@
Makefile.in

View File

@@ -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

View File

@@ -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

View File

@@ -1 +0,0 @@
Makefile.in

View File

@@ -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

View File

@@ -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

View File

@@ -264,10 +264,11 @@ bool wxSingleChoiceDialog::Create( wxWindow *WXUNUSED(parent),
// 4) buttons // 4) buttons
topsizer->Add( CreateButtonSizer( wxOK|wxCANCEL ), 0, wxCENTRE | wxALL, 10 ); topsizer->Add( CreateButtonSizer( wxOK|wxCANCEL ), 0, wxCENTRE | wxALL, 10 );
SetAutoLayout( TRUE );
SetSizer( topsizer );
topsizer->SetSizeHints( this ); topsizer->SetSizeHints( this );
topsizer->Fit( this ); topsizer->Fit( this );
SetSizer( topsizer );
SetAutoLayout( TRUE );
Centre( wxBOTH ); Centre( wxBOTH );

View File

@@ -35,6 +35,12 @@
#include "wx/intl.h" #include "wx/intl.h"
#include "wx/imaglist.h" #include "wx/imaglist.h"
#include "wx/icon.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" #include "wx/generic/dirdlgg.h"
@@ -112,73 +118,34 @@ static const int ID_NEW = 1004;
// wxDirItemData // 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
{
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
//-----------------------------------------------------------------------------
wxDirItemData::wxDirItemData(wxString& path, wxString& name) wxDirItemData::wxDirItemData(wxString& path, wxString& name)
{ {
m_path = new wxString(path); m_path = path;
m_name = new wxString(name); m_name = name;
/* Insert logic to detect hidden files here /* Insert logic to detect hidden files here
* In UnixLand we just check whether the first char is a dot * In UnixLand we just check whether the first char is a dot
* For FileNameFromPath read LastDirNameInThisPath ;-) */ * For FileNameFromPath read LastDirNameInThisPath ;-) */
// m_isHidden = (bool)(wxFileNameFromPath(*m_path)[0] == '.'); // m_isHidden = (bool)(wxFileNameFromPath(*m_path)[0] == '.');
m_isHidden = FALSE; m_isHidden = FALSE;
m_hasSubDirs = HasSubDirs(); m_hasSubDirs = HasSubDirs();
} }
wxDirItemData:: ~wxDirItemData() wxDirItemData::~wxDirItemData()
{ {
delete m_path; }
delete m_name;
void wxDirItemData::SetNewDirName( wxString path )
{
m_path = path;
m_name = wxFileNameFromPath( path );
} }
bool wxDirItemData::HasSubDirs() bool wxDirItemData::HasSubDirs()
{ {
wxString search = *m_path + "/*"; wxString search = m_path + "/*";
wxString path = wxFindFirstFile( search, wxDIR ); wxLogNull log;
return (bool)(!path.IsNull()); wxString path = wxFindFirstFile( search, wxDIR );
return (bool)(!path.IsNull());
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -190,12 +157,14 @@ IMPLEMENT_DYNAMIC_CLASS(wxDirCtrl,wxTreeCtrl)
BEGIN_EVENT_TABLE(wxDirCtrl,wxTreeCtrl) BEGIN_EVENT_TABLE(wxDirCtrl,wxTreeCtrl)
EVT_TREE_ITEM_EXPANDING (-1, wxDirCtrl::OnExpandItem) EVT_TREE_ITEM_EXPANDING (-1, wxDirCtrl::OnExpandItem)
EVT_TREE_ITEM_COLLAPSED (-1, wxDirCtrl::OnCollapseItem) 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() END_EVENT_TABLE()
wxDirCtrl::wxDirCtrl(void) wxDirCtrl::wxDirCtrl(void)
{ {
m_showHidden = FALSE; m_showHidden = FALSE;
}; }
wxDirCtrl::wxDirCtrl(wxWindow *parent, const wxWindowID id, const wxString &WXUNUSED(dir), wxDirCtrl::wxDirCtrl(wxWindow *parent, const wxWindowID id, const wxString &WXUNUSED(dir),
const wxPoint& pos, const wxSize& size, 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 ) wxTreeCtrl( parent, id, pos, size, style, wxDefaultValidator, name )
{ {
m_imageListNormal = new wxImageList(16, 16, TRUE); m_imageListNormal = new wxImageList(16, 16, TRUE);
m_imageListNormal->Add(wxICON(icon1)); m_imageListNormal->Add(wxICON(icon1));
m_imageListNormal->Add(wxICON(icon2)); m_imageListNormal->Add(wxICON(icon2));
SetImageList(m_imageListNormal); SetImageList(m_imageListNormal);
m_showHidden = FALSE; m_showHidden = FALSE;
m_rootId = AddRoot("Sections"); m_rootId = AddRoot( _("Sections") );
SetItemHasChildren(m_rootId); SetItemHasChildren(m_rootId);
Expand(m_rootId); // automatically expand first level Expand(m_rootId); // automatically expand first level
}; }
/* Quick macro. Don't worry, I'll #undef it later */ /* Quick macro. Don't worry, I'll #undef it later */
#define ADD_SECTION(a,b) \ #define ADD_SECTION(a,b) \
@@ -238,71 +207,133 @@ void wxDirCtrl::SetupSections()
void wxDirCtrl::CreateItems(const wxTreeItemId &parent) void wxDirCtrl::CreateItems(const wxTreeItemId &parent)
{ {
wxTreeItemId id; wxTreeItemId id;
wxDirItemData *dir_item; wxDirItemData *dir_item;
// wxASSERT(m_paths.Count() == m_names.Count()); ? // wxASSERT(m_paths.Count() == m_names.Count()); ?
for (unsigned int i=0; i<m_paths.Count(); i++) for (unsigned int i=0; i<m_paths.Count(); i++)
{ {
dir_item = new wxDirItemData(m_paths[i],m_names[i]); dir_item = new wxDirItemData(m_paths[i],m_names[i]);
id = AppendItem( parent, m_names[i], 0, 1, dir_item); id = AppendItem( parent, m_names[i], 0, 1, dir_item);
if (dir_item->m_hasSubDirs) SetItemHasChildren(id); if (dir_item->m_hasSubDirs) SetItemHasChildren(id);
} }
} }
void wxDirCtrl::OnExpandItem(wxTreeEvent &event ) void wxDirCtrl::OnBeginEditItem(wxTreeEvent &event)
{ {
if (event.GetItem() == m_rootId) // don't rename the main entry "Sections"
{ if (event.GetItem() == m_rootId)
SetupSections(); {
CreateItems(m_rootId); event.Veto();
return; return;
};
// 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()); // don't rename the individual sections
wxEndBusyCursor(); if (GetParent( event.GetItem() ) == m_rootId)
{
SortChildren( event.GetItem() ); event.Veto();
}; return;
}
}
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;
}
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();
}
}
void wxDirCtrl::OnExpandItem(wxTreeEvent &event)
{
if (event.GetItem() == m_rootId)
{
SetupSections();
CreateItems(m_rootId);
return;
}
// 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 ) void wxDirCtrl::OnCollapseItem(wxTreeEvent &event )
{ {
wxTreeItemId child, parent = event.GetItem(); wxTreeItemId child, parent = event.GetItem();
long cookie; long cookie;
/* Workaround because DeleteChildren has disapeared (why?) and /* Workaround because DeleteChildren has disapeared (why?) and
* CollapseAndReset doesn't work as advertised (deletes parent too) */ * 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); 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 // wxDirDialog
@@ -332,110 +363,76 @@ wxDirDialog::wxDirDialog(wxWindow *parent, const wxString& message,
wxDialog(parent, -1, message, pos, wxSize(300,300), wxDialog(parent, -1, message, pos, wxSize(300,300),
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{ {
m_message = message; m_message = message;
m_dialogStyle = style; m_dialogStyle = style;
m_parent = parent; m_parent = parent;
m_path = defaultPath; m_path = defaultPath;
wxBeginBusyCursor();
wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
m_dir = new wxDirCtrl( this, ID_DIRCTRL, "/", wxDefaultPosition, wxDefaultSize, wxTR_HAS_BUTTONS | wxSUNKEN_BORDER ); // 1) dir ctrl
m_input = new wxTextCtrl( this, ID_TEXTCTRL, m_path, wxDefaultPosition ); m_dir = new wxDirCtrl( this, ID_DIRCTRL, "/", wxDefaultPosition, wxSize(200,200),
// m_check = new wxCheckBox( this, ID_CHECK, _("Show hidden") ); wxTR_HAS_BUTTONS | wxSUNKEN_BORDER | wxTR_EDIT_LABELS);
m_ok = new wxButton( this, ID_OK, _("OK") ); topsizer->Add( m_dir, 1, wxTOP|wxLEFT|wxRIGHT | wxEXPAND, 10 );
m_cancel = new wxButton( this, ID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize(75,-1) );
m_new = new wxButton( this, ID_NEW, _("New...") ); // 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
// m_check->SetValue(TRUE); // 4) buttons
m_ok->SetDefault(); wxSizer* buttonsizer = new wxBoxSizer( wxHORIZONTAL );
m_dir->SetFocus(); 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 );
doSize(); m_ok->SetDefault();
} m_dir->SetFocus();
SetAutoLayout( TRUE );
SetSizer( topsizer );
topsizer->SetSizeHints( this );
topsizer->Fit( this );
void wxDirDialog::OnSize(wxSizeEvent& WXUNUSED(event)) Centre( wxBOTH );
{
doSize();
}
void wxDirDialog::doSize() wxEndBusyCursor();
{
/* 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();
} }
int wxDirDialog::ShowModal() int wxDirDialog::ShowModal()
{ {
m_input->SetValue( m_path ); m_input->SetValue( m_path );
return wxDialog::ShowModal(); return wxDialog::ShowModal();
} }
void wxDirDialog::OnTreeSelected( wxTreeEvent &event ) void wxDirDialog::OnTreeSelected( wxTreeEvent &event )
{ {
wxDirItemData *data = wxDirItemData *data = (wxDirItemData*)m_dir->GetItemData(event.GetItem());
(wxDirItemData*)m_dir->GetItemData(event.GetItem()); if (data)
if (data) m_input->SetValue( data->m_path );
m_input->SetValue( *(data->m_path) );
}; };
void wxDirDialog::OnTreeKeyDown( wxTreeEvent &WXUNUSED(event) ) void wxDirDialog::OnTreeKeyDown( wxTreeEvent &WXUNUSED(event) )
{ {
wxDirItemData *data = wxDirItemData *data = (wxDirItemData*)m_dir->GetItemData(m_dir->GetSelection());
(wxDirItemData*)m_dir->GetItemData(m_dir->GetSelection()); if (data)
if (data) m_input->SetValue( data->m_path );
m_input->SetValue( *(data->m_path) );
}; };
void wxDirDialog::OnOK( wxCommandEvent& WXUNUSED(event) ) void wxDirDialog::OnOK( wxCommandEvent& WXUNUSED(event) )
@@ -451,9 +448,10 @@ void wxDirDialog::OnOK( wxCommandEvent& WXUNUSED(event) )
wxString msg( _("The directory ") ); wxString msg( _("The directory ") );
msg = msg + m_path; msg = msg + m_path;
msg = msg + _("\ndoes not exist\nCreate it now?") ; 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 ) { if ( dialog.ShowModal() == wxID_YES ) {
// Okay, let's make it // Okay, let's make it
wxLogNull log;
if (wxMkdir(m_path)) { if (wxMkdir(m_path)) {
// The new dir was created okay. // The new dir was created okay.
EndModal(wxID_OK); EndModal(wxID_OK);
@@ -463,7 +461,7 @@ void wxDirDialog::OnOK( wxCommandEvent& WXUNUSED(event) )
// Trouble... // Trouble...
msg = _("Failed to create directory ")+m_path+ msg = _("Failed to create directory ")+m_path+
_("\n(Do you have the required permissions?)"); _("\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(); errmsg.ShowModal();
// We still don't have a valid dir. Back to the main dialog. // 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) ) void wxDirDialog::OnNew( wxCommandEvent& WXUNUSED(event) )
{ {
wxTextEntryDialog dialog(this, _("Enter the name of the directory to create"), wxTreeItemId id = m_dir->GetSelection();
_("Create New Directory"), m_input->GetValue(), wxOK|wxCANCEL); if ((id == m_dir->GetRootItem()) ||
(m_dir->GetParent(id) == m_dir->GetRootItem()))
while (dialog.ShowModal() == wxID_OK) {
{ wxMessageDialog msg(this, _("You cannot add a new directory to this section."),
// Okay, let's make it _("Create directory"), wxOK | wxICON_INFORMATION );
if (wxMkdir(dialog.GetValue())) { msg.ShowModal();
// The new dir was created okay. return;
m_path = dialog.GetValue();
return;
} }
wxString msg = _("Failed to create directory ")+dialog.GetValue()+
_("\n(Do you have the required permissions?)") ; wxTreeItemId parent = m_dir->GetParent( id );
wxMessageDialog errmsg(this, msg, _("Error creating directory"), wxOK); wxDirItemData *data = (wxDirItemData*)m_dir->GetItemData( parent );
errmsg.ShowModal(); wxASSERT( data );
// Show the create dialog again, until user clicks cancel or enters
// a valid dir. 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));
}
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 );
} }
/* /*

View File

@@ -1159,6 +1159,11 @@ void wxListMainWindow::EditLabel( long item )
if (!le.IsAllowed()) if (!le.IsAllowed())
return; 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; wxString s;
m_currentEdit->GetText( 0, s ); m_currentEdit->GetText( 0, s );
int x = 0; int x = 0;
@@ -2189,6 +2194,11 @@ void wxListMainWindow::DeleteEverything( void )
void wxListMainWindow::EnsureVisible( long index ) 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; wxListLineData *oldCurrent = m_current;
m_current = (wxListLineData *) NULL; m_current = (wxListLineData *) NULL;
int i = index; int i = index;

View File

@@ -1196,11 +1196,16 @@ void wxTreeCtrl::ScrollTo(const wxTreeItemId &item)
{ {
if (!item.IsOk()) return; 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; wxGenericTreeItem *gitem = item.m_pItem;
// now scroll to the item // now scroll to the item
int item_y = gitem->GetY(); int item_y = gitem->GetY();
int start_x = 0; int start_x = 0;
int start_y = 0; int start_y = 0;
ViewStart( &start_x, &start_y ); ViewStart( &start_x, &start_y );
@@ -1339,10 +1344,10 @@ void wxTreeCtrl::AdjustMyScrollbars()
int wxTreeCtrl::GetLineHeight(wxGenericTreeItem *item) const int wxTreeCtrl::GetLineHeight(wxGenericTreeItem *item) const
{ {
if (GetWindowStyleFlag() & wxTR_HAS_VARIABLE_ROW_HEIGHT) if (GetWindowStyleFlag() & wxTR_HAS_VARIABLE_ROW_HEIGHT)
return item->GetHeight(); return item->GetHeight();
else else
return m_lineHeight; return m_lineHeight;
} }
void wxTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc) void wxTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
@@ -1778,6 +1783,11 @@ void wxTreeCtrl::OnChar( wxKeyEvent &event )
wxTreeItemId wxTreeCtrl::HitTest(const wxPoint& point, int& flags) 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); wxClientDC dc(this);
PrepareDC(dc); PrepareDC(dc);
long x = dc.DeviceToLogicalX( (long)point.x ); long x = dc.DeviceToLogicalX( (long)point.x );
@@ -1808,6 +1818,11 @@ void wxTreeCtrl::Edit( const wxTreeItemId& item )
GetEventHandler()->ProcessEvent( te ); GetEventHandler()->ProcessEvent( te );
if (!te.IsAllowed()) return; 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(); wxString s = m_currentEdit->GetText();
int x = m_currentEdit->GetX(); int x = m_currentEdit->GetX();

View File

@@ -224,7 +224,7 @@ void wxMenuBar::Append( wxMenu *menu, const wxString &title )
wxString buf; wxString buf;
buf << _T('/') << str.c_str(); buf << _T('/') << str.c_str();
char *cbuf = new char[buf.Length()]; char *cbuf = new char[buf.Length()+1];
strcpy(cbuf, buf.mbc_str()); strcpy(cbuf, buf.mbc_str());
GtkItemFactoryEntry entry; GtkItemFactoryEntry entry;

View File

@@ -224,7 +224,7 @@ void wxMenuBar::Append( wxMenu *menu, const wxString &title )
wxString buf; wxString buf;
buf << _T('/') << str.c_str(); buf << _T('/') << str.c_str();
char *cbuf = new char[buf.Length()]; char *cbuf = new char[buf.Length()+1];
strcpy(cbuf, buf.mbc_str()); strcpy(cbuf, buf.mbc_str());
GtkItemFactoryEntry entry; GtkItemFactoryEntry entry;