Really set svn:eol-style property.

The last commit used incorrect property name, remove the erroneous property
and set the correct svn:eol-style one.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64996 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-07-17 14:55:45 +00:00
parent bf57580351
commit b0f73b6701
7 changed files with 766 additions and 766 deletions

View File

@@ -1,244 +1,244 @@
------------------------------------------------------------------------ ------------------------------------------------------------------------
How to build the sources from SVN How to build the sources from SVN
------------------------------------------------------------------------ ------------------------------------------------------------------------
Please use the install.txt files in docs/gtk, docs/msw, docs/motif, docs/mac Please use the install.txt files in docs/gtk, docs/msw, docs/motif, docs/mac
etc. alongside these instructions. etc. alongside these instructions.
I) Windows using plain makefiles I) Windows using plain makefiles
---------------------------------------- ----------------------------------------
a) If using Microsoft Visual C++ 5.0 or 6.0 a) If using Microsoft Visual C++ 5.0 or 6.0
Ensure that the command-line compiler and tools (including Ensure that the command-line compiler and tools (including
nmake) are installed and ready to run. Depending on your nmake) are installed and ready to run. Depending on your
installation there may be a batch file (commonly named VCVARS32.BAT) installation there may be a batch file (commonly named VCVARS32.BAT)
that needs to be run to set correct environment variables and PATH entries. that needs to be run to set correct environment variables and PATH entries.
Continue with item c) below. Continue with item c) below.
b) If using the MinGW or Cygwin compilers b) If using the MinGW or Cygwin compilers
You can get MinGW from http://www.mingw.org/ You can get MinGW from http://www.mingw.org/
Cygwin is available at http://www.cygwin.com/ Cygwin is available at http://www.cygwin.com/
If you are using Cygwin or MinGW together with the MSYS environment, you If you are using Cygwin or MinGW together with the MSYS environment, you
can build the library using configure (see "Unix ports" and can build the library using configure (see "Unix ports" and
"Windows using configure" below). You can also "Windows using configure" below). You can also
build wxWidgets without configure using native makefile, but only with build wxWidgets without configure using native makefile, but only with
MinGW. Using Cygwin together with Windows makefile is no longer supported. MinGW. Using Cygwin together with Windows makefile is no longer supported.
If building with MinGW without configure: If building with MinGW without configure:
-> Set your path so that it includes the directory -> Set your path so that it includes the directory
where your compiler and tools reside where your compiler and tools reside
-> Make sure you have GNU Make installed. It must be Windows native version. -> Make sure you have GNU Make installed. It must be Windows native version.
Download it from http://www.mingw.org, the executable will be called Download it from http://www.mingw.org, the executable will be called
mingw32-make.exe. mingw32-make.exe.
-> Modern version of MinGW is required; preferably MinGW 2.0 (with gcc3), -> Modern version of MinGW is required; preferably MinGW 2.0 (with gcc3),
but MinGW with gcc-2.95.3 will suffice. If you are using 2.95, you will but MinGW with gcc-2.95.3 will suffice. If you are using 2.95, you will
have to change variable GCC_VERSION in config.gcc (see msw/install.txt have to change variable GCC_VERSION in config.gcc (see msw/install.txt
for details). for details).
If using configure, Unix instructions apply. If using configure, Unix instructions apply.
c) Build instructions c) Build instructions
Assuming that you installed the wxWidgets sources into c:\wxWidgets: Assuming that you installed the wxWidgets sources into c:\wxWidgets:
-> Copy c:\wxWidgets\include\wx\msw\setup0.h -> Copy c:\wxWidgets\include\wx\msw\setup0.h
to c:\wxWidgets\include\wx\msw\setup.h to c:\wxWidgets\include\wx\msw\setup.h
-> Edit c:\wxWidgets\include\wx\msw\setup.h to choose -> Edit c:\wxWidgets\include\wx\msw\setup.h to choose
the features you would like to compile wxWidgets with[out]. the features you would like to compile wxWidgets with[out].
and std iostreams are disabled with and std iostreams are disabled with
#define wxUSE_STD_IOSTREAM 0 #define wxUSE_STD_IOSTREAM 0
-> type: cd c:\wxWidgets\build\msw -> type: cd c:\wxWidgets\build\msw
-> type: make -f makefile.gcc (if using GNU tools) -> type: make -f makefile.gcc (if using GNU tools)
or type: nmake -f makefile.vc (if using MS VC++) or type: nmake -f makefile.vc (if using MS VC++)
etc. etc.
See also docs/msw/install.txt for additional compilation options. See also docs/msw/install.txt for additional compilation options.
d) Borland (including free command line tools) d) Borland (including free command line tools)
Download tools from http://www.borland.com/downloads/ Download tools from http://www.borland.com/downloads/
See docs/msw/install.txt for details; in brief: See docs/msw/install.txt for details; in brief:
-> type cd c:\wxWidgets\build\msw -> type cd c:\wxWidgets\build\msw
-> type make -f makefile.bcc -> type make -f makefile.bcc
You can customize many things in the build process, detailed description is You can customize many things in the build process, detailed description is
in docs/msw/install.txt. in docs/msw/install.txt.
II) Unix ports II) Unix ports
-------------- --------------
Building wxGTK or wxMotif completely without configure Building wxGTK or wxMotif completely without configure
won't ever work, but there is now a new makefile system won't ever work, but there is now a new makefile system
that works without libtool and automake, using only that works without libtool and automake, using only
configure to create what is needed. configure to create what is needed.
In order to create configure, you need to have the In order to create configure, you need to have the
GNU autoconf package (version > 2.54) installed GNU autoconf package (version > 2.54) installed
on your system and type run "autoconf" in the base on your system and type run "autoconf" in the base
directory (or run the autogen.sh script in the same directory (or run the autogen.sh script in the same
directory, which just calls autoconf). Note that you usually don't directory, which just calls autoconf). Note that you usually don't
need to do this because configure is included in SVN. need to do this because configure is included in SVN.
Set WXWIN environment variable to the base directory such Set WXWIN environment variable to the base directory such
as ~/wxWidgets (this is actually not really needed). as ~/wxWidgets (this is actually not really needed).
-> type: export WXWIN=~/wxWidgets -> type: export WXWIN=~/wxWidgets
-> type: md mybuild -> type: md mybuild
-> type: cd mybuild -> type: cd mybuild
-> type: ../configure --with-motif -> type: ../configure --with-motif
or type: ../configure --with-gtk or type: ../configure --with-gtk
-> type: make -> type: make
-> type: su <type root password> -> type: su <type root password>
-> type: make install -> type: make install
-> type: ldconfig -> type: ldconfig
-> type: exit -> type: exit
Call configure with --disable-shared to create a static Call configure with --disable-shared to create a static
library. Calling "make uninstall" will remove the installed library. Calling "make uninstall" will remove the installed
library and "make dist" will create a distribution (not library and "make dist" will create a distribution (not
yet complete). yet complete).
III) Windows using configure III) Windows using configure
---------------------------------------- ----------------------------------------
wxWidgets can be built on Windows using MSYS (see wxWidgets can be built on Windows using MSYS (see
http://www.mingw.org/), which is a POSIX build environment http://www.mingw.org/), which is a POSIX build environment
for Windows. With MSYS you can just ./configure && make (see also VII, for Windows. With MSYS you can just ./configure && make (see also VII,
Unix->Windows cross-compiling using configure). Unix->Windows cross-compiling using configure).
Of course, you can also build the library using plain makefiles (see Of course, you can also build the library using plain makefiles (see
section I). section I).
V) MacOS X using configure and the Developer Tools V) MacOS X using configure and the Developer Tools
---------------------------------------- ----------------------------------------
You need to have the Developer Tools installed. If this is not the case, You need to have the Developer Tools installed. If this is not the case,
you will need to register at the Apple Developer web site (this is a free you will need to register at the Apple Developer web site (this is a free
registration) in order to download the Developer Tools installer. registration) in order to download the Developer Tools installer.
In order to create configure, you need to have the In order to create configure, you need to have the
GNU autoconf package (version >= 2.54) installed GNU autoconf package (version >= 2.54) installed
on your system and type run "autoconf" in the base on your system and type run "autoconf" in the base
directory (or run the autogen.sh script in the same directory (or run the autogen.sh script in the same
directory, which just calls autoconf). directory, which just calls autoconf).
-> type: mkdir macbuild -> type: mkdir macbuild
-> type: cd macbuild -> type: cd macbuild
-> type: ../configure --with-mac -> type: ../configure --with-mac
or type: ../configure or type: ../configure
-> type: make -> type: make
VI) OS/2 VI) OS/2
---------------------------------------- ----------------------------------------
No notes. No notes.
VII) Unix->Windows cross-compiling using configure VII) Unix->Windows cross-compiling using configure
-------------------------------------------------- --------------------------------------------------
First you'll need a cross-compiler; linux glibc binaries of MinGW and First you'll need a cross-compiler; linux glibc binaries of MinGW and
Cygwin (both based on egcs) can be found at Cygwin (both based on egcs) can be found at
ftp://ftp.objsw.com/pub/crossgcc/linux-x-win32. Alternative binaries, ftp://ftp.objsw.com/pub/crossgcc/linux-x-win32. Alternative binaries,
based on the latest MinGW release can be found at based on the latest MinGW release can be found at
http://members.telering.at/jessich/mingw/mingwcross/mingw_cross.html http://members.telering.at/jessich/mingw/mingwcross/mingw_cross.html
Otherwise you can compile one yourself. Otherwise you can compile one yourself.
[ A Note about Cygwin and MinGW: the main difference is that Cygwin [ A Note about Cygwin and MinGW: the main difference is that Cygwin
binaries are always linked against cygwin.dll. This dll encapsulates most binaries are always linked against cygwin.dll. This dll encapsulates most
standard Unix C extensions, which is very handy if you're porting unix standard Unix C extensions, which is very handy if you're porting unix
software to windows. However, wxMSW doesn't need this, so MinGW is software to windows. However, wxMSW doesn't need this, so MinGW is
preferable if you write portable C(++). ] preferable if you write portable C(++). ]
You might want to build both Unix and Windows binaries in the same source You might want to build both Unix and Windows binaries in the same source
tree; to do this make subdirs for each e.g. unix and win32. If you've tree; to do this make subdirs for each e.g. unix and win32. If you've
already build wxWidgets in the main dir, do a 'make distclean' there, already build wxWidgets in the main dir, do a 'make distclean' there,
otherwise configure will get confused. (In any case, read the section 'Unix otherwise configure will get confused. (In any case, read the section 'Unix
using configure' and make sure you're able to build a native wxWidgets using configure' and make sure you're able to build a native wxWidgets
library; cross-compiling errors can be pretty obscure and you'll want to be library; cross-compiling errors can be pretty obscure and you'll want to be
sure that your configure setup is basically sound.) sure that your configure setup is basically sound.)
To cross compile the windows library, do To cross compile the windows library, do
-> cd win32 -> cd win32
(or whatever you called it) (or whatever you called it)
Now run configure. There are two ways to do this Now run configure. There are two ways to do this
-> ../configure --host=i586-mingw32 --build=i586-linux --with-mingw -> ../configure --host=i586-mingw32 --build=i586-linux --with-mingw
where --build= should read whatever platform you're building on. Configure where --build= should read whatever platform you're building on. Configure
will notice that build and host platforms differ, and automatically prepend will notice that build and host platforms differ, and automatically prepend
i586-mingw32- to gcc, ar, ld, etc (make sure they're in the PATH!). i586-mingw32- to gcc, ar, ld, etc (make sure they're in the PATH!).
The other way to run configure is by specifying the names of the binaries The other way to run configure is by specifying the names of the binaries
yourself: yourself:
-> CC=i586-mingw32-gcc CXX=i586-mingw32-g++ RANLIB=i586-mingw32-ranlib \ -> CC=i586-mingw32-gcc CXX=i586-mingw32-g++ RANLIB=i586-mingw32-ranlib \
DLLTOOL=i586-mingw32-dlltool LD=i586-mingw32-ld NM=i586-mingw32-nm \ DLLTOOL=i586-mingw32-dlltool LD=i586-mingw32-ld NM=i586-mingw32-nm \
../configure --host=i586-mingw32 --with-mingw ../configure --host=i586-mingw32 --with-mingw
(all assuming you're using MinGW) (all assuming you're using MinGW)
By default this will compile a DLL, if you want a static library, By default this will compile a DLL, if you want a static library,
specify --disable-shared. specify --disable-shared.
Type Type
-> make -> make
and wait, wait, wait. Don't leave the room, because the minute you do there and wait, wait, wait. Don't leave the room, because the minute you do there
will be a compile error :-) will be a compile error :-)
NB: if you are using a very old compiler you risk to get quite a few warnings NB: if you are using a very old compiler you risk to get quite a few warnings
about "ANSI C++ forbids implicit conversion from 'void *'" in all places about "ANSI C++ forbids implicit conversion from 'void *'" in all places
where va_arg macro is used. This is due to a bug in (some versions of) where va_arg macro is used. This is due to a bug in (some versions of)
MinGW headers which may be corrected by upgrading your compier, MinGW headers which may be corrected by upgrading your compier,
otherwise you might edit the file otherwise you might edit the file
${install_prefix}/lib/gcc-lib/i586-mingw32/egcs-2.91.57/include/stdarg.h ${install_prefix}/lib/gcc-lib/i586-mingw32/egcs-2.91.57/include/stdarg.h
(instead of egcs-2.91.57 you may have something different), searching for (instead of egcs-2.91.57 you may have something different), searching for
the lines the lines
/* Define __gnuc_va_list. */ /* Define __gnuc_va_list. */
#ifndef __GNUC_VA_LIST #ifndef __GNUC_VA_LIST
#define __GNUC_VA_LIST #define __GNUC_VA_LIST
#if defined(__svr4__) || defined(_AIX) || defined(_M_UNIX) || defined(__NetBSD__) #if defined(__svr4__) || defined(_AIX) || defined(_M_UNIX) || defined(__NetBSD__)
typedef char *__gnuc_va_list; typedef char *__gnuc_va_list;
#else #else
typedef void *__gnuc_va_list; typedef void *__gnuc_va_list;
#endif #endif
#endif #endif
and adding "|| defined(_WIN32)" to the list of platforms on which and adding "|| defined(_WIN32)" to the list of platforms on which
__gnuc_va_list is char *. __gnuc_va_list is char *.
If this is successful, you end up with a wx23_2.dll/libwx23_2.a in win32/lib If this is successful, you end up with a wx23_2.dll/libwx23_2.a in win32/lib
(or just libwx_msw.a if you opted for a static build). (or just libwx_msw.a if you opted for a static build).
Now try building the minimal sample: Now try building the minimal sample:
-> cd samples/minimal -> cd samples/minimal
-> make -> make
and run it with wine, for example (or copy to a Windows box) and run it with wine, for example (or copy to a Windows box)
-> wine minimal.exe -> wine minimal.exe
If all is well, do an install; from win32 If all is well, do an install; from win32
-> make install -> make install
Native and cross-compiled installations can co-exist peacefully Native and cross-compiled installations can co-exist peacefully
(as long as their widget sets differ), except for wx-config. You might (as long as their widget sets differ), except for wx-config. You might
want to rename the cross-compiled one to i586-mingw32-wx-config, or something. want to rename the cross-compiled one to i586-mingw32-wx-config, or something.
Cross-compiling TODO: Cross-compiling TODO:
--------------------- ---------------------
- resource compiling must be done manually for now (should/can we link the - resource compiling must be done manually for now (should/can we link the
default wx resources into libwx_msw.a?) [ No we can't; the linker won't default wx resources into libwx_msw.a?) [ No we can't; the linker won't
link it in... you have to supply an object file ] link it in... you have to supply an object file ]
- static executables are HUGE -- there must be room for improvement. - static executables are HUGE -- there must be room for improvement.

View File

@@ -1,5 +1,5 @@
/***************************************************************************** /*****************************************************************************
** Name: wxwidgets.js ** Name: wxwidgets.js
** Purpose: The wxWidgets documentation javascript ** Purpose: The wxWidgets documentation javascript
** Author: Doxygen team ** Author: Doxygen team
** RCS-ID: $Id$ ** RCS-ID: $Id$
@@ -7,79 +7,79 @@
*****************************************************************************/ *****************************************************************************/
// from w3schools // from w3schools
function getCookie(c_name) function getCookie(c_name)
{ {
if (document.cookie.length>0) if (document.cookie.length>0)
{ {
c_start=document.cookie.indexOf(c_name + "="); c_start=document.cookie.indexOf(c_name + "=");
if (c_start!=-1) if (c_start!=-1)
{ {
c_start=c_start + c_name.length+1; c_start=c_start + c_name.length+1;
c_end=document.cookie.indexOf(";",c_start); c_end=document.cookie.indexOf(";",c_start);
if (c_end==-1) c_end=document.cookie.length; if (c_end==-1) c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end)); return unescape(document.cookie.substring(c_start,c_end));
} }
} }
return ""; return "";
} }
// from w3schools // from w3schools
function setCookie(c_name,value,expiredays) function setCookie(c_name,value,expiredays)
{ {
var exdate=new Date(); var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays); exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ '=' +escape(value)+ document.cookie=c_name+ '=' +escape(value)+
((expiredays==null) ? '' : ';expires='+exdate.toGMTString()); ((expiredays==null) ? '' : ';expires='+exdate.toGMTString());
} }
// Reimplementation of changeDisplayState // Reimplementation of changeDisplayState
function mychangeDisplayState( e ) function mychangeDisplayState( e )
{ {
var num=this.id.replace(/[^[0-9]/g,''); var num=this.id.replace(/[^[0-9]/g,'');
var button=this.firstChild; var button=this.firstChild;
var sectionDiv=document.getElementById('dynsection'+num); var sectionDiv=document.getElementById('dynsection'+num);
if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){ if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){
sectionDiv.style.display='block'; sectionDiv.style.display='block';
button.src='open.gif'; button.src='open.gif';
}else{ }else{
sectionDiv.style.display='none'; sectionDiv.style.display='none';
button.src='closed.gif'; button.src='closed.gif';
} }
setCookie( 'sectionDiv.style.display', sectionDiv.style.display ); setCookie( 'sectionDiv.style.display', sectionDiv.style.display );
} }
window.onload = function myinitDynSections() window.onload = function myinitDynSections()
{ {
var divs=document.getElementsByTagName('div'); var divs=document.getElementsByTagName('div');
var sectionCounter=1; var sectionCounter=1;
for(var i=0;i<divs.length-1;i++){ for(var i=0;i<divs.length-1;i++){
if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){ if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){
var header=divs[i]; var header=divs[i];
var section=divs[i+1]; var section=divs[i+1];
var button=header.firstChild; var button=header.firstChild;
if (button!='IMG'){ if (button!='IMG'){
divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild); divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild);
button=document.createElement('img'); button=document.createElement('img');
divs[i].insertBefore(button,divs[i].firstChild); divs[i].insertBefore(button,divs[i].firstChild);
} }
header.style.cursor='pointer'; header.style.cursor='pointer';
header.onclick=mychangeDisplayState; header.onclick=mychangeDisplayState;
header.id='dynheader'+sectionCounter; header.id='dynheader'+sectionCounter;
section.id='dynsection'+sectionCounter; section.id='dynsection'+sectionCounter;
var display = getCookie( 'sectionDiv.style.display' ); var display = getCookie( 'sectionDiv.style.display' );
if ( display == '' || display == 'block' ){ if ( display == '' || display == 'block' ){
section.style.display='block'; // default section.style.display='block'; // default
button.src='open.gif'; button.src='open.gif';
}else{ }else{
section.style.display='none'; section.style.display='none';
button.src='closed.gif'; button.src='closed.gif';
} }
setCookie( 'sectionDiv.style.display', section.style.display ); setCookie( 'sectionDiv.style.display', section.style.display );
section.style.marginLeft='14px'; section.style.marginLeft='14px';
sectionCounter++; sectionCounter++;
} }
} }
} }

View File

@@ -1,55 +1,55 @@
How to add a new XRC handler How to add a new XRC handler
============================ ============================
0. Purpose 0. Purpose
---------- ----------
This note describes what needs to be done to add a new XRC handler, i.e. add This note describes what needs to be done to add a new XRC handler, i.e. add
support for loading the objects of some class wxFoo from XRC. support for loading the objects of some class wxFoo from XRC.
1. Implement the handler 1. Implement the handler
------------------------ ------------------------
By convention, the XRC handler for a class wxFoo declared in wx/foo.h is called By convention, the XRC handler for a class wxFoo declared in wx/foo.h is called
wxFooXmlHandler and is declared in the file wx/xrc/xh_foo.h (this last rule wxFooXmlHandler and is declared in the file wx/xrc/xh_foo.h (this last rule
wasn't always respected in the past, however it's not a reason to not respect wasn't always respected in the past, however it's not a reason to not respect
it in the future). The steps for adding a new handler are: it in the future). The steps for adding a new handler are:
a) Add handler declaration in include/wx/xrc/xh_foo.h, it will usually be the a) Add handler declaration in include/wx/xrc/xh_foo.h, it will usually be the
same as in the other files so you can get inspiration for your brand new same as in the other files so you can get inspiration for your brand new
handler from e.g. wx/xrc/xh_srchctrl.h. Notice the use of wxUSE_FOO if wxFoo handler from e.g. wx/xrc/xh_srchctrl.h. Notice the use of wxUSE_FOO if wxFoo
is guarded by this symbol. is guarded by this symbol.
b) Add implementation in src/xrc/xh_foo.cpp: again, it will be almost always b) Add implementation in src/xrc/xh_foo.cpp: again, it will be almost always
very similar to the existing controls. You will need to add support for very similar to the existing controls. You will need to add support for
the control-specific styles. the control-specific styles.
2. Update the other files 2. Update the other files
------------------------- -------------------------
There are a few other files to update to make wxWidgets aware of the new There are a few other files to update to make wxWidgets aware of the new
handler: handler:
a) Add the new files created above to build/bakefiles/files.bkl: search for a) Add the new files created above to build/bakefiles/files.bkl: search for
"xh_srchctrl" to see where you need to add them "xh_srchctrl" to see where you need to add them
b) Add #include "wx/xrc/xh_foo.h" to wx/xrc/xh_all.h. b) Add #include "wx/xrc/xh_foo.h" to wx/xrc/xh_all.h.
c) Register the new handler in wxXmlResource::InitAllHandlers() in c) Register the new handler in wxXmlResource::InitAllHandlers() in
src/xrc/xmlrsall.cpp src/xrc/xmlrsall.cpp
3. Update the sample 3. Update the sample
-------------------- --------------------
Demonstrate that the new handler works by adding a control using it to Demonstrate that the new handler works by adding a control using it to
samples/xrc/rc/controls.xrc. samples/xrc/rc/controls.xrc.
=== EOF === === EOF ===
Author: VZ Author: VZ
Version: $Id: tn0021.txt 47865 2007-08-03 20:00:32Z VZ $ Version: $Id: tn0021.txt 47865 2007-08-03 20:00:32Z VZ $

View File

@@ -1,41 +1,41 @@
WXUNUSED+ WXUNUSED+
WXDLLEXPORT WXDLLEXPORT
WXDLLIMPEXP_ADV WXDLLIMPEXP_ADV
WXDLLIMPEXP_DATA_ADV+ WXDLLIMPEXP_DATA_ADV+
WXDLLIMPEXP_FWD_ADV WXDLLIMPEXP_FWD_ADV
WXDLLIMPEXP_AUI WXDLLIMPEXP_AUI
WXDLLIMPEXP_DATA_AUI+ WXDLLIMPEXP_DATA_AUI+
WXDLLIMPEXP_FWD_AUI WXDLLIMPEXP_FWD_AUI
WXDLLIMPEXP_BASE WXDLLIMPEXP_BASE
WXDLLIMPEXP_DATA_BASE+ WXDLLIMPEXP_DATA_BASE+
WXDLLIMPEXP_FWD_BASE WXDLLIMPEXP_FWD_BASE
WXDLLIMPEXP_CORE WXDLLIMPEXP_CORE
WXDLLIMPEXP_DATA_CORE+ WXDLLIMPEXP_DATA_CORE+
WXDLLIMPEXP_FWD_CORE WXDLLIMPEXP_FWD_CORE
WXDLLIMPEXP_NET WXDLLIMPEXP_NET
WXDLLIMPEXP_MEDIA WXDLLIMPEXP_MEDIA
WXDLLIMPEXP_DATA_MEDIA+ WXDLLIMPEXP_DATA_MEDIA+
WXDLLIMPEXP_FWD_MEDIA WXDLLIMPEXP_FWD_MEDIA
WXDLLIMPEXP_DATA_NET+ WXDLLIMPEXP_DATA_NET+
WXDLLIMPEXP_FWD_NET WXDLLIMPEXP_FWD_NET
WXDLLIMPEXP_HTML WXDLLIMPEXP_HTML
WXDLLIMPEXP_DATA_HTML+ WXDLLIMPEXP_DATA_HTML+
WXDLLIMPEXP_FWD_HTML WXDLLIMPEXP_FWD_HTML
WXDLLIMPEXP_GL WXDLLIMPEXP_GL
WXDLLIMPEXP_DATA_GL+ WXDLLIMPEXP_DATA_GL+
WXDLLIMPEXP_FWD_GL WXDLLIMPEXP_FWD_GL
WXDLLIMPEXP_QA WXDLLIMPEXP_QA
WXDLLIMPEXP_DATA_QA+ WXDLLIMPEXP_DATA_QA+
WXDLLIMPEXP_FWD_QA WXDLLIMPEXP_FWD_QA
WXDLLIMPEXP_XML WXDLLIMPEXP_XML
WXDLLIMPEXP_DATA_XML+ WXDLLIMPEXP_DATA_XML+
WXDLLIMPEXP_FWD_XML WXDLLIMPEXP_FWD_XML
WXDLLIMPEXP_XRC WXDLLIMPEXP_XRC
WXDLLIMPEXP_DATA_XRC+ WXDLLIMPEXP_DATA_XRC+
WXDLLIMPEXP_FWD_XRC WXDLLIMPEXP_FWD_XRC
WXDLLIMPEXP_PROPGRID WXDLLIMPEXP_PROPGRID
WXDLLIMPEXP_DATA_PROPGRID+ WXDLLIMPEXP_DATA_PROPGRID+
WXDLLIMPEXP_FWD_PROPGRID WXDLLIMPEXP_FWD_PROPGRID
WXDLLIMPEXP_RICHTEXT WXDLLIMPEXP_RICHTEXT
WXDLLIMPEXP_DATA_RICHTEXT+ WXDLLIMPEXP_DATA_RICHTEXT+
WXDLLIMPEXP_FWD_RICHTEXT WXDLLIMPEXP_FWD_RICHTEXT

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" ?> <?xml version="1.0" ?>
<makefile> <makefile>
<include file="../../build/bakefiles/common_samples.bkl"/> <include file="../../build/bakefiles/common_samples.bkl"/>
<exe id="wrapsizer" template="wx_sample" template_append="wx_append"> <exe id="wrapsizer" template="wx_sample" template_append="wx_append">
<sources>wrapsizer.cpp</sources> <sources>wrapsizer.cpp</sources>
<wx-lib>core</wx-lib> <wx-lib>core</wx-lib>
<wx-lib>base</wx-lib> <wx-lib>base</wx-lib>
</exe> </exe>
</makefile> </makefile>

View File

@@ -1,9 +1,9 @@
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Name: os2/snglinst.cpp // Name: os2/snglinst.cpp
// Purpose: implements wxSingleInstanceChecker class for OS/2 using // Purpose: implements wxSingleInstanceChecker class for OS/2 using
// named mutexes // named mutexes
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: Lauri Nurmi (modified for OS/2) // Modified by: Lauri Nurmi (modified for OS/2)
// Created: 08.02.2009 // Created: 08.02.2009
// RCS-ID: $Id$ // RCS-ID: $Id$
// Copyright: (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> // Copyright: (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
@@ -11,122 +11,122 @@
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// ============================================================================ // ============================================================================
// declarations // declarations
// ============================================================================ // ============================================================================
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// headers // headers
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx.h". // For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h" #include "wx/wxprec.h"
#ifdef __BORLANDC__ #ifdef __BORLANDC__
#pragma hdrstop #pragma hdrstop
#endif #endif
#if wxUSE_SNGLINST_CHECKER #if wxUSE_SNGLINST_CHECKER
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
#include "wx/string.h" #include "wx/string.h"
#include "wx/log.h" #include "wx/log.h"
#endif //WX_PRECOMP #endif //WX_PRECOMP
#include "wx/snglinst.h" #include "wx/snglinst.h"
#define INCL_DOSSEMAPHORES #define INCL_DOSSEMAPHORES
#define INCL_DOSERRORS #define INCL_DOSERRORS
#include <os2.h> #include <os2.h>
#include "wx/os2/private.h" #include "wx/os2/private.h"
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxSingleInstanceCheckerImpl: the real implementation class // wxSingleInstanceCheckerImpl: the real implementation class
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
class WXDLLEXPORT wxSingleInstanceCheckerImpl class WXDLLEXPORT wxSingleInstanceCheckerImpl
{ {
public: public:
wxSingleInstanceCheckerImpl() wxSingleInstanceCheckerImpl()
{ {
m_hMutex = NULL; m_hMutex = NULL;
m_anotherRunning = false; m_anotherRunning = false;
} }
bool Create(const wxString& name) bool Create(const wxString& name)
{ {
wxString semName; wxString semName;
semName.Printf(wxT("\\SEM32\\%s"), name.c_str()); semName.Printf(wxT("\\SEM32\\%s"), name.c_str());
int rc = DosCreateMutexSem(semName.c_str(), &m_hMutex, DC_SEM_SHARED, 1); int rc = DosCreateMutexSem(semName.c_str(), &m_hMutex, DC_SEM_SHARED, 1);
if ( rc == NO_ERROR ) { if ( rc == NO_ERROR ) {
m_anotherRunning = false; m_anotherRunning = false;
return true; return true;
} else if ( rc == ERROR_DUPLICATE_NAME ) { } else if ( rc == ERROR_DUPLICATE_NAME ) {
m_anotherRunning = true; m_anotherRunning = true;
return true; return true;
} else { } else {
m_anotherRunning = false; // we don't know for sure in this case m_anotherRunning = false; // we don't know for sure in this case
wxLogLastError(wxT("DosCreateMutexSem")); wxLogLastError(wxT("DosCreateMutexSem"));
return false; return false;
} }
} }
bool IsAnotherRunning() const bool IsAnotherRunning() const
{ {
return m_anotherRunning; return m_anotherRunning;
} }
~wxSingleInstanceCheckerImpl() ~wxSingleInstanceCheckerImpl()
{ {
if ( m_hMutex ) if ( m_hMutex )
{ {
if ( !::DosCloseMutexSem(m_hMutex) ) if ( !::DosCloseMutexSem(m_hMutex) )
{ {
wxLogLastError(wxT("DosCloseMutexSem")); wxLogLastError(wxT("DosCloseMutexSem"));
} }
} }
} }
private: private:
// if true, creating the mutex either succeeded // if true, creating the mutex either succeeded
// or we know it failed because another app is running. // or we know it failed because another app is running.
bool m_anotherRunning; bool m_anotherRunning;
// the mutex handle, may be NULL // the mutex handle, may be NULL
HMTX m_hMutex; HMTX m_hMutex;
DECLARE_NO_COPY_CLASS(wxSingleInstanceCheckerImpl) DECLARE_NO_COPY_CLASS(wxSingleInstanceCheckerImpl)
}; };
// ============================================================================ // ============================================================================
// wxSingleInstanceChecker implementation // wxSingleInstanceChecker implementation
// ============================================================================ // ============================================================================
bool wxSingleInstanceChecker::Create(const wxString& name, bool wxSingleInstanceChecker::Create(const wxString& name,
const wxString& WXUNUSED(path)) const wxString& WXUNUSED(path))
{ {
wxASSERT_MSG( !m_impl, wxASSERT_MSG( !m_impl,
wxT("calling wxSingleInstanceChecker::Create() twice?") ); wxT("calling wxSingleInstanceChecker::Create() twice?") );
// creating unnamed mutex doesn't have the same semantics! // creating unnamed mutex doesn't have the same semantics!
wxASSERT_MSG( !name.empty(), wxT("mutex name can't be empty") ); wxASSERT_MSG( !name.empty(), wxT("mutex name can't be empty") );
m_impl = new wxSingleInstanceCheckerImpl; m_impl = new wxSingleInstanceCheckerImpl;
return m_impl->Create(name); return m_impl->Create(name);
} }
bool wxSingleInstanceChecker::DoIsAnotherRunning() const bool wxSingleInstanceChecker::DoIsAnotherRunning() const
{ {
wxCHECK_MSG( m_impl, false, wxT("must call Create() first") ); wxCHECK_MSG( m_impl, false, wxT("must call Create() first") );
return m_impl->IsAnotherRunning(); return m_impl->IsAnotherRunning();
} }
wxSingleInstanceChecker::~wxSingleInstanceChecker() wxSingleInstanceChecker::~wxSingleInstanceChecker()
{ {
delete m_impl; delete m_impl;
} }
#endif // wxUSE_SNGLINST_CHECKER #endif // wxUSE_SNGLINST_CHECKER

View File

@@ -1,213 +1,213 @@
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// Name: tests/controls/label.cpp // Name: tests/controls/label.cpp
// Purpose: wxControl and wxStaticText label tests // Purpose: wxControl and wxStaticText label tests
// Author: Francesco Montorsi // Author: Francesco Montorsi
// Created: 2010-3-21 // Created: 2010-3-21
// RCS-ID: $Id$ // RCS-ID: $Id$
// Copyright: (c) 2010 Francesco Montorsi // Copyright: (c) 2010 Francesco Montorsi
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// headers // headers
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
#include "testprec.h" #include "testprec.h"
#ifdef __BORLANDC__ #ifdef __BORLANDC__
#pragma hdrstop #pragma hdrstop
#endif #endif
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
#include "wx/app.h" #include "wx/app.h"
#endif // WX_PRECOMP #endif // WX_PRECOMP
#include "wx/control.h" #include "wx/control.h"
#include "wx/stattext.h" #include "wx/stattext.h"
#include "wx/checkbox.h" #include "wx/checkbox.h"
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// test class // test class
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
class LabelTestCase : public CppUnit::TestCase class LabelTestCase : public CppUnit::TestCase
{ {
public: public:
LabelTestCase() { } LabelTestCase() { }
virtual void setUp(); virtual void setUp();
virtual void tearDown(); virtual void tearDown();
private: private:
CPPUNIT_TEST_SUITE( LabelTestCase ); CPPUNIT_TEST_SUITE( LabelTestCase );
CPPUNIT_TEST( GetLabel ); CPPUNIT_TEST( GetLabel );
CPPUNIT_TEST( GetLabelText ); CPPUNIT_TEST( GetLabelText );
CPPUNIT_TEST( Statics ); CPPUNIT_TEST( Statics );
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
void GetLabel(); void GetLabel();
void GetLabelText(); void GetLabelText();
void Statics(); void Statics();
wxStaticText *m_st, *m_stWithMarkup; wxStaticText *m_st, *m_stWithMarkup;
// we cannot test wxControl directly (it's abstract) so we rather test wxCheckBox // we cannot test wxControl directly (it's abstract) so we rather test wxCheckBox
wxCheckBox *m_cb; wxCheckBox *m_cb;
DECLARE_NO_COPY_CLASS(LabelTestCase) DECLARE_NO_COPY_CLASS(LabelTestCase)
}; };
// register in the unnamed registry so that these tests are run by default // register in the unnamed registry so that these tests are run by default
CPPUNIT_TEST_SUITE_REGISTRATION( LabelTestCase ); CPPUNIT_TEST_SUITE_REGISTRATION( LabelTestCase );
// also include in it's own registry so that these tests can be run alone // also include in it's own registry so that these tests can be run alone
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( LabelTestCase, "LabelTestCase" ); CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( LabelTestCase, "LabelTestCase" );
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// test initialization // test initialization
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
#define ORIGINAL_LABEL "original label" #define ORIGINAL_LABEL "original label"
void LabelTestCase::setUp() void LabelTestCase::setUp()
{ {
m_st = new wxStaticText(wxTheApp->GetTopWindow(), wxID_ANY, ORIGINAL_LABEL); m_st = new wxStaticText(wxTheApp->GetTopWindow(), wxID_ANY, ORIGINAL_LABEL);
m_stWithMarkup = new wxStaticText(wxTheApp->GetTopWindow(), wxID_ANY, ORIGINAL_LABEL, m_stWithMarkup = new wxStaticText(wxTheApp->GetTopWindow(), wxID_ANY, ORIGINAL_LABEL,
wxDefaultPosition, wxDefaultSize, wxST_MARKUP); wxDefaultPosition, wxDefaultSize, wxST_MARKUP);
m_cb = new wxCheckBox(wxTheApp->GetTopWindow(), wxID_ANY, ORIGINAL_LABEL); m_cb = new wxCheckBox(wxTheApp->GetTopWindow(), wxID_ANY, ORIGINAL_LABEL);
CPPUNIT_ASSERT_EQUAL( ORIGINAL_LABEL, m_st->GetLabel() ); CPPUNIT_ASSERT_EQUAL( ORIGINAL_LABEL, m_st->GetLabel() );
CPPUNIT_ASSERT_EQUAL( ORIGINAL_LABEL, m_stWithMarkup->GetLabel() ); CPPUNIT_ASSERT_EQUAL( ORIGINAL_LABEL, m_stWithMarkup->GetLabel() );
CPPUNIT_ASSERT_EQUAL( ORIGINAL_LABEL, m_cb->GetLabel() ); CPPUNIT_ASSERT_EQUAL( ORIGINAL_LABEL, m_cb->GetLabel() );
} }
void LabelTestCase::tearDown() void LabelTestCase::tearDown()
{ {
wxDELETE(m_st); wxDELETE(m_st);
wxDELETE(m_stWithMarkup); wxDELETE(m_stWithMarkup);
wxDELETE(m_cb); wxDELETE(m_cb);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// the tests themselves // the tests themselves
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
#define SET_LABEL(str) \ #define SET_LABEL(str) \
m_st->SetLabel(str); \ m_st->SetLabel(str); \
m_stWithMarkup->SetLabel(str); \ m_stWithMarkup->SetLabel(str); \
m_cb->SetLabel(str); m_cb->SetLabel(str);
#define SET_LABEL_TEXT(str) \ #define SET_LABEL_TEXT(str) \
m_st->SetLabelText(str); \ m_st->SetLabelText(str); \
m_stWithMarkup->SetLabelText(str); \ m_stWithMarkup->SetLabelText(str); \
m_cb->SetLabelText(str); m_cb->SetLabelText(str);
void LabelTestCase::GetLabel() void LabelTestCase::GetLabel()
{ {
const wxString testLabelArray[] = { const wxString testLabelArray[] = {
"label without mnemonics and markup", "label without mnemonics and markup",
"label with &mnemonic", "label with &mnemonic",
"label with <span foreground='blue'>some</span> <b>markup</b>", "label with <span foreground='blue'>some</span> <b>markup</b>",
"label with <span foreground='blue'>some</span> <b>markup</b> and &mnemonic", "label with <span foreground='blue'>some</span> <b>markup</b> and &mnemonic",
}; };
// test calls to SetLabel() and then to GetLabel() // test calls to SetLabel() and then to GetLabel()
for ( unsigned int s = 0; s < WXSIZEOF(testLabelArray); s++ ) for ( unsigned int s = 0; s < WXSIZEOF(testLabelArray); s++ )
{ {
SET_LABEL(testLabelArray[s]); SET_LABEL(testLabelArray[s]);
// GetLabel() should always return the string passed to SetLabel() // GetLabel() should always return the string passed to SetLabel()
CPPUNIT_ASSERT_EQUAL( testLabelArray[s], m_st->GetLabel() ); CPPUNIT_ASSERT_EQUAL( testLabelArray[s], m_st->GetLabel() );
CPPUNIT_ASSERT_EQUAL( testLabelArray[s], m_stWithMarkup->GetLabel() ); CPPUNIT_ASSERT_EQUAL( testLabelArray[s], m_stWithMarkup->GetLabel() );
CPPUNIT_ASSERT_EQUAL( testLabelArray[s], m_cb->GetLabel() ); CPPUNIT_ASSERT_EQUAL( testLabelArray[s], m_cb->GetLabel() );
} }
// test calls to SetLabelText() and then to GetLabel() // test calls to SetLabelText() and then to GetLabel()
const wxString& testLabel = "label without mnemonics and markup"; const wxString& testLabel = "label without mnemonics and markup";
SET_LABEL_TEXT(testLabel); SET_LABEL_TEXT(testLabel);
CPPUNIT_ASSERT_EQUAL( testLabel, m_st->GetLabel() ); CPPUNIT_ASSERT_EQUAL( testLabel, m_st->GetLabel() );
CPPUNIT_ASSERT_EQUAL( testLabel, m_stWithMarkup->GetLabel() ); CPPUNIT_ASSERT_EQUAL( testLabel, m_stWithMarkup->GetLabel() );
CPPUNIT_ASSERT_EQUAL( testLabel, m_cb->GetLabel() ); CPPUNIT_ASSERT_EQUAL( testLabel, m_cb->GetLabel() );
const wxString& testLabel2 = "label with &mnemonic"; const wxString& testLabel2 = "label with &mnemonic";
const wxString& testLabelText2 = "label with &&mnemonic"; const wxString& testLabelText2 = "label with &&mnemonic";
SET_LABEL_TEXT(testLabel2); SET_LABEL_TEXT(testLabel2);
CPPUNIT_ASSERT_EQUAL( testLabelText2, m_st->GetLabel() ); CPPUNIT_ASSERT_EQUAL( testLabelText2, m_st->GetLabel() );
CPPUNIT_ASSERT_EQUAL( "label with &amp;mnemonic", m_stWithMarkup->GetLabel() ); CPPUNIT_ASSERT_EQUAL( "label with &amp;mnemonic", m_stWithMarkup->GetLabel() );
CPPUNIT_ASSERT_EQUAL( testLabelText2, m_cb->GetLabel() ); CPPUNIT_ASSERT_EQUAL( testLabelText2, m_cb->GetLabel() );
const wxString& testLabel3 = "label with <span foreground='blue'>some</span> <b>markup</b>"; const wxString& testLabel3 = "label with <span foreground='blue'>some</span> <b>markup</b>";
SET_LABEL_TEXT(testLabel3); SET_LABEL_TEXT(testLabel3);
CPPUNIT_ASSERT_EQUAL( testLabel3, m_st->GetLabel() ); CPPUNIT_ASSERT_EQUAL( testLabel3, m_st->GetLabel() );
CPPUNIT_ASSERT_EQUAL( "label with &lt;span foreground=&apos;blue&apos;&gt;some&lt;/span&gt; &lt;b&gt;markup&lt;/b&gt;", m_stWithMarkup->GetLabel() ); CPPUNIT_ASSERT_EQUAL( "label with &lt;span foreground=&apos;blue&apos;&gt;some&lt;/span&gt; &lt;b&gt;markup&lt;/b&gt;", m_stWithMarkup->GetLabel() );
CPPUNIT_ASSERT_EQUAL( testLabel3, m_cb->GetLabel() ); CPPUNIT_ASSERT_EQUAL( testLabel3, m_cb->GetLabel() );
const wxString& testLabel4 = "label with <span foreground='blue'>some</span> <b>markup</b> and &mnemonic"; const wxString& testLabel4 = "label with <span foreground='blue'>some</span> <b>markup</b> and &mnemonic";
const wxString& testLabelText4 = "label with <span foreground='blue'>some</span> <b>markup</b> and &&mnemonic"; const wxString& testLabelText4 = "label with <span foreground='blue'>some</span> <b>markup</b> and &&mnemonic";
SET_LABEL_TEXT(testLabel4); SET_LABEL_TEXT(testLabel4);
CPPUNIT_ASSERT_EQUAL( testLabelText4, m_st->GetLabel() ); CPPUNIT_ASSERT_EQUAL( testLabelText4, m_st->GetLabel() );
CPPUNIT_ASSERT_EQUAL( "label with &lt;span foreground=&apos;blue&apos;&gt;some&lt;/span&gt; &lt;b&gt;markup&lt;/b&gt; and &amp;mnemonic", m_stWithMarkup->GetLabel() ); CPPUNIT_ASSERT_EQUAL( "label with &lt;span foreground=&apos;blue&apos;&gt;some&lt;/span&gt; &lt;b&gt;markup&lt;/b&gt; and &amp;mnemonic", m_stWithMarkup->GetLabel() );
CPPUNIT_ASSERT_EQUAL( testLabelText4, m_cb->GetLabel() ); CPPUNIT_ASSERT_EQUAL( testLabelText4, m_cb->GetLabel() );
} }
void LabelTestCase::GetLabelText() void LabelTestCase::GetLabelText()
{ {
// test calls to SetLabel() and then to GetLabelText() // test calls to SetLabel() and then to GetLabelText()
const wxString& testLabel = "label without mnemonics and markup"; const wxString& testLabel = "label without mnemonics and markup";
SET_LABEL(testLabel); SET_LABEL(testLabel);
CPPUNIT_ASSERT_EQUAL( testLabel, m_st->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( testLabel, m_st->GetLabelText() );
CPPUNIT_ASSERT_EQUAL( testLabel, m_stWithMarkup->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( testLabel, m_stWithMarkup->GetLabelText() );
CPPUNIT_ASSERT_EQUAL( testLabel, m_cb->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( testLabel, m_cb->GetLabelText() );
const wxString& testLabel2 = "label with &mnemonic"; const wxString& testLabel2 = "label with &mnemonic";
const wxString& testLabelText2 = "label with mnemonic"; const wxString& testLabelText2 = "label with mnemonic";
SET_LABEL(testLabel2); SET_LABEL(testLabel2);
CPPUNIT_ASSERT_EQUAL( testLabelText2, m_st->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( testLabelText2, m_st->GetLabelText() );
CPPUNIT_ASSERT_EQUAL( testLabelText2, m_stWithMarkup->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( testLabelText2, m_stWithMarkup->GetLabelText() );
CPPUNIT_ASSERT_EQUAL( testLabelText2, m_cb->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( testLabelText2, m_cb->GetLabelText() );
const wxString& testLabel3 = "label with <span foreground='blue'>some</span> <b>markup</b>"; const wxString& testLabel3 = "label with <span foreground='blue'>some</span> <b>markup</b>";
SET_LABEL(testLabel3); SET_LABEL(testLabel3);
CPPUNIT_ASSERT_EQUAL( testLabel3, m_st->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( testLabel3, m_st->GetLabelText() );
CPPUNIT_ASSERT_EQUAL( "label with some markup", m_stWithMarkup->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( "label with some markup", m_stWithMarkup->GetLabelText() );
CPPUNIT_ASSERT_EQUAL( testLabel3, m_cb->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( testLabel3, m_cb->GetLabelText() );
const wxString& testLabel4 = "label with <span foreground='blue'>some</span> <b>markup</b> and &mnemonic"; const wxString& testLabel4 = "label with <span foreground='blue'>some</span> <b>markup</b> and &mnemonic";
const wxString& testLabelText4 = "label with <span foreground='blue'>some</span> <b>markup</b> and mnemonic"; const wxString& testLabelText4 = "label with <span foreground='blue'>some</span> <b>markup</b> and mnemonic";
SET_LABEL(testLabel4); SET_LABEL(testLabel4);
CPPUNIT_ASSERT_EQUAL( testLabelText4, m_st->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( testLabelText4, m_st->GetLabelText() );
CPPUNIT_ASSERT_EQUAL( "label with some markup and mnemonic", m_stWithMarkup->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( "label with some markup and mnemonic", m_stWithMarkup->GetLabelText() );
CPPUNIT_ASSERT_EQUAL( testLabelText4, m_cb->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( testLabelText4, m_cb->GetLabelText() );
const wxString testLabelArray[] = { const wxString testLabelArray[] = {
"label without mnemonics and markup", "label without mnemonics and markup",
"label with &mnemonic", "label with &mnemonic",
"label with <span foreground='blue'>some</span> <b>markup</b>", "label with <span foreground='blue'>some</span> <b>markup</b>",
"label with <span foreground='blue'>some</span> <b>markup</b> and &mnemonic", "label with <span foreground='blue'>some</span> <b>markup</b> and &mnemonic",
}; };
// test calls to SetLabelText() and then to GetLabelText() // test calls to SetLabelText() and then to GetLabelText()
for ( unsigned int s = 0; s < WXSIZEOF(testLabelArray); s++ ) for ( unsigned int s = 0; s < WXSIZEOF(testLabelArray); s++ )
{ {
SET_LABEL_TEXT(testLabelArray[s]); SET_LABEL_TEXT(testLabelArray[s]);
// GetLabelText() should always return the string passed to SetLabelText() // GetLabelText() should always return the string passed to SetLabelText()
CPPUNIT_ASSERT_EQUAL( testLabelArray[s], m_st->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( testLabelArray[s], m_st->GetLabelText() );
CPPUNIT_ASSERT_EQUAL( testLabelArray[s], m_stWithMarkup->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( testLabelArray[s], m_stWithMarkup->GetLabelText() );
CPPUNIT_ASSERT_EQUAL( testLabelArray[s], m_cb->GetLabelText() ); CPPUNIT_ASSERT_EQUAL( testLabelArray[s], m_cb->GetLabelText() );
} }
} }
void LabelTestCase::Statics() void LabelTestCase::Statics()
{ {
CPPUNIT_ASSERT_EQUAL( "mnemonic", wxControl::RemoveMnemonics("&mnemonic") ); CPPUNIT_ASSERT_EQUAL( "mnemonic", wxControl::RemoveMnemonics("&mnemonic") );
CPPUNIT_ASSERT_EQUAL( "&mnemonic", wxControl::RemoveMnemonics("&&mnemonic") ); CPPUNIT_ASSERT_EQUAL( "&mnemonic", wxControl::RemoveMnemonics("&&mnemonic") );
CPPUNIT_ASSERT_EQUAL( "&mnemonic", wxControl::RemoveMnemonics("&&&mnemonic") ); CPPUNIT_ASSERT_EQUAL( "&mnemonic", wxControl::RemoveMnemonics("&&&mnemonic") );
CPPUNIT_ASSERT_EQUAL( "", wxStaticText::RemoveMarkup("<b></b>") ); CPPUNIT_ASSERT_EQUAL( "", wxStaticText::RemoveMarkup("<b></b>") );
} }