From 29006414014249ec3eb86e9c13da7f06b2741e3a Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 16 Mar 1999 18:54:24 +0000 Subject: [PATCH] wxCommandEvent::SetString() change - now uses wxString git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1940 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/event.h | 6 +- include/wx/gtk/choice.h | 103 +++--- include/wx/gtk1/choice.h | 103 +++--- include/wx/motif/setup.h | 737 ++++++++++++++++++++++++++++++++------- src/generic/proplist.cpp | 189 +++++----- src/gtk/choice.cpp | 142 ++++---- src/gtk/combobox.cpp | 13 +- src/gtk/radiobox.cpp | 241 +++++++------ src/gtk1/choice.cpp | 142 ++++---- src/gtk1/combobox.cpp | 13 +- src/gtk1/radiobox.cpp | 241 +++++++------ src/motif/listbox.cpp | 290 ++++++++------- src/msw/choice.cpp | 7 +- src/msw/combobox.cpp | 11 +- 14 files changed, 1349 insertions(+), 889 deletions(-) diff --git a/include/wx/event.h b/include/wx/event.h index a5242d2890..2ac0ea2fe0 100644 --- a/include/wx/event.h +++ b/include/wx/event.h @@ -346,8 +346,8 @@ public: int GetSelection() const { return m_commandInt; } // Set/Get listbox/choice selection string - void SetString(char* s) { m_commandString = s; } - char *GetString() const { return m_commandString; } + void SetString(const wxString& s) { m_commandString = s; } + const wxString& GetString() const { return m_commandString; } // Get checkbox value bool Checked() const { return (m_commandInt != 0); } @@ -362,7 +362,7 @@ public: long GetInt() const { return m_commandInt ; } public: - char* m_commandString; // String event argument + wxString m_commandString; // String event argument int m_commandInt; long m_extraLong; // Additional information (e.g. select/deselect) void* m_clientData; // Arbitrary client data diff --git a/include/wx/gtk/choice.h b/include/wx/gtk/choice.h index 393c9e8861..0a7eeca3d8 100644 --- a/include/wx/gtk/choice.h +++ b/include/wx/gtk/choice.h @@ -4,7 +4,7 @@ // Author: Robert Roebling // Id: $Id$ // Copyright: (c) 1998 Robert Roebling -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef __GTKCHOICEH__ @@ -35,61 +35,60 @@ extern const char *wxChoiceNameStr; // wxChoice //----------------------------------------------------------------------------- -class wxChoice: public wxControl +class wxChoice : public wxControl { - DECLARE_DYNAMIC_CLASS(wxChoice) + DECLARE_DYNAMIC_CLASS(wxChoice) public: + wxChoice(); + wxChoice( wxWindow *parent, wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + int n = 0, const wxString choices[] = (const wxString *) NULL, + long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxChoiceNameStr ) + { + Create(parent, id, pos, size, n, choices, style, validator, name); + } + ~wxChoice(); + bool Create( wxWindow *parent, wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + int n = 0, const wxString choices[] = (wxString *) NULL, + long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxChoiceNameStr ); - wxChoice(); - inline wxChoice( wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = (const wxString *) NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr ) - { - Create(parent, id, pos, size, n, choices, style, validator, name); - } - ~wxChoice(); - bool Create( wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = (wxString *) NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr ); - - void Append( const wxString &item ); - void Append( const wxString &item, void* clientData ); - void Append( const wxString &item, wxClientData* clientData ); - - void SetClientData( int n, void* clientData ); - void* GetClientData( int n ); - void SetClientObject( int n, wxClientData* clientData ); - wxClientData* GetClientObject( int n ); - - void Clear(); - void Delete(int n); - - int FindString( const wxString &string ) const; - int GetColumns() const; - int GetSelection(); - wxString GetString( int n ) const; - wxString GetStringSelection() const; - int Number() const; - void SetColumns( int n = 1 ); - void SetSelection( int n ); - void SetStringSelection( const wxString &string ); - -// implementation - - wxList m_clientDataList; - wxList m_clientObjectList; - - void AppendCommon( const wxString &item ); - void ApplyWidgetStyle(); + void Append( const wxString &item ); + void Append( const wxString &item, void* clientData ); + void Append( const wxString &item, wxClientData* clientData ); + + void SetClientData( int n, void* clientData ); + void* GetClientData( int n ); + void SetClientObject( int n, wxClientData* clientData ); + wxClientData* GetClientObject( int n ); + + void Clear(); + void Delete(int n); + + int FindString( const wxString &string ) const; + int GetColumns() const; + int GetSelection(); + wxString GetString( int n ) const; + wxString GetStringSelection() const; + int Number() const; + void SetColumns( int n = 1 ); + void SetSelection( int n ); + void SetStringSelection( const wxString &string ); + + // implementation + + wxList m_clientDataList; + wxList m_clientObjectList; + + void AppendCommon( const wxString &item ); + void ApplyWidgetStyle(); }; #endif // __GTKCHOICEH__ diff --git a/include/wx/gtk1/choice.h b/include/wx/gtk1/choice.h index 393c9e8861..0a7eeca3d8 100644 --- a/include/wx/gtk1/choice.h +++ b/include/wx/gtk1/choice.h @@ -4,7 +4,7 @@ // Author: Robert Roebling // Id: $Id$ // Copyright: (c) 1998 Robert Roebling -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef __GTKCHOICEH__ @@ -35,61 +35,60 @@ extern const char *wxChoiceNameStr; // wxChoice //----------------------------------------------------------------------------- -class wxChoice: public wxControl +class wxChoice : public wxControl { - DECLARE_DYNAMIC_CLASS(wxChoice) + DECLARE_DYNAMIC_CLASS(wxChoice) public: + wxChoice(); + wxChoice( wxWindow *parent, wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + int n = 0, const wxString choices[] = (const wxString *) NULL, + long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxChoiceNameStr ) + { + Create(parent, id, pos, size, n, choices, style, validator, name); + } + ~wxChoice(); + bool Create( wxWindow *parent, wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + int n = 0, const wxString choices[] = (wxString *) NULL, + long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxChoiceNameStr ); - wxChoice(); - inline wxChoice( wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = (const wxString *) NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr ) - { - Create(parent, id, pos, size, n, choices, style, validator, name); - } - ~wxChoice(); - bool Create( wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, - int n = 0, const wxString choices[] = (wxString *) NULL, - long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxChoiceNameStr ); - - void Append( const wxString &item ); - void Append( const wxString &item, void* clientData ); - void Append( const wxString &item, wxClientData* clientData ); - - void SetClientData( int n, void* clientData ); - void* GetClientData( int n ); - void SetClientObject( int n, wxClientData* clientData ); - wxClientData* GetClientObject( int n ); - - void Clear(); - void Delete(int n); - - int FindString( const wxString &string ) const; - int GetColumns() const; - int GetSelection(); - wxString GetString( int n ) const; - wxString GetStringSelection() const; - int Number() const; - void SetColumns( int n = 1 ); - void SetSelection( int n ); - void SetStringSelection( const wxString &string ); - -// implementation - - wxList m_clientDataList; - wxList m_clientObjectList; - - void AppendCommon( const wxString &item ); - void ApplyWidgetStyle(); + void Append( const wxString &item ); + void Append( const wxString &item, void* clientData ); + void Append( const wxString &item, wxClientData* clientData ); + + void SetClientData( int n, void* clientData ); + void* GetClientData( int n ); + void SetClientObject( int n, wxClientData* clientData ); + wxClientData* GetClientObject( int n ); + + void Clear(); + void Delete(int n); + + int FindString( const wxString &string ) const; + int GetColumns() const; + int GetSelection(); + wxString GetString( int n ) const; + wxString GetStringSelection() const; + int Number() const; + void SetColumns( int n = 1 ); + void SetSelection( int n ); + void SetStringSelection( const wxString &string ); + + // implementation + + wxList m_clientDataList; + wxList m_clientObjectList; + + void AppendCommon( const wxString &item ); + void ApplyWidgetStyle(); }; #endif // __GTKCHOICEH__ diff --git a/include/wx/motif/setup.h b/include/wx/motif/setup.h index a3c4b8cd6e..aa93ec059a 100644 --- a/include/wx/motif/setup.h +++ b/include/wx/motif/setup.h @@ -1,157 +1,630 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: setup.h -// Purpose: Configuration for the library -// Author: Julian Smart -// Modified by: -// Created: 17/09/98 -// RCS-ID: $Id$ -// Copyright: (c) Julian Smart -// Licence: wxWindows licence -///////////////////////////////////////////////////////////////////////////// - -#ifndef _WX_SETUP_H_ -#define _WX_SETUP_H_ - -/* - * General features +/* ./include/wx/motif/setup.h. Generated automatically by configure. */ +/* setup.h + + Do not edit this file. It is autogenerated by configure. + + Leave the following blank line there!! Autoheader needs it. */ + + +/* ------------------------------------------------------------------------ */ +/* Features as requested by configure */ +/* ------------------------------------------------------------------------ */ + +#ifndef __GTKSETUPH__ +#define __GTKSETUPH__ + +#ifdef __GNUG__ +#pragma interface +#endif + +/* define the system to compile */ +#define __UNIX__ 1 +#define __LINUX__ 1 +/* #undef __SGI__ */ +/* #undef __HPUX__ */ +/* #undef __SYSV__ */ +/* #undef __SVR4__ */ +/* #undef __AIX__ */ +/* #undef __SUN__ */ +/* #undef __SOLARIS__ */ +/* #undef __SUNOS__ */ +/* #undef __ALPHA__ */ +/* #undef __OSF__ */ +/* #undef __BSD__ */ +/* #undef __FREEBSD__ */ +/* #undef __VMS__ */ +/* #undef __ULTRIX__ */ +/* #undef __DATA_GENERAL__ */ + +/* ------------------------------------------------------------------------ */ +/* compiler options */ +/* ------------------------------------------------------------------------ */ + +/* + * Supports bool type + */ +#define HAVE_BOOL 1 + +/* ------------------------------------------------------------------------ */ +/* library options */ +/* ------------------------------------------------------------------------ */ + +/* + * Use zlib + */ +#define wxUSE_ZLIB 1 +/* + * Use libpng + */ +#define wxUSE_LIBPNG 1 +/* + * Use libjpeg + */ +#define wxUSE_LIBJPEG 0 +/* + * Use iODBC + */ +#define wxUSE_ODBC 0 +/* + * Use Threads + */ +#define wxUSE_THREADS 1 +/* + * Have glibc2 + */ +#define wxHAVE_GLIBC2 1 +/* + * Use libXpm + */ +#define wxHAVE_LIB_XPM 0 + +/* ------------------------------------------------------------------------ */ +/* GUI control options (always enabled in wxGTK) */ +/* ------------------------------------------------------------------------ */ +/* + * Use gauge item + */ +#define wxUSE_GAUGE 1 +/* + * Use combobox item + */ +#define wxUSE_COMBOBOX 1 +/* + * Use scrollbar item + */ +#define wxUSE_SCROLLBAR 1 +/* + * Use scrollbar item + */ +#define wxUSE_RADIOBUTTON 1 +/* + * Use toolbar item + */ +#define wxUSE_TOOLBAR 1 + +/* ------------------------------------------------------------------------ */ +/* non-GUI options */ +/* ------------------------------------------------------------------------ */ + +/* + * Use time and date classes + */ +#define wxUSE_TIMEDATE 1 +/* + * Use config system + */ +#define wxUSE_CONFIG 1 +/* + * Use intl system + */ +#define wxUSE_INTL 1 +/* + * Use streams + */ +#define wxUSE_STREAMS 1 +/* + * Use class serialization + */ +#define wxUSE_SERIAL 0 +/* + * Use sockets + */ +#define wxUSE_SOCKETS 1 +/* + * Use standard C++ streams if 1. If 0, use wxWin + * streams implementation. + */ +#define wxUSE_STD_IOSTREAM 1 +/* + * Use constraints mechanism + */ +#define wxUSE_CONSTRAINTS 1 + +/* ------------------------------------------------------------------------ */ +/* PS options */ +/* ------------------------------------------------------------------------ */ + +/* + * Use font metric files in GetTextExtent for wxPostScriptDC + * Use consistent PostScript fonts for AFM and printing (!) + */ +#define wxUSE_AFM_FOR_POSTSCRIPT 1 +#define WX_NORMALIZED_PS_FONTS 1 +/* + * Use PostScript device context + */ +#define wxUSE_POSTSCRIPT 1 + +/* ------------------------------------------------------------------------ */ +/* wxString options */ +/* ------------------------------------------------------------------------ */ + +/* + * Compile wxString with wide character (Unicode) support? + */ +#define wxUSE_UNICODE 1 + +/* + * Work around a bug in GNU libc 5.x wcstombs() implementation. * + * Note that you must link your programs with libc.a if you enable this and you + * have libc 5 (you should enable this for libc6 where wcsrtombs() is + * thread-safe version of wcstombs()). */ +#define wxUSE_WCSRTOMBS 0 -#define wxUSE_CONSTRAINTS 1 - // Use constraints mechanism -#define wxUSE_CONFIG 1 - // Use wxConfig, with CreateConfig in wxApp -#define WXWIN_COMPATIBILITY 0 - // Minor compatibility with 1.68 API. - // 1: on 0: off. - -#define wxUSE_POSTSCRIPT 1 - // 0 for no PostScript device context -#define wxUSE_AFM_FOR_POSTSCRIPT 0 - // 1 to use font metric files in GetTextExtent -#define wxUSE_METAFILE 1 - // 0 for no Metafile and metafile device context -#define wxUSE_IPC 1 - // 0 for no interprocess comms -#define wxUSE_HELP 1 - // 0 for no help facility -#define wxUSE_RESOURCES 1 - // 0 for no wxGetResource/wxWriteResource -#define wxUSE_CLIPBOARD 1 - // 0 for no clipboard functions -#define wxUSE_SPLINES 1 - // 0 for no splines -#define wxUSE_XFIG_SPLINE_CODE 1 - // 1 for XFIG spline code, 0 for AIAI spline code. -// AIAI spline code is slower, but freer of copyright issues. - // 0 for no splines - -#define wxUSE_XPM 1 - // Use XPMs - -#define wxUSE_TOOLBAR 1 - // Use toolbars -#define wxUSE_COMBOBOX 1 - // Use wxComboBox +/* + * On some platforms overloading on size_t/int doesn't work, yet we'd like + * to define both size_t and int version of wxString::operator[] because it + * should really be size_t, but a lot of old, broken code uses int indices. + */ +#define wxUSE_SIZE_T_STRING_OPERATOR 1 + +/* ------------------------------------------------------------------------ */ +/* misc options */ +/* ------------------------------------------------------------------------ */ + +/* + * Use Interprocess communication + */ +#define wxUSE_IPC 1 +/* + * Use wxGetResource & wxWriteResource (change .Xdefaults) + */ +#define wxUSE_RESOURCES 1 +/* + * Use clipboard + */ +#define wxUSE_CLIPBOARD 1 +/* + * Use tooltips + */ +#define wxUSE_TOOLTIPS 1 +/* + * Use dnd + */ #define wxUSE_DRAG_AND_DROP 1 - // 0 for no drag and drop +/* + * Use wxLibrary class + */ +#define wxUSE_DYNLIB_CLASS 0 -#define wxUSE_WX_RESOURCES 1 - // Use .wxr resource mechanism (requires PrologIO library) +/* ------------------------------------------------------------------------ */ +/* architecture options */ +/* ------------------------------------------------------------------------ */ +/* + * Use the mdi architecture + */ +#define wxUSE_MDI_ARCHITECTURE 1 +/* + * Use the document/view architecture + */ #define wxUSE_DOC_VIEW_ARCHITECTURE 1 - // Set to 0 to disable document/view architecture -#define wxUSE_PRINTING_ARCHITECTURE 1 - // Set to 0 to disable print/preview architecture code -#define wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW 1 - // Set to 0 to disable PostScript print/preview architecture code - // under Windows (just use Windows printing). -#define wxUSE_DYNAMIC_CLASSES 1 - // If 1, enables provision of run-time type information. - // NOW MANDATORY: don't change. -#define wxUSE_MEMORY_TRACING 1 - // If 1, enables debugging versions of wxObject::new and - // wxObject::delete *IF* __WXDEBUG__ is also defined. - // WARNING: this code may not work with all architectures, especially - // if alignment is an issue. -#define wxUSE_DEBUG_CONTEXT 1 - // If 1, enables wxDebugContext, for - // writing error messages to file, etc. - // If WXDEBUG is not defined, will still use - // normal memory operators. - // It's recommended to set this to 1, - // since you may well need to output - // an error log in a production - // version (or non-debugging beta) - -#define wxUSE_GLOBAL_MEMORY_OPERATORS 1 - // In debug mode, cause new and delete to be redefined globally. - // If this causes problems (e.g. link errors), set this to 0. +/* + * Use the print/preview architecture + */ +#define wxUSE_PRINTING_ARCHITECTURE 1 -#define wxUSE_DEBUG_NEW_ALWAYS 1 - // In debug mode, causes new to be defined to - // be WXDEBUG_NEW (see object.h). - // If this causes problems (e.g. link errors), set this to 0. +/* ------------------------------------------------------------------------ */ +/* Prolog and wxWindows' resource system options */ +/* ------------------------------------------------------------------------ */ + +/* + * Use Prolog IO + */ +#define wxUSE_PROLOGIO 1 +/* + * Use Remote Procedure Call (Needs wxUSE_IPC and wxUSE_PROLOGIO) + */ +#define wxUSE_RPC 0 +/* + * Use wxWindows resource loading (.wxr-files) (Needs wxUSE_PROLOGIO 1) + */ +#define wxUSE_WX_RESOURCES 1 + +/* ------------------------------------------------------------------------ */ +/* the rest */ +/* ------------------------------------------------------------------------ */ +/* + * Use wxWindows help facility (needs wxUSE_IPC 1) + */ +#define wxUSE_HELP 1 +/* + * Use iostream.h rather than iostream + */ +#define wxUSE_IOSTREAMH 1 +/* + * Use Apple Ieee-double converter + */ +#define wxUSE_APPLE_IEEE 1 +/* Compatibility with 1.66 API. + Level 0: no backward compatibility, all new features + Level 1: wxDC, OnSize (etc.) compatibility, but + some new features such as event tables */ +#define WXWIN_COMPATIBILITY 0 +/* + * Enables debugging: memory tracing, assert, etc., contains debug level + */ +#define WXDEBUG 1 +/* + * Enables debugging version of wxObject::new and wxObject::delete (IF WXDEBUG) + * WARNING: this code may not work with all architectures, especially + * if alignment is an issue. + */ +#define wxUSE_MEMORY_TRACING 0 +/* + * Enable debugging version of global memory operators new and delete + * Disable it, If this causes problems (e.g. link errors) + */ +#define wxUSE_DEBUG_NEW_ALWAYS 1 +/* + * In debug mode, causes new to be defined to + * be WXDEBUG_NEW (see object.h). If this causes + * problems (e.g. link errors), set this to 0. + */ +#define wxUSE_GLOBAL_MEMORY_OPERATORS 0 +/* + * Matthews garbage collection (used for MrEd?) + */ +#define WXGARBAGE_COLLECTION_ON 0 +/* + * Use splines + */ +#define wxUSE_SPLINES 1 +/* + * wxUSE_DYNAMIC_CLASSES is TRUE for the Xt port + */ +#define wxUSE_DYNAMIC_CLASSES 1 +/* + * Disable this if your compiler can't cope + * with omission of prototype parameters. + */ #define REMOVE_UNUSED_ARG 1 - // Set this to 0 if your compiler can't cope - // with omission of prototype parameters. +/* + * The const keyword is being introduced more in wxWindows. + * You can use this setting to maintain backward compatibility. + * If 0: will use const wherever possible. + * If 1: will use const only where necessary + * for precompiled headers to work. + * If 2: will be totally backward compatible, but precompiled + * headers may not work and program size will be larger. + */ +#define CONST_COMPATIBILITY 0 -#define wxUSE_C_MAIN 0 - // Set to 1 to use main.c instead of main.cpp (UNIX only) +/* ------------------------------------------------------------------------ */ +/* System-specific stuff */ +/* ------------------------------------------------------------------------ */ -#define wxUSE_ODBC 0 - // Define 1 to use ODBC classes +/* acconfig.h + This file is in the public domain. -#define wxUSE_IOSTREAMH 1 - // VC++ 4.2 and above allows and - // but you can't mix them. Set to 1 for , - // 0 for + Descriptive text for the C preprocessor macros that + the distributed Autoconf macros can define. + No software package will use all of them; autoheader copies the ones + your configure.in uses into your configuration header file templates. -#define wxUSE_WXCONFIG 1 - // if enabled, compiles built-in OS independent wxConfig - // class and it's file (any platform) and registry (Win) - // based implementations + The entries are in sort -df order: alphabetical, case insensitive, + ignoring punctuation (such as underscores). Although this order + can split up related entries, it makes it easier to check whether + a given entry is in the file. */ -#define wxUSE_GADGETS 0 - // Use gadgets where possible +/* Define if on AIX 3. + System headers sometimes define this. + We just want to avoid a redefinition error message. */ +#ifndef _ALL_SOURCE +/* #undef _ALL_SOURCE */ +#endif -#define wxUSE_TIMEDATE 1 - // Use time and date +/* Define if using alloca.c. */ +/* #undef C_ALLOCA */ -#define wxUSE_THREADS 0 - // Use threads +/* Define if type char is unsigned and you are not using gcc. */ +#ifndef __CHAR_UNSIGNED__ +/* #undef __CHAR_UNSIGNED__ */ +#endif -#define wxUSE_ZLIB 1 - // Use zlib for compression in streams and PNG code -#define wxUSE_LIBPNG 1 - // Use PNG bitmap code -#define wxUSE_STD_IOSTREAM 1 - // Use standard C++ streams if 1. If 0, use wxWin - // streams implementation. -#define wxUSE_STREAMS 1 - // Use wxStream implementation within wxWindows code +/* Define if the closedir function returns void instead of int. */ +/* #undef CLOSEDIR_VOID */ -#define wxUSE_SERIAL 0 - // Use serialization (requires utils/serialize) +/* Define to empty if the keyword does not work. */ +/* #undef const */ -#define wxUSE_TOOLTIPS 0 - // Use tooltips +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +/* #undef CRAY_STACKSEG_END */ -#define wxUSE_DYNLIB_CLASS 0 - // Use wxLibrary -#define wxUSE_SOCKETS 1 - // Set to 1 to use socket classes +/* Define for DGUX with . */ +/* #undef DGUX */ -/* - * Finer detail - * - */ +/* Define if you have . */ +/* #undef DIRENT */ + +/* Define to the type of elements in the array set by `getgroups'. + Usually this is either `int' or `gid_t'. */ +#define GETGROUPS_T gid_t + +/* The type of 3rd argument to getsockname() - usually size_t or int */ +#define SOCKLEN_T size_t + +/* Define if the `getloadavg' function needs to be run setuid or setgid. */ +/* #undef GETLOADAVG_PRIVILEGED */ + +/* Define if the `getpgrp' function takes no argument. */ +/* #undef GETPGRP_VOID */ + +/* Define to `int' if doesn't define. */ +/* #undef gid_t */ + +/* Define if you have alloca, as a function or macro. */ +/* #undef HAVE_ALLOCA */ + +/* Define if you have and it should be used (not on Ultrix). */ +/* #undef HAVE_ALLOCA_H */ + +/* Define if you don't have vprintf but do have _doprnt. */ +/* #undef HAVE_DOPRNT */ + +/* Define if you have sched.h */ +#define HAVE_SCHED_H 1 + +/* Define if you have strings.h */ +#define HAVE_STRINGS_H 1 + +/* Define if you have vprintf() */ +#define HAVE_VPRINTF 1 + +/* Define if you have dlopen() */ +/* #undef HAVE_DLOPEN */ + +/* Define if you have shl_load() */ +/* #undef HAVE_SHL_LOAD */ + +/* Define if you have vsnprintf() */ +#define HAVE_VSNPRINTF 1 + +/* Define if you have usleep() */ +/* #undef HAVE_USLEEP */ + +/* Define if you have nanosleep() */ +#define HAVE_NANOSLEEP 1 + +/* Define if you have vfork() */ +#define HAVE_VFORK 1 + +/* Define if you have uname() */ +#define HAVE_UNAME 1 + +/* Define if you have gethostname() */ +/* #undef HAVE_GETHOSTNAME */ + +/* Define if you have sched_yield */ +#define HAVE_SCHED_YIELD 1 + +/* Define if you have pthread_cancel */ +#define HAVE_PTHREAD_CANCEL 1 + +/* Define if you have all functions to set thread priority */ +#define HAVE_THREAD_PRIORITY_FUNCTIONS 1 + +/* Define if your system has its own `getloadavg' function. */ +/* #undef HAVE_GETLOADAVG */ + +/* Define if you have the getmntent function. */ +/* #undef HAVE_GETMNTENT */ + +/* Define if the `long double' type works. */ +#define HAVE_LONG_DOUBLE 1 + +/* Define if you support file names longer than 14 characters. */ +#define HAVE_LONG_FILE_NAMES 1 + +/* Define if you have a working `mmap' system call. */ +/* #undef HAVE_MMAP */ + +/* Define if system calls automatically restart after interruption + by a signal. */ +/* #undef HAVE_RESTARTABLE_SYSCALLS */ -#define wxUSE_APPLE_IEEE 1 - // if enabled, the float codec written by Apple - // will be used to write, in a portable way, - // float on the disk +/* Define if your struct stat has st_blksize. */ +#define HAVE_ST_BLKSIZE 1 +/* Define if your struct stat has st_blocks. */ +#define HAVE_ST_BLOCKS 1 + +/* Define if you have the strcoll function and it is properly defined. */ +/* #undef HAVE_STRCOLL */ + +/* Define if your struct stat has st_rdev. */ +#define HAVE_ST_RDEV 1 + +/* Define if you have the strftime function. */ +/* #undef HAVE_STRFTIME */ + +/* Define if you have that is POSIX.1 compatible. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define if your struct tm has tm_zone. */ +#define HAVE_TM_ZONE 1 + +/* Define if you don't have tm_zone but do have the external array + tzname. */ +/* #undef HAVE_TZNAME */ + +/* Define if you have . */ +#define HAVE_UNISTD_H 1 + +/* Define if you have . */ +#define HAVE_FNMATCH_H 1 + +/* Define if utime(file, NULL) sets file's timestamp to the present. */ +/* #undef HAVE_UTIME_NULL */ + +/* Define if you have . */ +/* #undef HAVE_VFORK_H */ + +/* Define if you have the vprintf function. */ +#define HAVE_VPRINTF 1 + +/* Define if you have the wait3 system call. */ +/* #undef HAVE_WAIT3 */ + +/* Define as __inline if that's what the C compiler calls it. */ +#ifndef __cplusplus +/* #undef inline */ #endif - // _WX_SETUP_H_ + +/* Define if major, minor, and makedev are declared in . */ +/* #undef MAJOR_IN_MKDEV */ + +/* Define if major, minor, and makedev are declared in . */ +/* #undef MAJOR_IN_SYSMACROS */ + +/* Define if on MINIX. */ +/* #undef _MINIX */ + +/* Define to `int' if doesn't define. */ +/* #undef mode_t */ + +/* Define if you don't have , but have . */ +/* #undef NDIR */ + +/* Define if you have , and doesn't declare the + mem* functions. */ +/* #undef NEED_MEMORY_H */ + +/* Define if your struct nlist has an n_un member. */ +/* #undef NLIST_NAME_UNION */ + +/* Define if you have . */ +/* #undef NLIST_STRUCT */ + +/* Define if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Define to `long' if doesn't define. */ +/* #undef off_t */ + +/* Define to `int' if doesn't define. */ +/* #undef pid_t */ + +/* Define if the system does not provide POSIX.1 features except + with this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define if you need to in order for stat and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define as the return type of signal handlers (int or void). */ +#define RETSIGTYPE void + +/* Define if the setvbuf function takes the buffering type as its second + argument and the buffer pointer as the third, as on System V + before release 3. */ +/* #undef SETVBUF_REVERSED */ + +/* Define SIZESOF for some Objects */ +#define SIZEOF_INT 4 +#define SIZEOF_INT_P 4 +#define SIZEOF_LONG 4 +#define SIZEOF_LONG_LONG 8 + +/* Define to `unsigned' if doesn't define. */ +/* #undef size_t */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +/* #undef STACK_DIRECTION */ + +/* Define if the `S_IS*' macros in do not work properly. */ +/* #undef STAT_MACROS_BROKEN */ + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define on System V Release 4. */ +/* #undef SVR4 */ + +/* Define on BSD */ +/* #undef BSD */ + +/* Define on System V */ +/* #undef SYSV */ + +/* Define if you don't have , but have . */ +/* #undef SYSDIR */ + +/* Define if you don't have , but have . */ +/* #undef SYSNDIR */ + +/* Define if `sys_siglist' is declared by . */ +/* #undef SYS_SIGLIST_DECLARED */ + +/* Define if you can safely include both and . */ +#define TIME_WITH_SYS_TIME 1 + +/* Define if your declares struct tm. */ +/* #undef TM_IN_SYS_TIME */ + +/* Define to `int' if doesn't define. */ +/* #undef uid_t */ + +/* Define for Encore UMAX. */ +/* #undef UMAX */ + +/* Define for Encore UMAX 4.3 that has + instead of . */ +/* #undef UMAX4_3 */ + +/* Define if you do not have , index, bzero, etc.. */ +/* #undef USG */ + +/* Define if the system is System V Release 4 */ +/* #undef SVR4 */ + +/* Define vfork as fork if vfork does not work. */ +/* #undef vfork */ + +/* Define if the closedir function returns void instead of int. */ +/* #undef VOID_CLOSEDIR */ + +/* Define if your processor stores words with the most significant + byte first (like Motorola and SPARC, unlike Intel and VAX). */ +/* #undef WORDS_BIGENDIAN */ + +/* Define if lex declares yytext as a char * by default, not a char[]. */ +#define YYTEXT_POINTER 1 + +#endif /* __GTKSETUPH__ */ + + +/* Leave that blank line there!! Autoheader needs it. + If you're adding to this file, keep in mind: + The entries are in sort -df order: alphabetical, case insensitive, + ignoring punctuation (such as underscores). */ diff --git a/src/generic/proplist.cpp b/src/generic/proplist.cpp index 6f7fdd1a38..bdb7dead26 100644 --- a/src/generic/proplist.cpp +++ b/src/generic/proplist.cpp @@ -6,7 +6,7 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -48,12 +48,12 @@ /* * Property text edit control */ - + IMPLEMENT_CLASS(wxPropertyTextEdit, wxTextCtrl) wxPropertyTextEdit::wxPropertyTextEdit(wxPropertyListView *v, wxWindow *parent, const wxWindowID id, const wxString& value, - const wxPoint& pos, const wxSize& size, + const wxPoint& pos, const wxSize& size, long style, const wxString& name): wxTextCtrl(parent, id, value, pos, size, style, wxDefaultValidator, name) { @@ -75,16 +75,17 @@ void wxPropertyTextEdit::OnKillFocus(void) IMPLEMENT_DYNAMIC_CLASS(wxPropertyListView, wxPropertyView) BEGIN_EVENT_TABLE(wxPropertyListView, wxPropertyView) - EVT_BUTTON(wxID_OK, wxPropertyListView::OnOk) - EVT_BUTTON(wxID_CANCEL, wxPropertyListView::OnCancel) - EVT_BUTTON(wxID_HELP, wxPropertyListView::OnHelp) - EVT_BUTTON(wxID_PROP_CROSS, wxPropertyListView::OnCross) - EVT_BUTTON(wxID_PROP_CHECK, wxPropertyListView::OnCheck) - EVT_BUTTON(wxID_PROP_EDIT, wxPropertyListView::OnEdit) - EVT_TEXT_ENTER(wxID_PROP_TEXT, wxPropertyListView::OnText) - EVT_LISTBOX(wxID_PROP_SELECT, wxPropertyListView::OnPropertySelect) - EVT_COMMAND(wxID_PROP_SELECT, wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxPropertyListView::OnPropertyDoubleClick) - EVT_LISTBOX(wxID_PROP_VALUE_SELECT, wxPropertyListView::OnValueListSelect) + EVT_BUTTON(wxID_OK, wxPropertyListView::OnOk) + EVT_BUTTON(wxID_CANCEL, wxPropertyListView::OnCancel) + EVT_BUTTON(wxID_HELP, wxPropertyListView::OnHelp) + EVT_BUTTON(wxID_PROP_CROSS, wxPropertyListView::OnCross) + EVT_BUTTON(wxID_PROP_CHECK, wxPropertyListView::OnCheck) + EVT_BUTTON(wxID_PROP_EDIT, wxPropertyListView::OnEdit) + EVT_TEXT_ENTER(wxID_PROP_TEXT, wxPropertyListView::OnText) + EVT_LISTBOX(wxID_PROP_SELECT, wxPropertyListView::OnPropertySelect) + EVT_COMMAND(wxID_PROP_SELECT, wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, + wxPropertyListView::OnPropertyDoubleClick) + EVT_LISTBOX(wxID_PROP_VALUE_SELECT, wxPropertyListView::OnValueListSelect) END_EVENT_TABLE() bool wxPropertyListView::sm_dialogCancelled = FALSE; @@ -180,7 +181,7 @@ bool wxPropertyListView::UpdatePropertyDisplayInList(wxProperty *property) { // Don't update the listbox unnecessarily because it can cause // ugly flashing. - + if (paddedString != m_propertyScrollingList->GetString(sel)) m_propertyScrollingList->SetString(sel, paddedString.GetData()); } @@ -419,10 +420,10 @@ bool wxPropertyListView::CreateControls(void) smallButtonWidth = -1; smallButtonHeight = -1; #endif - + if (m_valueText) return TRUE; - + if (!panel) return FALSE; @@ -499,7 +500,7 @@ bool wxPropertyListView::CreateControls(void) c2->left.SameAs (panel, wxLeft, 2); else c2->left.RightOf (leftMostWindow, 2); - + c2->bottom.SameAs (panel, wxBottom, 2); c2->width.AsIs(); c2->height.AsIs(); @@ -592,7 +593,7 @@ bool wxPropertyListView::CreateControls(void) m_valueText = new wxPropertyTextEdit(this, panel, wxID_PROP_TEXT, "", wxPoint(-1, -1), wxSize(-1, -1), wxPROCESS_ENTER); m_valueText->Enable(FALSE); - + wxLayoutConstraints *c = new wxLayoutConstraints; if (m_cancelButton) @@ -706,7 +707,7 @@ bool wxPropertyListView::OnClose(void) // Retrieve the value if any wxCommandEvent event; OnCheck(event); - + delete this; return TRUE; } @@ -728,7 +729,7 @@ void wxPropertyListView::OnOk(wxCommandEvent& event) { // Retrieve the value if any OnCheck(event); - + m_managedWindow->Close(TRUE); } @@ -803,16 +804,16 @@ void wxPropertyListView::OnText(wxCommandEvent& event) /* * Property dialog box */ - + IMPLEMENT_CLASS(wxPropertyListDialog, wxDialog) BEGIN_EVENT_TABLE(wxPropertyListDialog, wxDialog) - EVT_BUTTON(wxID_CANCEL, wxPropertyListDialog::OnCancel) + EVT_BUTTON(wxID_CANCEL, wxPropertyListDialog::OnCancel) EVT_CLOSE(wxPropertyListDialog::OnCloseWindow) END_EVENT_TABLE() wxPropertyListDialog::wxPropertyListDialog(wxPropertyListView *v, wxWindow *parent, - const wxString& title, const wxPoint& pos, + const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name): wxDialog(parent, -1, title, pos, size, style, name) { @@ -826,10 +827,10 @@ void wxPropertyListDialog::OnCloseWindow(wxCloseEvent& event) { if (m_view) { - SetReturnCode(wxID_CANCEL); + SetReturnCode(wxID_CANCEL); m_view->OnClose(); - m_view = NULL; - this->Destroy(); + m_view = NULL; + this->Destroy(); } else { @@ -839,7 +840,7 @@ void wxPropertyListDialog::OnCloseWindow(wxCloseEvent& event) void wxPropertyListDialog::OnCancel(wxCommandEvent& WXUNUSED(event)) { - SetReturnCode(wxID_CANCEL); + SetReturnCode(wxID_CANCEL); this->Close(); } @@ -854,16 +855,16 @@ void wxPropertyListDialog::OnDefaultAction(wxControl *WXUNUSED(item)) // Extend event processing to search the view's event table bool wxPropertyListDialog::ProcessEvent(wxEvent& event) { - if ( !m_view || ! m_view->ProcessEvent(event) ) - return wxEvtHandler::ProcessEvent(event); - else - return TRUE; + if ( !m_view || ! m_view->ProcessEvent(event) ) + return wxEvtHandler::ProcessEvent(event); + else + return TRUE; } /* * Property panel */ - + IMPLEMENT_CLASS(wxPropertyListPanel, wxPanel) BEGIN_EVENT_TABLE(wxPropertyListPanel, wxPanel) @@ -885,10 +886,10 @@ void wxPropertyListPanel::OnDefaultAction(wxControl *WXUNUSED(item)) // Extend event processing to search the view's event table bool wxPropertyListPanel::ProcessEvent(wxEvent& event) { - if ( !m_view || ! m_view->ProcessEvent(event) ) - return wxEvtHandler::ProcessEvent(event); - else - return TRUE; + if ( !m_view || ! m_view->ProcessEvent(event) ) + return wxEvtHandler::ProcessEvent(event); + else + return TRUE; } void wxPropertyListPanel::OnSize(wxSizeEvent& WXUNUSED(event)) @@ -899,7 +900,7 @@ void wxPropertyListPanel::OnSize(wxSizeEvent& WXUNUSED(event)) /* * Property frame */ - + IMPLEMENT_CLASS(wxPropertyListFrame, wxFrame) BEGIN_EVENT_TABLE(wxPropertyListFrame, wxFrame) @@ -944,7 +945,7 @@ bool wxPropertyListFrame::Initialize(void) /* * Property list specific validator */ - + IMPLEMENT_ABSTRACT_CLASS(wxPropertyListValidator, wxPropertyValidator) bool wxPropertyListValidator::OnSelect(bool select, wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow) @@ -1013,12 +1014,12 @@ IMPLEMENT_DYNAMIC_CLASS(wxRealListValidator, wxPropertyListValidator) /// /// Real number validator -/// +/// bool wxRealListValidator::OnCheckValue(wxProperty *WXUNUSED(property), wxPropertyListView *view, wxWindow *parentWindow) { if (m_realMin == 0.0 && m_realMax == 0.0) return TRUE; - + if (!view->GetValueText()) return FALSE; wxString value(view->GetValueText()->GetValue()); @@ -1031,7 +1032,7 @@ bool wxRealListValidator::OnCheckValue(wxProperty *WXUNUSED(property), wxPropert wxMessageBox(buf, "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow); return FALSE; } - + if (val < m_realMin || val > m_realMax) { char buf[200]; @@ -1052,7 +1053,7 @@ bool wxRealListValidator::OnRetrieveValue(wxProperty *property, wxPropertyListVi if (strlen(view->GetValueText()->GetValue()) == 0) return FALSE; - + wxString value(view->GetValueText()->GetValue()); float f = (float)atof(value.GetData()); property->GetValue() = f; @@ -1074,14 +1075,14 @@ bool wxRealListValidator::OnPrepareControls(wxProperty *WXUNUSED(property), wxPr /// /// Integer validator -/// +/// IMPLEMENT_DYNAMIC_CLASS(wxIntegerListValidator, wxPropertyListValidator) bool wxIntegerListValidator::OnCheckValue(wxProperty *WXUNUSED(property), wxPropertyListView *view, wxWindow *parentWindow) { if (m_integerMin == 0 && m_integerMax == 0) return TRUE; - + if (!view->GetValueText()) return FALSE; wxString value(view->GetValueText()->GetValue()); @@ -1114,7 +1115,7 @@ bool wxIntegerListValidator::OnRetrieveValue(wxProperty *property, wxPropertyLis if (strlen(view->GetValueText()->GetValue()) == 0) return FALSE; - + wxString value(view->GetValueText()->GetValue()); long val = (long)atoi(value.GetData()); property->GetValue() = (long)val; @@ -1162,7 +1163,7 @@ bool wxBoolListValidator::OnRetrieveValue(wxProperty *property, wxPropertyListVi if (strlen(view->GetValueText()->GetValue()) == 0) return FALSE; - + wxString value(view->GetValueText()->GetValue()); bool boolValue = FALSE; if (value == "True") @@ -1207,7 +1208,7 @@ bool wxBoolListValidator::OnPrepareDetailControls(wxProperty *WXUNUSED(property) { view->ShowListBoxControl(TRUE); view->GetValueList()->Enable(TRUE); - + view->GetValueList()->Append("True"); view->GetValueList()->Append("False"); char *currentString = copystring(view->GetValueText()->GetValue()); @@ -1246,7 +1247,7 @@ bool wxBoolListValidator::OnDoubleClick(wxProperty *property, wxPropertyListView /// /// String validator -/// +/// IMPLEMENT_DYNAMIC_CLASS(wxStringListValidator, wxPropertyListValidator) wxStringListValidator::wxStringListValidator(wxStringList *list, long flags): @@ -1321,7 +1322,7 @@ bool wxStringListValidator::OnPrepareControls(wxProperty *WXUNUSED(property), wx view->GetValueText()->Enable(TRUE); return TRUE; } - + // Constrained if (view->GetValueText()) view->GetValueText()->Enable(FALSE); @@ -1405,7 +1406,7 @@ bool wxStringListValidator::OnDoubleClick(wxProperty *property, wxPropertyListVi /// /// Filename validator -/// +/// IMPLEMENT_DYNAMIC_CLASS(wxFilenameListValidator, wxPropertyListValidator) wxFilenameListValidator::wxFilenameListValidator(wxString message , wxString wildcard, long flags): @@ -1493,7 +1494,7 @@ void wxFilenameListValidator::OnEdit(wxProperty *property, wxPropertyListView *v /// /// Colour validator -/// +/// IMPLEMENT_DYNAMIC_CLASS(wxColourListValidator, wxPropertyListValidator) wxColourListValidator::wxColourListValidator(long flags): @@ -1518,7 +1519,7 @@ bool wxColourListValidator::OnRetrieveValue(wxProperty *property, wxPropertyList if (!view->GetValueText()) return FALSE; wxString value(view->GetValueText()->GetValue()); - + property->GetValue() = value ; return TRUE; } @@ -1562,7 +1563,7 @@ void wxColourListValidator::OnEdit(wxProperty *property, wxPropertyListView *vie { if (!view->GetValueText()) return; - + char *s = property->GetValue().StringValue(); int r = 0; int g = 0; @@ -1573,25 +1574,25 @@ void wxColourListValidator::OnEdit(wxProperty *property, wxPropertyListView *vie g = wxHexToDec(s+2); b = wxHexToDec(s+4); } - + wxColour col(r,g,b); - + wxColourData data; data.SetChooseFull(TRUE); data.SetColour(col); - + for (int i = 0; i < 16; i++) { wxColour colour(i*16, i*16, i*16); data.SetCustomColour(i, colour); } - + wxColourDialog dialog(parentWindow, &data); if (dialog.ShowModal() != wxID_CANCEL) { wxColourData retData = dialog.GetColourData(); col = retData.GetColour(); - + char buf[7]; wxDecToHex(col.Red(), buf); wxDecToHex(col.Green(), buf+2); @@ -1665,7 +1666,7 @@ void wxListOfStringsListValidator::OnEdit(wxProperty *property, wxPropertyListVi { // Convert property value to a list of strings for editing wxStringList *stringList = new wxStringList; - + wxPropertyValue *expr = property->GetValue().GetFirst(); while (expr) { @@ -1674,10 +1675,10 @@ void wxListOfStringsListValidator::OnEdit(wxProperty *property, wxPropertyListVi stringList->Add(s); expr = expr->GetNext(); } - + wxString title("Editing "); title += property->GetName(); - + if (EditStringList(parentWindow, stringList, title.GetData())) { wxPropertyValue& oldValue = property->GetValue(); @@ -1687,10 +1688,10 @@ void wxListOfStringsListValidator::OnEdit(wxProperty *property, wxPropertyListVi { char *s = (char *)node->Data(); oldValue.Append(new wxPropertyValue(s)); - + node = node->Next(); } - + view->DisplayProperty(property); view->UpdatePropertyDisplayInList(property); view->OnPropertyChanged(property); @@ -1702,9 +1703,9 @@ class wxPropertyStringListEditorDialog: public wxDialog { public: wxPropertyStringListEditorDialog(wxWindow *parent, const wxString& title, - const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long windowStyle = wxDEFAULT_DIALOG_STYLE, const wxString& name = "stringEditorDialogBox"): - wxDialog(parent, -1, title, pos, size, windowStyle, name) + const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, + long windowStyle = wxDEFAULT_DIALOG_STYLE, const wxString& name = "stringEditorDialogBox"): + wxDialog(parent, -1, title, pos, size, windowStyle, name) { m_stringList = NULL; m_stringText = NULL; @@ -1717,12 +1718,12 @@ class wxPropertyStringListEditorDialog: public wxDialog void SaveCurrentSelection(void); void ShowCurrentSelection(void); - void OnOK(wxCommandEvent& event); - void OnCancel(wxCommandEvent& event); - void OnAdd(wxCommandEvent& event); - void OnDelete(wxCommandEvent& event); - void OnStrings(wxCommandEvent& event); - void OnText(wxCommandEvent& event); + void OnOK(wxCommandEvent& event); + void OnCancel(wxCommandEvent& event); + void OnAdd(wxCommandEvent& event); + void OnDelete(wxCommandEvent& event); + void OnStrings(wxCommandEvent& event); + void OnText(wxCommandEvent& event); public: wxStringList* m_stringList; @@ -1733,18 +1734,18 @@ public: DECLARE_EVENT_TABLE() }; -#define wxID_PROP_SL_ADD 3000 -#define wxID_PROP_SL_DELETE 3001 -#define wxID_PROP_SL_STRINGS 3002 -#define wxID_PROP_SL_TEXT 3003 +#define wxID_PROP_SL_ADD 3000 +#define wxID_PROP_SL_DELETE 3001 +#define wxID_PROP_SL_STRINGS 3002 +#define wxID_PROP_SL_TEXT 3003 BEGIN_EVENT_TABLE(wxPropertyStringListEditorDialog, wxDialog) - EVT_BUTTON(wxID_OK, wxPropertyStringListEditorDialog::OnOK) - EVT_BUTTON(wxID_CANCEL, wxPropertyStringListEditorDialog::OnCancel) - EVT_BUTTON(wxID_PROP_SL_ADD, wxPropertyStringListEditorDialog::OnAdd) - EVT_BUTTON(wxID_PROP_SL_DELETE, wxPropertyStringListEditorDialog::OnDelete) - EVT_LISTBOX(wxID_PROP_SL_STRINGS, wxPropertyStringListEditorDialog::OnStrings) - EVT_TEXT_ENTER(wxID_PROP_SL_TEXT, wxPropertyStringListEditorDialog::OnText) + EVT_BUTTON(wxID_OK, wxPropertyStringListEditorDialog::OnOK) + EVT_BUTTON(wxID_CANCEL, wxPropertyStringListEditorDialog::OnCancel) + EVT_BUTTON(wxID_PROP_SL_ADD, wxPropertyStringListEditorDialog::OnAdd) + EVT_BUTTON(wxID_PROP_SL_DELETE, wxPropertyStringListEditorDialog::OnDelete) + EVT_LISTBOX(wxID_PROP_SL_STRINGS, wxPropertyStringListEditorDialog::OnStrings) + EVT_TEXT_ENTER(wxID_PROP_SL_TEXT, wxPropertyStringListEditorDialog::OnText) EVT_CLOSE(wxPropertyStringListEditorDialog::OnCloseWindow) END_EVENT_TABLE() @@ -1752,7 +1753,7 @@ class wxPropertyStringListEditorText: public wxTextCtrl { public: wxPropertyStringListEditorText(wxWindow *parent, wxWindowID id, const wxString& val, - const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, + const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long windowStyle = 0, const wxString& name = "text"): wxTextCtrl(parent, id, val, pos, size, windowStyle, wxDefaultValidator, name) { @@ -1774,10 +1775,10 @@ bool wxListOfStringsListValidator::EditStringList(wxWindow *parent, wxStringList wxBeginBusyCursor(); wxPropertyStringListEditorDialog *dialog = new wxPropertyStringListEditorDialog(parent, - title, wxPoint(10, 10), wxSize(400, 400), wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL); - + title, wxPoint(10, 10), wxSize(400, 400), wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL); + dialog->m_stringList = stringList; - + dialog->m_listBox = new wxListBox(dialog, wxID_PROP_SL_STRINGS, wxPoint(-1, -1), wxSize(-1, -1), 0, NULL, wxLB_SINGLE); @@ -1851,9 +1852,9 @@ bool wxListOfStringsListValidator::EditStringList(wxWindow *parent, wxStringList dialog->Centre(wxBOTH); wxEndBusyCursor(); if (dialog->ShowModal() == wxID_CANCEL) - return FALSE; + return FALSE; else - return TRUE; + return TRUE; } /* @@ -1877,11 +1878,11 @@ void wxPropertyStringListEditorDialog::OnDelete(wxCommandEvent& WXUNUSED(event)) int sel = m_listBox->GetSelection(); if (sel == -1) return; - + wxNode *node = (wxNode *)m_listBox->wxListBox::GetClientData(sel); if (!node) return; - + m_listBox->Delete(sel); delete[] (char *)node->Data(); delete node; @@ -1892,7 +1893,7 @@ void wxPropertyStringListEditorDialog::OnDelete(wxCommandEvent& WXUNUSED(event)) void wxPropertyStringListEditorDialog::OnAdd(wxCommandEvent& WXUNUSED(event)) { SaveCurrentSelection(); - + char *initialText = ""; wxNode *node = m_stringList->Add(initialText); m_listBox->Append(initialText, (char *)node); @@ -1936,16 +1937,16 @@ void wxPropertyStringListEditorDialog::SaveCurrentSelection(void) { if (m_currentSelection == -1) return; - + wxNode *node = (wxNode *)m_listBox->wxListBox::GetClientData(m_currentSelection); if (!node) return; - + wxString txt(m_stringText->GetValue()); if (node->Data()) delete[] (char *)node->Data(); node->SetData((wxObject *)copystring(txt)); - + m_listBox->SetString(m_currentSelection, (char *)node->Data()); } diff --git a/src/gtk/choice.cpp b/src/gtk/choice.cpp index 9bf71e04f5..1385c3c8ae 100644 --- a/src/gtk/choice.cpp +++ b/src/gtk/choice.cpp @@ -4,7 +4,7 @@ // Author: Robert Roebling // Id: $Id$ // Copyright: (c) 1998 Robert Roebling -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -29,13 +29,15 @@ extern bool g_blockEventsOnDrag; static void gtk_choice_clicked_callback( GtkWidget *WXUNUSED(widget), wxChoice *choice ) { - if (!choice->HasVMT()) return; - if (g_blockEventsOnDrag) return; - + if (!choice->HasVMT()) + return; + + if (g_blockEventsOnDrag) + return; + wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, choice->GetId() ); event.SetInt( choice->GetSelection() ); - wxString tmp( choice->GetStringSelection() ); - event.SetString( WXSTRINGCAST(tmp) ); + event.SetString( choice->GetStringSelection() ); event.SetEventObject(choice); choice->GetEventHandler()->ProcessEvent(event); } @@ -56,53 +58,55 @@ bool wxChoice::Create( wxWindow *parent, wxWindowID id, long style, const wxValidator& validator, const wxString &name ) { m_needParent = TRUE; - + PreCreation( parent, id, pos, size, style, name ); - + SetValidator( validator ); m_widget = gtk_option_menu_new(); - - wxSize newSize = size; - if (newSize.x == -1) newSize.x = 80; - if (newSize.y == -1) newSize.y = 26; + + wxSize newSize(size); + if (newSize.x == -1) + newSize.x = 80; + if (newSize.y == -1) + newSize.y = 26; SetSize( newSize.x, newSize.y ); - + GtkWidget *menu = gtk_menu_new(); - + for (int i = 0; i < n; i++) { m_clientDataList.Append( (wxObject*) NULL ); m_clientObjectList.Append( (wxObject*) NULL ); - + GtkWidget *item = gtk_menu_item_new_with_label( choices[i] ); gtk_menu_append( GTK_MENU(menu), item ); - + gtk_widget_realize( item ); gtk_widget_realize( GTK_BIN(item)->child ); - + gtk_widget_show( item ); - - gtk_signal_connect( GTK_OBJECT( item ), "activate", + + gtk_signal_connect( GTK_OBJECT( item ), "activate", GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this ); } gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu ); - + m_parent->AddChild( this ); (m_parent->m_insertCallback)( m_parent, this ); - + PostCreation(); - + SetBackgroundColour( parent->GetBackgroundColour() ); SetForegroundColour( parent->GetForegroundColour() ); SetFont( parent->GetFont() ); Show( TRUE ); - + return TRUE; } - + wxChoice::~wxChoice() { Clear(); @@ -111,20 +115,20 @@ wxChoice::~wxChoice() void wxChoice::AppendCommon( const wxString &item ) { wxCHECK_RET( m_widget != NULL, "invalid choice" ); - + GtkWidget *menu = gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ); GtkWidget *menu_item = gtk_menu_item_new_with_label( item ); - + gtk_menu_append( GTK_MENU(menu), menu_item ); - + gtk_widget_realize( menu_item ); gtk_widget_realize( GTK_BIN(menu_item)->child ); - + if (m_widgetStyle) ApplyWidgetStyle(); - - gtk_signal_connect( GTK_OBJECT( menu_item ), "activate", + + gtk_signal_connect( GTK_OBJECT( menu_item ), "activate", GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this ); - + gtk_widget_show( menu_item ); } @@ -132,7 +136,7 @@ void wxChoice::Append( const wxString &item ) { m_clientDataList.Append( (wxObject*) NULL ); m_clientObjectList.Append( (wxObject*) NULL ); - + AppendCommon( item ); } @@ -140,7 +144,7 @@ void wxChoice::Append( const wxString &item, void *clientData ) { m_clientDataList.Append( (wxObject*) clientData ); m_clientObjectList.Append( (wxObject*) NULL ); - + AppendCommon( item ); } @@ -148,53 +152,53 @@ void wxChoice::Append( const wxString &item, wxClientData *clientData ) { m_clientObjectList.Append( (wxObject*) clientData ); m_clientDataList.Append( (wxObject*) NULL ); - + AppendCommon( item ); } void wxChoice::SetClientData( int n, void* clientData ) { wxCHECK_RET( m_widget != NULL, "invalid combobox" ); - + wxNode *node = m_clientDataList.Nth( n ); if (!node) return; - + node->SetData( (wxObject*) clientData ); } void* wxChoice::GetClientData( int n ) { wxCHECK_MSG( m_widget != NULL, NULL, "invalid combobox" ); - + wxNode *node = m_clientDataList.Nth( n ); if (!node) return NULL; - + return node->Data(); } void wxChoice::SetClientObject( int n, wxClientData* clientData ) { wxCHECK_RET( m_widget != NULL, "invalid combobox" ); - + wxNode *node = m_clientObjectList.Nth( n ); if (!node) return; - + wxClientData *cd = (wxClientData*) node->Data(); if (cd) delete cd; - + node->SetData( (wxObject*) clientData ); } wxClientData* wxChoice::GetClientObject( int n ) { wxCHECK_MSG( m_widget != NULL, (wxClientData*) NULL, "invalid combobox" ); - + wxNode *node = m_clientObjectList.Nth( n ); if (!node) return (wxClientData*) NULL; - + return (wxClientData*) node->Data(); } - + void wxChoice::Clear() { wxCHECK_RET( m_widget != NULL, "invalid choice" ); @@ -202,7 +206,7 @@ void wxChoice::Clear() gtk_option_menu_remove_menu( GTK_OPTION_MENU(m_widget) ); GtkWidget *menu = gtk_menu_new(); gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu ); - + wxNode *node = m_clientObjectList.First(); while (node) { @@ -211,7 +215,7 @@ void wxChoice::Clear() node = node->Next(); } m_clientObjectList.Clear(); - + m_clientDataList.Clear(); } @@ -226,7 +230,7 @@ int wxChoice::FindString( const wxString &string ) const // If you read this code once and you think you understand // it, then you are very wrong. Robert Roebling. - + GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) ); int count = 0; GList *child = menu_shell->children; @@ -236,16 +240,16 @@ int wxChoice::FindString( const wxString &string ) const GtkLabel *label = (GtkLabel *) NULL; if (bin->child) label = GTK_LABEL(bin->child); if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child ); - + wxASSERT_MSG( label != NULL , "wxChoice: invalid label" ); - - if (string == label->label) return count; + + if (string == label->label) + return count; + child = child->next; count++; } - - wxFAIL_MSG( "wxChoice: string not found" ); - + return -1; } @@ -268,9 +272,9 @@ int wxChoice::GetSelection() child = child->next; count++; } - + wxFAIL_MSG( "wxChoice: no selection" ); - + return -1; } @@ -289,17 +293,17 @@ wxString wxChoice::GetString( int n ) const GtkLabel *label = (GtkLabel *) NULL; if (bin->child) label = GTK_LABEL(bin->child); if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child ); - + wxASSERT_MSG( label != NULL , "wxChoice: invalid label" ); - + return label->label; } child = child->next; count++; } - - wxFAIL_MSG( "wxChoice: string not found" ); - + + wxFAIL_MSG( "wxChoice: invalid index in GetString()" ); + return ""; } @@ -308,9 +312,9 @@ wxString wxChoice::GetStringSelection() const wxCHECK_MSG( m_widget != NULL, "", "invalid choice" ); GtkLabel *label = GTK_LABEL( GTK_BUTTON(m_widget)->child ); - + wxASSERT_MSG( label != NULL , "wxChoice: invalid label" ); - + return label->label; } @@ -339,7 +343,7 @@ void wxChoice::SetSelection( int n ) int tmp = n; gtk_option_menu_set_history( GTK_OPTION_MENU(m_widget), (gint)tmp ); - + gtk_choice_clicked_callback( (GtkWidget *) NULL, this ); } @@ -354,24 +358,24 @@ void wxChoice::SetStringSelection( const wxString &string ) void wxChoice::ApplyWidgetStyle() { SetWidgetStyle(); - + GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) ); - + gtk_widget_set_style( m_widget, m_widgetStyle ); gtk_widget_set_style( GTK_WIDGET( menu_shell ), m_widgetStyle ); - + GList *child = menu_shell->children; while (child) { gtk_widget_set_style( GTK_WIDGET( child->data ), m_widgetStyle ); - + GtkBin *bin = GTK_BIN( child->data ); GtkWidget *label = (GtkWidget *) NULL; if (bin->child) label = bin->child; if (!label) label = GTK_BUTTON(m_widget)->child; - + gtk_widget_set_style( label, m_widgetStyle ); - + child = child->next; } } diff --git a/src/gtk/combobox.cpp b/src/gtk/combobox.cpp index 5ab1cd7b75..d8b6178e1c 100644 --- a/src/gtk/combobox.cpp +++ b/src/gtk/combobox.cpp @@ -11,7 +11,6 @@ #pragma implementation "combobox.h" #endif - #include "wx/combobox.h" #include @@ -48,11 +47,9 @@ gtk_combo_clicked_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo ) wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, combo->GetId() ); event.SetInt( combo->GetSelection() ); - event.SetString( copystring(combo->GetStringSelection()) ); + event.SetString( combo->GetStringSelection() ); event.SetEventObject( combo ); combo->GetEventHandler()->ProcessEvent( event ); - - delete [] event.GetString(); } //----------------------------------------------------------------------------- @@ -63,11 +60,9 @@ static void gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo ) { wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, combo->GetId() ); - event.SetString( copystring(combo->GetValue()) ); + event.SetString( combo->GetValue() ); event.SetEventObject( combo ); combo->GetEventHandler()->ProcessEvent( event ); - - delete [] event.GetString(); } //----------------------------------------------------------------------------- @@ -542,7 +537,7 @@ void wxComboBox::OnChar( wxKeyEvent &event ) // all! wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, GetId() ); event.SetInt( 0 ); - event.SetString( (char *)value.c_str() ); + event.SetString( value ); event.SetEventObject( this ); GetEventHandler()->ProcessEvent( event ); } @@ -556,7 +551,7 @@ void wxComboBox::OnChar( wxKeyEvent &event ) // and generate the selected event for it wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, GetId() ); event.SetInt( Number() - 1 ); - event.SetString( (char *)value.c_str() ); + event.SetString( value ); event.SetEventObject( this ); GetEventHandler()->ProcessEvent( event ); } diff --git a/src/gtk/radiobox.cpp b/src/gtk/radiobox.cpp index f17e532c56..c0d0f9202d 100644 --- a/src/gtk/radiobox.cpp +++ b/src/gtk/radiobox.cpp @@ -4,7 +4,7 @@ // Author: Robert Roebling // Id: $Id$ // Copyright: (c) 1998 Robert Roebling -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -33,7 +33,7 @@ static void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRad { if (!rb->HasVMT()) return; if (g_blockEventsOnDrag) return; - + if (rb->m_alreadySent) { rb->m_alreadySent = FALSE; @@ -41,11 +41,10 @@ static void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRad } rb->m_alreadySent = TRUE; - + wxCommandEvent event( wxEVT_COMMAND_RADIOBOX_SELECTED, rb->GetId() ); event.SetInt( rb->GetSelection() ); - wxString tmp( rb->GetStringSelection() ); - event.SetString( WXSTRINGCAST(tmp) ); + event.SetString( rb->GetStringSelection() ); event.SetEventObject( rb ); rb->GetEventHandler()->ProcessEvent(event); } @@ -66,65 +65,65 @@ wxRadioBox::wxRadioBox(void) bool wxRadioBox::Create( wxWindow *parent, wxWindowID id, const wxString& title, const wxPoint &pos, const wxSize &size, - int n, const wxString choices[], int majorDim, - long style, const wxValidator& validator, - const wxString &name ) + int n, const wxString choices[], int majorDim, + long style, const wxValidator& validator, + const wxString &name ) { m_alreadySent = FALSE; m_needParent = TRUE; m_acceptsFocus = TRUE; - + PreCreation( parent, id, pos, size, style, name ); SetValidator( validator ); m_widget = gtk_frame_new( title ); - + m_majorDim = majorDim; - + GtkRadioButton *m_radio = (GtkRadioButton*) NULL; - + GSList *radio_button_group = (GSList *) NULL; for (int i = 0; i < n; i++) { if (i) radio_button_group = gtk_radio_button_group( GTK_RADIO_BUTTON(m_radio) ); - + m_radio = GTK_RADIO_BUTTON( gtk_radio_button_new_with_label( radio_button_group, choices[i] ) ); - + m_boxes.Append( (wxObject*) m_radio ); - + ConnectWidget( GTK_WIDGET(m_radio) ); - + if (!i) gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_radio), TRUE ); - - gtk_signal_connect( GTK_OBJECT(m_radio), "clicked", + + gtk_signal_connect( GTK_OBJECT(m_radio), "clicked", GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this ); - + gtk_myfixed_put( GTK_MYFIXED(m_parent->m_wxwindow), GTK_WIDGET(m_radio), m_x+10, m_y+10+(i*24) ); - + } - + wxSize ls = LayoutItems(); - + wxSize newSize = size; if (newSize.x == -1) newSize.x = ls.x; if (newSize.y == -1) newSize.y = ls.y; SetSize( newSize.x, newSize.y ); - + m_parent->AddChild( this ); (m_parent->m_insertCallback)( m_parent, this ); - + PostCreation(); - + SetLabel( title ); - + SetBackgroundColour( parent->GetBackgroundColour() ); SetForegroundColour( parent->GetForegroundColour() ); SetFont( parent->GetFont() ); Show( TRUE ); - + return TRUE; } @@ -142,7 +141,7 @@ wxRadioBox::~wxRadioBox(void) void wxRadioBox::OnSize( wxSizeEvent &event ) { wxControl::OnSize( event ); - + LayoutItems(); } @@ -150,55 +149,55 @@ wxSize wxRadioBox::LayoutItems() { int x = 7; int y = 15; - + int num_per_major = (m_boxes.GetCount() - 1) / m_majorDim +1; - + wxSize res( 0, 0 ); - + if (m_windowStyle & wxRA_HORIZONTAL) { - + for (int j = 0; j < m_majorDim; j++) - { + { y = 15; - + int max_len = 0; wxNode *node = m_boxes.Nth( j*num_per_major ); - for (int i1 = 0; i1< num_per_major; i1++) - { + for (int i1 = 0; i1< num_per_major; i1++) + { GtkWidget *button = GTK_WIDGET( node->Data() ); GtkLabel *label = GTK_LABEL( GTK_BUTTON(button)->child ); GdkFont *font = m_widget->style->font; int len = 22+gdk_string_measure( font, label->label ); if (len > max_len) max_len = len; - + gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), button, m_x+x, m_y+y ); y += 20; - - node = node->Next(); - if (!node) break; - } - - // we don't know the max_len before - + + node = node->Next(); + if (!node) break; + } + + // we don't know the max_len before + node = m_boxes.Nth( j*num_per_major ); - for (int i2 = 0; i2< num_per_major; i2++) - { + for (int i2 = 0; i2< num_per_major; i2++) + { GtkWidget *button = GTK_WIDGET( node->Data() ); - - gtk_widget_set_usize( button, max_len, 20 ); - - node = node->Next(); - if (!node) break; - } - - if (y > res.y) res.y = y; - - x += max_len + 2; + + gtk_widget_set_usize( button, max_len, 20 ); + + node = node->Next(); + if (!node) break; + } + + if (y > res.y) res.y = y; + + x += max_len + 2; } - - res.x = x+4; - res.y += 9; + + res.x = x+4; + res.y += 9; } else { @@ -209,45 +208,45 @@ wxSize wxRadioBox::LayoutItems() { GtkButton *button = GTK_BUTTON( node->Data() ); GtkLabel *label = GTK_LABEL( button->child ); - + GdkFont *font = m_widget->style->font; int len = 22+gdk_string_measure( font, label->label ); if (len > max) max = len; - + node = node->Next(); } - + node = m_boxes.First(); while (node) { GtkWidget *button = GTK_WIDGET( node->Data() ); - + gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), button, m_x+x, m_y+y ); x += max; gtk_widget_set_usize( button, max, 20 ); - + node = node->Next(); } - res.x = x+4; - res.y = 42; + res.x = x+4; + res.y = 42; } - + return res; } bool wxRadioBox::Show( bool show ) { wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobox" ); - + wxWindow::Show( show ); wxNode *node = m_boxes.First(); while (node) { GtkWidget *button = GTK_WIDGET( node->Data() ); - + if (show) gtk_widget_show( button ); else gtk_widget_hide( button ); - + node = node->Next(); } @@ -257,64 +256,64 @@ bool wxRadioBox::Show( bool show ) int wxRadioBox::FindString( const wxString &s ) const { wxCHECK_MSG( m_widget != NULL, -1, "invalid radiobox" ); - + int count = 0; - + wxNode *node = m_boxes.First(); while (node) { GtkButton *button = GTK_BUTTON( node->Data() ); - + GtkLabel *label = GTK_LABEL( button->child ); if (s == label->label) return count; count++; - + node = node->Next(); } - + return -1; } void wxRadioBox::SetFocus() { wxCHECK_RET( m_widget != NULL, "invalid radiobox" ); - + if (m_boxes.GetCount() == 0) return; - + wxNode *node = m_boxes.First(); while (node) { GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->Data() ); if (button->active) - { + { gtk_widget_grab_focus( GTK_WIDGET(button) ); - - return; - } + + return; + } node = node->Next(); } - + } void wxRadioBox::SetSelection( int n ) { wxCHECK_RET( m_widget != NULL, "invalid radiobox" ); - + wxNode *node = m_boxes.Nth( n ); - + wxCHECK_RET( node, "radiobox wrong index" ); - + GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->Data() ); - + gtk_toggle_button_set_state( button, 1 ); } int wxRadioBox::GetSelection(void) const { wxCHECK_MSG( m_widget != NULL, -1, "invalid radiobox" ); - + int count = 0; - + wxNode *node = m_boxes.First(); while (node) { @@ -323,53 +322,53 @@ int wxRadioBox::GetSelection(void) const count++; node = node->Next(); } - + wxFAIL_MSG( "wxRadioBox none selected" ); - + return -1; } wxString wxRadioBox::GetString( int n ) const { wxCHECK_MSG( m_widget != NULL, "", "invalid radiobox" ); - + wxNode *node = m_boxes.Nth( n ); - + wxCHECK_MSG( node, "", "radiobox wrong index" ); - + GtkButton *button = GTK_BUTTON( node->Data() ); GtkLabel *label = GTK_LABEL( button->child ); - + return wxString( label->label ); } wxString wxRadioBox::GetLabel( int item ) const { wxCHECK_MSG( m_widget != NULL, "", "invalid radiobox" ); - + return GetString( item ); } void wxRadioBox::SetLabel( const wxString& label ) { wxCHECK_RET( m_widget != NULL, "invalid radiobox" ); - + wxControl::SetLabel( label ); - + gtk_frame_set_label( GTK_FRAME(m_widget), wxControl::GetLabel() ); } void wxRadioBox::SetLabel( int item, const wxString& label ) { wxCHECK_RET( m_widget != NULL, "invalid radiobox" ); - + wxNode *node = m_boxes.Nth( item ); - + wxCHECK_RET( node, "radiobox wrong index" ); - + GtkButton *button = GTK_BUTTON( node->Data() ); GtkLabel *g_label = GTK_LABEL( button->child ); - + gtk_label_set( g_label, label ); } @@ -381,7 +380,7 @@ void wxRadioBox::SetLabel( int WXUNUSED(item), wxBitmap *WXUNUSED(bitmap) ) void wxRadioBox::Enable( bool enable ) { wxControl::Enable( enable ); - + wxNode *node = m_boxes.First(); while (node) { @@ -396,11 +395,11 @@ void wxRadioBox::Enable( bool enable ) void wxRadioBox::Enable( int item, bool enable ) { wxCHECK_RET( m_widget != NULL, "invalid radiobox" ); - + wxNode *node = m_boxes.Nth( item ); - + wxCHECK_RET( node, "radiobox wrong index" ); - + GtkButton *button = GTK_BUTTON( node->Data() ); GtkWidget *label = button->child; gtk_widget_set_sensitive( GTK_WIDGET(button), enable ); @@ -410,11 +409,11 @@ void wxRadioBox::Enable( int item, bool enable ) void wxRadioBox::Show( int item, bool show ) { wxCHECK_RET( m_widget != NULL, "invalid radiobox" ); - + wxNode *node = m_boxes.Nth( item ); - + wxCHECK_RET( node, "radiobox wrong index" ); - + GtkWidget *button = GTK_WIDGET( node->Data() ); if (show) @@ -426,7 +425,7 @@ void wxRadioBox::Show( int item, bool show ) wxString wxRadioBox::GetStringSelection(void) const { wxCHECK_MSG( m_widget != NULL, "", "invalid radiobox" ); - + wxNode *node = m_boxes.First(); while (node) { @@ -438,19 +437,19 @@ wxString wxRadioBox::GetStringSelection(void) const } node = node->Next(); } - + wxFAIL_MSG( "wxRadioBox none selected" ); return ""; } bool wxRadioBox::SetStringSelection( const wxString &s ) { - wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobox" ); - + wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobox" ); + int res = FindString( s ); if (res == -1) return FALSE; SetSelection( res ); - + return TRUE; } @@ -472,18 +471,18 @@ void wxRadioBox::SetNumberOfRowsOrCols( int WXUNUSED(n) ) void wxRadioBox::ApplyWidgetStyle() { SetWidgetStyle(); - + gtk_widget_set_style( m_widget, m_widgetStyle ); - + wxNode *node = m_boxes.First(); while (node) { GtkWidget *widget = GTK_WIDGET( node->Data() ); gtk_widget_set_style( widget, m_widgetStyle ); - + GtkButton *button = GTK_BUTTON( node->Data() ); gtk_widget_set_style( button->child, m_widgetStyle ); - + node = node->Next(); } } @@ -491,16 +490,16 @@ void wxRadioBox::ApplyWidgetStyle() bool wxRadioBox::IsOwnGtkWindow( GdkWindow *window ) { if (window == m_widget->window) return TRUE; - + wxNode *node = m_boxes.First(); while (node) { GtkWidget *button = GTK_WIDGET( node->Data() ); - + if (window == button->window) return TRUE; - + node = node->Next(); } - + return FALSE; } diff --git a/src/gtk1/choice.cpp b/src/gtk1/choice.cpp index 9bf71e04f5..1385c3c8ae 100644 --- a/src/gtk1/choice.cpp +++ b/src/gtk1/choice.cpp @@ -4,7 +4,7 @@ // Author: Robert Roebling // Id: $Id$ // Copyright: (c) 1998 Robert Roebling -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -29,13 +29,15 @@ extern bool g_blockEventsOnDrag; static void gtk_choice_clicked_callback( GtkWidget *WXUNUSED(widget), wxChoice *choice ) { - if (!choice->HasVMT()) return; - if (g_blockEventsOnDrag) return; - + if (!choice->HasVMT()) + return; + + if (g_blockEventsOnDrag) + return; + wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, choice->GetId() ); event.SetInt( choice->GetSelection() ); - wxString tmp( choice->GetStringSelection() ); - event.SetString( WXSTRINGCAST(tmp) ); + event.SetString( choice->GetStringSelection() ); event.SetEventObject(choice); choice->GetEventHandler()->ProcessEvent(event); } @@ -56,53 +58,55 @@ bool wxChoice::Create( wxWindow *parent, wxWindowID id, long style, const wxValidator& validator, const wxString &name ) { m_needParent = TRUE; - + PreCreation( parent, id, pos, size, style, name ); - + SetValidator( validator ); m_widget = gtk_option_menu_new(); - - wxSize newSize = size; - if (newSize.x == -1) newSize.x = 80; - if (newSize.y == -1) newSize.y = 26; + + wxSize newSize(size); + if (newSize.x == -1) + newSize.x = 80; + if (newSize.y == -1) + newSize.y = 26; SetSize( newSize.x, newSize.y ); - + GtkWidget *menu = gtk_menu_new(); - + for (int i = 0; i < n; i++) { m_clientDataList.Append( (wxObject*) NULL ); m_clientObjectList.Append( (wxObject*) NULL ); - + GtkWidget *item = gtk_menu_item_new_with_label( choices[i] ); gtk_menu_append( GTK_MENU(menu), item ); - + gtk_widget_realize( item ); gtk_widget_realize( GTK_BIN(item)->child ); - + gtk_widget_show( item ); - - gtk_signal_connect( GTK_OBJECT( item ), "activate", + + gtk_signal_connect( GTK_OBJECT( item ), "activate", GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this ); } gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu ); - + m_parent->AddChild( this ); (m_parent->m_insertCallback)( m_parent, this ); - + PostCreation(); - + SetBackgroundColour( parent->GetBackgroundColour() ); SetForegroundColour( parent->GetForegroundColour() ); SetFont( parent->GetFont() ); Show( TRUE ); - + return TRUE; } - + wxChoice::~wxChoice() { Clear(); @@ -111,20 +115,20 @@ wxChoice::~wxChoice() void wxChoice::AppendCommon( const wxString &item ) { wxCHECK_RET( m_widget != NULL, "invalid choice" ); - + GtkWidget *menu = gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ); GtkWidget *menu_item = gtk_menu_item_new_with_label( item ); - + gtk_menu_append( GTK_MENU(menu), menu_item ); - + gtk_widget_realize( menu_item ); gtk_widget_realize( GTK_BIN(menu_item)->child ); - + if (m_widgetStyle) ApplyWidgetStyle(); - - gtk_signal_connect( GTK_OBJECT( menu_item ), "activate", + + gtk_signal_connect( GTK_OBJECT( menu_item ), "activate", GTK_SIGNAL_FUNC(gtk_choice_clicked_callback), (gpointer*)this ); - + gtk_widget_show( menu_item ); } @@ -132,7 +136,7 @@ void wxChoice::Append( const wxString &item ) { m_clientDataList.Append( (wxObject*) NULL ); m_clientObjectList.Append( (wxObject*) NULL ); - + AppendCommon( item ); } @@ -140,7 +144,7 @@ void wxChoice::Append( const wxString &item, void *clientData ) { m_clientDataList.Append( (wxObject*) clientData ); m_clientObjectList.Append( (wxObject*) NULL ); - + AppendCommon( item ); } @@ -148,53 +152,53 @@ void wxChoice::Append( const wxString &item, wxClientData *clientData ) { m_clientObjectList.Append( (wxObject*) clientData ); m_clientDataList.Append( (wxObject*) NULL ); - + AppendCommon( item ); } void wxChoice::SetClientData( int n, void* clientData ) { wxCHECK_RET( m_widget != NULL, "invalid combobox" ); - + wxNode *node = m_clientDataList.Nth( n ); if (!node) return; - + node->SetData( (wxObject*) clientData ); } void* wxChoice::GetClientData( int n ) { wxCHECK_MSG( m_widget != NULL, NULL, "invalid combobox" ); - + wxNode *node = m_clientDataList.Nth( n ); if (!node) return NULL; - + return node->Data(); } void wxChoice::SetClientObject( int n, wxClientData* clientData ) { wxCHECK_RET( m_widget != NULL, "invalid combobox" ); - + wxNode *node = m_clientObjectList.Nth( n ); if (!node) return; - + wxClientData *cd = (wxClientData*) node->Data(); if (cd) delete cd; - + node->SetData( (wxObject*) clientData ); } wxClientData* wxChoice::GetClientObject( int n ) { wxCHECK_MSG( m_widget != NULL, (wxClientData*) NULL, "invalid combobox" ); - + wxNode *node = m_clientObjectList.Nth( n ); if (!node) return (wxClientData*) NULL; - + return (wxClientData*) node->Data(); } - + void wxChoice::Clear() { wxCHECK_RET( m_widget != NULL, "invalid choice" ); @@ -202,7 +206,7 @@ void wxChoice::Clear() gtk_option_menu_remove_menu( GTK_OPTION_MENU(m_widget) ); GtkWidget *menu = gtk_menu_new(); gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu ); - + wxNode *node = m_clientObjectList.First(); while (node) { @@ -211,7 +215,7 @@ void wxChoice::Clear() node = node->Next(); } m_clientObjectList.Clear(); - + m_clientDataList.Clear(); } @@ -226,7 +230,7 @@ int wxChoice::FindString( const wxString &string ) const // If you read this code once and you think you understand // it, then you are very wrong. Robert Roebling. - + GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) ); int count = 0; GList *child = menu_shell->children; @@ -236,16 +240,16 @@ int wxChoice::FindString( const wxString &string ) const GtkLabel *label = (GtkLabel *) NULL; if (bin->child) label = GTK_LABEL(bin->child); if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child ); - + wxASSERT_MSG( label != NULL , "wxChoice: invalid label" ); - - if (string == label->label) return count; + + if (string == label->label) + return count; + child = child->next; count++; } - - wxFAIL_MSG( "wxChoice: string not found" ); - + return -1; } @@ -268,9 +272,9 @@ int wxChoice::GetSelection() child = child->next; count++; } - + wxFAIL_MSG( "wxChoice: no selection" ); - + return -1; } @@ -289,17 +293,17 @@ wxString wxChoice::GetString( int n ) const GtkLabel *label = (GtkLabel *) NULL; if (bin->child) label = GTK_LABEL(bin->child); if (!label) label = GTK_LABEL( GTK_BUTTON(m_widget)->child ); - + wxASSERT_MSG( label != NULL , "wxChoice: invalid label" ); - + return label->label; } child = child->next; count++; } - - wxFAIL_MSG( "wxChoice: string not found" ); - + + wxFAIL_MSG( "wxChoice: invalid index in GetString()" ); + return ""; } @@ -308,9 +312,9 @@ wxString wxChoice::GetStringSelection() const wxCHECK_MSG( m_widget != NULL, "", "invalid choice" ); GtkLabel *label = GTK_LABEL( GTK_BUTTON(m_widget)->child ); - + wxASSERT_MSG( label != NULL , "wxChoice: invalid label" ); - + return label->label; } @@ -339,7 +343,7 @@ void wxChoice::SetSelection( int n ) int tmp = n; gtk_option_menu_set_history( GTK_OPTION_MENU(m_widget), (gint)tmp ); - + gtk_choice_clicked_callback( (GtkWidget *) NULL, this ); } @@ -354,24 +358,24 @@ void wxChoice::SetStringSelection( const wxString &string ) void wxChoice::ApplyWidgetStyle() { SetWidgetStyle(); - + GtkMenuShell *menu_shell = GTK_MENU_SHELL( gtk_option_menu_get_menu( GTK_OPTION_MENU(m_widget) ) ); - + gtk_widget_set_style( m_widget, m_widgetStyle ); gtk_widget_set_style( GTK_WIDGET( menu_shell ), m_widgetStyle ); - + GList *child = menu_shell->children; while (child) { gtk_widget_set_style( GTK_WIDGET( child->data ), m_widgetStyle ); - + GtkBin *bin = GTK_BIN( child->data ); GtkWidget *label = (GtkWidget *) NULL; if (bin->child) label = bin->child; if (!label) label = GTK_BUTTON(m_widget)->child; - + gtk_widget_set_style( label, m_widgetStyle ); - + child = child->next; } } diff --git a/src/gtk1/combobox.cpp b/src/gtk1/combobox.cpp index 5ab1cd7b75..d8b6178e1c 100644 --- a/src/gtk1/combobox.cpp +++ b/src/gtk1/combobox.cpp @@ -11,7 +11,6 @@ #pragma implementation "combobox.h" #endif - #include "wx/combobox.h" #include @@ -48,11 +47,9 @@ gtk_combo_clicked_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo ) wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, combo->GetId() ); event.SetInt( combo->GetSelection() ); - event.SetString( copystring(combo->GetStringSelection()) ); + event.SetString( combo->GetStringSelection() ); event.SetEventObject( combo ); combo->GetEventHandler()->ProcessEvent( event ); - - delete [] event.GetString(); } //----------------------------------------------------------------------------- @@ -63,11 +60,9 @@ static void gtk_text_changed_callback( GtkWidget *WXUNUSED(widget), wxComboBox *combo ) { wxCommandEvent event( wxEVT_COMMAND_TEXT_UPDATED, combo->GetId() ); - event.SetString( copystring(combo->GetValue()) ); + event.SetString( combo->GetValue() ); event.SetEventObject( combo ); combo->GetEventHandler()->ProcessEvent( event ); - - delete [] event.GetString(); } //----------------------------------------------------------------------------- @@ -542,7 +537,7 @@ void wxComboBox::OnChar( wxKeyEvent &event ) // all! wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, GetId() ); event.SetInt( 0 ); - event.SetString( (char *)value.c_str() ); + event.SetString( value ); event.SetEventObject( this ); GetEventHandler()->ProcessEvent( event ); } @@ -556,7 +551,7 @@ void wxComboBox::OnChar( wxKeyEvent &event ) // and generate the selected event for it wxCommandEvent event( wxEVT_COMMAND_COMBOBOX_SELECTED, GetId() ); event.SetInt( Number() - 1 ); - event.SetString( (char *)value.c_str() ); + event.SetString( value ); event.SetEventObject( this ); GetEventHandler()->ProcessEvent( event ); } diff --git a/src/gtk1/radiobox.cpp b/src/gtk1/radiobox.cpp index f17e532c56..c0d0f9202d 100644 --- a/src/gtk1/radiobox.cpp +++ b/src/gtk1/radiobox.cpp @@ -4,7 +4,7 @@ // Author: Robert Roebling // Id: $Id$ // Copyright: (c) 1998 Robert Roebling -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -33,7 +33,7 @@ static void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRad { if (!rb->HasVMT()) return; if (g_blockEventsOnDrag) return; - + if (rb->m_alreadySent) { rb->m_alreadySent = FALSE; @@ -41,11 +41,10 @@ static void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRad } rb->m_alreadySent = TRUE; - + wxCommandEvent event( wxEVT_COMMAND_RADIOBOX_SELECTED, rb->GetId() ); event.SetInt( rb->GetSelection() ); - wxString tmp( rb->GetStringSelection() ); - event.SetString( WXSTRINGCAST(tmp) ); + event.SetString( rb->GetStringSelection() ); event.SetEventObject( rb ); rb->GetEventHandler()->ProcessEvent(event); } @@ -66,65 +65,65 @@ wxRadioBox::wxRadioBox(void) bool wxRadioBox::Create( wxWindow *parent, wxWindowID id, const wxString& title, const wxPoint &pos, const wxSize &size, - int n, const wxString choices[], int majorDim, - long style, const wxValidator& validator, - const wxString &name ) + int n, const wxString choices[], int majorDim, + long style, const wxValidator& validator, + const wxString &name ) { m_alreadySent = FALSE; m_needParent = TRUE; m_acceptsFocus = TRUE; - + PreCreation( parent, id, pos, size, style, name ); SetValidator( validator ); m_widget = gtk_frame_new( title ); - + m_majorDim = majorDim; - + GtkRadioButton *m_radio = (GtkRadioButton*) NULL; - + GSList *radio_button_group = (GSList *) NULL; for (int i = 0; i < n; i++) { if (i) radio_button_group = gtk_radio_button_group( GTK_RADIO_BUTTON(m_radio) ); - + m_radio = GTK_RADIO_BUTTON( gtk_radio_button_new_with_label( radio_button_group, choices[i] ) ); - + m_boxes.Append( (wxObject*) m_radio ); - + ConnectWidget( GTK_WIDGET(m_radio) ); - + if (!i) gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_radio), TRUE ); - - gtk_signal_connect( GTK_OBJECT(m_radio), "clicked", + + gtk_signal_connect( GTK_OBJECT(m_radio), "clicked", GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this ); - + gtk_myfixed_put( GTK_MYFIXED(m_parent->m_wxwindow), GTK_WIDGET(m_radio), m_x+10, m_y+10+(i*24) ); - + } - + wxSize ls = LayoutItems(); - + wxSize newSize = size; if (newSize.x == -1) newSize.x = ls.x; if (newSize.y == -1) newSize.y = ls.y; SetSize( newSize.x, newSize.y ); - + m_parent->AddChild( this ); (m_parent->m_insertCallback)( m_parent, this ); - + PostCreation(); - + SetLabel( title ); - + SetBackgroundColour( parent->GetBackgroundColour() ); SetForegroundColour( parent->GetForegroundColour() ); SetFont( parent->GetFont() ); Show( TRUE ); - + return TRUE; } @@ -142,7 +141,7 @@ wxRadioBox::~wxRadioBox(void) void wxRadioBox::OnSize( wxSizeEvent &event ) { wxControl::OnSize( event ); - + LayoutItems(); } @@ -150,55 +149,55 @@ wxSize wxRadioBox::LayoutItems() { int x = 7; int y = 15; - + int num_per_major = (m_boxes.GetCount() - 1) / m_majorDim +1; - + wxSize res( 0, 0 ); - + if (m_windowStyle & wxRA_HORIZONTAL) { - + for (int j = 0; j < m_majorDim; j++) - { + { y = 15; - + int max_len = 0; wxNode *node = m_boxes.Nth( j*num_per_major ); - for (int i1 = 0; i1< num_per_major; i1++) - { + for (int i1 = 0; i1< num_per_major; i1++) + { GtkWidget *button = GTK_WIDGET( node->Data() ); GtkLabel *label = GTK_LABEL( GTK_BUTTON(button)->child ); GdkFont *font = m_widget->style->font; int len = 22+gdk_string_measure( font, label->label ); if (len > max_len) max_len = len; - + gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), button, m_x+x, m_y+y ); y += 20; - - node = node->Next(); - if (!node) break; - } - - // we don't know the max_len before - + + node = node->Next(); + if (!node) break; + } + + // we don't know the max_len before + node = m_boxes.Nth( j*num_per_major ); - for (int i2 = 0; i2< num_per_major; i2++) - { + for (int i2 = 0; i2< num_per_major; i2++) + { GtkWidget *button = GTK_WIDGET( node->Data() ); - - gtk_widget_set_usize( button, max_len, 20 ); - - node = node->Next(); - if (!node) break; - } - - if (y > res.y) res.y = y; - - x += max_len + 2; + + gtk_widget_set_usize( button, max_len, 20 ); + + node = node->Next(); + if (!node) break; + } + + if (y > res.y) res.y = y; + + x += max_len + 2; } - - res.x = x+4; - res.y += 9; + + res.x = x+4; + res.y += 9; } else { @@ -209,45 +208,45 @@ wxSize wxRadioBox::LayoutItems() { GtkButton *button = GTK_BUTTON( node->Data() ); GtkLabel *label = GTK_LABEL( button->child ); - + GdkFont *font = m_widget->style->font; int len = 22+gdk_string_measure( font, label->label ); if (len > max) max = len; - + node = node->Next(); } - + node = m_boxes.First(); while (node) { GtkWidget *button = GTK_WIDGET( node->Data() ); - + gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), button, m_x+x, m_y+y ); x += max; gtk_widget_set_usize( button, max, 20 ); - + node = node->Next(); } - res.x = x+4; - res.y = 42; + res.x = x+4; + res.y = 42; } - + return res; } bool wxRadioBox::Show( bool show ) { wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobox" ); - + wxWindow::Show( show ); wxNode *node = m_boxes.First(); while (node) { GtkWidget *button = GTK_WIDGET( node->Data() ); - + if (show) gtk_widget_show( button ); else gtk_widget_hide( button ); - + node = node->Next(); } @@ -257,64 +256,64 @@ bool wxRadioBox::Show( bool show ) int wxRadioBox::FindString( const wxString &s ) const { wxCHECK_MSG( m_widget != NULL, -1, "invalid radiobox" ); - + int count = 0; - + wxNode *node = m_boxes.First(); while (node) { GtkButton *button = GTK_BUTTON( node->Data() ); - + GtkLabel *label = GTK_LABEL( button->child ); if (s == label->label) return count; count++; - + node = node->Next(); } - + return -1; } void wxRadioBox::SetFocus() { wxCHECK_RET( m_widget != NULL, "invalid radiobox" ); - + if (m_boxes.GetCount() == 0) return; - + wxNode *node = m_boxes.First(); while (node) { GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->Data() ); if (button->active) - { + { gtk_widget_grab_focus( GTK_WIDGET(button) ); - - return; - } + + return; + } node = node->Next(); } - + } void wxRadioBox::SetSelection( int n ) { wxCHECK_RET( m_widget != NULL, "invalid radiobox" ); - + wxNode *node = m_boxes.Nth( n ); - + wxCHECK_RET( node, "radiobox wrong index" ); - + GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->Data() ); - + gtk_toggle_button_set_state( button, 1 ); } int wxRadioBox::GetSelection(void) const { wxCHECK_MSG( m_widget != NULL, -1, "invalid radiobox" ); - + int count = 0; - + wxNode *node = m_boxes.First(); while (node) { @@ -323,53 +322,53 @@ int wxRadioBox::GetSelection(void) const count++; node = node->Next(); } - + wxFAIL_MSG( "wxRadioBox none selected" ); - + return -1; } wxString wxRadioBox::GetString( int n ) const { wxCHECK_MSG( m_widget != NULL, "", "invalid radiobox" ); - + wxNode *node = m_boxes.Nth( n ); - + wxCHECK_MSG( node, "", "radiobox wrong index" ); - + GtkButton *button = GTK_BUTTON( node->Data() ); GtkLabel *label = GTK_LABEL( button->child ); - + return wxString( label->label ); } wxString wxRadioBox::GetLabel( int item ) const { wxCHECK_MSG( m_widget != NULL, "", "invalid radiobox" ); - + return GetString( item ); } void wxRadioBox::SetLabel( const wxString& label ) { wxCHECK_RET( m_widget != NULL, "invalid radiobox" ); - + wxControl::SetLabel( label ); - + gtk_frame_set_label( GTK_FRAME(m_widget), wxControl::GetLabel() ); } void wxRadioBox::SetLabel( int item, const wxString& label ) { wxCHECK_RET( m_widget != NULL, "invalid radiobox" ); - + wxNode *node = m_boxes.Nth( item ); - + wxCHECK_RET( node, "radiobox wrong index" ); - + GtkButton *button = GTK_BUTTON( node->Data() ); GtkLabel *g_label = GTK_LABEL( button->child ); - + gtk_label_set( g_label, label ); } @@ -381,7 +380,7 @@ void wxRadioBox::SetLabel( int WXUNUSED(item), wxBitmap *WXUNUSED(bitmap) ) void wxRadioBox::Enable( bool enable ) { wxControl::Enable( enable ); - + wxNode *node = m_boxes.First(); while (node) { @@ -396,11 +395,11 @@ void wxRadioBox::Enable( bool enable ) void wxRadioBox::Enable( int item, bool enable ) { wxCHECK_RET( m_widget != NULL, "invalid radiobox" ); - + wxNode *node = m_boxes.Nth( item ); - + wxCHECK_RET( node, "radiobox wrong index" ); - + GtkButton *button = GTK_BUTTON( node->Data() ); GtkWidget *label = button->child; gtk_widget_set_sensitive( GTK_WIDGET(button), enable ); @@ -410,11 +409,11 @@ void wxRadioBox::Enable( int item, bool enable ) void wxRadioBox::Show( int item, bool show ) { wxCHECK_RET( m_widget != NULL, "invalid radiobox" ); - + wxNode *node = m_boxes.Nth( item ); - + wxCHECK_RET( node, "radiobox wrong index" ); - + GtkWidget *button = GTK_WIDGET( node->Data() ); if (show) @@ -426,7 +425,7 @@ void wxRadioBox::Show( int item, bool show ) wxString wxRadioBox::GetStringSelection(void) const { wxCHECK_MSG( m_widget != NULL, "", "invalid radiobox" ); - + wxNode *node = m_boxes.First(); while (node) { @@ -438,19 +437,19 @@ wxString wxRadioBox::GetStringSelection(void) const } node = node->Next(); } - + wxFAIL_MSG( "wxRadioBox none selected" ); return ""; } bool wxRadioBox::SetStringSelection( const wxString &s ) { - wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobox" ); - + wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobox" ); + int res = FindString( s ); if (res == -1) return FALSE; SetSelection( res ); - + return TRUE; } @@ -472,18 +471,18 @@ void wxRadioBox::SetNumberOfRowsOrCols( int WXUNUSED(n) ) void wxRadioBox::ApplyWidgetStyle() { SetWidgetStyle(); - + gtk_widget_set_style( m_widget, m_widgetStyle ); - + wxNode *node = m_boxes.First(); while (node) { GtkWidget *widget = GTK_WIDGET( node->Data() ); gtk_widget_set_style( widget, m_widgetStyle ); - + GtkButton *button = GTK_BUTTON( node->Data() ); gtk_widget_set_style( button->child, m_widgetStyle ); - + node = node->Next(); } } @@ -491,16 +490,16 @@ void wxRadioBox::ApplyWidgetStyle() bool wxRadioBox::IsOwnGtkWindow( GdkWindow *window ) { if (window == m_widget->window) return TRUE; - + wxNode *node = m_boxes.First(); while (node) { GtkWidget *button = GTK_WIDGET( node->Data() ); - + if (window == button->window) return TRUE; - + node = node->Next(); } - + return FALSE; } diff --git a/src/motif/listbox.cpp b/src/motif/listbox.cpp index 1bead5e8e5..dab3cd4846 100644 --- a/src/motif/listbox.cpp +++ b/src/motif/listbox.cpp @@ -10,7 +10,7 @@ /////////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ -#pragma implementation "listbox.h" + #pragma implementation "listbox.h" #endif #include "wx/listbox.h" @@ -23,20 +23,23 @@ #include "wx/motif/private.h" #if !USE_SHARED_LIBRARY -IMPLEMENT_DYNAMIC_CLASS(wxListBox, wxControl) + IMPLEMENT_DYNAMIC_CLASS(wxListBox, wxControl) #endif -void wxListBoxCallback (Widget w, XtPointer clientData, - XmListCallbackStruct * cbs); +static void wxListBoxCallback(Widget w, + XtPointer clientData, + XmListCallbackStruct * cbs); -void wxListBoxDefaultActionProc (Widget list_w, XtPointer client_data, XmListCallbackStruct * cbs); +static void wxListBoxDefaultActionProc(Widget list_w, + XtPointer client_data, + XmListCallbackStruct * cbs); // ============================================================================ // list box control implementation // ============================================================================ // Listbox item -wxListBox::wxListBox(): m_clientDataList(wxKEY_INTEGER) +wxListBox::wxListBox() : m_clientDataList(wxKEY_INTEGER) { m_noItems = 0; m_selected = 0; @@ -56,16 +59,16 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, // m_backgroundColour = parent->GetBackgroundColour(); m_backgroundColour = * wxWHITE; m_foregroundColour = parent->GetForegroundColour(); - + SetName(name); SetValidator(validator); - + if (parent) parent->AddChild(this); - + m_windowId = ( id == -1 ) ? (int)NewControlId() : id; - + Widget parentWidget = (Widget) parent->GetClientWidget(); - + Arg args[3]; int count; XtSetArg (args[0], XmNlistSizePolicy, XmCONSTANT); @@ -82,40 +85,40 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, } else count = 2; - + Widget listWidget = XmCreateScrolledList (parentWidget, (char*) (const char*) name, args, count); - + m_mainWidget = (WXWidget) listWidget; - + Set(n, choices); - + XtManageChild (listWidget); - + long width = size.x; long height = size.y; if (width == -1) width = 150; if (height == -1) height = 80; - + XtAddCallback (listWidget, XmNbrowseSelectionCallback, (XtCallbackProc) wxListBoxCallback, (XtPointer) this); XtAddCallback (listWidget, XmNextendedSelectionCallback, (XtCallbackProc) wxListBoxCallback, (XtPointer) this); XtAddCallback (listWidget, XmNmultipleSelectionCallback, (XtCallbackProc) wxListBoxCallback, (XtPointer) this); - + XtAddCallback (listWidget, XmNdefaultActionCallback, (XtCallbackProc) wxListBoxDefaultActionProc, (XtPointer) this); - + m_windowFont = parent->GetFont(); ChangeFont(FALSE); - + SetCanAddEventHandler(TRUE); AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, width, height); - + ChangeBackgroundColour(); - + return TRUE; } @@ -126,13 +129,13 @@ wxListBox::~wxListBox() void wxListBox::SetFirstItem(int N) { int count, length; - + if (N < 0) return; XtVaGetValues ((Widget) m_mainWidget, - XmNvisibleItemCount, &count, - XmNitemCount, &length, - NULL); + XmNvisibleItemCount, &count, + XmNitemCount, &length, + NULL); if ((N + count) >= length) N = length - count; XmListSetPos ((Widget) m_mainWidget, N + 1); @@ -141,7 +144,7 @@ void wxListBox::SetFirstItem(int N) void wxListBox::SetFirstItem(const wxString& s) { int N = FindString (s); - + if (N >= 0) SetFirstItem (N); } @@ -152,32 +155,33 @@ void wxListBox::Delete(int N) int width2, height2; Widget listBox = (Widget) m_mainWidget; GetSize (&width1, &height1); - + bool managed = XtIsManaged(listBox); - + if (managed) XtUnmanageChild (listBox); - + XmListDeletePos (listBox, N + 1); - + if (managed) XtManageChild (listBox); - + GetSize (&width2, &height2); // Correct for randomly resized listbox - bad boy, Motif! if (width1 != width2 || height1 != height2) SetSize (-1, -1, width1, height1); - + // (JDH) need to add code here to take care of clientDataList wxNode *node = m_clientDataList.Find((long)N); // get item from list if (node) m_clientDataList.DeleteNode(node); // if existed then delete from list node = m_clientDataList.First(); // we now have to adjust all keys that while (node) // are >=N+1 - { if (node->GetKeyInteger() >= (long)(N+1)) - node->SetKeyInteger(node->GetKeyInteger() - 1); - node = node->Next(); + { + if (node->GetKeyInteger() >= (long)(N+1)) + node->SetKeyInteger(node->GetKeyInteger() - 1); + node = node->Next(); } - + m_noItems --; } @@ -185,12 +189,12 @@ void wxListBox::Append(const wxString& item) { int width1, height1; int width2, height2; - + Widget listBox = (Widget) m_mainWidget; GetSize (&width1, &height1); - + bool managed = XtIsManaged(listBox); - + if (managed) XtUnmanageChild (listBox); int n; @@ -199,7 +203,7 @@ void wxListBox::Append(const wxString& item) // XmListAddItem(listBox, text, n + 1); XmListAddItemUnselected (listBox, text, 0); XmStringFree (text); - + // It seems that if the list is cleared, we must re-ask for // selection policy!! Arg args[3]; @@ -211,10 +215,10 @@ void wxListBox::Append(const wxString& item) else XtSetArg (args[1], XmNselectionPolicy, XmBROWSE_SELECT); XtSetValues (listBox, args, 2); - + if (managed) XtManageChild (listBox); - + GetSize (&width2, &height2); // Correct for randomly resized listbox - bad boy, Motif! if (width1 != width2 || height1 != height2) @@ -226,22 +230,22 @@ void wxListBox::Append(const wxString& item, char *clientData) { int width1, height1; int width2, height2; - + Widget listBox = (Widget) m_mainWidget; - + GetSize (&width1, &height1); Bool managed = XtIsManaged(listBox); - + if (managed) XtUnmanageChild (listBox); - + int n; XtVaGetValues (listBox, XmNitemCount, &n, NULL); XmString text = XmStringCreateSimple ((char*) (const char*) item); // XmListAddItem(listBox, text, n + 1); XmListAddItemUnselected (listBox, text, 0); XmStringFree (text); - + // It seems that if the list is cleared, we must re-ask for // selection policy!! Arg args[3]; @@ -253,18 +257,18 @@ void wxListBox::Append(const wxString& item, char *clientData) else XtSetArg (args[1], XmNselectionPolicy, XmBROWSE_SELECT); XtSetValues (listBox, args, 2); - + m_clientDataList.Append ((long) n, (wxObject *) clientData); - + if (managed) XtManageChild (listBox); - + GetSize (&width2, &height2); - + // Correct for randomly resized listbox - bad boy, Motif! if (width1 != width2 || height1 != height2) SetSize (-1, -1, width1, height1); - + m_noItems ++; } @@ -273,12 +277,12 @@ void wxListBox::Set(int n, const wxString *choices, char** clientData) m_clientDataList.Clear(); int width1, height1; int width2, height2; - + Widget listBox = (Widget) m_mainWidget; GetSize (&width1, &height1); - + bool managed = XtIsManaged(listBox); - + if (managed) XtUnmanageChild (listBox); /*** @@ -293,16 +297,16 @@ void wxListBox::Set(int n, const wxString *choices, char** clientData) int i; for (i = 0; i < n; i++) text[i] = XmStringCreateSimple ((char*) (const char*) choices[i]); - + if ( clientData ) for (i = 0; i < n; i++) m_clientDataList.Append ((long) i, (wxObject *) clientData[i]); - + XmListAddItems (listBox, text, n, 0); for (i = 0; i < n; i++) XmStringFree (text[i]); delete[]text; - + // It seems that if the list is cleared, we must re-ask for // selection policy!! Arg args[3]; @@ -314,15 +318,15 @@ void wxListBox::Set(int n, const wxString *choices, char** clientData) else XtSetArg (args[1], XmNselectionPolicy, XmBROWSE_SELECT); XtSetValues (listBox, args, 2); - + if (managed) XtManageChild (listBox); - + GetSize (&width2, &height2); // Correct for randomly resized listbox - bad boy, Motif! if (width1 != width2 || height1 != height2) SetSize (-1, -1, width1, height1); - + m_noItems = n; } @@ -348,21 +352,21 @@ void wxListBox::Clear() { if (m_noItems <= 0) return; - + int width1, height1; int width2, height2; - + Widget listBox = (Widget) m_mainWidget; GetSize (&width1, &height1); - + XmListDeleteAllItems (listBox); m_clientDataList.Clear (); GetSize (&width2, &height2); - + // Correct for randomly resized listbox - bad boy, Motif! if (width1 != width2 || height1 != height2) SetSize (-1, -1, width1, height1); - + m_noItems = 0; } @@ -371,33 +375,33 @@ void wxListBox::SetSelection(int N, bool select) m_inSetValue = TRUE; if (select) { - /* - if (m_windowStyle & wxLB_MULTIPLE) - { - int *selections = NULL; - int n = GetSelections (&selections); - - // This hack is supposed to work, to make it possible to select more - // than one item, but it DOESN'T under Motif 1.1. - - XtVaSetValues ((Widget) m_mainWidget, XmNselectionPolicy, XmMULTIPLE_SELECT, NULL); - - int i; - for (i = 0; i < n; i++) - XmListSelectPos ((Widget) m_mainWidget, selections[i] + 1, FALSE); - +#if 0 + if (m_windowStyle & wxLB_MULTIPLE) + { + int *selections = NULL; + int n = GetSelections (&selections); + + // This hack is supposed to work, to make it possible to select more + // than one item, but it DOESN'T under Motif 1.1. + + XtVaSetValues ((Widget) m_mainWidget, XmNselectionPolicy, XmMULTIPLE_SELECT, NULL); + + int i; + for (i = 0; i < n; i++) + XmListSelectPos ((Widget) m_mainWidget, selections[i] + 1, FALSE); + + XmListSelectPos ((Widget) m_mainWidget, N + 1, FALSE); + + XtVaSetValues ((Widget) m_mainWidget, XmNselectionPolicy, XmEXTENDED_SELECT, NULL); + } + else +#endif // 0 XmListSelectPos ((Widget) m_mainWidget, N + 1, FALSE); - - XtVaSetValues ((Widget) m_mainWidget, XmNselectionPolicy, XmEXTENDED_SELECT, NULL); - } - else - */ - XmListSelectPos ((Widget) m_mainWidget, N + 1, FALSE); - + } else XmListDeselectPos ((Widget) m_mainWidget, N + 1); - + m_inSetValue = FALSE; } @@ -445,7 +449,7 @@ void wxListBox::SetClientData(int N, char *Client_data) int wxListBox::GetSelections(wxArrayInt& aSelections) const { aSelections.Empty(); - + Widget listBox = (Widget) m_mainWidget; int *posList = NULL; int posCnt = 0; @@ -455,11 +459,11 @@ int wxListBox::GetSelections(wxArrayInt& aSelections) const if (posCnt > 0) { aSelections.Alloc(posCnt); - + int i; for (i = 0; i < posCnt; i++) aSelections.Add(posList[i] - 1); - + XtFree ((char *) posList); return posCnt; } @@ -515,11 +519,11 @@ wxString wxListBox::GetString(int N) const void wxListBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) { wxWindow::DoSetSize(x, y, width, height, sizeFlags); - + // Check resulting size is correct int tempW, tempH; GetSize (&tempW, &tempH); - + /* if (tempW != width || tempH != height) { @@ -532,16 +536,16 @@ void wxListBox::InsertItems(int nItems, const wxString items[], int pos) { int width1, height1; int width2, height2; - + Widget listBox = (Widget) m_mainWidget; - + GetSize(&width1, &height1); - + bool managed = XtIsManaged(listBox); - + if (managed) XtUnmanageChild(listBox); - + XmString *text = new XmString[nItems]; int i; // Steve Hammes: Motif 1.1 compatibility @@ -561,9 +565,9 @@ void wxListBox::InsertItems(int nItems, const wxString items[], int pos) #endif for (i = 0; i < nItems; i++) XmStringFree(text[i]); - + delete[] text; - + // It seems that if the list is cleared, we must re-ask for // selection policy!! Arg args[3]; @@ -574,15 +578,15 @@ void wxListBox::InsertItems(int nItems, const wxString items[], int pos) XtSetArg(args[1], XmNselectionPolicy, XmEXTENDED_SELECT); else XtSetArg(args[1], XmNselectionPolicy, XmBROWSE_SELECT); XtSetValues(listBox,args,2) ; - + if (managed) XtManageChild(listBox); - + GetSize(&width2, &height2); // Correct for randomly resized listbox - bad boy, Motif! if (width1 != width2 /*|| height1 != height2*/) SetSize(-1, -1, width1, height1); - + m_noItems += nItems; } @@ -590,34 +594,19 @@ void wxListBox::SetString(int N, const wxString& s) { int width1, height1; int width2, height2; - + Widget listBox = (Widget) m_mainWidget; GetSize (&width1, &height1); - + XmString text = XmStringCreateSimple ((char*) (const char*) s); - - // WHAT'S THE MOTIF CALL TO SET THE TEXT OF AN EXISTING - // ITEM??? - // There isn't one, so delete the item and add it again. + + // delete the item and add it again. + // FIXME isn't there a way to change it in place? XmListDeletePos (listBox, N+1); XmListAddItem (listBox, text, N+1); - + XmStringFree(text); - - /* - // It seems that if the list is cleared, we must re-ask for - // selection policy!! - Arg args[3]; - XtSetArg (args[0], XmNlistSizePolicy, XmCONSTANT); - if (m_windowStyle & wxLB_MULTIPLE) - XtSetArg (args[1], XmNselectionPolicy, XmMULTIPLE_SELECT); - else if (m_windowStyle & wxLB_EXTENDED) - XtSetArg (args[1], XmNselectionPolicy, XmEXTENDED_SELECT); - else - XtSetArg (args[1], XmNselectionPolicy, XmBROWSE_SELECT); - XtSetValues (listBox, args, 2); - */ - + GetSize (&width2, &height2); // Correct for randomly resized listbox - bad boy, Motif! if (width1 != width2 || height1 != height2) @@ -632,11 +621,12 @@ int wxListBox::Number () const // For single selection items only wxString wxListBox::GetStringSelection () const { - int sel = GetSelection (); + wxString res; + int sel = GetSelection(); if (sel > -1) - return this->GetString (sel); - else - return wxString(""); + res = GetString(sel); + + return res; } bool wxListBox::SetStringSelection (const wxString& s, bool flag) @@ -666,7 +656,7 @@ void wxListBox::Command (wxCommandEvent & event) void wxListBoxCallback (Widget w, XtPointer clientData, XmListCallbackStruct * cbs) { -/* + /* if (cbs->reason == XmCR_EXTENDED_SELECT) cout << "*** Extend select\n"; else if (cbs->reason == XmCR_SINGLE_SELECT) @@ -683,12 +673,12 @@ void wxListBoxCallback (Widget w, XtPointer clientData, else if (cbs->selection_type == XmADDITION) cout << "*** Addition\n"; */ - + wxListBox *item = (wxListBox *) clientData; - + if (item->InSetValue()) return; - + wxCommandEvent event (wxEVT_COMMAND_LISTBOX_SELECTED, item->GetId()); switch (cbs->reason) { @@ -696,12 +686,10 @@ void wxListBoxCallback (Widget w, XtPointer clientData, case XmCR_BROWSE_SELECT: { event.m_clientData = item->GetClientData (cbs->item_position - 1); - //event.commandString = item->GetStringSelection(); event.m_commandInt = cbs->item_position - 1; event.m_extraLong = TRUE; event.SetEventObject(item); item->ProcessCommand (event); - //delete[] event.commandString; // Let's not store the command string any more break; } case XmCR_EXTENDED_SELECT: @@ -732,7 +720,7 @@ void wxListBoxCallback (Widget w, XtPointer clientData, void wxListBoxDefaultActionProc (Widget list_w, XtPointer client_data, XmListCallbackStruct * cbs) { wxListBox *lbox = (wxListBox *) client_data; - + wxCommandEvent event(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, lbox->GetId()); event.SetEventObject( lbox ); lbox->GetEventHandler()->ProcessEvent(event) ; @@ -751,15 +739,15 @@ void wxListBox::ChangeFont(bool keepOriginalSize) void wxListBox::ChangeBackgroundColour() { wxWindow::ChangeBackgroundColour(); - + Widget parent = XtParent ((Widget) m_mainWidget); Widget hsb, vsb; - + XtVaGetValues (parent, XmNhorizontalScrollBar, &hsb, XmNverticalScrollBar, &vsb, NULL); - + /* TODO: should scrollbars be affected? Should probably have separate * function to change them (by default, taken from wxSystemSettings) */ @@ -773,23 +761,25 @@ void wxListBox::ChangeBackgroundColour() XtVaSetValues (vsb, XmNtroughColor, backgroundColour.AllocColour(XtDisplay(vsb)), NULL); - + DoChangeBackgroundColour((WXWidget) parent, m_backgroundColour, TRUE); } void wxListBox::ChangeForegroundColour() { wxWindow::ChangeForegroundColour(); - + Widget parent = XtParent ((Widget) m_mainWidget); Widget hsb, vsb; - - XtVaGetValues (parent, - XmNhorizontalScrollBar, &hsb, - XmNverticalScrollBar, &vsb, - NULL); - /* TODO: should scrollbars be affected? Should probably have separate - * function to change them (by default, taken from wxSystemSettings) + + XtVaGetValues(parent, + XmNhorizontalScrollBar, &hsb, + XmNverticalScrollBar, &vsb, + NULL); + + /* TODO: should scrollbars be affected? Should probably have separate + function to change them (by default, taken from wxSystemSettings) + DoChangeForegroundColour((WXWidget) hsb, m_foregroundColour); DoChangeForegroundColour((WXWidget) vsb, m_foregroundColour); DoChangeForegroundColour((WXWidget) parent, m_foregroundColour); diff --git a/src/msw/choice.cpp b/src/msw/choice.cpp index a901873db3..5074a31255 100644 --- a/src/msw/choice.cpp +++ b/src/msw/choice.cpp @@ -38,12 +38,13 @@ bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId); event.SetInt(GetSelection()); event.SetEventObject(this); - event.SetString(copystring(GetStringSelection())); + event.SetString(GetStringSelection()); ProcessCommand(event); - delete[] event.GetString(); + return TRUE; } - else return FALSE; + else + return FALSE; } bool wxChoice::Create(wxWindow *parent, wxWindowID id, diff --git a/src/msw/combobox.cpp b/src/msw/combobox.cpp index aec17db23d..7f2f67ad41 100644 --- a/src/msw/combobox.cpp +++ b/src/msw/combobox.cpp @@ -41,21 +41,22 @@ bool wxComboBox::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_SELECTED, m_windowId); event.SetInt(GetSelection()); event.SetEventObject(this); - event.SetString(copystring(GetStringSelection())); + event.SetString(GetStringSelection()); ProcessCommand(event); - delete[] event.GetString(); + return TRUE; } else if (param == CBN_EDITCHANGE) { wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, m_windowId); - event.SetString(copystring(GetValue())); + event.SetString(GetValue()); event.SetEventObject(this); ProcessCommand(event); - delete[] event.GetString(); + return TRUE; } - else return FALSE; + else + return FALSE; } bool wxComboBox::Create(wxWindow *parent, wxWindowID id, -- 2.45.2