wxChoicebook generic implementation.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29148 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -452,6 +452,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
|
||||
src/common/xpmdecod.cpp
|
||||
src/generic/busyinfo.cpp
|
||||
src/generic/choicdgg.cpp
|
||||
src/generic/choicbkg.cpp
|
||||
src/generic/dcpsg.cpp
|
||||
src/generic/dirctrlg.cpp
|
||||
src/generic/dragimgg.cpp
|
||||
@@ -561,6 +562,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
|
||||
wx/bookctrl.h
|
||||
wx/busyinfo.h
|
||||
wx/caret.h
|
||||
wx/choicebk.h
|
||||
wx/clipbrd.h
|
||||
wx/cmdproc.h
|
||||
wx/colordlg.h
|
||||
@@ -2370,8 +2372,8 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
|
||||
</set>
|
||||
<set var="BASE_PLATFORM_SRC" hints="files">
|
||||
<if cond="PLATFORM_UNIX=='1'">$(BASE_UNIX_SRC)</if>
|
||||
<!--
|
||||
workaround until Bakefiles do not support more than one platform
|
||||
<!--
|
||||
workaround until Bakefiles do not support more than one platform
|
||||
for Open Watcom (DOS(MGL)/MSW) - do not include WIN32 base for DOS application
|
||||
-->
|
||||
<if cond="PLATFORM_WIN32=='1' and TOOLKIT!='MGL'">$(BASE_WIN32_SRC) $(BASE_WINCE_SRC)</if>
|
||||
@@ -2537,9 +2539,9 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
|
||||
$(NET_CMN_SRC) $(NET_UNIX_SRC) $(NET_WIN32_SRC) $(NET_WINCE_SRC)
|
||||
$(XML_SRC) $(ODBC_SRC)
|
||||
</set>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- ================================================================ -->
|
||||
<!-- Define where plugins sources go if USE_PLUGINS=0 -->
|
||||
<!-- ================================================================ -->
|
||||
@@ -2550,7 +2552,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
|
||||
$(UNIX_SOUND_SRC_SDL)
|
||||
</if>
|
||||
</set>
|
||||
|
||||
|
||||
<set var="PLUGIN_MONOLIB_SRC">$(PLUGIN_ADV_SRC)</set>
|
||||
|
||||
|
||||
</makefile>
|
||||
|
@@ -72,9 +72,9 @@ INCOMPATIBLE CHANGES SINCE 2.4.x
|
||||
At this time, the only situation known not to work the same as
|
||||
before is the following:
|
||||
|
||||
win = new SomeWidget(parent);
|
||||
win->SetSize(SomeNonDefaultSize);
|
||||
sizer->Add(win);
|
||||
win = new SomeWidget(parent);
|
||||
win->SetSize(SomeNonDefaultSize);
|
||||
sizer->Add(win);
|
||||
|
||||
In this case the old code would have used the new size as the
|
||||
minimum, but now the sizer will use the default size as the minimum
|
||||
@@ -227,6 +227,7 @@ All (GUI):
|
||||
- added wxTopLevelWindow::RequestUserAttention()
|
||||
- support for comma in contrib gizmo wxLEDNumberCtrl (Grant Likely)
|
||||
- recursive wxSizer::Show for subsizer and return value if element was found
|
||||
- added wxChoicebook control
|
||||
|
||||
Unix:
|
||||
|
||||
@@ -404,7 +405,6 @@ All:
|
||||
|
||||
All (GUI):
|
||||
|
||||
- added wxListBook control
|
||||
- added 3-state checkboxes for MSW/Mac (Dimitri Schoolwerth)
|
||||
- added some support for C++ exceptions in the library (do read the manual!)
|
||||
- added wxListCtrl::GetViewRect()
|
||||
@@ -545,7 +545,7 @@ wxBase:
|
||||
All GUI ports:
|
||||
|
||||
- added wxVScrolledWindow, wxVListBox and wxHtmlLbox classes
|
||||
- added wxListbook
|
||||
- added wxListbook control
|
||||
- added alpha channel support to wxImage
|
||||
- added wxRenderer class allowing to customize the drawing of generic controls
|
||||
- added wxCLOSE_BOX style for dialogs and frames
|
||||
|
@@ -42,6 +42,7 @@ The following are a variety of classes that are derived from wxWindow.
|
||||
%\twocolitem{\helpref{wxTabbedPanel}{wxtabbedpanel}}{Tabbed panel (to be replaced with wxNotebook)}
|
||||
\twocolitem{\helpref{wxNotebook}{wxnotebook}}{Notebook class}
|
||||
\twocolitem{\helpref{wxListbook}{wxlistbook}}{Similar to notebook but using list control}
|
||||
\twocolitem{\helpref{wxChoicebook}{wxchoicebook}}{Similar to notebook but using choice control}
|
||||
\twocolitem{\helpref{wxPlotWindow}{wxplotwindow}}{A class to display data.}
|
||||
\twocolitem{\helpref{wxSashWindow}{wxsashwindow}}{Window with four optional sashes that can be dragged}
|
||||
\twocolitem{\helpref{wxSashLayoutWindow}{wxsashlayoutwindow}}{Window that can be involved in an IDE-like layout arrangement}
|
||||
|
52
docs/latex/wx/choicebk.tex
Normal file
52
docs/latex/wx/choicebk.tex
Normal file
@@ -0,0 +1,52 @@
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%% Name: choicebk.tex
|
||||
%% Purpose: wxChoicebook documentation
|
||||
%% Author: Vadim Zeitlin
|
||||
%% Modified by: Wlodzimierz ABX Skiba from listbook.tex
|
||||
%% Created: 15.09.04
|
||||
%% RCS-ID: $Id$
|
||||
%% Copyright: (c) Vadim Zeitlin, Wlodzimierz Skiba
|
||||
%% License: wxWidgets license
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
\section{\class{wxChoicebook}}\label{wxchoicebook}
|
||||
|
||||
wxChoicebook is a class similar to \helpref{wxNotebook}{wxnotebook} but which
|
||||
uses a \helpref{wxChoice}{wxchoice} to show the labels instead of the
|
||||
tabs.
|
||||
|
||||
There is no documentation for this class yet but its usage is
|
||||
identical to wxNotebook (except for the features clearly related to tabs
|
||||
only), so please refer to that class documentation for now. You can also
|
||||
use the \helpref{notebook sample}{samplenotebook} to see wxChoicebook in action.
|
||||
|
||||
\wxheading{Derived from}
|
||||
|
||||
\helpref{wxControl}{wxcontrol}\\
|
||||
\helpref{wxWindow}{wxwindow}\\
|
||||
\helpref{wxEvtHandler}{wxevthandler}\\
|
||||
\helpref{wxObject}{wxobject}
|
||||
|
||||
\wxheading{Include files}
|
||||
|
||||
<wx/choicebk.h>
|
||||
|
||||
\wxheading{Window styles}
|
||||
|
||||
\twocolwidtha{5cm}
|
||||
\begin{twocollist}\itemsep=0pt
|
||||
|
||||
\twocolitem{\windowstyle{wxCHB\_DEFAULT}}{Choose the default location for the
|
||||
labels depending on the current platform (left everywhere except Mac where
|
||||
it is top).}
|
||||
\twocolitem{\windowstyle{wxCHB\_TOP}}{Place labels above the page area.}
|
||||
\twocolitem{\windowstyle{wxCHB\_LEFT}}{Place labels on the left side.}
|
||||
\twocolitem{\windowstyle{wxCHB\_RIGHT}}{Place labels on the right side.}
|
||||
\twocolitem{\windowstyle{wxCHB\_BOTTOM}}{Place labels below the page area.}
|
||||
|
||||
\end{twocollist}
|
||||
|
||||
\wxheading{See also}
|
||||
|
||||
\helpref{wxNotebook}{wxnotebook}, \helpref{notebook sample}{samplenotebook}
|
||||
|
@@ -30,6 +30,7 @@
|
||||
\input checkbox.tex
|
||||
\input checklst.tex
|
||||
\input choice.tex
|
||||
\input choicebk.tex
|
||||
\input clasinfo.tex
|
||||
\input ipcclint.tex
|
||||
\input clientdc.tex
|
||||
|
@@ -21,12 +21,12 @@ didn't help. They also provide some notes about using the samples and what
|
||||
features of wxWidgets are they supposed to test.
|
||||
|
||||
There are currently more than 50 different samples as part of wxWidgets and
|
||||
this list is not complete. You should start your tour of wxWidgets with the
|
||||
this list is not complete. You should start your tour of wxWidgets with the
|
||||
\helpref{minimal sample}{sampleminimal} which is the wxWidgets version of
|
||||
"Hello, world!". It shows the basic structure of wxWidgets program and is the
|
||||
most commented sample of all - looking at its source code is recommended.
|
||||
|
||||
The next most useful sample is probably the \helpref{controls}{samplecontrols}
|
||||
The next most useful sample is probably the \helpref{controls}{samplecontrols}
|
||||
one which shows many of wxWidgets standard controls, such as buttons,
|
||||
listboxes, checkboxes, comboboxes etc.
|
||||
|
||||
@@ -96,7 +96,7 @@ wxWidgets. The sample tests their basic functionality, events, placement,
|
||||
modification in terms of colour and font as well as the possibility to change
|
||||
the controls programmatically, such as adding an item to a list box etc. Apart
|
||||
from that, the sample uses a \helpref{wxNotebook}{wxnotebook} and tests most
|
||||
features of this special control (using bitmap in the tabs, using
|
||||
features of this special control (using bitmap in the tabs, using
|
||||
\helpref{wxSizers}{wxsizer} and \helpref{constraints}{wxlayoutconstraints} within
|
||||
notebook pages, advancing pages programmatically and vetoing a page change
|
||||
by intercepting the \helpref{wxNotebookEvent}{wxnotebookevent}.
|
||||
@@ -125,7 +125,7 @@ The various controls tested are listed here:
|
||||
\subsection{Database sample}\label{sampledb}
|
||||
|
||||
The database sample is a small test program showing how to use the ODBC
|
||||
classes written by Remstar Intl. Obviously, this sample requires a
|
||||
classes written by Remstar Intl. Obviously, this sample requires a
|
||||
database with ODBC support to be correctly installed on your system.
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@ dialogs are described in detail in the \helpref{Common dialogs overview}{commond
|
||||
|
||||
\subsection{Dialup sample}\label{sampledialup}
|
||||
|
||||
This sample shows the \helpref{wxDialUpManager}{wxdialupmanager}
|
||||
This sample shows the \helpref{wxDialUpManager}{wxdialupmanager}
|
||||
class. In the status bar, it displays the information gathered through its
|
||||
interface: in particular, the current connection status (online or offline) and
|
||||
whether the connection is permanent (in which case a string `LAN' appears in
|
||||
@@ -156,9 +156,9 @@ trivial and may be safely used as a basis for implementing the clipboard and
|
||||
drag and drop operations in a real-life program.
|
||||
|
||||
When you run the sample, its screen is split in several parts. On the top,
|
||||
there are two listboxes which show the standard derivations of
|
||||
\helpref{wxDropTarget}{wxdroptarget}:
|
||||
\helpref{wxTextDropTarget}{wxtextdroptarget} and
|
||||
there are two listboxes which show the standard derivations of
|
||||
\helpref{wxDropTarget}{wxdroptarget}:
|
||||
\helpref{wxTextDropTarget}{wxtextdroptarget} and
|
||||
\helpref{wxFileDropTarget}{wxfiledroptarget}.
|
||||
|
||||
The middle of the sample window is taken by the log window which shows what is
|
||||
@@ -184,7 +184,7 @@ bitmaps which allows them to be pasted/dropped in many other applications
|
||||
(and, under Windows, also as metafiles which are supported by most of Windows
|
||||
programs as well - try Write/Wordpad, for example).
|
||||
|
||||
Take a look at DnDShapeDataObject class to see how you may use
|
||||
Take a look at DnDShapeDataObject class to see how you may use
|
||||
\helpref{wxDataObject}{wxdataobject} to achieve this.
|
||||
|
||||
|
||||
@@ -205,7 +205,7 @@ See also the \helpref{event sample}{sampleevent}
|
||||
|
||||
The event sample demonstrates various features of the wxWidgets events. It
|
||||
shows using dynamic events and connecting/disconnecting the event handlers
|
||||
during run time and also using
|
||||
during run time and also using
|
||||
\helpref{PushEventHandler()}{wxwindowpusheventhandler} and
|
||||
\helpref{PopEventHandler()}{wxwindowpopeventhandler}.
|
||||
|
||||
@@ -226,21 +226,21 @@ sample.
|
||||
|
||||
\subsection{Exec sample}\label{sampleexec}
|
||||
|
||||
The exec sample demonstrates the \helpref{wxExecute}{wxexecute} and
|
||||
The exec sample demonstrates the \helpref{wxExecute}{wxexecute} and
|
||||
\helpref{wxShell}{wxshell} functions. Both of them are used to execute the
|
||||
external programs and the sample shows how to do this synchronously (waiting
|
||||
until the program terminates) or asynchronously (notification will come later).
|
||||
|
||||
It also shows how to capture the output of the child process in both
|
||||
synchronous and asynchronous cases and how to kill the processes with
|
||||
\helpref{wxProcess::Kill}{wxprocesskill} and test for their existence with
|
||||
synchronous and asynchronous cases and how to kill the processes with
|
||||
\helpref{wxProcess::Kill}{wxprocesskill} and test for their existence with
|
||||
\helpref{wxProcess::Exists}{wxprocessexists}.
|
||||
|
||||
|
||||
\subsection{Font sample}\label{samplefont}
|
||||
|
||||
The font sample demonstrates \helpref{wxFont}{wxfont},
|
||||
\helpref{wxFontEnumerator}{wxfontenumerator} and
|
||||
The font sample demonstrates \helpref{wxFont}{wxfont},
|
||||
\helpref{wxFontEnumerator}{wxfontenumerator} and
|
||||
\helpref{wxFontMapper}{wxfontmapper} classes. It allows you to see the fonts
|
||||
available (to wxWidgets) on the computer and shows all characters of the
|
||||
chosen font as well.
|
||||
@@ -256,7 +256,7 @@ TODO.
|
||||
Eight HTML samples (you can find them in directory {\tt samples/html})
|
||||
cover all features of the HTML sub-library.
|
||||
|
||||
{\bf Test} demonstrates how to create \helpref{wxHtmlWindow}{wxhtmlwindow}
|
||||
{\bf Test} demonstrates how to create \helpref{wxHtmlWindow}{wxhtmlwindow}
|
||||
and also shows most supported HTML tags.
|
||||
|
||||
{\bf Widget} shows how you can embed ordinary controls or windows within an
|
||||
@@ -266,18 +266,18 @@ the library to work with unsupported tags.
|
||||
{\bf About} may give you an idea how to write good-looking About boxes.
|
||||
|
||||
{\bf Zip} demonstrates use of virtual file systems in wxHTML. The zip archives
|
||||
handler (ships with wxWidgets) allows you to access HTML pages stored
|
||||
handler (ships with wxWidgets) allows you to access HTML pages stored
|
||||
in a compressed archive as if they were ordinary files.
|
||||
|
||||
{\bf Virtual} is yet another virtual file systems demo. This one generates pages at run-time.
|
||||
You may find it useful if you need to display some reports in your application.
|
||||
|
||||
{\bf Printing} explains use of \helpref{wxHtmlEasyPrinting}{wxhtmleasyprinting}
|
||||
class which serves as as-simple-as-possible interface for printing HTML
|
||||
{\bf Printing} explains use of \helpref{wxHtmlEasyPrinting}{wxhtmleasyprinting}
|
||||
class which serves as as-simple-as-possible interface for printing HTML
|
||||
documents without much work. In fact, only few function calls are sufficient.
|
||||
|
||||
{\bf Help} and {\bf Helpview} are variations on displaying HTML help
|
||||
(compatible with MS HTML Help Workshop). {\it Help} shows how to embed
|
||||
{\bf Help} and {\bf Helpview} are variations on displaying HTML help
|
||||
(compatible with MS HTML Help Workshop). {\it Help} shows how to embed
|
||||
\helpref{wxHtmlHelpController}{wxhtmlhelpcontroller} in your application
|
||||
while {\it Helpview} is a simple tool that only pops up the help window and
|
||||
displays help books given at command line.
|
||||
@@ -288,15 +288,15 @@ displays help books given at command line.
|
||||
The image sample demonstrates use of the \helpref{wxImage}{wximage} class
|
||||
and shows how to download images in a variety of formats, currently PNG, GIF,
|
||||
TIFF, JPEG, BMP, PNM and PCX. The top of the sample shows two rectangles, one
|
||||
of which is drawn directly in the window, the other one is drawn into a
|
||||
of which is drawn directly in the window, the other one is drawn into a
|
||||
\helpref{wxBitmap}{wxbitmap}, converted to a wxImage, saved as a PNG image
|
||||
and then reloaded from the PNG file again so that conversions between wxImage
|
||||
and wxBitmap as well as loading and saving PNG files are tested.
|
||||
|
||||
At the bottom of the main frame there is a test for using a monochrome bitmap by
|
||||
drawing into a \helpref{wxMemoryDC}{wxmemorydc}. The bitmap is then drawn
|
||||
specifying the foreground and background colours with
|
||||
\helpref{wxDC::SetTextForeground}{wxdcsettextforeground} and
|
||||
specifying the foreground and background colours with
|
||||
\helpref{wxDC::SetTextForeground}{wxdcsettextforeground} and
|
||||
\helpref{wxDC::SetTextBackground}{wxdcsettextbackground} (on the left). The
|
||||
bitmap is then converted to a wxImage and the foreground colour (black) is
|
||||
replaced with red using \helpref{wxImage::Replace}{wximagereplace}.
|
||||
@@ -320,14 +320,14 @@ The layout sample demonstrates the two different layout systems offered
|
||||
by wxWidgets. When starting the program, you will see a frame with some
|
||||
controls and some graphics. The controls will change their size whenever
|
||||
you resize the entire frame and the exact behaviour of the size changes
|
||||
is determined using the \helpref{wxLayoutConstraints}{wxlayoutconstraints}
|
||||
class. See also the \helpref{overview}{constraintsoverview} and the
|
||||
\helpref{wxIndividualLayoutConstraint}{wxindividuallayoutconstraint}
|
||||
is determined using the \helpref{wxLayoutConstraints}{wxlayoutconstraints}
|
||||
class. See also the \helpref{overview}{constraintsoverview} and the
|
||||
\helpref{wxIndividualLayoutConstraint}{wxindividuallayoutconstraint}
|
||||
class for further information.
|
||||
|
||||
The menu in this sample offers two more tests, one showing how to use
|
||||
a \helpref{wxBoxSizer}{wxboxsizer} in a simple dialog and the other one
|
||||
showing how to use sizers in connection with a \helpref{wxNotebook}{wxnotebook}
|
||||
showing how to use sizers in connection with a \helpref{wxNotebook}{wxnotebook}
|
||||
class. See also \helpref{wxSizer}{wxsizer}.
|
||||
|
||||
|
||||
@@ -346,15 +346,16 @@ The sample also provides some timings for adding/deleting/sorting a lot of
|
||||
|
||||
This samples shows two controls at once: although initially it was written to
|
||||
demonstrate \helpref{wxNotebook}{wxnotebook} only, it can now be also used
|
||||
to see \helpref{wxListbook}{wxlistbook} in action. To switch between the two
|
||||
controls you need to manually change \texttt{TEST\_LISTBOOK} definition in the
|
||||
file \texttt{notebook.h} and rebuild the sample.
|
||||
to see \helpref{wxListbook}{wxlistbook} and \helpref{wxChoicebook}{wxchoicebook}
|
||||
in action. To switch between the two controls you need to manually change
|
||||
\texttt{TEST\_LISTBOOK} definition in the file \texttt{notebook.h} and rebuild
|
||||
the sample.
|
||||
|
||||
|
||||
|
||||
\subsection{Render sample}\label{samplerender}
|
||||
|
||||
This sample shows how to replace the default wxWidgets
|
||||
This sample shows how to replace the default wxWidgets
|
||||
\helpref{renderer}{wxrenderernative} and also how to write a shared library
|
||||
(DLL) implementing a renderer and load and unload it during the run-time.
|
||||
|
||||
@@ -371,14 +372,14 @@ better results.
|
||||
|
||||
\subsection{Scroll subwindow sample}\label{samplescrollsub}
|
||||
|
||||
This sample demonstrates use of the \helpref{wxScrolledWindow}{wxscrolledwindow}
|
||||
class including placing subwindows into it and drawing simple graphics. It uses the
|
||||
This sample demonstrates use of the \helpref{wxScrolledWindow}{wxscrolledwindow}
|
||||
class including placing subwindows into it and drawing simple graphics. It uses the
|
||||
\helpref{SetTargetWindow}{wxscrolledwindowsettargetwindow} method and thus the effect
|
||||
of scrolling does not show in the scrolled window itself, but in one of its subwindows.
|
||||
|
||||
Additionally, this samples demonstrates how to optimize drawing operations in wxWidgets,
|
||||
in particular using the \helpref{wxWindow::IsExposed}{wxwindowisexposed} method with
|
||||
the aim to prevent unnecessary drawing in the window and thus reducing or removing
|
||||
in particular using the \helpref{wxWindow::IsExposed}{wxwindowisexposed} method with
|
||||
the aim to prevent unnecessary drawing in the window and thus reducing or removing
|
||||
flicker on screen.
|
||||
|
||||
|
||||
@@ -386,7 +387,7 @@ flicker on screen.
|
||||
|
||||
The sockets sample demonstrates how to use the communication facilities
|
||||
provided by \helpref{wxSocket}{wxsocketbase}. There are two different
|
||||
applications in this sample: a server, which is implemented using a
|
||||
applications in this sample: a server, which is implemented using a
|
||||
\helpref{wxSocketServer}{wxsocketserver} object, and a client, which
|
||||
is implemented as a \helpref{wxSocketClient}{wxsocketclient}.
|
||||
|
||||
@@ -397,7 +398,7 @@ sets up an event handler to be notified of incoming connection requests
|
||||
a new \helpref{wxSocketBase}{wxsocketbase} object is created. These
|
||||
socket objects are independent from the server that created them, so
|
||||
they set up their own event handler, and then request to be notified
|
||||
of {\bf wxSOCKET\_INPUT} (incoming data) or {\bf wxSOCKET\_LOST}
|
||||
of {\bf wxSOCKET\_INPUT} (incoming data) or {\bf wxSOCKET\_LOST}
|
||||
(connection closed at the remote end) events. In the sample, the event
|
||||
handler is the same for all connections; to find out which socket the
|
||||
event is addressed to, the \helpref{GetSocket}{wxsocketeventgetsocket} function
|
||||
@@ -414,7 +415,7 @@ to specify the address of the server you are going to connect to (the
|
||||
TCP port number is hard-coded as 3000). Once connected, a number of
|
||||
tests are possible. Currently, three tests are implemented. They show
|
||||
how to use the basic IO calls in \helpref{wxSocketBase}{wxsocketbase},
|
||||
such as \helpref{Read}{wxsocketbaseread}, \helpref{Write}{wxsocketbasewrite},
|
||||
such as \helpref{Read}{wxsocketbaseread}, \helpref{Write}{wxsocketbasewrite},
|
||||
\helpref{ReadMsg}{wxsocketbasereadmsg} and \helpref{WriteMsg}{wxsocketbasewritemsg},
|
||||
and how to set up the correct IO flags depending on what you are going to
|
||||
do. See the comments in the code for more information. Note that because
|
||||
@@ -465,7 +466,7 @@ in a log window at the bottom of the main window. By pressing some of the functi
|
||||
keys, you can test some actions in the text ctrl as well as get statistics on the
|
||||
text ctrls, which is useful for testing if these statistics actually are correct.
|
||||
|
||||
Thirdly, on platforms which support it, the sample will offer to copy text to the
|
||||
Thirdly, on platforms which support it, the sample will offer to copy text to the
|
||||
\helpref{wxClipboard}{wxclipboard} and to paste text from it. The GTK version will
|
||||
use the so called PRIMARY SELECTION, which is the pseudo clipboard under X and
|
||||
best known from pasting text to the XTerm program.
|
||||
@@ -481,14 +482,14 @@ There are two fundamentally different ways to use threads in GUI programs and
|
||||
either way has to take care of the fact that the GUI library itself usually
|
||||
is not multi-threading safe, i.e. that it might crash if two threads try to
|
||||
access the GUI class simultaneously. One way to prevent that is have a normal
|
||||
GUI program in the main thread and some worker threads which work in the
|
||||
GUI program in the main thread and some worker threads which work in the
|
||||
background. In order to make communication between the main thread and the
|
||||
worker threads possible, wxWidgets offers the \helpref{wxPostEvent}{wxpostevent}
|
||||
worker threads possible, wxWidgets offers the \helpref{wxPostEvent}{wxpostevent}
|
||||
function and this sample makes use of this function.
|
||||
|
||||
The other way to use a so called Mutex (such as those offered in the \helpref{wxMutex}{wxmutex}
|
||||
The other way to use a so called Mutex (such as those offered in the \helpref{wxMutex}{wxmutex}
|
||||
class) that prevent threads from accessing the GUI classes as long as any other
|
||||
thread accesses them. For this, wxWidgets has the \helpref{wxMutexGuiEnter}{wxmutexguienter}
|
||||
thread accesses them. For this, wxWidgets has the \helpref{wxMutexGuiEnter}{wxmutexguienter}
|
||||
and \helpref{wxMutexGuiLeave}{wxmutexguileave} functions, both of which are
|
||||
used and tested in the sample as well.
|
||||
|
||||
@@ -502,13 +503,13 @@ The toolbar sample shows the \helpref{wxToolBar}{wxtoolbar} class in action.
|
||||
The following things are demonstrated:
|
||||
|
||||
\begin{itemize}\itemsep=0pt
|
||||
\item Creating the toolbar using \helpref{wxToolBar::AddTool}{wxtoolbaraddtool}
|
||||
\item Creating the toolbar using \helpref{wxToolBar::AddTool}{wxtoolbaraddtool}
|
||||
and \helpref{wxToolBar::AddControl}{wxtoolbaraddcontrol}: see
|
||||
MyApp::InitToolbar in the sample.
|
||||
\item Using {\tt EVT\_UPDATE\_UI} handler for automatically enabling/disabling
|
||||
toolbar buttons without having to explicitly call EnableTool. This is done
|
||||
in MyFrame::OnUpdateCopyAndCut.
|
||||
\item Using \helpref{wxToolBar::DeleteTool}{wxtoolbardeletetool} and
|
||||
\item Using \helpref{wxToolBar::DeleteTool}{wxtoolbardeletetool} and
|
||||
\helpref{wxToolBar::InsertTool}{wxtoolbarinserttool} to dynamically update the
|
||||
toolbar.
|
||||
\end{itemize}
|
||||
@@ -538,7 +539,7 @@ demonstrated here as well - try the corresponding menu entries.
|
||||
|
||||
\subsection{Wizard sample}\label{samplewizard}
|
||||
|
||||
This sample shows the so-called wizard dialog (implemented using
|
||||
This sample shows the so-called wizard dialog (implemented using
|
||||
\helpref{wxWizard}{wxwizard} and related classes). It shows almost all
|
||||
features supported:
|
||||
|
||||
@@ -546,7 +547,7 @@ features supported:
|
||||
\item Using bitmaps with the wizard and changing them depending on the page
|
||||
shown (notice that wxValidationPage in the sample has a different image from
|
||||
the other ones)
|
||||
\item Using \helpref{TransferDataFromWindow}{wxwindowtransferdatafromwindow}
|
||||
\item Using \helpref{TransferDataFromWindow}{wxwindowtransferdatafromwindow}
|
||||
to verify that the data entered is correct before passing to the next page
|
||||
(done in wxValidationPage which forces the user to check a checkbox before
|
||||
continuing).
|
||||
@@ -556,7 +557,7 @@ page, but not continuing to the next one or vice versa (in wxRadioboxPage)
|
||||
Cancel} button itself instead of relying on the wizard parent to do it.
|
||||
\item Normally, the order of the pages in the wizard is known at compile-time,
|
||||
but sometimes it depends on the user choices: wxCheckboxPage shows how to
|
||||
dynamically decide which page to display next (see also
|
||||
dynamically decide which page to display next (see also
|
||||
\helpref{wxWizardPage}{wxwizardpage})
|
||||
\end{itemize}
|
||||
|
||||
|
@@ -291,6 +291,14 @@
|
||||
# endif
|
||||
#endif /* !defined(wxUSE_CHOICE) */
|
||||
|
||||
#ifndef wxUSE_CHOICEBOOK
|
||||
# ifdef wxABORT_ON_CONFIG_ERROR
|
||||
# error "wxUSE_CHOICEBOOK must be defined."
|
||||
# else
|
||||
# define wxUSE_CHOICEBOOK 0
|
||||
# endif
|
||||
#endif /* !defined(wxUSE_CHOICEBOOK) */
|
||||
|
||||
#ifndef wxUSE_CHOICEDLG
|
||||
# ifdef wxABORT_ON_CONFIG_ERROR
|
||||
# error "wxUSE_CHOICEDLG must be defined."
|
||||
@@ -957,7 +965,7 @@
|
||||
# endif
|
||||
#endif /* wxUSE_BMPBUTTON */
|
||||
|
||||
#if wxUSE_NOTEBOOK || wxUSE_LISTBOOK
|
||||
#if wxUSE_NOTEBOOK || wxUSE_LISTBOOK || wxUSE_CHOICEBOOK
|
||||
# if defined(wxUSE_BOOKCTRL) && !wxUSE_BOOKCTRL
|
||||
# ifdef wxABORT_ON_CONFIG_ERROR
|
||||
# error "wxUSE_BOOKCTRL must be set."
|
||||
@@ -982,6 +990,17 @@
|
||||
# endif
|
||||
#endif /* wxUSE_LISTBOOK */
|
||||
|
||||
#if wxUSE_CHOICEBOOK
|
||||
# if !wxUSE_CHOICE
|
||||
# ifdef wxABORT_ON_CONFIG_ERROR
|
||||
# error "wxChoicebook requires wxChoice"
|
||||
# else
|
||||
# undef wxUSE_CHOICE
|
||||
# define wxUSE_CHOICE 1
|
||||
# endif
|
||||
# endif
|
||||
#endif /* wxUSE_CHOICEBOOK */
|
||||
|
||||
/* wxUniv-specific dependencies */
|
||||
#if defined(__WXUNIVERSAL__)
|
||||
# if (wxUSE_COMBOBOX || wxUSE_MENUS) && !wxUSE_POPUPWIN
|
||||
|
170
include/wx/choicebk.h
Normal file
170
include/wx/choicebk.h
Normal file
@@ -0,0 +1,170 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/choicebk.h
|
||||
// Purpose: wxChoicebook: wxChoice and wxNotebook combination
|
||||
// Author: Vadim Zeitlin
|
||||
// Modified by: Wlodzimierz ABX Skiba from wx/listbook.h
|
||||
// Created: 15.09.04
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Vadim Zeitlin, Wlodzimierz Skiba
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_CHOICEBOOK_H_
|
||||
#define _WX_CHOICEBOOK_H_
|
||||
|
||||
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
|
||||
#pragma interface "choicebook.h"
|
||||
#endif
|
||||
|
||||
#include "wx/defs.h"
|
||||
|
||||
#if wxUSE_CHOICEBOOK
|
||||
|
||||
#include "wx/bookctrl.h"
|
||||
|
||||
class WXDLLEXPORT wxChoice;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// constants
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// wxChoicebook styles
|
||||
enum
|
||||
{
|
||||
// default alignment: top everywhere
|
||||
wxCHB_DEFAULT = 0,
|
||||
|
||||
// put the choice control to the left/right/top/bottom of the page area
|
||||
wxCHB_TOP = 0x1,
|
||||
wxCHB_BOTTOM = 0x2,
|
||||
wxCHB_LEFT = 0x4,
|
||||
wxCHB_RIGHT = 0x8,
|
||||
|
||||
// the mask which can be used to extract the alignment from the style
|
||||
wxCHB_ALIGN_MASK = 0xf
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxChoicebook
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxChoicebook : public wxBookCtrl
|
||||
{
|
||||
public:
|
||||
wxChoicebook()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
wxChoicebook(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = 0,
|
||||
const wxString& name = wxEmptyString)
|
||||
{
|
||||
Init();
|
||||
|
||||
(void)Create(parent, id, pos, size, style, name);
|
||||
}
|
||||
|
||||
// quasi ctor
|
||||
bool Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = 0,
|
||||
const wxString& name = wxEmptyString);
|
||||
|
||||
|
||||
virtual int GetSelection() const;
|
||||
virtual bool SetPageText(size_t n, const wxString& strText);
|
||||
virtual wxString GetPageText(size_t n) const;
|
||||
virtual int GetPageImage(size_t n) const;
|
||||
virtual bool SetPageImage(size_t n, int imageId);
|
||||
virtual wxSize CalcSizeFromPage(const wxSize& sizePage) const;
|
||||
virtual bool InsertPage(size_t n,
|
||||
wxWindow *page,
|
||||
const wxString& text,
|
||||
bool bSelect = false,
|
||||
int imageId = -1);
|
||||
virtual int SetSelection(size_t n);
|
||||
virtual void SetImageList(wxImageList *imageList);
|
||||
|
||||
// returns true if we have wxCHB_TOP or wxCHB_BOTTOM style
|
||||
bool IsVertical() const { return HasFlag(wxCHB_BOTTOM | wxCHB_TOP); }
|
||||
|
||||
virtual bool DeleteAllPages();
|
||||
|
||||
protected:
|
||||
virtual wxWindow *DoRemovePage(size_t page);
|
||||
|
||||
private:
|
||||
// common part of all constructors
|
||||
void Init();
|
||||
|
||||
// get the size which the choice control should have
|
||||
wxSize GetChoiceSize() const;
|
||||
|
||||
// get the page area
|
||||
wxRect GetPageRect() const;
|
||||
|
||||
// event handlers
|
||||
void OnSize(wxSizeEvent& event);
|
||||
void OnChoiceSelected(wxCommandEvent& event);
|
||||
|
||||
|
||||
// the choice control we use for showing the pages index
|
||||
wxChoice *m_choice;
|
||||
|
||||
// the currently selected page or wxNOT_FOUND if none
|
||||
int m_selection;
|
||||
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
DECLARE_DYNAMIC_CLASS_NO_COPY(wxChoicebook)
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// choicebook event class and related stuff
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxChoicebookEvent : public wxBookCtrlEvent
|
||||
{
|
||||
public:
|
||||
wxChoicebookEvent(wxEventType commandType = wxEVT_NULL, int id = 0,
|
||||
int nSel = -1, int nOldSel = -1)
|
||||
: wxBookCtrlEvent(commandType, id, nSel, nOldSel)
|
||||
{
|
||||
}
|
||||
|
||||
private:
|
||||
DECLARE_DYNAMIC_CLASS_NO_COPY(wxChoicebookEvent)
|
||||
};
|
||||
|
||||
extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED;
|
||||
extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING;
|
||||
|
||||
typedef void (wxEvtHandler::*wxChoicebookEventFunction)(wxChoicebookEvent&);
|
||||
|
||||
#define EVT_CHOICEBOOK_PAGE_CHANGED(id, fn) \
|
||||
DECLARE_EVENT_TABLE_ENTRY( \
|
||||
wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED, \
|
||||
id, \
|
||||
-1, \
|
||||
(wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxChoicebookEventFunction, &fn ), \
|
||||
NULL \
|
||||
),
|
||||
|
||||
#define EVT_CHOICEBOOK_PAGE_CHANGING(id, fn) \
|
||||
DECLARE_EVENT_TABLE_ENTRY( \
|
||||
wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING, \
|
||||
id, \
|
||||
-1, \
|
||||
(wxObjectEventFunction)(wxEventFunction) wxStaticCastEvent( wxChoicebookEventFunction, &fn ), \
|
||||
NULL \
|
||||
),
|
||||
|
||||
#endif // wxUSE_CHOICEBOOK
|
||||
|
||||
#endif // _WX_CHOICEBOOK_H_
|
@@ -127,7 +127,7 @@
|
||||
// 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. You may need to set
|
||||
// this to 0 if using templates (at least for VC++). This switch is currently
|
||||
// ignored for mingw / cygwin
|
||||
// ignored for mingw / cygwin
|
||||
//
|
||||
// Default is 0
|
||||
//
|
||||
@@ -542,6 +542,14 @@
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_LISTBOOK 1
|
||||
|
||||
// wxChoicebook control is similar to wxNotebook but uses wxChoice instead of
|
||||
// the tabs
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_CHOICEBOOK 1
|
||||
|
||||
// wxTabDialog is a generic version of wxNotebook but it is incompatible with
|
||||
// the new class. It shouldn't be used in new code.
|
||||
//
|
||||
@@ -768,7 +776,7 @@
|
||||
// wxWebKit is a wrapper for Apple's WebKit framework, use it if you want to embed
|
||||
// the Safari browser control
|
||||
// 0 by default because of Jaguar compatibility problems
|
||||
#define wxUSE_WEBKIT 0
|
||||
#define wxUSE_WEBKIT 0
|
||||
|
||||
// OpenGL canvas
|
||||
#define wxUSE_GLCANVAS 0
|
||||
|
@@ -573,6 +573,14 @@
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_LISTBOOK 1
|
||||
|
||||
// wxChoicebook control is similar to wxNotebook but uses wxChoice instead of
|
||||
// the tabs
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_CHOICEBOOK 1
|
||||
|
||||
// wxTabDialog is a generic version of wxNotebook but it is incompatible with
|
||||
// the new class. It shouldn't be used in new code.
|
||||
//
|
||||
|
@@ -565,6 +565,14 @@
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_LISTBOOK 1
|
||||
|
||||
// wxChoicebook control is similar to wxNotebook but uses wxChoice instead of
|
||||
// the tabs
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_CHOICEBOOK 1
|
||||
|
||||
// wxTabDialog is a generic version of wxNotebook but it is incompatible with
|
||||
// the new class. It shouldn't be used in new code.
|
||||
//
|
||||
@@ -905,7 +913,7 @@
|
||||
// that use the connection) should support forward only scrolling of cursors,
|
||||
// or both forward and backward support for backward scrolling cursors is
|
||||
// dependent on the data source as well as the ODBC driver being used.
|
||||
#define wxODBC_FWD_ONLY_CURSORS 1
|
||||
#define wxODBC_FWD_ONLY_CURSORS 1
|
||||
|
||||
// Default is 0. Set to 1 to use the deprecated classes, enum types, function,
|
||||
// member variables. With a setting of 1, full backward compatability with the
|
||||
|
@@ -123,6 +123,7 @@
|
||||
#define wxUSE_MSGDLG 1
|
||||
#define wxUSE_NOTEBOOK 1
|
||||
#define wxUSE_LISTBOOK 1
|
||||
#define wxUSE_CHOICEBOOK 1
|
||||
#define wxUSE_SPLITTER 1
|
||||
#define wxUSE_STOPWATCH 1
|
||||
#define wxUSE_TAB_DIALOG 1
|
||||
@@ -201,7 +202,7 @@
|
||||
#define wxUSE_ODBC 1
|
||||
// Define 1 to use ODBC classes
|
||||
|
||||
#define wxODBC_FWD_ONLY_CURSORS 1
|
||||
#define wxODBC_FWD_ONLY_CURSORS 1
|
||||
// For backward compatibility reasons, this parameter now only
|
||||
// controls the default scrolling method used by cursors. This
|
||||
// default behavior can be overriden by setting the second param
|
||||
|
@@ -543,7 +543,7 @@ private:
|
||||
|
||||
#if wxUSE_BOOKCTRL
|
||||
|
||||
// this sizer works with wxNotebook/wxListbook/... and sizes the control to
|
||||
// this sizer works with wxNotebook/wxListbook/wxChoicebook... and sizes the control to
|
||||
// fit its pages
|
||||
class WXDLLEXPORT wxBookCtrl;
|
||||
|
||||
|
@@ -605,6 +605,14 @@
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_LISTBOOK 1
|
||||
|
||||
// wxChoicebook control is similar to wxNotebook but uses wxChoice instead of
|
||||
// the tabs
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_CHOICEBOOK 1
|
||||
|
||||
// wxTabDialog is a generic version of wxNotebook but it is incompatible with
|
||||
// the new class. It shouldn't be used in new code.
|
||||
//
|
||||
|
410
src/generic/choicbkg.cpp
Normal file
410
src/generic/choicbkg.cpp
Normal file
@@ -0,0 +1,410 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: generic/choicbkg.cpp
|
||||
// Purpose: generic implementation of wxChoicebook
|
||||
// Author: Vadim Zeitlin
|
||||
// Modified by: Wlodzimierz ABX Skiba from generic/listbkg.cpp
|
||||
// Created: 15.09.04
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Vadim Zeitlin, Wlodzimierz Skiba
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// ============================================================================
|
||||
// declarations
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// headers
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
|
||||
#pragma implementation "choicebook.h"
|
||||
#endif
|
||||
|
||||
// For compilers that support precompilation, includes "wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
#pragma hdrstop
|
||||
#endif
|
||||
|
||||
#if wxUSE_CHOICEBOOK
|
||||
|
||||
#include "wx/choice.h"
|
||||
#include "wx/choicebk.h"
|
||||
#include "wx/imaglist.h"
|
||||
#include "wx/settings.h"
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// constants
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// margin between the choice and the page
|
||||
#if defined(__WXWINCE__)
|
||||
const wxCoord MARGIN = 1;
|
||||
#else
|
||||
const wxCoord MARGIN = 5;
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// various wxWidgets macros
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxChoicebook, wxControl)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxChoicebookEvent, wxNotifyEvent)
|
||||
|
||||
const wxEventType wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING = wxNewEventType();
|
||||
const wxEventType wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED = wxNewEventType();
|
||||
const int wxID_CHOICEBOOKCHOICE = wxNewId();
|
||||
|
||||
BEGIN_EVENT_TABLE(wxChoicebook, wxBookCtrl)
|
||||
EVT_SIZE(wxChoicebook::OnSize)
|
||||
EVT_CHOICE(wxID_CHOICEBOOKCHOICE, wxChoicebook::OnChoiceSelected)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
// ============================================================================
|
||||
// wxChoicebook implementation
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxChoicebook creation
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void wxChoicebook::Init()
|
||||
{
|
||||
m_choice = NULL;
|
||||
m_selection = wxNOT_FOUND;
|
||||
}
|
||||
|
||||
bool
|
||||
wxChoicebook::Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxString& name)
|
||||
{
|
||||
if ( (style & wxCHB_ALIGN_MASK) == wxCHB_DEFAULT )
|
||||
{
|
||||
style |= wxCHB_TOP;
|
||||
}
|
||||
|
||||
// no border for this control, it doesn't look nice together with
|
||||
// wxChoice border
|
||||
style &= ~wxBORDER_MASK;
|
||||
style |= wxBORDER_NONE;
|
||||
|
||||
if ( !wxControl::Create(parent, id, pos, size, style,
|
||||
wxDefaultValidator, name) )
|
||||
return false;
|
||||
|
||||
m_choice = new wxChoice
|
||||
(
|
||||
this,
|
||||
wxID_CHOICEBOOKCHOICE,
|
||||
wxDefaultPosition,
|
||||
wxDefaultSize
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxChoicebook geometry management
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxSize wxChoicebook::GetChoiceSize() const
|
||||
{
|
||||
const wxSize sizeClient = GetClientSize(),
|
||||
sizeChoice = m_choice->GetBestSize();
|
||||
|
||||
wxSize size;
|
||||
if ( IsVertical() )
|
||||
{
|
||||
size.x = sizeClient.x;
|
||||
size.y = sizeChoice.y;
|
||||
}
|
||||
else // left/right aligned
|
||||
{
|
||||
size.x = sizeChoice.x;
|
||||
size.y = sizeClient.y;
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
wxRect wxChoicebook::GetPageRect() const
|
||||
{
|
||||
const wxSize sizeChoice = m_choice->GetSize();
|
||||
|
||||
wxRect rectPage(wxPoint(0, 0), GetClientSize());
|
||||
switch ( GetWindowStyle() & wxCHB_ALIGN_MASK )
|
||||
{
|
||||
default:
|
||||
wxFAIL_MSG( _T("unexpected wxChoicebook alignment") );
|
||||
// fall through
|
||||
|
||||
case wxCHB_TOP:
|
||||
rectPage.y = sizeChoice.y + MARGIN;
|
||||
// fall through
|
||||
|
||||
case wxCHB_BOTTOM:
|
||||
rectPage.height -= sizeChoice.y + MARGIN;
|
||||
break;
|
||||
|
||||
case wxCHB_LEFT:
|
||||
rectPage.x = sizeChoice.x + MARGIN;
|
||||
// fall through
|
||||
|
||||
case wxCHB_RIGHT:
|
||||
rectPage.width -= sizeChoice.x + MARGIN;
|
||||
break;
|
||||
}
|
||||
|
||||
return rectPage;
|
||||
}
|
||||
|
||||
void wxChoicebook::OnSize(wxSizeEvent& event)
|
||||
{
|
||||
event.Skip();
|
||||
|
||||
if ( !m_choice )
|
||||
{
|
||||
// we're not fully created yet
|
||||
return;
|
||||
}
|
||||
|
||||
// resize the choice control and the page area to fit inside our new size
|
||||
const wxSize sizeClient = GetClientSize(),
|
||||
sizeChoice = GetChoiceSize();
|
||||
|
||||
wxPoint posChoice;
|
||||
switch ( GetWindowStyle() & wxCHB_ALIGN_MASK )
|
||||
{
|
||||
default:
|
||||
wxFAIL_MSG( _T("unexpected wxChoicebook alignment") );
|
||||
// fall through
|
||||
|
||||
case wxCHB_TOP:
|
||||
case wxCHB_LEFT:
|
||||
// posChoice is already ok
|
||||
break;
|
||||
|
||||
case wxCHB_BOTTOM:
|
||||
posChoice.y = sizeClient.y - sizeChoice.y;
|
||||
break;
|
||||
|
||||
case wxCHB_RIGHT:
|
||||
posChoice.x = sizeClient.x - sizeChoice.x;
|
||||
break;
|
||||
}
|
||||
|
||||
m_choice->Move(posChoice.x, posChoice.y);
|
||||
m_choice->SetSize(sizeChoice.x, sizeChoice.y);
|
||||
|
||||
// we should always have some selection if possible
|
||||
if ( m_selection == wxNOT_FOUND && GetPageCount() )
|
||||
{
|
||||
SetSelection(0);
|
||||
}
|
||||
|
||||
if ( m_selection != wxNOT_FOUND )
|
||||
{
|
||||
wxWindow *page = m_pages[m_selection];
|
||||
wxCHECK_RET( page, _T("NULL page in wxChoicebook?") );
|
||||
|
||||
page->SetSize(GetPageRect());
|
||||
if ( !page->IsShown() )
|
||||
{
|
||||
page->Show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wxSize wxChoicebook::CalcSizeFromPage(const wxSize& sizePage) const
|
||||
{
|
||||
// we need to add the size of the choice control and the margin
|
||||
const wxSize sizeChoice = GetChoiceSize();
|
||||
|
||||
wxSize size = sizePage;
|
||||
if ( IsVertical() )
|
||||
{
|
||||
size.y += sizeChoice.y + MARGIN;
|
||||
}
|
||||
else // left/right aligned
|
||||
{
|
||||
size.x += sizeChoice.x + MARGIN;
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// accessing the pages
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
bool wxChoicebook::SetPageText(size_t n, const wxString& strText)
|
||||
{
|
||||
m_choice->SetString(n, strText);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wxString wxChoicebook::GetPageText(size_t n) const
|
||||
{
|
||||
return m_choice->GetString(n);
|
||||
}
|
||||
|
||||
int wxChoicebook::GetPageImage(size_t WXUNUSED(n)) const
|
||||
{
|
||||
wxFAIL_MSG( _T("wxChoicebook::GetPageImage() not implemented") );
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool wxChoicebook::SetPageImage(size_t WXUNUSED(n), int WXUNUSED(imageId))
|
||||
{
|
||||
wxFAIL_MSG( _T("wxChoicebook::SetPageImage() not implemented") );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// image list stuff
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void wxChoicebook::SetImageList(wxImageList *imageList)
|
||||
{
|
||||
// TODO: can be implemented in form of static bitmap near choice control
|
||||
|
||||
wxBookCtrl::SetImageList(imageList);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// selection
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
int wxChoicebook::GetSelection() const
|
||||
{
|
||||
return m_selection;
|
||||
}
|
||||
|
||||
int wxChoicebook::SetSelection(size_t n)
|
||||
{
|
||||
wxCHECK_MSG( n < GetPageCount(), wxNOT_FOUND,
|
||||
_T("invalid page index in wxChoicebook::SetSelection()") );
|
||||
|
||||
int selOld = m_selection;
|
||||
|
||||
if ( (int)n != m_selection )
|
||||
{
|
||||
m_choice->Select(n);
|
||||
|
||||
// change m_selection only now, otherwise OnChoiceSelected() would ignore
|
||||
// the selection change event
|
||||
|
||||
if ( m_selection != wxNOT_FOUND )
|
||||
m_pages[m_selection]->Hide();
|
||||
wxWindow *page = m_pages[m_selection = n];
|
||||
page->SetSize(GetPageRect());
|
||||
page->Show();
|
||||
}
|
||||
|
||||
return selOld;
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// adding/removing the pages
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
bool
|
||||
wxChoicebook::InsertPage(size_t n,
|
||||
wxWindow *page,
|
||||
const wxString& text,
|
||||
bool bSelect,
|
||||
int imageId)
|
||||
{
|
||||
if ( !wxBookCtrl::InsertPage(n, page, text, bSelect, imageId) )
|
||||
return false;
|
||||
|
||||
m_choice->Insert(text, n);
|
||||
|
||||
if ( bSelect )
|
||||
{
|
||||
m_choice->Select(n);
|
||||
}
|
||||
else // don't select this page
|
||||
{
|
||||
// it will be shown only when selected
|
||||
page->Hide();
|
||||
}
|
||||
|
||||
InvalidateBestSize();
|
||||
return true;
|
||||
}
|
||||
|
||||
wxWindow *wxChoicebook::DoRemovePage(size_t page)
|
||||
{
|
||||
wxWindow *win = wxBookCtrl::DoRemovePage(page);
|
||||
if ( win )
|
||||
{
|
||||
m_choice->Delete(page);
|
||||
}
|
||||
|
||||
return win;
|
||||
}
|
||||
|
||||
|
||||
bool wxChoicebook::DeleteAllPages()
|
||||
{
|
||||
m_choice->Clear();
|
||||
return wxBookCtrl::DeleteAllPages();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxChoicebook events
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void wxChoicebook::OnChoiceSelected(wxCommandEvent& eventChoice)
|
||||
{
|
||||
const int selNew = eventChoice.GetSelection();
|
||||
|
||||
if ( selNew == m_selection )
|
||||
{
|
||||
// this event can only come from our own Select(m_selection) below
|
||||
// which we call when the page change is vetoed, so we should simply
|
||||
// ignore it
|
||||
return;
|
||||
}
|
||||
|
||||
// first send "change in progress" event which may be vetoed by user
|
||||
wxChoicebookEvent eventIng(wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGING, GetId());
|
||||
|
||||
eventIng.SetEventObject(this);
|
||||
eventIng.SetSelection(selNew);
|
||||
eventIng.SetOldSelection(m_selection);
|
||||
if ( GetEventHandler()->ProcessEvent(eventIng) && !eventIng.IsAllowed() )
|
||||
{
|
||||
m_choice->Select(m_selection);
|
||||
return;
|
||||
}
|
||||
|
||||
// change allowed: do change the page and notify the user about it
|
||||
if ( m_selection != wxNOT_FOUND )
|
||||
m_pages[m_selection]->Hide();
|
||||
wxWindow *page = m_pages[m_selection = selNew];
|
||||
page->SetSize(GetPageRect());
|
||||
page->Show();
|
||||
|
||||
wxChoicebookEvent eventEd(wxEVT_COMMAND_CHOICEBOOK_PAGE_CHANGED, GetId());
|
||||
|
||||
eventEd.SetEventObject(this);
|
||||
eventEd.SetSelection(selNew);
|
||||
eventEd.SetOldSelection(m_selection);
|
||||
|
||||
(void)GetEventHandler()->ProcessEvent(eventEd);
|
||||
}
|
||||
|
||||
#endif // wxUSE_CHOICEBOOK
|
Reference in New Issue
Block a user