Added Property List classes to main library; added proplist sample; merged

changes.txt files


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1292 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
1998-12-31 16:15:45 +00:00
parent 8973fbec7e
commit e3a43801df
76 changed files with 9575 additions and 2686 deletions

View File

@@ -10,6 +10,18 @@ docs/latex/wx/*.bmp
docs/latex/wx/*.gif
docs/latex/wx/*.wmf
docs/latex/proplist/*.tex
docs/latex/proplist/*.sty
docs/latex/proplist/*.bib
docs/latex/proplist/*.hpj
docs/latex/proplist/*.ini
docs/latex/proplist/*.txt
docs/latex/proplist/*.cnt
docs/latex/proplist/*.eps
docs/latex/proplist/*.bmp
docs/latex/proplist/*.gif
docs/latex/proplist/*.wmf
docs/latex/porting/*.tex
docs/latex/porting/*.sty
docs/latex/porting/*.bib

View File

@@ -179,19 +179,6 @@ utils/serialize/*.xbm
utils/serialize/*.xpm
utils/serialize/*.txt
utils/wxprop/Makefile
utils/wxprop/src/*.h
utils/wxprop/src/*.cpp
utils/wxprop/src/*.def
utils/wxprop/src/*.rc
utils/wxprop/src/makefile*
utils/wxprop/src/*.xbm
utils/wxprop/src/*.xpm
utils/wxprop/src/*.txt
utils/wxprop/src/*.ico
utils/wxprop/src/*.bmp
utils/wxprop/lib/dummy
utils/dialoged/Makefile
utils/dialoged/src/bitmaps/*.xbm
utils/dialoged/src/bitmaps/*.xpm
@@ -420,6 +407,15 @@ samples/fractal/*.xpm
samples/fractal/*.ico
samples/fractal/*.rc
samples/proplist/*.cpp
samples/proplist/*.h
samples/proplist/*.def
samples/proplist/makefile*
samples/proplist/*.xbm
samples/proplist/*.xpm
samples/proplist/*.ico
samples/proplist/*.rc
samples/layout/*.cpp
samples/layout/*.h
samples/layout/*.def

View File

@@ -22,8 +22,8 @@ docs/html/wxgraph/*.gif
docs/html/wxhelp/*.htm
docs/html/wxhelp/*.gif
docs/html/wxprop/*.htm
docs/html/wxprop/*.gif
docs/html/proplist/*.htm
docs/html/proplist/*.gif
docs/html/winstall/*.htm
docs/html/winstall/*.gif

View File

@@ -1,18 +1,227 @@
Generic wxWindows 2.0 Change Log
--------------------------------
wxWindows 2.0 Change Log
------------------------
Note: for platform-specific changes, see wx/docs/XXX/changes.txt
where XXX is one of msw, motif, xt, gtk, mac.
Alpha 18, December 29th 1998
----------------------------
wxMSW:
- Win16 support working again (VC++ 1.5)
- Win16 now uses generic wxNotebook, wxListCtrl,
wxTreeCtrl -- more or less working now, although
a little work on wxNotebook is still needed.
Under 16-bit Windows, get assertion when you click
on a tab.
- Wrote 16-bit BC++ makefiles: samples don't yet link.
- Added CodeWarrior support to distribution courtesy
of Stefan Csomor.
wxMotif:
- Cured scrolling problem: scrollbars now show/hide themselves
without (permanently) resizing the window.
- Removed some commented-out lines in wxScrolledWindow::AdjustScrollbars
that disabled scrollbar paging.
- Set background colour of drawing area in wxWindow, so e.g. wxListCtrl
colours correctly.
- Removed major bug whereby dialogs were unmanaged automatically
when any button was pressed.
- Fixed colours of wxWindow scrollbars, made list and text controls
have a white background.
- Fixed dialog colour setting.
- Added settable fonts and colours for wxMenu/wxMenuBar. Now
they have sensible colours by default.
- Fixed a bug in wxStaticBox.
- Cured wxTreeCtrl bug: now works pretty well!
- Debugged DrawEllipticArc (a ! in the wrong place).
- Added SetClippingRegion( const wxRegion& region ).
- Added wxPoint, wxSize, wxRect versions of SetSize etc.
Alpha 17, November 22nd 1998
----------------------------
wxMSW:
- More documentation updates, especially for
wxLayoutWindow classes and debugging facilities.
- Changed wxDebugContext to use wxDebugLog instead
of wxTrace.
- Now supports VC++ 6.0, and hopefully BC++ 5.0.
However, DLL support may be broken for BC++ since
VC++ 6 required changing of WXDLLEXPORT keyword
position.
- Numerous miscellaneous changes.
wxMotif:
- Reimplemented MDI using wxNotebook instead of the MDI widgets, which
were too buggy (probably not design for dynamic addition/removal of
child frames).
- Some improvements to the wxNotebook implementation.
- wxToolBar now uses a bulletin board instead of a form, in an attempt
to make it possible to add ordinary wxControls to a toolbar.
- Cured problem with not being able to use global memory operators,
by defining two more global operators, so that the delete will match
the debugging implementation.
- Added wxUSE_DEBUG_NEW_ALWAYS so we can distinguish between using
global memory operators (usually OK) and #defining new to be
WXDEBUG_NEW (sometimes it might not be OK).
- Added time.cpp to makefile; set wxUSE_DATETIME to 1.
- Added a parent-existance check to popup menu code to make it not crash.
- Added some optimization in wxWindow::SetSize to produce less flicker.
It remains to be seen whether this produces any resize bugs.
It's a long time since I updated this file. Previously done:
- wxFrame, wxDialog done.
- wxScrolledWindow done (but backing pixmap not used at present).
- wxBitmap done though could be tidied it up at some point.
- Most basic controls are there, if not rigorously tested.
- Some MDI support (menus appear on child frames at present).
- wxNotebook almost done.
- wxToolBar done (horizontal only, which would be easy to extend
to vertical toolbars).
More recently:
- Colour and font changing done (question mark over what happens
to scrollbars).
- Accelerators done (for menu items and buttons). Also event loop
tidied up in wxApp so that events are filtered through ProcessXEvent.
- wxWindow::GetUpdateRegion should now work.
Alpha 16, September 8th 1998
----------------------------
wxMSW:
- Added wxSashWindow, wxSashLayoutWindow classes, and sashtest
sample.
- Guilhem's socket classes added, plus wxsocket sample.
- A few more makefiles added.
- GnuWin32/BC++ compatibility mods.
- Further doc updates.
- wxProp updates for correct working with wxGTK.
wxMotif:
- First start at Motif port.
- Made makefiles for wxMotif source directory and minimal sample.
- First go at wxApp, wxWindow, wxDialog, wxPen, wxBrush, wxFont,
wxColour, wxButton, wxCheckBox, wxTextCtrl, wxStaticText,
wxMenu, wxMenuItem, wxMenuBar
Alpha 15, August 31st 1998
--------------------------
wxMSW:
- wxBitmap debugged.
- wxDC::GetDepth added.
- Contribution added whereby wxBitmap will be
converted to DC depth if they don't match.
- wxConfig API improved, documentation updated.
- Printing classes name conventions cleaned up.
- wxUpdateUIEvent now derives from wxCommandEvent
so event can travel up the window hierachy.
Alpha 14, July 31st 1998
------------------------
wxMSW:
- Toolbar API has been simplified, and now
wxFrame::GetClientArea returns the available client
area when toolbar, status bar etc. have been accounted for.
wxFrame::CreateToolBar added in line with CreateStatusBar.
- Documentation updates, incl. for wxToolBar.
- New wxAcceleratorTable class plus wxFrame::SetAcceleratorTable.
- Various additions from other folk, e.g. streams, wxConfig
changes, wxNotebook.
- Added wxDocMDIParentFrame, wxDocMDIChildFrame for doc/view.
Alpha 13, July 8th 1998
-----------------------
wxMSW:
- Implemented wxPoint as identical to POINT on Windows, and
altered wxDC wxPoint functions to use wxPoint directly in
Windows functions, for efficiency.
- Cured wxASSERT bug in wxStatusBar95.
- #ifdefed out some bits in oleutils.cpp for compilers that
don't support it.
- Added some operators to wxPoint, wxSize.
- Added inline wxDC functions using wxPoint, wxSize, wxRect.
Alpha 12, July 7th 1998
-----------------------
wxMSW:
- Added wxApp::GetComCtl32Version, and wxTB_FLAT style, so can
have flat toolbars on Win98 or Win95 with IE >= 3 installed.
Alpha 11, July 3rd 1998
-----------------------
wxMSW:
- Added thread.h, thread.cpp.
- Changed Enabled, Checked to IsEnabled, IsChecked in wxMenu,
wxMenuBar.
- Changed wxMenuItem::SetBackColor to SetBackgroundColour,
SetTextColor to SetTextColour, and added or made public several
wxMenuItem accessors.
- Added two overloads to wxRegion::Contains. Added
wxRegion::IsEmpty for a more consistent naming convention.
- Added Vadim's wxDataObject and wxDropSource.
- ENTER/LEAVE events now work.
- Cured wxMemoryDC bug where the DC wasn't being deleted.
- Cured wxGauge SetSize major bugginess.
- Cured problem where if a GDI object was created on the stack,
then went out of scope, then another object was selected into
the DC, GDI objects would leak. This is because the assignment
to e.g. wxDC::m_pen would delete the GDI object without it first
being selected out of the DC. Cured by selecting the old DC object
first, then doing the assignment.
- Split up wxGaugeMSW, wxGauge95, wxSliderMSW, wxSlider95
- Various other bug fixes and additions.
Generic:
- Major work on Dialog Editor (still plenty to go).
- Expanded documentation a bit more.
Alpha 10, May 7th 1998
----------------------
wxMSW:
- Added desiredWidth, desiredHeight parameters to wxBitmapHandler
and wxIcon functions so that you can specify what size of
icon should be loaded. Probably will remain a Windows-specific thing.
- wxStatusBar95 now works for MDI frames.
- Toolbars in MDI frames now behave normally. They still
require application-supplied positioning code though.
- Changed installation instructions, makefiles and batch files
for compiling with Gnu-Win32/Mingw32/EGCS. Also timercmn.cpp
change to support Mingw32/EGCS. Bison now used by default.
Alpha 9, April 27th 1998
------------------------
wxMSW:
- Cured bug in wxStatusBar95 that caused a crash if multiple
fields were used.
- Added Gnu-Win32 b19/Mingw32 support by changing resource
compilation and pragmas.
- Cured wxMenu bug introduced in alpha 8 - didn't respond to
commands because VZ changed the id setting in wxMenu::MSWCommand.
Generic:
- Corrected some bugs, such as the wxModule compilation problem.
- Added Gnu-Win32 b19/Mingw32 support by changing resource
compilation and pragmas.
@@ -21,6 +230,32 @@ Alpha 9, April 27th 1998
Alpha 8, April 17th 1998
------------------------
wxMSW:
- Added IsNull to wxGDIObject to check if the ref data is present or not.
- Added PNG handler and sample - doesn't work for 16-bit PNGs for
some reason :-(
- Added wxJoystick class and event handling, and simple demo.
- Added simple wxWave class. Needs Stop() function.
- Added wxModule (module.h/module.cpp) to allow definition
of modules to be initialized and cleaned up on wxWindows
startup/exit.
- Start of Mingw32 compatibility (see minimal and dialogs samples
makefile.m95 files, and install.txt).
- Note: Windows printing has stopped working... will investigate.
VADIM'S CHANGES:
- Updated wxString: bug fixes, added wxArrayString, some
compatibility functions.
- Updated log.h/cpp, added wxApp::CreateLogTarget.
- file.h: new wxTempFile class.
- defs.h: added wxSB_SIZE_GRIP for wxStatusBar95
- statbr95: wxStatusBar95 control.
- registry.h/cpp: wxRegKey class for Win95 registry.
- listbox.cpp: corrected some bugs with owner-drawn listboxes.
- wxConfig and wxFileConfig classes.
Generic:
- Added src/other/png, src/other/zlib directories.
- Added samples/png.
- IMPORTANT: Changed 'no id' number from 0 to -1, in wxEVT_ macros.
@@ -31,6 +266,27 @@ Alpha 8, April 17th 1998
Alpha 7, March 30th 1998
------------------------
wxMSW:
- Added tab classes, tab sample.
- Now can return FALSE from OnInit and windows will be
cleaned up properly before exit.
- Improved border handling so panels don't get borders
automatically.
- Debugged MDI activation from Window menu.
- Changes to memory debug handling, including checking for
memory leaks on application exit - but see issues.txt for
unresolved issues.
- Added wxTaskBarIcon (taskbar.cpp/h, plus samples/taskbar)
to allow maintenance of an icon in the Windows 95 taskbar
tray area.
- Got MFC sample working (MFC and wxWindows in the same
application), partly by tweaking ntwxwin.mak settings.
- Got DLL compilation working again (VC++).
- Changed wxProp/Dialog Editor filenames.
Generic:
- Added tab classes, tab sample.
- Revised memory.cpp, memory.h slightly; memory.h now #defines
new to WXDEBUG_NEW in DEBUG mode. Windows implementation app.cpp
@@ -48,6 +304,36 @@ Alpha 7, March 30th 1998
Alpha 6, March 10th 1998
------------------------
wxMSW:
- Found stack error bug - stopped unwanted OnIdle recursion.
- Removed bug in wxTreeCtrl::InsertItem I added in alpha 5.
- Changed exit behaviour in wxApp/wxFrame/wxDialog. Now will
check if the number of top-level windows is zero before
exiting. Also, wxApp::GetTopWindow will return either
m_topWindow or the first member of wxTopLevelWindows, so you
don't have to call wxApp::SetTopWindow.
- Added dynarray.h/dynarray.cpp (from Vadim).
- Added first cut at OLE drag and drop (from Vadim). dnd sample
added. Drop target only at this stage. See src/msw/ole/*.cpp,
wx/include/msw/ole/*.h. WIN32 only because of UUID usage.
Doesn't work with GnuWin32 - no appropriate headers e.g. for
IUnknown.
Doesn't work with BC++ either - crashes on program startup.
- Added Vadim's owner-draw modifications - will probably remain
Windows-only. This enhances wxMenu, wxListBox. See ownerdrw sample.
- Added wxLB_OWNERDRAW for owner-draw listboxes.
- Vadim's wxCheckListBox derives from wxListBox. See checklst sample.
Doesn't entirely work for WIN16.
- Vadim has added wxMenuItem as a separate file menuitem.cpp. It
can also be used as an argument to wxMenu::Append, not just for
internal implementation.
- Some #ifdefs done for MINGW32 compilation (just alter OPTIONS
in makeg95.env, together with mingw32.bat). However, resource
binding is not working yet so most apps with dialogs crash.
Generic:
- Added Vadim's dynarray.h, dynarray.cpp.
- Added Vadim's menuitem.cpp.
- Added Windows-specific wxCheckListBox,
@@ -57,6 +343,23 @@ Alpha 6, March 10th 1998
Alpha 5, 14th February 1998
--------------------------
wxMSW:
- GENERIC AND MSW-SPECIFIC CODE NOW TREATED AS TWO SEPARATE
DISTRIBUTIONS. This change log will therefore now refer to
the Windows-specific code only. See docs/changes.txt for generic
changes.
- Removed Windows-specific reference counting system (GDI
resources were cleaned up in idle time) - minimal
advantages now we have a wxWin reference counting system.
- Added missing WXDLLEXPORT keywords so DLL compilation works
again.
- Removed most warnings for GnuWin32 compilation.
- Added wxRegion/wxRegionIterator, but haven't yet used it in
e.g. wxDC.
Generic:
- GENERIC AND MSW-SPECIFIC CODE NOW TREATED AS TWO SEPARATE
DISTRIBUTIONS. This change log will therefore now refer to
the generic code only. See docs/msw/changes.txt for Windows-specific
@@ -89,6 +392,8 @@ Alpha 5, 14th February 1998
Alpha 4, 31st January 1998
--------------------------
All:
- Changed wxDC functions to take longs instead of floats. GetSize now takes
integer pointers, plus a version that returns a wxSize.
- const keyword added to various wxDC functions.
@@ -142,6 +447,8 @@ Alpha 4, 31st January 1998
Alpha 3, September 1997
-----------------------
All:
- wxListCtrl, wxTreeCtrl, wxImageList classes done.
- Instigated new file hierarchy, split files and classes up more logically.
- PrologIO and some other utils now put into core library.
@@ -151,6 +458,8 @@ Alpha 3, September 1997
Alpha 2, 30th April 1997
------------------------
All:
- EVT_... macros now have at least one argument, for conformance
with MetroWerks compiler.
- Added ids to .wxr file format.
@@ -170,6 +479,8 @@ Alpha 2, 30th April 1997
Alpha 1, 5th April 1997
-----------------------
Generic:
At this point, the following has been achieved:
- A lot, but not all, of the code has been revamped for better

View File

@@ -56,7 +56,7 @@ from the <a href="http://wxwin.home.ml.org">wxWindows Web site</a>.<P>
<li><a href="wx/wx.htm">Reference Manual</a>
<li><a href="porting/port.htm">Porting Guide</a> (wxWindows 1.xx to 2.0)
<li><a href="dialoged/dlged.htm">Dialog Editor</a>
<li><a href="wxprop/prop.htm">Property Classes</a>
<li><a href="proplist/prop.htm">Property List Classes</a>
<li><a href="wxtree/tree.htm">wxTreeLayout</a>
<li><a href="odbc/odbc.htm">Remstar ODBC Classes</a>
</ul>

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

View File

@@ -0,0 +1,106 @@
\chapter{Introduction}\label{introduction}
\pagenumbering{arabic}%
\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
\setfooter{\thepage}{}{}{}{}{\thepage}%
The Property Sheet Classes help the programmer to specify complex dialogs and
their relationship with their associated data. By specifying data as a
wxPropertySheet containing wxProperty objects, the programmer can use
a range of available or custom wxPropertyView classes to allow the user to
edit this data. Classes derived from wxPropertyView act as mediators between the
wxPropertySheet and the actual window (and associated panel items).
For example, the wxPropertyListView is a kind of wxPropertyView which displays
data in a Visual Basic-style property list (see \helpref{the next section}{appearance} for
screen shots). This is a listbox containing names and values, with
an edit control and other optional controls via which the user edits the selected
data item.
wxPropertyFormView is another kind of wxPropertyView which mediates between
the data and a panel or dialog box which has already been created. This makes it a contender for
the replacement of wxForm, since programmer-controlled layout is going to be much more
satisfactory. If automatic layout is desired, then wxPropertyListView could be used instead.
The main intention of this class library was to provide property {\it list} behaviour, but
it has been generalised as much as possible so that the concept of a property sheet and its viewers
can reduce programming effort in a range of user interface tasks.
For further details on the classes and how they are used, please see \helpref{Property classes overview}{propertyoverview}.
\section{The appearance and behaviour of a property list view}\label{appearance}
The property list, as seen in an increasing number of development tools
such as Visual Basic and Delphi, is a convenient and compact method for
displaying and editing a number of items without the need for one
control per item, and without the need for designing a special form. The
controls are as follows:
\begin{itemize}\itemsep=0pt
\item A listbox showing the properties and their current values, which has double-click
properties dependent on the nature of the current property;
\item a text editing area at the top of the display, allowing the user to edit
the currently selected property if appropriate;
\item `confirm' and `cancel' buttons to confirm or cancel an edit (for the property, not the
whole sheet);
\item an optional list that appears when the user can make a choice from several known possible values;
\item a small Edit button to invoke `detailed editing' (perhaps showing or hiding the above value list, or
maybe invoking a common dialog);
\item optional OK/Close, Cancel and Help buttons for the whole dialog.
\end{itemize}
The concept of `detailed editing' versus quick editing gives the user a choice
of editing mode, so novice and expert behaviour can be catered for, or the user can just
use what he feels comfortable with.
Behaviour alters depending on the kind of property being edited. For example, a boolean value has
the following behaviour:
\begin{itemize}\itemsep=0pt
\item Double-clicking on the item toggles between TRUE and FALSE.
\item Showing the value list enables the user to select TRUE or FALSE.
\item The user may be able to type in the word TRUE or FALSE, or the edit control
may be read-only to disallow this since it is error-prone.
\end{itemize}
A list of strings may pop up a dialog for editing them, a simple string just allows text editing,
double-clicking a colour property may show a colour selector, double-clicking on a filename property may
show a file selector (in addition to being able to type in the name in the edit control), etc.
Note that the `type' of property, such as string or integer, does not
necessarily determine the behaviour of the property. The programmer has
to be able to specify different behaviours for the same type, depending
on the meaning of the property. For example, a colour and a filename may
both be strings, but their editing behaviour should be different. This
is why objects of type wxPropertyValidator need to be used, to define
behaviour for a given class of properties or even specific property
name. Objects of class wxPropertyView contain a list of property
registries, which enable reuse of bunches of these validators in
different circumstances. Or a wxProperty can be explicitly set to use a
particular validator object.
The following screen shot of the property classes test program shows the
user editing a string, which is constrained to be one of three possible
values.
$$\image{8cm;0cm}{prop1.eps}$$\\
The second picture shows the user having entered a integer that
was outside the range specified to the validator. Note that in this picture,
the value list is hidden because it is not used when editing an integer.
$$\image{8cm;0cm}{prop2.eps}$$
\chapter{Files}\label{files}
\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
\setfooter{\thepage}{}{}{}{}{\thepage}%
The property class library comprises the following files:
\begin{itemize}\itemsep=0pt
\item prop.h: base property class header
\item proplist.h: wxPropertyListView and associated classes
\item propform.h: wxPropertyListView and associated classes
\item prop.cpp: base property class implementation
\item proplist.cpp: wxPropertyListView and associated class implementions
\item propform.cpp: wxPropertyFormView and associated class implementions
\end{itemize}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 B

View File

@@ -0,0 +1,27 @@
\chapter{Change log}\label{changes}
\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
\setfooter{\thepage}{}{}{}{}{\thepage}%
January - December 1998, Version 2.0
\begin{itemize}\itemsep=0pt
\item Conversion to wxWindows 2.0.
\end{itemize}
November 26th 1995, Version 1.1
\begin{itemize}\itemsep=0pt
\item Added wxListOfStringsListValidator - allows adding, deleting, editing
strings.
\item Added wxPropertyValue::ClearList, wxPropertyValue::Delete,
wxPropertyValue::wxPropertyValue(wxStringList *).
\item Added wxPropertyValue::Set/GetModified, wxPropertySheet::SetAllModified.
\item Added wxPropertyView::OnPropertyChanged support, for immediate feedback.
\end{itemize}
October 1995, Version 1.0
\begin{itemize}\itemsep=0pt
\item First release.
\end{itemize}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

View File

@@ -0,0 +1,47 @@
\documentstyle[a4,makeidx,verbatim,texhelp,fancyhea,mysober,mytitle]{report}
\input psbox.tex
% Remove this for processing with dvi2ps instead of dvips
%\special{!/@scaleunit 1 def}
\parskip=10pt
\parindent=0pt
\title{User Manual for wxWindows Property Sheet Classes Version 2.0}
\winhelponly{\author{by Julian Smart, Anthemion Software\\$$\image{}{prop1}$$}}
\winhelpignore{\author{Julian Smart, Anthemion Software}
\date{December 1998}
}
\makeindex
\begin{document}
\maketitle
\pagestyle{fancyplain}
\bibliographystyle{plain}
\setheader{{\it CONTENTS}}{}{}{}{}{{\it CONTENTS}}
\setfooter{\thepage}{}{}{}{}{\thepage}%
\pagenumbering{roman}
\tableofcontents
\chapter*{Copyright notice}
\setheader{{\it COPYRIGHT}}{}{}{}{}{{\it COPYRIGHT}}%
\setfooter{\thepage}{}{}{}{}{\thepage}%
\begin{center}
Copyright (c) 1998 Julian Smart, Anthemion Software
\end{center}
Please see the wxWindows licence for conditions of use.
\input{body.tex}
\input{classes.tex}
\input{changes.tex}
%\newpage
%
% Note: In RTF, the \printindex must come before the
% change of header/footer, since the \printindex inserts
% the RTF \sect command which divides one chapter from
% the next.
\rtfonly{\printindex
\addcontentsline{toc}{chapter}{Index}
\setheader{{\it INDEX}}{}{}{}{}{{\it INDEX}}%
\setfooter{\thepage}{}{}{}{}{\thepage}%
}
\end{document}

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@@ -0,0 +1,539 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: prop1.eps
%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
%%BoundingBox: 167 292 445 500
%%Pages: 1
%%DocumentFonts:
%%EndComments
%%EndProlog
%%Page: 1 1
% remember original state
/origstate save def
% build a temporary dictionary
20 dict begin
% lower left corner
167 292 translate
% size of image (on paper, in 1/72inch coords)
278 208 scale
% define 'colorimage' if it isn't defined
% ('colortogray' and 'mergeprocs' come from xwd2ps
% via xgrab)
/colorimage where % do we know about 'colorimage'?
{ pop } % yes: pop off the 'dict' returned
{ % no: define one
/colortogray { % define an RGB->I function
/rgbdata exch store % call input 'rgbdata'
rgbdata length 3 idiv
/npixls exch store
/rgbindx 0 store
/grays npixls string store % str to hold the result
0 1 npixls 1 sub {
grays exch
rgbdata rgbindx get 20 mul % Red
rgbdata rgbindx 1 add get 32 mul % Green
rgbdata rgbindx 2 add get 12 mul % Blue
add add 64 idiv % I = .5G + .31R + .18B
put
/rgbindx rgbindx 3 add store
} for
grays
} bind def
% Utility procedure for colorimage operator.
% This procedure takes two procedures off the
% stack and merges them into a single procedure.
/mergeprocs { % def
dup length
3 -1 roll
dup
length
dup
5 1 roll
3 -1 roll
add
array cvx
dup
3 -1 roll
0 exch
putinterval
dup
4 2 roll
putinterval
} bind def
/colorimage { % def
pop pop % remove 'false 3' operands
{colortogray} mergeprocs
image
} bind def
} ifelse % end of 'false' case
% define the colormap
/cmap 42 string def
% load up the colormap
currentfile cmap readhexstring
000000 bf0000 00bf00 bfbf00 0000bf 00bfbf c0c0c0 808080 ff0000 00ff00
ffff00 0000ff 00ffff ffffff
pop pop % lose return values from readhexstring
% rlecmapimage expects to have 'w h bits matrix' on stack
/rlecmapimage {
/buffer 1 string def
/rgbval 3 string def
/block 384 string def
% proc to read a block from file, and return RGB data
{ currentfile buffer readhexstring pop
/bcount exch 0 get store
bcount 128 ge
{ % it's a non-run block
0 1 bcount 128 sub
{ currentfile buffer readhexstring pop pop
% look up value in color map
/rgbval cmap buffer 0 get 3 mul 3 getinterval store
% and put it in position i*3 in block
block exch 3 mul rgbval putinterval
} for
block 0 bcount 127 sub 3 mul getinterval
}
{ % else it's a run block
currentfile buffer readhexstring pop pop
% look up value in colormap
/rgbval cmap buffer 0 get 3 mul 3 getinterval store
0 1 bcount { block exch 3 mul rgbval putinterval } for
block 0 bcount 1 add 3 mul getinterval
} ifelse
} % end of proc
false 3 colorimage
} bind def
278 208 8 % dimensions of data
[278 0 0 -208 0 208] % mapping matrix
rlecmapimage
7f067f0614060000
81060d7f0d7f0d110d810700
82060d067f067f061006810700
82060d067f067f061006810700
82060d068106047f047f040c040106810700
82060d068106048204060d820d060783070d0702010203098102047f047a040106810700
82060d068106048704060b060001020781070283020702098109028102047f0446040e0d
81000d0d0d81000481040d0d0d81000481040682060700
82060d0681060482040806810600820002078507020902070201028109047f044604810d
060b068307000d060b068207000482040d060b068207000481040682060700
82060d0681060481040685060800040307820702098409020702098109040104050d2d04
030d0204010d1a04050d6604810d060b068307000d06810600070001068207000482040d
060b068207000481040682060700
82060d068106048704060b0604000a0789070209020702070209040104010d0204010d1d
04010d0b04010d0104010d0104010d1204010d0704010d1004010d5504810d060b068307
000d06810600070001068207000482040d06010601000306010001068207000481040682
060700
82060d068106048204070681060001000107010286070209020702040104010d0204010d
1d04010d0b04010d0504010d1204010d0704010d1004010d5504810d060b068307000d06
820600060506810006830607000482040d06020601000106010002068207000481040682
060700
82060d0681060485040d0607060d010d8407020002090109820200040104010d0204010d
81040d010d0104030d0104040d0204030d0104020d81040d010d81040d820d040d810d04
0304010d0504040d0204030d0204030d0104020d0604010d0404030d0204020d0104020d
5404810d060b068307000d06820600060506810006830607000482040d06030603000306
8207000481040682060700
82060d068106048104070507010006020204050d0104010d0104010d0104010d81040d81
0d0481040d820d040d810d0481040d820d040d810d0481040d810d0481040d820d040d81
0d040404030d0204020d81040d820d040d810d0481040d820d040d810d0481040d820d04
0d810d040604010d0304010d0104010d81040d820d040d820d040d810d045404810d060b
068307000d06820600060506810006830607000482040d06040601000406820700048104
0682060700
82060d068106048104050505010006030204010d0504010d0104010d0104010d81040d81
0d0481040d820d040d040d81040d810d0481040d810d0481040d820d040d810d04070401
0d0104010d0104010d81040d040d81040d040d81040d810d040604010d0304050d010401
0d0204010d5504810d060b068307000d06820600060506810006830607000482040d0603
06030003068207000481040682060700
82060d0681060481040c010c8205080c830c05030a020a81030a810a040104010d050401
0d0104010d0104010d81040d810d0481040d820d040d810d040304010d0104010d010401
0d81040d810d040704010d0104010d0104010d81040d810d040304010d0404010d070401
0d0304010d0604010d0104010d5504810d060b068307000d068206000605068100068306
07000482040d06020601000106010002068207000481040682060700
82060d068106048c040c05070507050c05030a030a840a03000a040104010d0504010d01
04010d0104010d81040d810d0481040d820d040d810d0481040d820d040d810d0481040d
810d040104020d0504010d0104010d0104010d0104010d81040d810d0481040d820d040d
810d0481040d820d040d810d040604010d0304010d0104010d81040d820d040d820d040d
810d045404810d060106050003068307000d06820600060506810006830607000482040d
06010601000306010001068207000481040682060700
82060d0681060482040c08020886070c05030a030a010a82030a040104010d0504010d02
04030d0104040d0204030d0104010d0204010d0104010d0704030d0204010d0104010d01
04030d0204030d0204010d0604010d0404030d0204020d0204010d5404810d0601060500
03068307000d06810600070001068207000482040d060b068207000481040682060700
82060d0681060482040c080208010c8205030a810a0384030a030a041404010d1404010d
7f041804810d060b068307000d060b068207000482040d060b0682070004810406820607
00
82060d0681060482040c080308850c05030a030a010a82000a041404010d1204020d7f04
1904810d070c0782000d070c0781000482040d070c0781000481040682060700
82060d0681060483040c05080208850c05030a030a810a0382030a047f0446041f000104
0f0001040106810700
82060d0681060481040c050c8205030a050a7f047b040106810700
82060d068106047f047f040c040106810700
82060d067f067f061006810700
82060d067f067f061006810700
82060d0637067f073907810d061c06810700
82060d06030616000306160001068107007f00360082060d0681060015000406810700
82060d06020681000d140d820700068206000d140d8507000607000d7f0d350d84060d06
000d140d820700060206810700
82060d06020682000d06120601078100068306000d061206010784000607000d7f0d350d
84060d06000d130d01078100060206810700
82060d06020682000d06120601078100068306000d061206010784000607000d7f0d350d
84060d06000d810d06110601078100060206810700
82060d06020682000d06120601078100068306000d061206010784000607000d7f0d350d
84060d06000d810d06110601078100060206810700
82060d06020682000d0603068100060606810006030601078100068306000d0612060107
84000607000d820d000d7f0d320d84060d06000d810d06110601078100060206810700
82060d06020682000d06030683000600060306810006040601078100068306000d061206
010785000607000d0081000d7f0d320d84060d06000d810d061106010781000602068107
00
82060d06020682000d06040683000600060106810006050601078100068306000d060b06
8100060406010785000607000d000100810d0081000d820d000d810d0081000d810d0002
007f0d220d84060d06000d810d06110601078100060206810700
82060d06020682000d06050685000600060006060601078100068306000d060a06830006
00060306010785000607000d0081000d810d0082000d000100810d0082000d0081000d81
0d0081000d7f0d200d84060d06000d810d06110601078100060206810700
82060d06020682000d0606068300060006070601078100068306000d0609068300060006
0406010785000607000d0081000d810d0082000d000100810d0082000d0081000d810d00
81000d7f0d200d84060d06000d810d06110601078100060206810700
82060d06020682000d0607068300060006060601078100068306000d0604068100060106
83000600060506010785000607000d0081000d010d0200810d000100010d0100010d0100
7f0d210d84060d06000d810d06110601078100060206810700
82060d06020682000d06060685000600060006050601078100068306000d060306870006
0006000600060606010785000607000d0081000d010d0200810d000100010d0100010d01
007f0d210d84060d06000d810d06110601078100060206810700
82060d06020682000d06050681000601068300060006040601078100068306000d060406
850006000600060706010784000607000d810d0081000d810d0081000d010d0100020d03
007f0d220d84060d06000d810d0603060100810600820006008100060406010781000602
06810700
82060d06020682000d06040681000603068300060006030601078100068306000d060506
83000600060806010784000607000d7f0d350d84060d06000d810d060306010081060082
000600810006040601078100060206810700
82060d06020682000d060306010005060100040601078100068306000d06060681000609
06010784000607000d7f0d350d84060d06000d810d06110601078100060206810700
82060d06020682000d06120601078100068306000d061206010784000607000d7f0d350d
84060d06000d810d06110601078100060206810700
82060d06020682000d06120601078100068306000d061206010784000607000d7f0d350d
84060d06000d810d06110601078100060206810700
82060d06020682000d0714078100068306000d07140784000607000d7f0d350d85060d06
000d0714078100060206810700
82060d06020682000d0714078100068306000d07140784000607000d7f0d350d84060d06
000715078100060206810700
82060d06030616000306160001068207000d7f0d350d82060d0681060015000406810700
82060d0637068107067f063706810d061c06810700
82060d0637067f0d3a0d1d06810700
82060d0601067f077f070a07810d060106810700
82060d0601068107007f007f00070082060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d010d0300010d0400020d03007f0d720d82060d060106810700
82060d0601068207000d810d0081000d810d0082000d0081000d810d0082000d0081000d
810d0081000d7f0d700d82060d060106810700
82060d0601068207000d810d0081000d810d0082000d0081000d810d0082000d0004007f
0d710d82060d060106810700
82060d0601068207000d810d0081000d810d0082000d0081000d810d0082000d0081000d
7f0d740d82060d060106810700
82060d0601068207000d810d0081000d810d0082000d0081000d810d0082000d0081000d
810d0081000d7f0d700d82060d060106810700
82060d0601068207000d010d0300010d0100010d0100010d03007f0d720d82060d060106
810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d060106ff0700040a040a040a040a040a040a040a040a040a040a040a040a040a04
0a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a04
0a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a04
0a040a040a040a040a040a040a040a040a040a040a040a040a040aff040a040a040a040a
040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a
040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a
040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a
040a040a040a040a040a040a8c040a040a040a040a040a060d060106810700
82060d0601068307000a047f047f04050482060d060106810700
82060d060106820700047f047f040504830a060d060106810700
82060d0601068307000a0482040d047f047f04020482060d060106810700
82060d0601068207000481040d810d047f047f040104830a060d060106810700
82060d0601068307000a0d020d81040d810d0482040d0481040d810d0481040d020d7f04
720482060d060106810700
82060d0601068207000481040d810d0481040d820d040d010d81040d820d040d810d0481
040d810d047f046f04830a060d060106810700
82060d0601068407000a040d810d0481040d820d040d010d81040d820d040d810d048104
0d810d047f04700482060d060106810700
82060d0601068207000481040d810d040104020d81040d010d0104010d0104010d7f0470
04830a060d060106810700
82060d0601068407000a040d810d040104020d81040d010d0104010d0104010d7f047104
82060d060106810700
82060d060106820700040104010d0104010d0204010d0204030d7f047104830a060d0601
06810700
82060d0601068307000a047f047f04050482060d060106810700
82060d060106820700047f047f040504830a060d060106810700
82060d060106ff07000a040a040a040a040a040a040a040a040a040a040a040a040a040a
040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a
040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a
040a040a040a040a040a040a040a040a040a040a040a040a040a04ff0a040a040a040a04
0a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a04
0a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a04
0a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a040a04
0a040a040a040a040a040a048c0a040a040a040a040a04060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d010d81000d810d0081000d7f0d7e0d82060d060106810700
82060d0601068207000d810d0081000d810d0081000d7f0d7e0d82060d060106810700
82060d0601068307000d000200810d000300010d0300010d0300020d03007f0d690d8206
0d060106810700
82060d0601068207000d810d0081000d810d0081000d810d0082000d0081000d010d0100
010d0100810d0081000d810d0081000d7f0d670d82060d060106810700
82060d0601068207000d810d0081000d810d0081000d810d0082000d0081000d010d0500
810d0004007f0d680d82060d060106810700
82060d0601068207000d810d0081000d810d0081000d810d0082000d0081000d010d0100
040d01007f0d6c0d82060d060106810700
82060d0601068207000d810d0081000d810d0081000d810d0082000d0081000d010d0100
010d0100810d0081000d810d0081000d7f0d670d82060d060106810700
82060d0601068207000d010d0100810d0081000d810d0082000d0081000d020d0300020d
03007f0d690d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068207000d7f0d7f0d060d82060d060106810700
82060d0601068107067f067f060806810d060106810700
82060d0601067f0d7f0d0b0d0206810700
82060d067f067f061006810700
82060d067f067f061006810700
82060d0601067f077f070b070206810700
82060d0601068107007f007f000800810d060106810700
82060d0601068207000d7f0d760d0e060100810d060106810700
82060d0601068207000d7f0d760d81060d0b0d81070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d1c0d0100120d01000e0d81000d6b0d0400400d82060d060a0681
070082000d060106810700
82060d0601068207000d010d81000d190d81000d120d81000d7b0d85000d000d000d3f0d
82060d060a0681070082000d060106810700
82060d0601068207000d810d000300030d0200010d0100010d0100020d0100810d008400
0d000d0081000d090d0300010d82000d0081000d020d0200020d0200040d0300020d0200
5f0d81000d020d0100810d0082000d0081000d810d0081000d010d02002c0d82060d0603
06810006040681070082000d060106810700
82060d0601068207000d010d81000d040d81000d010d81000d820d000d010d81000d820d
000d810d0081000d810d0081000d820d000d070d81000d010d81000d810d0081000d820d
000d820d000d010d81000d020d81000d020d81000d010d81000d820d000d010d81000d5d
0d81000d030d0100030d81000d010d81000d820d000d010d81000d2a0d82060d06020602
00040681070082000d060106810700
82060d0601068207000d010d81000d040d81000d010d81000d820d000d010d81000d820d
000d010d81000d820d000d010d81000d070d81000d040d81000d010d81000d820d000d01
0d81000d020d81000d020d81000d040d04005e0d81000d030d81000d030d81000d010d81
000d810d0003002b0d82060d0601060400030681070082000d060106810700
82060d0601068207000d010d81000d010d81000d820d000d010d81000d820d000d810d00
81000d820d000d010d81000d820d000d010d81000d070d81000d040d81000d010d81000d
820d000d010d81000d020d81000d020d81000d040d81000d610d81000d030d81000d030d
81000d810d0081000d820d000d2e0d82060d068106000500020681070082000d06010681
0700
82060d0601068207000d020d0200030d0200030d0100810d0081000d810d000200810d00
0100810d000100080d0300810d000100810d000100010d0200020d0400020d0300020d03
005d0d0200020d0300030d0100810d0081000d810d0002002b0d82060d060a0681070082
000d060106810700
82060d0601068207000d1a0d81000d7f0d590d82060d060a0681070082000d0601068107
00
82060d0601068207000d170d02007f0d5b0d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d8106070c070100810d060106810700
82060d0601068207000d7f0d760d1000810d060106810700
82060d0601068207000d7f0d760d92060d060d060d060d060d060d060d060d000d060106
810700
82060d0601068207000d7f0d770d91060d060d060d060d060d060d060d06000d06010681
0700
82060d0601068207000d030d81000d7f0d2d0d81000d020d0300390d92060d060d060d06
0d060d060d060d060d000d060106810700
82060d0601068207000d7f0d320d0100030d81000d3c0d91060d060d060d060d060d060d
060d06000d060106810700
82060d0601068207000d010d0200040d0200010d0100810d0081000d7f0d1c0d83000d00
0d020d81000d3b0d92060d060d060d060d060d060d060d060d000d060106810700
82060d0601068207000d030d81000d020d81000d010d81000d810d0081000d820d000d7f
0d1a0d81000d820d000d020d02003b0d91060d060d060d060d060d060d060d06000d0601
06810700
82060d0601068207000d030d81000d030d0300010d81000d010d81000d7f0d1a0d040005
0d81000d380d92060d060d060d060d060d060d060d060d000d060106810700
82060d0601068207000d030d81000d020d81000d010d81000d820d000d010d81000d7f0d
1d0d81000d010d81000d010d81000d380d0e060100810d060106810700
82060d0601068207000d010d0400010d0800810d0001007f0d1c0d0200020d02003a0d81
060d0b0d81070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d810d0081000d060d81000d030d0100040d01007f0d170d020003
0d0300390d82060d060a0681070082000d060106810700
82060d0601068207000d010d81000d0d0d81000d040d81000d7f0d150d81000d010d8100
0d010d81000d3b0d82060d060a0681070082000d060106810700
82060d0601068207000d010d82000d0081000d010d0200050d81000d040d81000d7f0d18
0d81000d020d81000d3b0d82060d060a0681070082000d060106810700
82060d0601068207000d010d0100010d81000d020d81000d040d81000d040d81000d7f0d
170d81000d030d02003a0d82060d060a0681070082000d060106810700
82060d0601068207000d010d81000d010d81000d020d81000d040d81000d040d81000d7f
0d160d81000d070d81000d380d82060d060a0681070082000d060106810700
82060d0601068207000d010d81000d010d81000d020d81000d040d81000d040d81000d7f
0d150d81000d040d81000d010d81000d380d82060d060a0681070082000d060106810700
82060d0601068207000d810d000300020d0400010d0400010d04007f0d140d0400020d02
003a0d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d030d81000d0a0d0100050d81000d7f0d5b0d82060d060a068107
0082000d060106810700
82060d0601068207000d110d81000d7f0d620d82060d060a0681070082000d0601068107
00
82060d0601068207000d010d0300010d0100010d0100030d81000d020d0200040d020001
0d0100810d0081000d7f0d070d0200010d0100810d0081000d020d0200330d82060d060a
0681070082000d060106810700
82060d0601068207000d040d81000d010d81000d010d81000d020d81000d040d81000d02
0d81000d010d81000d810d0081000d820d000d7f0d050d81000d010d81000d810d008100
0d820d000d820d000d010d81000d310d82060d060a0681070082000d060106810700
82060d0601068207000d040d81000d010d81000d010d81000d020d81000d040d81000d03
0d0300010d81000d010d81000d7f0d050d81000d010d81000d820d000d010d81000d810d
000300320d82060d060a0681070082000d060106810700
82060d0601068207000d040d81000d010d81000d810d0081000d020d81000d040d81000d
020d81000d010d81000d820d000d010d81000d7f0d050d81000d010d81000d820d000d01
0d81000d820d000d350d82060d060a0681070082000d060106810700
82060d0601068207000d040d81000d020d0100810d0082000d000300010d0400010d0800
810d0001007f0d060d0200010d0200810d000100010d0300320d82060d060a0681070082
000d060106810700
82060d0601068207000d040d81000d7f0d6f0d82060d060a0681070082000d0601068107
00
82060d0601068207000d010d02007f0d710d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d7f0d760d82060d060a0681070082000d060106810700
82060d0601068207000d810d0081000d060d81000d7f0d690d82060d060a068107008200
0d060106810700
82060d0601068207000d010d81000d0b0d81000d7f0d640d82060d060a0681070082000d
060106810700
82060d0601068207000d010d82000d0081000d010d0200020d0400010d0200820d000d02
0d0200010d0100810d0081000d7f0d050d0100810d0081000d020d0200010d0100810d00
81000d020d02002c0d82060d060a0681070082000d060106810700
82060d0601068207000d010d0100010d81000d020d81000d020d81000d040d85000d000d
000d820d000d010d81000d810d0081000d820d000d7f0d050d0100010d81000d820d000d
010d81000d810d0081000d820d000d820d000d010d81000d2a0d82060d060a0681070082
000d060106810700
82060d0601068207000d010d81000d010d81000d020d81000d020d81000d040d85000d00
0d000d010d0300010d81000d010d81000d7f0d050d81000d010d81000d820d000d010d81
000d820d000d010d81000d810d0003002b0d82060d060a0681070082000d060106810700
82060d0601068207000d010d81000d010d81000d020d81000d020d81000d010d81000d86
0d000d000d000d820d000d010d81000d820d000d010d81000d7f0d050d81000d010d8100
0d820d000d010d81000d820d000d010d81000d820d000d2e0d82060d060a068107008200
0d060106810700
82060d0601068207000d810d000300020d0400020d0200010d0600810d000400810d0002
007f0d060d0200810d000100010d0200010d0200810d000100010d03002b0d8106070c07
0100810d060106810700
82060d0601068207000d240d81000d7f0d4f0d1000810d060106810700
82060d0601068207000d230d02007f0d4f0d0e060100810d060106810700
82060d0601068207000d7f0d760d81060d0b0d81070082000d060106810700
82060d060106820700047f04760482060d060a0681070082000d060106810700
82060d060106820700047f04760482060d060a0681070082000d060106810700
82060d060106820700047f04760482060d060a0681070082000d060106810700
82060d060106820700047f04760482060d060a0681070082000d060106810700
82060d060106820700043404810d041304010d7f04290482060d06810600050002068107
0082000d060106810700
82060d060106820700041d04810d042b04810d046204810d04430482060d060106040003
0681070082000d060106810700
82060d060106820700040204030d0204020d0104010d81040d810d040204030d81040d03
0d0204010d81040d810d040104020d0204020d0204010d81040d810d040204020d030401
0d82040d046104040d0104020d81040d010d0104020d330482060d060206020004068107
0082000d060106810700
82060d060106820700040104810d040104810d0482040d040104810d0481040d810d0482
040d0482040d040404810d040504010d0304810d040104810d040204810d040204010d01
04810d0482040d040104810d0482040d0481040d810d046204810d040404810d04010481
0d0482040d040104810d04310482060d060306810006040681070082000d060106810700
82060d060106820700040104810d040404810d040104810d0482040d040104810d040104
020d0204810d040504810d040404030d0304810d040204810d040104810d0481040d030d
0104810d040104810d046204810d040404850d040d040d0482040d040104810d04310482
060d060a0681070082000d060106810700
82060d060106820700040104810d040404810d040104810d0482040d040104810d040404
810d0482040d040104810d040104810d040304810d040104810d040204810d040204810d
040104810d0482040d040404810d040104810d046204810d040104810d0486040d040d04
0d0482040d040104810d04310482060d060a0681070082000d060106810700
82060d060106820700040204030d0204020d0104020d81040d010d81040d020d0304020d
0204030d0204050d81040d030d81040d010d81040d010d0104030d0204040d6304020d03
04830d040d040204020d330482060d060a0681070082000d060106810700
82060d060106820700047f04760482060d060a0681070082000d060106810700
82060d060106820700047f0476048106070c070100810d060106810700
82060d060106820700047f0476041000810d060106810700
82060d0601068107067f0677061000810d060106810700
82060d0601067f0d7f0d0b0d0206810700
82060d067f067f061006810700
82060d067f067f061006810700
82060d067f067f061006810700
82060d067f067f061006810700
82060d067f067f061006810700
82060d067f067f061006810700
82060d067f067f061006810700
82060d067f067f061006810700
82060d067f067f061006810700
8106077f077f0712070000
7f007f001500
%
% Compression made this file 6.27% of the uncompressed size.
%
showpage
% stop using temporary dictionary
end
% restore original state
origstate restore
%%Trailer

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -0,0 +1,664 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: prop2.eps
%%Creator: XV Version 2.20 Rev: 4/24/92 - by John Bradley
%%BoundingBox: 167 221 466 500
%%Pages: 1
%%DocumentFonts:
%%EndComments
%%EndProlog
%%Page: 1 1
% remember original state
/origstate save def
% build a temporary dictionary
20 dict begin
% lower left corner
167 221 translate
% size of image (on paper, in 1/72inch coords)
299 279 scale
% define 'colorimage' if it isn't defined
% ('colortogray' and 'mergeprocs' come from xwd2ps
% via xgrab)
/colorimage where % do we know about 'colorimage'?
{ pop } % yes: pop off the 'dict' returned
{ % no: define one
/colortogray { % define an RGB->I function
/rgbdata exch store % call input 'rgbdata'
rgbdata length 3 idiv
/npixls exch store
/rgbindx 0 store
/grays npixls string store % str to hold the result
0 1 npixls 1 sub {
grays exch
rgbdata rgbindx get 20 mul % Red
rgbdata rgbindx 1 add get 32 mul % Green
rgbdata rgbindx 2 add get 12 mul % Blue
add add 64 idiv % I = .5G + .31R + .18B
put
/rgbindx rgbindx 3 add store
} for
grays
} bind def
% Utility procedure for colorimage operator.
% This procedure takes two procedures off the
% stack and merges them into a single procedure.
/mergeprocs { % def
dup length
3 -1 roll
dup
length
dup
5 1 roll
3 -1 roll
add
array cvx
dup
3 -1 roll
0 exch
putinterval
dup
4 2 roll
putinterval
} bind def
/colorimage { % def
pop pop % remove 'false 3' operands
{colortogray} mergeprocs
image
} bind def
} ifelse % end of 'false' case
% define the colormap
/cmap 42 string def
% load up the colormap
currentfile cmap readhexstring
000000 bf0000 00bf00 bfbf00 0000bf 00bfbf c0c0c0 808080 ff0000 00ff00
ffff00 0000ff 00ffff ffffff
pop pop % lose return values from readhexstring
% rlecmapimage expects to have 'w h bits matrix' on stack
/rlecmapimage {
/buffer 1 string def
/rgbval 3 string def
/block 384 string def
% proc to read a block from file, and return RGB data
{ currentfile buffer readhexstring pop
/bcount exch 0 get store
bcount 128 ge
{ % it's a non-run block
0 1 bcount 128 sub
{ currentfile buffer readhexstring pop pop
% look up value in color map
/rgbval cmap buffer 0 get 3 mul 3 getinterval store
% and put it in position i*3 in block
block exch 3 mul rgbval putinterval
} for
block 0 bcount 127 sub 3 mul getinterval
}
{ % else it's a run block
currentfile buffer readhexstring pop pop
% look up value in colormap
/rgbval cmap buffer 0 get 3 mul 3 getinterval store
0 1 bcount { block exch 3 mul rgbval putinterval } for
block 0 bcount 1 add 3 mul getinterval
} ifelse
} % end of proc
false 3 colorimage
} bind def
299 279 8 % dimensions of data
[299 0 0 -279 0 279] % mapping matrix
rlecmapimage
7f0003007f072607
07077f067f0618068100070707
070781060d7f0d7f0d150d820700070707
070782060d067f067f061406820700070707
070782060d067f067f061406820700070707
070782060d068106077f077f0710070106820700070707
070782060d068106078207060d820d060783070d0702010203098102077f077e07010682
0700070707
070782060d068106078707060b060001020781070283020702098109028102077f074a07
0e0d81000d0d0d81000781070d0d0d81000781070683060700070707
070782060d0681060782070806810600820002078507020902070201028109077f074a07
810d060b068307000d060b068207000782070d060b068207000781070683060700070707
070782060d06810607810706850608000403078207020984090207020981090701070506
2d070306020701061a0705066a07810d060b068307000d06810600070001068207000782
070d060b068207000781070683060700070707
070782060d068106078707060b0604000a07890702090207020702090701070106020701
061d0701060b07010601070106010701061207010607070106100701065907810d060b06
8307000d06810600070001068207000782070d0601060100030601000106820700078107
0683060700070707
070782060d0681060701070106020001070102860702090207020701070106020701061d
0701060b070106050701061207010607070106100701065907810d060b068307000d0682
0600060506810006830607000782070d0602060100010601000206820700078107068306
0700070707
070782060d0681060785070d0607060d010d840702000209010982020007010701060207
010681070601060107030601070406020703060107020681070601068107068206070681
060703070106050704060207030602070306010702060607010604070306020702060107
02065807810d060b068307000d06820600060506810006830607000782070d0603060300
03068207000781070683060700070707
070782060d06810607070701000602020705060107010601070106010701068107068106
078107068206070681060781070682060706810607810706810607810706820607068106
070407030602070206810706820607068106078107068206070681060781070682060706
81060706070106030701060107010681070682060706820607068106075807810d060b06
8307000d06820600060506810006830607000782070d0604060100040682070007810706
83060700070707
070782060d06810607810705050501000603020701060507010601070106010701068107
068106078107068206070604068107068106078107068106078107068206070681060707
070106010701060107010681070604068107060406810706810607060701060307050601
070106020701065907810d060b068307000d06820600060506810006830607000782070d
060306030003068207000781070683060700070707
070782060d0681060781070c010c8205080c830c05030a020a81030a810a070107010605
070106010701060107010681070681060781070682060706810607030701060107010601
070106810706810607070701060107010601070106810706810607030701060407010607
0701060307010606070106010701065907810d060b068307000d06820600060506810006
830607000782070d06020601000106010002068207000781070683060700070707
070782060d068106078c070c05070507050c05030a030a840a03000a0701070106050701
060107010601070106810706810607810706820607068106078107068206070681060781
070681060701070206050701060107010601070106010701068107068106078107068206
070681060781070682060706810607060701060307010601070106810706820607068206
07068106075807810d060106050003068307000d06820600060506810006830607000782
070d06010601000306010001068207000781070683060700070707
070782060d0681060782070c08020886070c05030a030a010a82030a0701070106050701
060207030601070406020703060107010602070106010701060707030602070106010701
06010703060207030602070106060701060407030602070206020701065807810d060106
050003068307000d06810600070001068207000782070d060b0682070007810706830607
00070707
070782060d0681060782070c080208010c8205030a810a0384030a030a07140701061407
01067f071c07810d060b068307000d060b068207000782070d060b068207000781070683
060700070707
070782060d0681060782070c080308850c05030a030a010a82000a071407010612070206
7f071d07810d070c0782000d070c0781000782070d070c07810007810706830607000707
07
070782060d0681060783070c05080208850c05030a030a810a0382030a077f074a071f00
01070f0001070106820700070707
070782060d0681060781070c050c8205030a050a7f077f070106820700070707
070782060d068106077f077f0710070106820700070707
070782060d067f067f061406820700070707
070782060d067f067f061406820700070707
070782060d0637067f073d07810d061c06820700070707
070782060d06030616000306160001068107007f003a0082060d06810600150004068207
00070707
070782060d06020681000d140d820700068206000d140d8507000607000d7f0d390d8406
0d06000d140d820700060206820700070707
070782060d06020682000d06120601078100068306000d061206010784000607000d7f0d
390d84060d06000d130d01078100060206820700070707
070782060d06020682000d06120601078100068306000d061206010784000607000d7f0d
390d84060d06000d810d06110601078100060206820700070707
070782060d06020682000d06120601078100068306000d061206010784000607000d7f0d
390d84060d06000d810d06110601078100060206820700070707
070782060d06020682000d0603068100060606810006030601078100068306000d061206
010784000607000d010d0100020d0200020d0200020d02007f0d230d84060d06000d810d
06110601078100060206820700070707
070782060d06020682000d060306020003060200040601078100068306000d060b068100
060406010784000607000d810d000100010d0100810d0082000d0082000d0082000d0082
000d0081000d7f0d210d84060d06000d810d06110601078100060206820700070707
070782060d06020682000d060406020001060200050601078100068306000d060a060200
0406010785000607000d000200010d0100810d0082000d0082000d0082000d0082000d00
81000d7f0d210d84060d06000d810d06110601078100060206820700070707
070782060d06020682000d0605060500060601078100068306000d060906030004060107
87000607000d000d0081000d810d0082000d0082000d0082000d0082000d0082000d0081
000d7f0d210d84060d06000d810d06110601078100060206820700070707
070782060d06020682000d0606060300070601078100068306000d060806030005060107
84000607000d010d0100010d0100810d0082000d0082000d0082000d0082000d0081000d
7f0d210d84060d06000d810d06110601078100060206820700070707
070782060d06020682000d0606060300070601078100068306000d060306010001060300
0606010784000607000d010d0100010d0100810d0082000d0082000d0082000d0082000d
0081000d7f0d210d84060d06000d810d06110601078100060206820700070707
070782060d06020682000d0605060500060601078100068306000d060306060007060107
84000607000d010d0100010d0100810d0082000d0082000d0082000d0082000d0081000d
7f0d210d84060d06000d810d06110601078100060206820700070707
070782060d06020682000d060406020001060200050601078100068306000d0604060400
0806010784000607000d010d0100020d0200020d0200020d02007f0d230d84060d06000d
810d060306010781060782070607810706040601078100060206820700070707
070782060d06020682000d060306020003060200040601078100068306000d0605060200
0906010784000607000d7f0d390d84060d06000d810d0603060107810607820706078107
06040601078100060206820700070707
070782060d06020682000d060306010005060100040601078100068306000d0606068100
060906010784000607000d7f0d390d84060d06000d810d06110601078100060206820700
070707
070782060d06020682000d06120601078100068306000d061206010784000607000d7f0d
390d84060d06000d810d06110601078100060206820700070707
070782060d06020682000d06120601078100068306000d061206010784000607000d7f0d
390d84060d06000d810d06110601078100060206820700070707
070782060d06020682000d0714078100068306000d07140784000607000d7f0d390d8506
0d06000d0714078100060206820700070707
070782060d06020682000d0714078100068306000d07140784000607000d7f0d390d8406
0d06000715078100060206820700070707
070782060d06030616000306160001068207000d7f0d390d82060d068106001500040682
0700070707
070782060d0637068107067f063b06810d061c06820700070707
070782060d0637067f0d3e0d1d06820700070707
070782060d0601067f077f070e07810d060106820700070707
070782060d0601068107007f007f000b0082060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d040d0100120d01007f0d150d0200550d82060d0601068207
00070707
070782060d0601068207000d030d81000d140d81000d7f0d130d81000d010d81000d530d
82060d060106820700070707
070782060d0601068207000d020d0300010d0100810d0081000d010d0200030d0100820d
000d7f0d130d81000d010d81000d530d82060d060106820700070707
070782060d0601068207000d030d81000d030d0100030d81000d010d81000d820d000d81
0d0081000d7f0d130d81000d010d81000d530d82060d060106820700070707
070782060d0601068207000d030d81000d030d81000d030d0400010d81000d010d81000d
7f0d130d81000d010d81000d530d82060d060106820700070707
070782060d0601068207000d030d81000d030d81000d030d81000d040d81000d010d8100
0d7f0d130d81000d010d81000d530d82060d060106820700070707
070782060d0601068207000d020d0300010d0300030d0300020d04007f0d140d0200550d
82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d1c0d0100120d01000e0d81000d6b0d0400090d0100480d82
060d060106820700070707
070782060d0601068207000d010d81000d190d81000d120d81000d7c0d81000d820d000d
090d81000d470d82060d060106820700070707
070782060d0601068207000d810d000300030d0200010d0100010d0100020d0100810d00
84000d000d0081000d090d0300010d82000d0081000d020d0200020d0200040d0300020d
02005e0d83000d000d020d0200040d81000d030d0300020d0200390d82060d0601068207
00070707
070782060d0601068207000d010d81000d040d81000d010d81000d820d000d010d81000d
820d000d810d0081000d810d0081000d820d000d070d81000d010d81000d810d0081000d
820d000d820d000d010d81000d020d81000d020d81000d010d81000d820d000d010d8100
0d5c0d0200020d81000d010d81000d020d81000d020d81000d040d81000d010d81000d37
0d82060d060106820700070707
070782060d0601068207000d010d81000d040d81000d010d81000d820d000d010d81000d
820d000d010d81000d820d000d010d81000d070d81000d040d81000d010d81000d820d00
0d010d81000d020d81000d020d81000d040d04005d0d83000d000d020d0300030d81000d
030d0200020d0400380d82060d060106820700070707
070782060d0601068207000d010d81000d010d81000d820d000d010d81000d820d000d81
0d0081000d820d000d010d81000d820d000d010d81000d070d81000d040d81000d010d81
000d820d000d010d81000d020d81000d020d81000d040d81000d600d81000d030d81000d
010d81000d020d81000d060d81000d820d000d3b0d82060d060106820700070707
070782060d0601068207000d020d0200030d0200030d0100810d0081000d810d00020081
0d000100810d000100080d0300810d000100810d000100010d0200020d0400020d030002
0d03005c0d0200030d0500810d000300010d0300030d0300380d82060d06010682070007
0707
070782060d0601068207000d1a0d81000d7f0d6d0d82060d060106820700070707
070782060d0601068207000d170d02007f0d6f0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d060106820700047f047f040a0482060d060106820700070707
070782060d060106820700047f047f040a0482060d060106820700070707
070782060d060106820700047f047f040a0482060d060106820700070707
070782060d060106820700047f047f040a0482060d060106820700070707
070782060d060106820700040304810d047f043204010d4f0482060d0601068207000707
07
070782060d060106820700047f043904810d044e0482060d060106820700070707
070782060d060106820700040104020d0404020d0104010d81040d810d047f042404810d
044e0482060d060106820700070707
070782060d060106820700040304810d040204810d040104810d0481040d810d0482040d
047f041a04040d0304810d044e0482060d060106820700070707
070782060d060106820700040304810d040304030d0104810d040104810d047f04230481
0d044e0482060d060106820700070707
070782060d060106820700040304810d040204810d040104810d0482040d040104810d04
7f042304810d044e0482060d060106820700070707
070782060d060106820700040104040d0104080d81040d010d7f042104040d4d0482060d
060106820700070707
070782060d060106820700047f047f040a0482060d060106820700070707
070782060d060106820700047f047f040a0482060d060106820700070707
070782060d060106820700047f047f040a0482060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d810d0081000d060d81000d030d0100040d01007f0d170d02
00030d03004d0d82060d060106820700070707
070782060d0601068207000d010d81000d0d0d81000d040d81000d7f0d150d81000d010d
81000d010d81000d4f0d82060d060106820700070707
070782060d0601068207000d010d82000d0081000d010d0200050d81000d040d81000d7f
0d180d81000d020d81000d4f0d82060d060106820700070707
070782060d0601068207000d010d0100010d81000d020d81000d040d81000d040d81000d
7f0d170d81000d030d02004e0d82060d060106820700070707
070782060d0601068207000d010d81000d010d81000d020d81000d040d81000d040d8100
0d7f0d160d81000d070d81000d4c0d82060d060106820700070707
070782060d0601068207000d010d81000d010d81000d020d81000d040d81000d040d8100
0d7f0d150d81000d040d81000d010d81000d4c0d82060d060106820700070707
070782060d0601068207000d810d000300020d0400010d0400010d04007f0d140d040002
0d02004e0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d030d81000d0a0d0100050d81000d7f0d6f0d82060d060106
820700070707
070782060d0601068207000d110d81000d7f0d760d82060d060106820700070707
070782060d0601068207000d010d0300010d0100010d0100030d81000d020d0200040d02
00010d0100810d0081000d7f0d070d0200010d0100810d0081000d020d0200470d82060d
060106820700070707
070782060d0601068207000d040d81000d010d81000d010d81000d020d81000d040d8100
0d020d81000d010d81000d810d0081000d820d000d7f0d050d81000d010d81000d810d00
81000d820d000d820d000d010d81000d450d82060d060106820700070707
070782060d0601068207000d040d81000d010d81000d010d81000d020d81000d040d8100
0d030d0300010d81000d010d81000d7f0d050d81000d010d81000d820d000d010d81000d
810d000300460d82060d060106820700070707
070782060d0601068207000d040d81000d010d81000d810d0081000d020d81000d040d81
000d020d81000d010d81000d820d000d010d81000d7f0d050d81000d010d81000d820d00
0d010d81000d820d000d490d82060d060106820700070707
070782060d0601068207000d040d81000d020d0100810d0082000d000300010d0400010d
0800810d0001007f0d060d0200010d0200810d000100010d0300460d82060d0601068207
00070707
070782060d0601068207000d040d81000d7f0d7f0d030d82060d060106820700070707
070782060d0601068207000d010d02007f0d7f0d050d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d810d0081000d060d81000d7f0d7d0d82060d060106820700
070707
070782060d0601068207000d010d81000d0b0d81000d7f0d780d82060d06010682070007
0707
070782060d0601068207000d010d82000d0081000d010d0200020d0400010d0200820d00
0d020d0200010d0100810d0081000d7f0d050d0100810d0081000d020d0200010d010081
0d0081000d020d0200400d82060d060106820700070707
070782060d0601068207000d010d0100010d81000d020d81000d020d81000d040d85000d
000d000d820d000d010d81000d810d0081000d820d000d7f0d050d0100010d81000d820d
000d010d81000d810d0081000d820d000d820d000d010d81000d3e0d82060d0601068207
00070707
070782060d0601068207000d010d81000d010d81000d020d81000d020d81000d040d8500
0d000d000d010d0300010d81000d010d81000d7f0d050d81000d010d81000d820d000d01
0d81000d820d000d010d81000d810d0003003f0d82060d060106820700070707
070782060d0601068207000d010d81000d010d81000d020d81000d020d81000d010d8100
0d860d000d000d000d820d000d010d81000d820d000d010d81000d7f0d050d81000d010d
81000d820d000d010d81000d820d000d010d81000d820d000d420d82060d060106820700
070707
070782060d0601068207000d810d000300020d0400020d0200010d0600810d000400810d
0002007f0d060d0200810d000100010d0200010d0200810d000100010d03003f0d82060d
060106820700070707
070782060d0601068207000d240d81000d7f0d630d82060d060106820700070707
070782060d0601068207000d230d02007f0d630d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d340d81000d130d01007f0d3d0d82060d0601068207000707
07
070782060d0601068207000d1d0d81000d2b0d81000d620d81000d570d82060d06010682
0700070707
070782060d0601068207000d020d0300020d0200010d0100810d0081000d020d0300810d
000300020d0100810d0081000d010d0200020d0200020d0100810d0081000d020d020003
0d0100820d000d610d0400010d0200810d000100010d0200470d82060d06010682070007
0707
070782060d0601068207000d010d81000d010d81000d820d000d010d81000d810d008100
0d820d000d820d000d040d81000d050d0100030d81000d010d81000d020d81000d020d01
00010d81000d820d000d010d81000d820d000d810d0081000d620d81000d040d81000d01
0d81000d820d000d010d81000d450d82060d060106820700070707
070782060d0601068207000d010d81000d040d81000d010d81000d820d000d010d81000d
010d0200020d81000d050d81000d040d0300030d81000d020d81000d010d81000d810d00
0300010d81000d010d81000d620d81000d040d85000d000d000d820d000d010d81000d45
0d82060d060106820700070707
070782060d0601068207000d010d81000d040d81000d010d81000d820d000d010d81000d
040d81000d820d000d010d81000d010d81000d030d81000d010d81000d020d81000d020d
81000d010d81000d820d000d040d81000d010d81000d620d81000d010d81000d860d000d
000d000d820d000d010d81000d450d82060d060106820700070707
070782060d0601068207000d020d0300020d0200010d0200810d000100810d000200030d
0200020d0300020d0500810d000300810d000100810d000100010d0300020d0400630d02
00030d83000d000d020d0200470d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
070782060d0601068207000d7f0d7f0d0a0d82060d060106820700070707
7f077f0726078100070107
03077f0d7f0d210d820700070107
0307820d06077f077f071c07840d060700070107
0307830d0607047f047f041c0483060700070107
0307830d0607047f047f041c0483060700070107
0307830d0607047f047f040a040e0d8100048404060700070107
0307830d0607047f047f040a04810d060b06820700048404060700070107
0307830d06070481040d040d3a04010d7f044604810d060b068207000484040607000701
07
0307830d06070481040d810d040104010d1d04010d1904010d7f044604810d0601060107
030601070106820700048404060700070107
0307830d06070481040d810d040104010d1d04010d1904010d7f044604810d0602060107
01060107010d83060700048404060700070107
0307830d06070481040d810d040104010d81040d010d0104030d0104040d0204030d0104
020d81040d010d81040d820d040d810d040304010d0104010d0104030d0104010d81040d
810d0481040d810d0481040d020d0604030d0104020d81040d010d0104030d0104020d7f
041a04810d0603060307010d0106820700048404060700070107
0307830d06070481040d040d0104010d0104010d0104010d81040d810d0481040d820d04
0d810d0481040d820d040d810d0481040d810d0481040d820d040d810d040304010d0104
010d0404010d81040d820d040d810d0481040d820d040d810d0481040d810d040304010d
0104010d81040d810d0481040d810d0481040d810d0481040d820d040d810d047f041a04
810d0604060107010d0206820700048404060700070107
0307830d06070481040d810d040404010d0104010d0104010d81040d810d0481040d820d
040d040d81040d810d0481040d810d0481040d820d040d810d040404030d0204040d8104
0d820d040d810d0481040d820d040d040d0404050d81040d810d0481040d810d0481040d
810d0481040d820d040d810d047f041a04810d0603060307030682070004840406070007
0107
0307830d06070481040d810d040404010d0104010d0104010d81040d810d0481040d820d
040d810d040304010d0104010d0104010d81040d810d040404030d0104010d0104010d81
040d820d040d810d0481040d820d040d810d040704010d0404010d0104010d0104010d01
04010d81040d810d047f041a04810d0602060107010d0107020682070004840406070007
0107
0307830d06070481040d810d040404010d0104010d0104010d81040d810d0481040d820d
040d810d0481040d820d040d810d0481040d810d040104020d0704010d0204010d010401
0d81040d820d040d820d040d010d81040d810d0481040d810d040304010d0104010d8104
0d810d0481040d810d0481040d810d0481040d820d040d810d047f041a04810d06010601
07010d010601070106820700048404060700070107
0307830d06070481040d810d040404010d0204030d0104040d0204030d0104010d020401
0d0104010d0804010d0304040d81040d810d0481040d030d0104030d0604030d0104010d
0104010d0204030d0104010d7f041b04810d060206010d0306010d830607000484040607
00070107
0307830d0607041304010d1404010d7f045d04810d060b06820700048404060700070107
0307830d0607041304010d1204020d7f045e04810d070c078100048404060700070107
0307830d0607047f047f040a040f00010483060700070107
0307830d0607047f047f041c0483060700070107
0307830d0607047f047f041c0483060700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d06170602037f067f060406820700070107
0307810d06160681030a830a0600067f067f060206820700070107
0307810d06150681030a020a83060007067f067f0683060700070107
0307810d06150681030a030a8100078107067f067f06820700070107
0307810d06140681030a040a820600078107067f067e06820700070107
0307810d06140681030a050a8100078107067f067e06820700070107
0307810d06130681030a060a820600078107067f067d06820700070107
0307810d06130681030a070a8100078107067f067d06820700070107
0307810d06120681030a080a820600078107067f067c06820700070107
0307810d06120681030a010a810600010081060a010a8100078107067f067c0682070007
0107
0307810d06110681030a020a0400020a820600078107067f067b06820700070107
0307810d06110681030a020a0400030a8100078107061606810006030681000605068100
0627068100061b0681000620068100062c06040001060200140681000602060400010602
0001068100060a06820700070107
0307810d06100681030a030a0400030a8206000781070615068100060306810006050681
000621068100060306810006230681000618068100060906810006200681000603068100
060106810006120681000602068100060306810006010683000600060a06820700070107
0307810d06100681030a030a0400040a8100078107061606810006010681000606068100
062106810006030681000623068100061806810006090681000620068100060306810006
0106810006120681000602068100060306810006010683000600060a06820700070107
0307810d060f0681030a040a0400040a8206000781070615068100060106810006010602
000106830006000601068100068106000100040602008106008100068206000601068100
068106008100068106008100060206030002060200050602000106820006008100060306
840006000600810006810600810006810600010002060300010602000106010003060300
020602000106010082060006820600068206000681060001000206020001068200060081
000606060300010681000601068100060306020001068200060081000601060300030603
000106810006010683000600060a06820700070107
0307810d060f0681030a040a810300010081030a040a8100078107061506810006010681
000604068500060006000601068300060006010681000602068100068206000684060006
000601068300060006840600060006030681000601068300060006010681000606068200
060081000682060006020682000600810006840600060006820600060106830006000601
068300060006010683000600060306810006010683000600060106830006000682060006
820600068406000600060106830006000601068200060081000682060006050681000601
068300060006010681000606068200060081000684060006000601068100060206810006
01068300060006010683000600060a06820700070107
0307810d060e0681030a050a810600010081060a040a8206000781070615068300060006
020603008406000600060106820006000300030681000682060006840600060006010681
000682060006010681000603068100060106820006000300040603008206000601068100
060206830006000601068300060006810600030082060006010682000600030082060006
030681000601068200060003008206000689060006000600060006000300810600030082
060006010681000602060100040683000600060106810006030603008206000601068300
060006010681000606068300060006010683000600060a06820700070107
0307810d060e0681030a060a0200070a8100078107061506830006000601068100060106
850006000600060106830006000606068100068206000684060006000601068100060106
810006820600060306810006010683000600060606810006010683000600060106810006
020683000600060106830006000682060006030681000601068300060006030681000603
068100060106830006000603068100068a06000600060006000600060306810006030681
000601068100060906830006000601068100060206810006010683000600060106830006
0006010681000606068300060006010683000600060a06820700070107
0307810d060d0681030a070a830300030a060a8206000781070615068100060206810006
010685000600060006810600830006000601068100060206810006820600068406000600
068106008300060006840600060006030681000601068300060006010681000602068100
060106830006000601068100060206830006000601068300060006820600060106830006
000601068300060006010683000600060306810006010683000600060106830006000601
068100060106810006820600060106830006000601068300060006010681000605068100
060106830006000601068100060206810006010683000600060106830006000601068100
0602068100060106830006000601068100060c06820700070107
0307810d060d0681030a070a830600060a070a8100078107061506810006030603008206
000681060083000600068106000100040681000682060006820600068106008300060006
810600810006010681000602060300020602000506030082060006010681000602068300
060006010681000682060006810600010002060300010602000106810006030603000206
020002068100068206000601068100060106020002060200010681000601068100060606
020002060200050603008206000601068100068106000200040602000206020001068100
060a06820700070107
0307810d060c0681030a090a81000a080a820600078107067c0681000677068207000701
07
0307810d060c0681030a150a810007810706780603007906820700070107
0307810d060b0681030a090a8106008200060a070a820600078107067f06750682070007
0107
0307810d060b0681030a090a0300090a8100078107067f067506820700070107
0307810d060a0681030a0a0a0300090a820600078107067f067406820700070107
0307810d060a0681030a0a0a8106008200060a090a8100078107067f0674068207000701
07
0307810d060a0681030a190a81000701077f067406820700070107
0307810d060a0681030a180a8206000701077f067406820700070107
0307810d060b0681030a160a8206000702077f067406820700070107
0307810d060c06810300160004077f067406820700070107
0307810d060e061a077f067506820700070107
0307810d060f0618077f067606820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d066b0648006a06820700070107
0307810d066a064a006906820700070107
0307810d066a060100450d8107008100066806820700070107
0307810d066a060100440d010701006906820700070107
0307810d066a060100010d18069100060006000600060006000600060006000617060107
01006906820700070107
0307810d066a060100010d4206010701006906820700070107
0307810d066a060100010d18068100060d068100061706010701006906820700070107
0307810d066a060100010d1b060300020681000601068100061906010701006906820700
070107
0307810d066a060100010d18068300060006020681000682060006820600068206000617
06010701006906820700070107
0307810d066a060100010d1a0681000602068100068406000600061b0601070100690682
0700070107
0307810d066a060100010d18068300060006020681000681060081000602068100061706
010701006906820700070107
0307810d066a060100010d1a0681000602068100068106008100061c0601070100690682
0700070107
0307810d066a060100010d18068300060006020681000684060006000601068100061706
010701006906820700070107
0307810d066a060100010d1a06810006020681000682060006820600061a060107010069
06820700070107
0307810d066a060100010d18068300060006020681000682060006010683000600061706
010701006906820700070107
0307810d066a060100010d1b060300020681000602068100061806010701006906820700
070107
0307810d066a060100010d18068100060d068100061706010701006906820700070107
0307810d066a060100010d4206010701006906820700070107
0307810d066a060100010d18069100060006000600060006000600060006000617060107
01006906820700070107
0307810d066a060100810d07440701006906820700070107
0307810d066a060100460701006906820700070107
0307810d066a064a006906820700070107
0307810d066b0648006a06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
0307810d067f067f061f06820700070107
7f077f0726078100070107
02077f007f0024000207
7f077f072a07
7f077f072a07
7f077f072a07
7f077f072a07
7f077f072a07
7f077f072a07
%
% Compression made this file 5.68% of the uncompressed size.
%
showpage
% stop using temporary dictionary
end
% restore original state
origstate restore
%%Trailer

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1,39 @@
Prototype dialog editor and property sheet classes
--------------------------------------------------
Julian Smart, October 4th 1995
------------------------------
Here's what I've done so far on a lightweight dialog editor. The 16-bit
Windows binaries in the bin directory are dialoged.exe (the dialog
editor) and test.exe (a small property sheet demo).
Main points:
- You can create a new dialog box and add items to it.
- You can move items around, and right-click
to edit a few properties (very incomplete).
- Can't write out .wxr files yet. Loading code is in
wxWindows, but writing code is absent: should be put
into wxWindows.
- No attempt at resources other than dialogs yet.
Should have menu editor too.
- Should *somehow* have a protocol to allow
existing resources e.g. in wxCLIPS/wxPython
to be edited in situ.
This should be made simpler by the existance of
the plug-in event handler mechanism, which means you
can temporarily handle all the events yourself.
- See dialoged.cc: the main program is tiny because
it's meant to be embeddable.
- The wxPropertySheet (set of) classes are very
general and should be put into wxWin and documented.
Comments, chivvying and help all appreciated. Maybe if
I documented what I had, it would be easier for others
to do some work on it.
Regards,
Julian

View File

@@ -0,0 +1,21 @@
runTwice = yes
titleFontSize = 12
authorFontSize = 10
chapterFontSize = 12
sectionFontSize = 12
subsectionFontSize = 12
headerRule = yes
footerRule = yes
useHeadingStyles = yes
contentsDepth = 2
listItemIndent=40
generateHPJ = no
htmlBrowseButtons = bitmap
winHelpVersion = 3
winHelpContents = yes
winHelpTitle = "Property Classes Manual"
truncateFilenames = yes
\overview [2] {\rtfonly{See also }\sethotspotcolour{off}\sethotspotunderline{on}\winhelponly{\image{}{books.bmp}}
\htmlonly{\image{}{books.gif}}\helpref{#1}{#2}
\sethotspotcolour{on}\sethotspotunderline{on}}

BIN
docs/latex/proplist/up.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B

View File

@@ -0,0 +1,17 @@
[OPTIONS]
BMROOT=d:\wx2\wxWind~1\utils\wxprop\docs ; Assume that bitmaps are where the source is
TITLE=Property Classes Manual
CONTENTS=Contents
COMPRESS=HIGH
[FILES]
wxprop.rtf
[CONFIG]
CreateButton("Up", "&Up", "JumpId(`wxprop.hlp', `Contents')")
BrowseButtons()
[MAP]
[BITMAPS]

View File

@@ -1,102 +0,0 @@
wxMotif CHANGES
---------------
21/9/98
-------
Julian:
- Made makefiles for wxMotif source directory and minimal sample.
- First go at wxApp, wxWindow, wxDialog, wxPen, wxBrush, wxFont,
wxColour, wxButton, wxCheckBox, wxTextCtrl, wxStaticText,
wxMenu, wxMenuItem, wxMenuBar
12/11/98
--------
It's a long time since I updated this file. Previously done:
- wxFrame, wxDialog done.
- wxScrolledWindow done (but backing pixmap not used at present).
- wxBitmap done though could be tidied it up at some point.
- Most basic controls are there, if not rigorously tested.
- Some MDI support (menus appear on child frames at present).
- wxNotebook almost done.
- wxToolBar done (horizontal only, which would be easy to extend
to vertical toolbars).
More recently:
- Colour and font changing done (question mark over what happens
to scrollbars).
- Accelerators done (for menu items and buttons). Also event loop
tidied up in wxApp so that events are filtered through ProcessXEvent.
- wxWindow::GetUpdateRegion should now work.
25/11/98
--------
- Reimplemented MDI using wxNotebook instead of the MDI widgets, which
were too buggy (probably not design for dynamic addition/removal of
child frames).
- Some improvements to the wxNotebook implementation.
- wxToolBar now uses a bulletin board instead of a form, in an attempt
to make it possible to add ordinary wxControls to a toolbar.
- Cured problem with not being able to use global memory operators,
by defining two more global operators, so that the delete will match
the debugging implementation.
- Added wxUSE_DEBUG_NEW_ALWAYS so we can distinguish between using
global memory operators (usually OK) and #defining new to be
WXDEBUG_NEW (sometimes it might not be OK).
- Added time.cpp to makefile; set wxUSE_DATETIME to 1.
- Added a parent-existance check to popup menu code to make it not crash.
- Added some optimization in wxWindow::SetSize to produce less flicker.
It remains to be seen whether this produces any resize bugs.
3/12/98
-------
- Debugged DrawEllipticArc (a ! in the wrong place).
- Added SetClippingRegion( const wxRegion& region ).
- Added wxPoint, wxSize, wxRect versions of SetSize etc.
- Diagnosed but not yet cured a wxTreeCtrl bug (see todo.txt).
4/12/98
-------
- Got further with wxTreeCtrl, fixing wxWindow::Refresh on the way,
and adding Clear(const wxRect&). Mainly the scrolling to sort out now,
and inter-line spacing.
- Fixed some problems with wxListCtrl espec. trying to call m_mainWin
functions when it wasn't initialised. As with the wxTreeCtrl sample,
removed usage of wxTextCtrl as a stream (doesn't seem to agree
with gcc) and the sample is now partially working. Some work
on the scrollbars is required.
- wxListCtrl assumed that one of the args to GetClientSize can be NULL:
corrected.
18/12/98
--------
- Removed major bug whereby dialogs were unmanaged automatically
when any button was pressed.
- Fixed colours of wxWindow scrollbars, made list and text controls
have a white background.
- Fixed dialog colour setting.
- Added settable fonts and colours for wxMenu/wxMenuBar. Now
they have sensible colours by default.
- Fixed a bug in wxStaticBox.
- Controls sample runs, though wxRadioBox doesn't appear and
the notebook flickers for a while.
- Cured wxTreeCtrl bug: now works pretty well!
28/12/98
--------
- Cured scrolling problem: scrollbars now show/hide themselves
without (permanently) resizing the window.
- Removed some commented-out lines in wxScrolledWindow::AdjustScrollbars
that disabled scrollbar paging.
- Set background colour of drawing area in wxWindow, so e.g. wxListCtrl
colours correctly.

View File

@@ -1,365 +0,0 @@
wxWindows 2.0 for Windows Change Log
------------------------------------
Alpha 18, December 29th 1998
----------------------------
- Win16 support working again (VC++ 1.5)
- Win16 now uses generic wxNotebook, wxListCtrl,
wxTreeCtrl -- more or less working now, although
a little work on wxNotebook is still needed.
Under 16-bit Windows, get assertion when you click
on a tab.
- Wrote 16-bit BC++ makefiles: samples don't yet link.
- Added CodeWarrior support to distribution courtesy
of Stefan Csomor.
Alpha 17, November 22nd 1998
----------------------------
- More documentation updates, especially for
wxLayoutWindow classes and debugging facilities.
- Changed wxDebugContext to use wxDebugLog instead
of wxTrace.
- Now supports VC++ 6.0, and hopefully BC++ 5.0.
However, DLL support may be broken for BC++ since
VC++ 6 required changing of WXDLLEXPORT keyword
position.
- Numerous miscellaneous changes.
Alpha 16, September 8th 1998
----------------------------
- Added wxSashWindow, wxSashLayoutWindow classes, and sashtest
sample.
- Guilhem's socket classes added, plus wxsocket sample.
- A few more makefiles added.
- GnuWin32/BC++ compatibility mods.
- Further doc updates.
- wxProp updates for correct working with wxGTK.
Alpha 15, August 31st 1998
--------------------------
- wxBitmap debugged.
- wxDC::GetDepth added.
- Contribution added whereby wxBitmap will be
converted to DC depth if they don't match.
- wxConfig API improved, documentation updated.
- Printing classes name conventions cleaned up.
- wxUpdateUIEvent now derives from wxCommandEvent
so event can travel up the window hierachy.
Alpha 14, July 31st 1998
------------------------
- Toolbar API has been simplified, and now
wxFrame::GetClientArea returns the available client
area when toolbar, status bar etc. have been accounted for.
wxFrame::CreateToolBar added in line with CreateStatusBar.
- Documentation updates, incl. for wxToolBar.
- New wxAcceleratorTable class plus wxFrame::SetAcceleratorTable.
- Various additions from other folk, e.g. streams, wxConfig
changes, wxNotebook.
- Added wxDocMDIParentFrame, wxDocMDIChildFrame for doc/view.
Alpha 13, July 8th 1998
-----------------------
- Implemented wxPoint as identical to POINT on Windows, and
altered wxDC wxPoint functions to use wxPoint directly in
Windows functions, for efficiency.
- Cured wxASSERT bug in wxStatusBar95.
- #ifdefed out some bits in oleutils.cpp for compilers that
don't support it.
- Added some operators to wxPoint, wxSize.
- Added inline wxDC functions using wxPoint, wxSize, wxRect.
Alpha 12, July 7th 1998
-----------------------
- Added wxApp::GetComCtl32Version, and wxTB_FLAT style, so can
have flat toolbars on Win98 or Win95 with IE >= 3 installed.
Alpha 11, July 3rd 1998
-----------------------
- Added thread.h, thread.cpp.
- Changed Enabled, Checked to IsEnabled, IsChecked in wxMenu,
wxMenuBar.
- Changed wxMenuItem::SetBackColor to SetBackgroundColour,
SetTextColor to SetTextColour, and added or made public several
wxMenuItem accessors.
- Added two overloads to wxRegion::Contains. Added
wxRegion::IsEmpty for a more consistent naming convention.
- Added Vadim's wxDataObject and wxDropSource.
- ENTER/LEAVE events now work.
- Cured wxMemoryDC bug where the DC wasn't being deleted.
- Cured wxGauge SetSize major bugginess.
- Cured problem where if a GDI object was created on the stack,
then went out of scope, then another object was selected into
the DC, GDI objects would leak. This is because the assignment
to e.g. wxDC::m_pen would delete the GDI object without it first
being selected out of the DC. Cured by selecting the old DC object
first, then doing the assignment.
- Split up wxGaugeMSW, wxGauge95, wxSliderMSW, wxSlider95
- Various other bug fixes and additions.
Alpha 10, May 7th 1998
----------------------
- Added desiredWidth, desiredHeight parameters to wxBitmapHandler
and wxIcon functions so that you can specify what size of
icon should be loaded. Probably will remain a Windows-specific thing.
- wxStatusBar95 now works for MDI frames.
- Toolbars in MDI frames now behave normally. They still
require application-supplied positioning code though.
- Changed installation instructions, makefiles and batch files
for compiling with Gnu-Win32/Mingw32/EGCS. Also timercmn.cpp
change to support Mingw32/EGCS. Bison now used by default.
Alpha 9, April 27th 1998
------------------------
- Cured bug in wxStatusBar95 that caused a crash if multiple
fields were used.
- Added Gnu-Win32 b19/Mingw32 support by changing resource
compilation and pragmas.
- Cured wxMenu bug introduced in alpha 8 - didn't respond to
commands because VZ changed the id setting in wxMenu::MSWCommand.
Alpha 8, April 17th 1998
------------------------
- Added IsNull to wxGDIObject to check if the ref data is present or not.
- Added PNG handler and sample - doesn't work for 16-bit PNGs for
some reason :-(
- Added wxJoystick class and event handling, and simple demo.
- Added simple wxWave class. Needs Stop() function.
- Added wxModule (module.h/module.cpp) to allow definition
of modules to be initialized and cleaned up on wxWindows
startup/exit.
- Start of Mingw32 compatibility (see minimal and dialogs samples
makefile.m95 files, and install.txt).
- Note: Windows printing has stopped working... will investigate.
VADIM'S CHANGES:
- Updated wxString: bug fixes, added wxArrayString, some
compatibility functions.
- Updated log.h/cpp, added wxApp::CreateLogTarget.
- file.h: new wxTempFile class.
- defs.h: added wxSB_SIZE_GRIP for wxStatusBar95
- statbr95: wxStatusBar95 control.
- registry.h/cpp: wxRegKey class for Win95 registry.
- listbox.cpp: corrected some bugs with owner-drawn listboxes.
- wxConfig and wxFileConfig classes.
Alpha 7, March 30th 1998
------------------------
- Added tab classes, tab sample.
- Now can return FALSE from OnInit and windows will be
cleaned up properly before exit.
- Improved border handling so panels don't get borders
automatically.
- Debugged MDI activation from Window menu.
- Changes to memory debug handling, including checking for
memory leaks on application exit - but see issues.txt for
unresolved issues.
- Added wxTaskBarIcon (taskbar.cpp/h, plus samples/taskbar)
to allow maintenance of an icon in the Windows 95 taskbar
tray area.
- Got MFC sample working (MFC and wxWindows in the same
application), partly by tweaking ntwxwin.mak settings.
- Got DLL compilation working again (VC++).
- Changed wxProp/Dialog Editor filenames.
Alpha 6, March 10th 1998
------------------------
- Found stack error bug - stopped unwanted OnIdle recursion.
- Removed bug in wxTreeCtrl::InsertItem I added in alpha 5.
- Changed exit behaviour in wxApp/wxFrame/wxDialog. Now will
check if the number of top-level windows is zero before
exiting. Also, wxApp::GetTopWindow will return either
m_topWindow or the first member of wxTopLevelWindows, so you
don't have to call wxApp::SetTopWindow.
- Added dynarray.h/dynarray.cpp (from Vadim).
- Added first cut at OLE drag and drop (from Vadim). dnd sample
added. Drop target only at this stage. See src/msw/ole/*.cpp,
wx/include/msw/ole/*.h. WIN32 only because of UUID usage.
Doesn't work with GnuWin32 - no appropriate headers e.g. for
IUnknown.
Doesn't work with BC++ either - crashes on program startup.
- Added Vadim's owner-draw modifications - will probably remain
Windows-only. This enhances wxMenu, wxListBox. See ownerdrw sample.
- Added wxLB_OWNERDRAW for owner-draw listboxes.
- Vadim's wxCheckListBox derives from wxListBox. See checklst sample.
Doesn't entirely work for WIN16.
- Vadim has added wxMenuItem as a separate file menuitem.cpp. It
can also be used as an argument to wxMenu::Append, not just for
internal implementation.
- Some #ifdefs done for MINGW32 compilation (just alter OPTIONS
in makeg95.env, together with mingw32.bat). However, resource
binding is not working yet so most apps with dialogs crash.
Alpha 5, 14th February 1998
---------------------------
- GENERIC AND MSW-SPECIFIC CODE NOW TREATED AS TWO SEPARATE
DISTRIBUTIONS. This change log will therefore now refer to
the Windows-specific code only. See docs/changes.txt for generic
changes.
- Removed Windows-specific reference counting system (GDI
resources were cleaned up in idle time) - minimal
advantages now we have a wxWin reference counting system.
- Added missing WXDLLEXPORT keywords so DLL compilation works
again.
- Removed most warnings for GnuWin32 compilation.
- Added wxRegion/wxRegionIterator, but haven't yet used it in
e.g. wxDC.
Alpha 4, 31st January 1998
--------------------------
- Changed wxDC functions to take longs instead of floats. GetSize now takes
integer pointers, plus a version that returns a wxSize.
- const keyword added to various wxDC functions.
- Under Windows, wxDC no longer has any knowledge of whether
an associated window is scrolled or not. Instead, the device
origin is set by wxScrolledWindow in wxScrolledWindow::PrepareDC.
- wxScrolledWindow applications can optionally override the virtual OnDraw
function instead of using the OnPaint event handler. The wxDC passed to
OnDraw will be translated by PrepareDC to reflect scrolling.
When drawing outside of OnDraw, must call PrepareDC explicitly.
- wxToolBarBase/wxToolBarSimple similarly changed to allow for
scrolling toolbars.
- Integrated wxPostScriptDC patches for 1.xx by Chris Breeze,
to help printing with multiple pages.
- IPC classes given base classes (wxConnectionBase etc.) which
define the API used by different implementations. DDE
implementation updated to use these base classes.
- wxHelpInstance now separated into wxHelpControllerBase (base
for all implementations), wxWinHelpController (uses standard
WinHelp), wxXLPHelPController (talks to wxHelp by DDE or
TCP/IP). There will be others eventually, such as
wxHTMLHelpController for Microsoft (and Netscape?) HTML Help.
- Added Vadim Zeitlin's wxString class plus
internationalization code (gettext simulation, wxLocale, etc.).
New files from Vadim:
include\wx\string.h
include\wx\debug.h
include\wx\file.h
include\wx\log.h
include\wx\intl.h
src\common\string.cpp
src\common\log.cpp
src\common\intl.cpp
src\common\file.cpp
No longer use GNU wxString files.
- Split off file-related functions into include\wx\filefn.h and
src\common\filefn.cpp.
- Borland C++ support (WIN32) for main library and
samples, using makefile.b32 files.
- Preparation done for allowing BC++ to compile wxWin as a DLL,
including changes to defs.h.
- wxIntPoint removed, wxPoint is now int, and wxRealPoint
introduced.
- Added wxShowEvent (generated when window is being shown or
hidden).
- Got minimal, docview, mdi samples working for 16-bit VC++ and
cured 16-bit problem with wxTextCtrl (removed global memory
trick).
- Updated GnuWin32 makefiles, checked minimal, mdi, docview samples.
Alpha 3, September 1997
-----------------------
- wxListCtrl, wxTreeCtrl, wxImageList classes done.
- Instigated new file hierarchy, split files and classes up more logically.
- PrologIO and some other utils now put into core library.
- Revamped print/preview classes, added wxPageSetupDialog.
- Started documentation.
Alpha 2, 30th April 1997
------------------------
- EVT_... macros now have at least one argument, for conformance
with MetroWerks compiler.
- Added ids to .wxr file format.
- Got Dialog Editor compiled and running again but need
to extend functionality to be in line with new controls.
Added dialoged\test app to allow dynamic loading of .wxr files
for testing purposes.
- Rewrote wxBitmap to allow installable file type
handlers.
- Rewrote wxBitmapButton, wxStaticBitmap to not use Fafa.
- Wrote most of wxTreeCtrl and sample (need wxImageList to implement it
fully).
- Added back wxRadioBox.
- Tidied up wx_main.cpp, wxApp class, putting PenWin code in
a separate file.
Alpha 1, 5th April 1997
-----------------------
At this point, the following has been achieved:
- A lot, but not all, of the code has been revamped for better
naming conventions, protection of data members, and use of
wxString instead of char *.
- Obsolete functionality deleted (e.g. default wxPanel layout,
old system event system) and code size reduced.
- Class hierarchy changed (see design doc) - base classes such
as wxbWindow now removed.
- No longer includes windows.h in wxWin headers, by using stand-in
Windows types where needed e.g. WXHWND.
- PrologIO revised.
- wxScrolledWindow, wxStatusBar and new MDI classes added.
MDI is now achived using separate classes, not window styles.
- wxSystemSettings added, and made use of to reflect standard
Windows settings.
- SetButtonFont/SetLabelFont replaced by SetFont; font and colour
settings mucho rationalised.
- All windows are now subclassed with the same window proc to make
event handling far more consistent. Old internal wxWnd and derived
classes removed.
- API for controls revised, in particular addition of
wxValidator parameters and removal of labels for some controls.
- 1 validator written: see examples/validate.
- Event table system introduced (see most samples and
wx_event.cpp/ProcessEvent, wx_event.h). wxEvtHandler
made more flexible, with Push/PopEventHandler allowing a chain
of event handlers.
- wxRadioBox removed - will be added back soon.
- Toolbar class hierarchy revised:
wxToolBarBase
wxToolBarSimple (= old wxToolBar)
wxToolBar95 (= old wxButtonBar under Win95
wxToolBarMSW (= old wxButtonBar under WIN16/WIN32)
- Constraint system debugged somewhat (sizers now work properly).
- wxFileDialog, wxDirDialog added; other common dialogs now
have class equivalents. Generic colour and font dialogs
rewritten to not need obsolete panel layout.
- .wxr resource system partially reinstated, though needs
an integer ID for controls. Hopefully the resource system
will be replaced by something better and more efficient
in the future.
- Device contexts no longer stored with window and accessed
with GetDC - use wxClientDC, wxPaintDC, wxWindowDC stack
variables instead.
- wxSlider uses trackbar class under Win95, and wxSL_LABELS flag
determines whether labels are shown. Other Win95-specific flags
introduced, e.g. for showing ticks.
- Styles introduced for dealing with 3D effects per window, for
any window: all Win95 3D effects supported, plus transparent windows.
- Major change to allow 3D effect support without CTL3D, under
Win95.
- Bitmap versions of button and checkbox separated out into new
classes, but unimplemented as yet because I intend to remove
the need for Fafa - it apparently causes GPFs in Win95 OSR 2.
- utils/wxprop classes working (except maybe wxPropertyFormView)
in preparation for use in Dialog Editor.
- GNU-WIN32 compilation verified (a month or so ago).

325
include/wx/prop.h Normal file
View File

@@ -0,0 +1,325 @@
/////////////////////////////////////////////////////////////////////////////
// Name: prop.h
// Purpose: Property sheet classes
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_PROP_H_
#define _WX_PROP_H_
#ifdef __GNUG__
#pragma interface "prop.h"
#endif
#include "wx/defs.h"
#include "wx/string.h"
#include "wx/hash.h"
#include "wx/dialog.h"
#include "wx/frame.h"
#include "wx/button.h"
#include "wx/listbox.h"
#include "wx/textctrl.h"
#include "wx/gdicmn.h"
#include "wx/layout.h"
class wxWindow;
class wxProperty;
class wxPropertyValue;
class wxPropertySheet;
class wxPropertyView;
class wxPropertyValidator;
class wxPropertyValidatorRegistry;
#define wxPROPERTY_VERSION 2.0
// A storable sheet of values
class wxPropertySheet: public wxObject
{
DECLARE_DYNAMIC_CLASS(wxPropertySheet)
public:
wxPropertySheet(void);
~wxPropertySheet(void);
// Add a property
virtual void AddProperty(wxProperty *property);
// Get property by name
virtual wxProperty *GetProperty(wxString name);
// Clear all properties
virtual void Clear(void);
virtual bool Save(ostream& str);
virtual bool Load(ostream& str);
virtual void UpdateAllViews(wxPropertyView *thisView = NULL);
inline virtual wxList& GetProperties(void) const { return (wxList&) m_properties; }
// Sets/clears the modified flag for each property value
virtual void SetAllModified(bool flag = TRUE);
protected:
wxObject* m_viewedObject;
wxList m_properties;
wxPropertyView* m_propertyView;
};
// Base class for property sheet views. There are currently two directly derived
// classes: wxPropertyListView, and wxPropertyFormView.
class wxPropertyView: public wxEvtHandler
{
DECLARE_DYNAMIC_CLASS(wxPropertyView)
public:
wxPropertyView(long flags = 0);
~wxPropertyView(void);
// Associates and shows the view
virtual void ShowView(wxPropertySheet *WXUNUSED(propertySheet), wxWindow *WXUNUSED(panel)) {}
// Update this view of the viewed object, called e.g. by
// the object itself.
virtual bool OnUpdateView(void) {return FALSE;};
// Override this to do something as soon as the property changed,
// if the view and validators support it.
virtual void OnPropertyChanged(wxProperty *WXUNUSED(property)) {}
virtual void AddRegistry(wxPropertyValidatorRegistry *registry);
inline virtual wxList& GetRegistryList(void) const
{ return (wxList&) m_validatorRegistryList; }
virtual wxPropertyValidator *FindPropertyValidator(wxProperty *property);
inline virtual void SetPropertySheet(wxPropertySheet *sheet) { m_propertySheet = sheet; }
inline virtual wxPropertySheet *GetPropertySheet(void) const { return m_propertySheet; }
virtual void OnOk(void) {};
virtual void OnCancel(void) {};
virtual void OnHelp(void) {};
inline virtual bool OnClose(void) { return FALSE; }
inline long GetFlags(void) { return m_buttonFlags; }
protected:
long m_buttonFlags;
wxPropertySheet* m_propertySheet;
wxProperty* m_currentProperty;
wxList m_validatorRegistryList;
wxPropertyValidator* m_currentValidator;
};
class wxPropertyValidator: public wxEvtHandler
{
DECLARE_DYNAMIC_CLASS(wxPropertyValidator)
public:
wxPropertyValidator(long flags = 0);
~wxPropertyValidator(void);
inline long GetFlags(void) const { return m_validatorFlags; }
inline void SetValidatorProperty(wxProperty *prop) { m_validatorProperty = prop; }
inline wxProperty *GetValidatorProperty(void) const { return m_validatorProperty; }
virtual bool StringToFloat (char *s, float *number);
virtual bool StringToDouble (char *s, double *number);
virtual bool StringToInt (char *s, int *number);
virtual bool StringToLong (char *s, long *number);
virtual char *FloatToString (float number);
virtual char *DoubleToString (double number);
virtual char *IntToString (int number);
virtual char *LongToString (long number);
protected:
long m_validatorFlags;
wxProperty* m_validatorProperty;
};
// extern wxPropertyValidator *wxDefaultPropertyValidator;
class wxPropertyValidatorRegistry: public wxHashTable
{
DECLARE_DYNAMIC_CLASS(wxPropertyValidatorRegistry)
public:
wxPropertyValidatorRegistry(void);
~wxPropertyValidatorRegistry(void);
virtual void RegisterValidator(const wxString& roleName, wxPropertyValidator *validator);
virtual wxPropertyValidator *GetValidator(const wxString& roleName);
void ClearRegistry(void);
};
/*
* Property value class
*/
typedef enum {
wxPropertyValueNull,
wxPropertyValueInteger,
wxPropertyValueReal,
wxPropertyValuebool,
wxPropertyValueString,
wxPropertyValueList,
wxPropertyValueIntegerPtr,
wxPropertyValueRealPtr,
wxPropertyValueboolPtr,
wxPropertyValueStringPtr
} wxPropertyValueType;
class wxPropertyValue: public wxObject
{
DECLARE_DYNAMIC_CLASS(wxPropertyValue)
wxPropertyValue(void); // Unknown type
wxPropertyValue(const wxPropertyValue& copyFrom); // Copy constructor
wxPropertyValue(const char *val);
wxPropertyValue(const wxString& val);
wxPropertyValue(long val);
wxPropertyValue(bool val);
wxPropertyValue(float val);
wxPropertyValue(double the_real);
wxPropertyValue(wxList *val);
wxPropertyValue(wxStringList *val);
// Pointer versions
wxPropertyValue(char **val);
wxPropertyValue(long *val);
wxPropertyValue(bool *val);
wxPropertyValue(float *val);
~wxPropertyValue(void);
virtual inline wxPropertyValueType Type(void) const { return m_type; }
virtual inline void SetType(wxPropertyValueType typ) { m_type = typ; }
virtual long IntegerValue(void) const;
virtual float RealValue(void) const;
virtual bool BoolValue(void) const;
virtual char *StringValue(void) const;
virtual long *IntegerValuePtr(void) const;
virtual float *RealValuePtr(void) const;
virtual bool *BoolValuePtr(void) const;
virtual char **StringValuePtr(void) const;
// Get nth arg of clause (starting from 1)
virtual wxPropertyValue *Arg(wxPropertyValueType type, int arg) const;
// Return nth argument of a list expression (starting from zero)
virtual wxPropertyValue *Nth(int arg) const;
// Returns the number of elements in a list expression
virtual int Number(void) const;
virtual wxPropertyValue *NewCopy(void) const;
virtual void Copy(wxPropertyValue& copyFrom);
virtual void WritePropertyClause(ostream& stream); // Write this expression as a top-level clause
virtual void WritePropertyType(ostream& stream); // Write as any other subexpression
// Append an expression to a list
virtual void Append(wxPropertyValue *expr);
// Insert at beginning of list
virtual void Insert(wxPropertyValue *expr);
// Get first expr in list
virtual inline wxPropertyValue *GetFirst(void) const
{ return ((m_type == wxPropertyValueList) ? m_value.first : (wxPropertyValue*)NULL); }
// Get next expr if this is a node in a list
virtual inline wxPropertyValue *GetNext(void) const
{ return m_next; }
// Get last expr in list
virtual inline wxPropertyValue *GetLast(void) const
{ return ((m_type == wxPropertyValueList) ? m_last : (wxPropertyValue*)NULL); }
// Delete this node from the list
virtual void Delete(wxPropertyValue *node);
// Clear list
virtual void ClearList(void);
virtual inline void SetClientData(wxObject *data) { m_clientData = data; }
virtual inline wxObject *GetClientData(void) { return m_clientData; }
virtual wxString GetStringRepresentation(void);
inline void SetModified(bool flag = TRUE) { m_modifiedFlag = flag; }
inline bool GetModified(void) { return m_modifiedFlag; }
// Operators
void operator=(const wxPropertyValue& val);
// void operator=(const char *val);
void operator=(const wxString& val);
void operator=(const long val);
void operator=(const bool val);
void operator=(const float val);
void operator=(const char **val);
void operator=(const long *val);
void operator=(const bool *val);
void operator=(const float *val);
public:
wxObject* m_clientData;
wxPropertyValueType m_type;
bool m_modifiedFlag;
union {
long integer; // Also doubles as bool
char *string;
float real;
long *integerPtr;
bool *boolPtr;
char **stringPtr;
float *realPtr;
wxPropertyValue *first; // If is a list expr, points to the first node
} m_value;
wxPropertyValue* m_next; // If this is a node in a list, points to the next node
wxPropertyValue* m_last; // If is a list expr, points to the last node
};
/*
* Property class: contains a name and a value.
*/
class wxProperty: public wxObject
{
DECLARE_DYNAMIC_CLASS(wxProperty)
protected:
bool m_enabled;
public:
wxPropertyValue m_value;
wxString m_name;
wxString m_propertyRole;
wxPropertyValidator* m_propertyValidator;
wxWindow* m_propertyWindow; // Usually a panel item, if anything
wxProperty(void);
wxProperty(wxProperty& copyFrom);
wxProperty(wxString name, wxString role, wxPropertyValidator *ed = NULL);
wxProperty(wxString name, const wxPropertyValue& val, wxString role, wxPropertyValidator *ed = NULL);
~wxProperty(void);
virtual wxPropertyValue& GetValue(void) const;
virtual wxPropertyValidator *GetValidator(void) const;
virtual wxString& GetName(void) const;
virtual wxString& GetRole(void) const;
virtual void SetValue(const wxPropertyValue& val);
virtual void SetValidator(wxPropertyValidator *v);
virtual void SetName(wxString& nm);
virtual void SetRole(wxString& role);
void operator=(const wxPropertyValue& val);
virtual inline void SetWindow(wxWindow *win) { m_propertyWindow = win; }
virtual inline wxWindow *GetWindow(void) const { return m_propertyWindow; }
inline void Enable(bool en) { m_enabled = en; }
inline bool IsEnabled(void) const { return m_enabled; }
};
#endif
// _WX_PROP_H_

297
include/wx/propform.h Normal file
View File

@@ -0,0 +1,297 @@
/////////////////////////////////////////////////////////////////////////////
// Name: propform.h
// Purpose: Property form classes
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_PROPFORM_H_
#define _WX_PROPFORM_H_
#ifdef __GNUG__
#pragma interface "propform.h"
#endif
#include "wx/prop.h"
////
//// Property form classes: for using an existing dialog or panel
////
#define wxID_PROP_REVERT 3100
#define wxID_PROP_UPDATE 3101
// Mediates between a physical panel and the property sheet
class wxPropertyFormView: public wxPropertyView
{
DECLARE_DYNAMIC_CLASS(wxPropertyFormView)
public:
wxPropertyFormView(wxWindow *propPanel = NULL, long flags = 0);
~wxPropertyFormView(void);
// Associates and shows the view
virtual void ShowView(wxPropertySheet *propertySheet, wxWindow *panel);
// Update this view of the viewed object, called e.g. by
// the object itself.
virtual bool OnUpdateView(void);
// Transfer values from property sheet to dialog
virtual bool TransferToDialog(void);
// Transfer values from dialog to property sheet
virtual bool TransferToPropertySheet(void);
// Check that all the values are valid
virtual bool Check(void);
// Give each property in the sheet a panel item, by matching
// the name of the property to the name of the panel item.
// The user doesn't always want to call this; sometimes, it
// will have been done explicitly (e.g., no matching names).
virtual bool AssociateNames(void);
void OnOk(wxCommandEvent& event);
void OnCancel(wxCommandEvent& event);
void OnHelp(wxCommandEvent& event);
void OnUpdate(wxCommandEvent& event);
void OnRevert(wxCommandEvent& event);
virtual bool OnClose(void);
virtual void OnDoubleClick(wxControl *item);
// TODO: does OnCommand still get called...???
virtual void OnCommand(wxWindow& win, wxCommandEvent& event);
inline virtual void AssociatePanel(wxWindow *win) { m_propertyWindow = win; }
inline virtual wxWindow *GetPanel(void) const { return m_propertyWindow; }
inline virtual void SetManagedWindow(wxWindow *win) { m_managedWindow = win; }
inline virtual wxWindow *GetManagedWindow(void) const { return m_managedWindow; }
inline virtual wxButton *GetWindowCloseButton() const { return m_windowCloseButton; }
inline virtual wxButton *GetWindowCancelButton() const { return m_windowCancelButton; }
inline virtual wxButton *GetHelpButton() const { return m_windowHelpButton; }
public:
static bool sm_dialogCancelled;
protected:
bool m_detailedEditing; // E.g. using listbox for choices
wxWindow* m_propertyWindow; // Panel that the controls will appear on
wxWindow* m_managedWindow; // Frame or dialog
wxButton* m_windowCloseButton; // Or OK
wxButton* m_windowCancelButton;
wxButton* m_windowHelpButton;
DECLARE_EVENT_TABLE()
};
/*
* The type of validator used for forms (wxForm style but using an existing panel
* or dialog box).
* Classes derived from this know how to map from whatever widget they
* find themselves paired with, to the wxProperty and vice versa.
* Should the widget pointer be stored with the validator, or
* the wxProperty? If with the property, we don't have to supply
* a validator for every property. Otherwise, there ALWAYS needs
* to be a validator. On the other hand, not storing a wxWindow pointer
* in the wxProperty is more elegant. Perhaps.
* I think on balance, should put wxWindow pointer into wxProperty.
* After all, wxProperty will often be used to represent the data
* assocated with a window. It's that kinda thing.
*/
class wxPropertyFormValidator: public wxPropertyValidator
{
DECLARE_DYNAMIC_CLASS(wxPropertyFormValidator)
protected:
public:
wxPropertyFormValidator(long flags = 0): wxPropertyValidator(flags) { }
~wxPropertyFormValidator(void) {}
// Called to check value is OK (e.g. when OK is pressed)
// Return FALSE if value didn't check out; signal to restore old value.
virtual bool OnCheckValue( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow) ) { return TRUE; }
// Does the transferance from the property editing area to the property itself.
// Called by the view, e.g. when closing the window.
virtual bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow) = 0;
// Called by the view to transfer the property to the window.
virtual bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow) = 0;
virtual void OnDoubleClick( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow) ) { }
virtual void OnSetFocus( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow) ) { }
virtual void OnKillFocus( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow) ) { }
virtual void OnCommand( wxProperty *WXUNUSED(property), wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow), wxCommandEvent& WXUNUSED(event) ) {}
};
/*
* Some default validators
*/
class wxRealFormValidator: public wxPropertyFormValidator
{
DECLARE_DYNAMIC_CLASS(wxRealFormValidator)
public:
// 0.0, 0.0 means no range
wxRealFormValidator(float min = 0.0, float max = 0.0, long flags = 0):wxPropertyFormValidator(flags)
{
m_realMin = min; m_realMax = max;
}
~wxRealFormValidator(void) {}
bool OnCheckValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
// Called by the view to transfer the property to the window.
bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
protected:
float m_realMin;
float m_realMax;
};
class wxIntegerFormValidator: public wxPropertyFormValidator
{
DECLARE_DYNAMIC_CLASS(wxIntegerFormValidator)
public:
// 0, 0 means no range
wxIntegerFormValidator(long min = 0, long max = 0, long flags = 0):wxPropertyFormValidator(flags)
{
m_integerMin = min; m_integerMax = max;
}
~wxIntegerFormValidator(void) {}
bool OnCheckValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
protected:
long m_integerMin;
long m_integerMax;
};
class wxBoolFormValidator: public wxPropertyFormValidator
{
DECLARE_DYNAMIC_CLASS(wxBoolFormValidator)
protected:
public:
wxBoolFormValidator(long flags = 0):wxPropertyFormValidator(flags)
{
}
~wxBoolFormValidator(void) {}
bool OnCheckValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
};
class wxStringFormValidator: public wxPropertyFormValidator
{
DECLARE_DYNAMIC_CLASS(wxStringFormValidator)
public:
wxStringFormValidator(wxStringList *list = NULL, long flags = 0);
~wxStringFormValidator(void)
{
if (m_strings)
delete m_strings;
}
bool OnCheckValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
bool OnRetrieveValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
bool OnDisplayValue(wxProperty *property, wxPropertyFormView *view, wxWindow *parentWindow);
protected:
wxStringList* m_strings;
};
/*
* A default dialog box class to use.
*/
class wxPropertyFormDialog: public wxDialog
{
DECLARE_CLASS(wxPropertyFormDialog)
public:
wxPropertyFormDialog(wxPropertyFormView *v, wxWindow *parent, const wxString& title,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = "dialogBox");
bool OnClose(void);
void OnDefaultAction(wxControl *item);
void OnCommand(wxWindow& win, wxCommandEvent& event);
// Extend event processing to search the view's event table
virtual bool ProcessEvent(wxEvent& event);
private:
wxPropertyFormView* m_view;
};
/*
* A default panel class to use.
*/
class wxPropertyFormPanel: public wxPanel
{
DECLARE_CLASS(wxPropertyFormPanel)
public:
wxPropertyFormPanel(wxPropertyFormView *v, wxWindow *parent, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = "panel"):
wxPanel(parent, -1, pos, size, style, name)
{
m_view = v;
}
void OnDefaultAction(wxControl *item);
void OnCommand(wxWindow& win, wxCommandEvent& event);
// Extend event processing to search the view's event table
virtual bool ProcessEvent(wxEvent& event);
private:
wxPropertyFormView* m_view;
};
/*
* A default frame class to use.
*/
class wxPropertyFormFrame: public wxFrame
{
DECLARE_CLASS(wxPropertyFormFrame)
public:
wxPropertyFormFrame(wxPropertyFormView *v, wxFrame *parent, const wxString& title,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME, const wxString& name = "frame"):
wxFrame(parent, -1, title, pos, size, style, name)
{
m_view = v;
m_propertyPanel = NULL;
}
bool OnClose(void);
// Must call this to create panel and associate view
virtual bool Initialize(void);
virtual wxPanel *OnCreatePanel(wxFrame *parent, wxPropertyFormView *v);
inline virtual wxPanel *GetPropertyPanel(void) const { return m_propertyPanel; }
private:
wxPropertyFormView* m_view;
wxPanel* m_propertyPanel;
};
#endif
// _WX_PROPFORM_H_

557
include/wx/proplist.h Normal file
View File

@@ -0,0 +1,557 @@
/////////////////////////////////////////////////////////////////////////////
// Name: proplist.h
// Purpose: Property list classes
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
/*
TO DO:
(1) Optional popup-help for each item, and an optional Help button
for dialog.
(2) Align Ok, Cancel, Help buttons properly.
(3) Consider retrieving the rectangle on the panel that can be
drawn into (where the value listbox is) and giving an example
of editing graphically. May be too fancy.
(4) Deriveable types for wxPropertyValue => may need to reorganise
wxPropertyValue to use inheritance rather than present all-types-in-one
scheme.
(5) Optional popup panel for value list, perhaps.
(6) Floating point checking routine still crashes with Floating
point error for zany input.
(7) Property sheet with choice (or listbox) to select alternative
sheets... multiple views per panel, only one active. For this
we really need a wxChoice that can be dynamically set: XView
may be a problem; Motif?
(8) More example validators, e.g. colour selector.
*/
#ifndef _WX_PROPLIST_H_
#define _WX_PROPLIST_H_
#ifdef __GNUG__
#pragma interface "proplist.h"
#endif
#include "wx/prop.h"
#define wxPROP_BUTTON_CLOSE 1
#define wxPROP_BUTTON_OK 2
#define wxPROP_BUTTON_CANCEL 4
#define wxPROP_BUTTON_CHECK_CROSS 8
#define wxPROP_BUTTON_HELP 16
#define wxPROP_DYNAMIC_VALUE_FIELD 32
#define wxPROP_PULLDOWN 64
#define wxPROP_SHOWVALUES 128
#ifdef __XVIEW__
#define wxPROP_BUTTON_DEFAULT wxPROP_BUTTON_OK | wxPROP_BUTTON_CANCEL | wxPROP_BUTTON_CHECK_CROSS | wxPROP_PULLDOWN
#else
#define wxPROP_BUTTON_DEFAULT wxPROP_BUTTON_CHECK_CROSS | wxPROP_PULLDOWN | wxPROP_SHOWVALUES
#endif
#define wxID_PROP_CROSS 3000
#define wxID_PROP_CHECK 3001
#define wxID_PROP_EDIT 3002
#define wxID_PROP_TEXT 3003
#define wxID_PROP_SELECT 3004
#define wxID_PROP_VALUE_SELECT 3005
// Mediates between a physical panel and the property sheet
class wxPropertyListView: public wxPropertyView
{
DECLARE_DYNAMIC_CLASS(wxPropertyListView)
public:
wxPropertyListView(wxPanel *propPanel = NULL, long flags = wxPROP_BUTTON_DEFAULT);
~wxPropertyListView(void);
// Associates and shows the view
virtual void ShowView(wxPropertySheet *propertySheet, wxPanel *panel);
// Update this view of the viewed object, called e.g. by
// the object itself.
virtual bool OnUpdateView(void);
wxString MakeNameValueString(wxString name, wxString value);
// Update a single line in the list of properties
virtual bool UpdatePropertyDisplayInList(wxProperty *property);
// Update the whole list
virtual bool UpdatePropertyList(bool clearEditArea = TRUE);
// Find the wxListBox index corresponding to this property
virtual int FindListIndexForProperty(wxProperty *property);
// Select and show string representation in editor the given
// property. NULL resets to show no property.
virtual bool ShowProperty(wxProperty *property, bool select = TRUE);
virtual bool EditProperty(wxProperty *property);
// Update the display from the property
virtual bool DisplayProperty(wxProperty *property);
// Update the property from the display
virtual bool RetrieveProperty(wxProperty *property);
// Find appropriate validator and load property into value controls
virtual bool BeginShowingProperty(wxProperty *property);
// Find appropriate validator and unload property from value controls
virtual bool EndShowingProperty(wxProperty *property);
// Begin detailed editing (e.g. using value listbox)
virtual void BeginDetailedEditing(void);
// End detailed editing (e.g. using value listbox)
virtual void EndDetailedEditing(void);
// Called by the property listbox
void OnPropertySelect(wxCommandEvent& event);
// Called by the value listbox
void OnValueListSelect(wxCommandEvent& event);
virtual bool CreateControls(void);
virtual void ShowTextControl(bool show);
virtual void ShowListBoxControl(bool show);
virtual void EnableCheck(bool show);
virtual void EnableCross(bool show);
void OnOk(wxCommandEvent& event);
void OnCancel(wxCommandEvent& event);
void OnHelp(wxCommandEvent& event);
void OnPropertyDoubleClick(wxCommandEvent& event);
// virtual void OnDoubleClick(void);
void OnCheck(wxCommandEvent& event);
void OnCross(wxCommandEvent& event);
void OnEdit(wxCommandEvent& event);
void OnText(wxCommandEvent& event);
inline virtual wxListBox *GetPropertyScrollingList() const { return m_propertyScrollingList; }
inline virtual wxListBox *GetValueList() const { return m_valueList; }
inline virtual wxTextCtrl *GetValueText() const { return m_valueText; }
inline virtual wxButton *GetConfirmButton() const { return m_confirmButton; }
inline virtual wxButton *GetCancelButton() const { return m_cancelButton; }
inline virtual wxButton *GetEditButton() const { return m_editButton; }
inline virtual bool GetDetailedEditing(void) const { return m_detailedEditing; }
inline virtual void AssociatePanel(wxPanel *win) { m_propertyWindow = win; }
inline virtual wxPanel *GetPanel(void) const { return m_propertyWindow; }
inline virtual void SetManagedWindow(wxWindow *win) { m_managedWindow = win; }
inline virtual wxWindow *GetManagedWindow(void) const { return m_managedWindow; }
inline virtual wxButton *GetWindowCloseButton() const { return m_windowCloseButton; }
inline virtual wxButton *GetWindowCancelButton() const { return m_windowCancelButton; }
inline virtual wxButton *GetHelpButton() const { return m_windowHelpButton; }
bool OnClose(void);
public:
static bool sm_dialogCancelled;
protected:
wxListBox* m_propertyScrollingList;
wxListBox* m_valueList; // Should really be a combobox, but we don't have one.
wxTextCtrl* m_valueText;
wxButton* m_confirmButton; // A tick, as in VB
wxButton* m_cancelButton; // A cross, as in VB
wxButton* m_editButton; // Invokes the custom validator, if any
bool m_detailedEditing; // E.g. using listbox for choices
static wxBitmap* sm_tickBitmap;
static wxBitmap* sm_crossBitmap;
wxPanel* m_propertyWindow; // Panel that the controls will appear on
wxWindow* m_managedWindow; // Frame or dialog
wxButton* m_windowCloseButton; // Or OK
wxButton* m_windowCancelButton;
wxButton* m_windowHelpButton;
DECLARE_EVENT_TABLE()
};
class wxPropertyTextEdit: public wxTextCtrl
{
DECLARE_CLASS(wxPropertyTextEdit)
public:
wxPropertyTextEdit(wxPropertyListView *v, wxWindow *parent, const wxWindowID id,
const wxString& value, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = "text");
void OnSetFocus(void);
void OnKillFocus(void);
wxPropertyListView* m_view;
};
#define wxPROP_ALLOW_TEXT_EDITING 1
/*
* The type of validator used for property lists (Visual Basic style)
*/
class wxPropertyListValidator: public wxPropertyValidator
{
DECLARE_DYNAMIC_CLASS(wxPropertyListValidator)
protected:
public:
wxPropertyListValidator(long flags = wxPROP_ALLOW_TEXT_EDITING): wxPropertyValidator(flags) { }
~wxPropertyListValidator(void) {}
// Called when the property is selected or deselected: typically displays the value
// in the edit control (having chosen a suitable control to display: (non)editable text or listbox)
virtual bool OnSelect(bool select, wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when the property is double clicked. Extra functionality can be provided, such as
// cycling through possible values.
inline virtual bool OnDoubleClick(
wxProperty *WXUNUSED(property), wxPropertyListView *WXUNUSED(view), wxWindow *WXUNUSED(parentWindow) )
{ return TRUE; }
// Called when the value listbox is selected. Default behaviour is to copy
// string to text control, and retrieve the value into the property.
virtual bool OnValueListSelect(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when the property value is edited using standard text control
inline virtual bool OnPrepareControls(
wxProperty *WXUNUSED(property), wxPropertyListView *WXUNUSED(view), wxWindow *WXUNUSED(parentWindow) )
{ return TRUE; }
virtual bool OnClearControls(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when the property is edited in detail
inline virtual bool OnPrepareDetailControls(
wxProperty *WXUNUSED(property), wxPropertyListView *WXUNUSED(view), wxWindow *WXUNUSED(parentWindow) )
{ return TRUE; }
// Called if focus lost, IF we're in a modeless property editing situation.
inline virtual bool OnClearDetailControls(
wxProperty *WXUNUSED(property), wxPropertyListView *WXUNUSED(view), wxWindow *WXUNUSED(parentWindow) )
{ return TRUE; }
// Called when the edit (...) button is pressed. The default implementation
// calls view->BeginDetailedEditing; the filename validator (for example) overrides
// this function to show the file selector.
virtual void OnEdit(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when TICK is pressed or focus is lost.
// Return FALSE if value didn't check out; signal to restore old value.
inline virtual bool OnCheckValue(
wxProperty *WXUNUSED(property), wxPropertyListView *WXUNUSED(view), wxWindow *WXUNUSED(parentWindow) )
{ return TRUE; }
// Called when TICK is pressed or focus is lost or view wants to update
// the property list.
// Does the transferance from the property editing area to the property itself
virtual bool OnRetrieveValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
virtual bool OnDisplayValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
};
/*
* A default dialog box class to use.
*/
class wxPropertyListDialog: public wxDialog
{
DECLARE_CLASS(wxPropertyListDialog)
public:
wxPropertyListDialog(wxPropertyListView *v, wxWindow *parent, const wxString& title,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = "dialogBox");
bool OnClose(void);
void OnDefaultAction(wxControl *item);
void OnCancel(wxCommandEvent& event);
// Extend event processing to search the view's event table
virtual bool ProcessEvent(wxEvent& event);
private:
wxPropertyListView* m_view;
DECLARE_EVENT_TABLE()
};
/*
* A default panel class to use.
*/
class wxPropertyListPanel: public wxPanel
{
DECLARE_CLASS(wxPropertyListPanel)
public:
wxPropertyListPanel(wxPropertyListView *v, wxWindow *parent, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = 0, const wxString& name = "panel"):
wxPanel(parent, -1, pos, size, style, name)
{
m_view = v;
}
~wxPropertyListPanel();
void OnDefaultAction(wxControl *item);
inline void SetView(wxPropertyListView* v) { m_view = v; }
inline wxPropertyListView* GetView() const { return m_view; }
// Extend event processing to search the view's event table
virtual bool ProcessEvent(wxEvent& event);
// Call Layout()
void OnSize(wxSizeEvent& event);
private:
wxPropertyListView* m_view;
DECLARE_EVENT_TABLE()
};
/*
* A default frame class to use.
*/
class wxPropertyListFrame: public wxFrame
{
DECLARE_CLASS(wxPropertyListFrame)
public:
wxPropertyListFrame(wxPropertyListView *v, wxFrame *parent, const wxString& title,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME, const wxString& name = "frame"):
wxFrame(parent, -1, title, pos, size, style, name)
{
m_view = v;
m_propertyPanel = NULL;
}
bool OnClose(void);
// Must call this to create panel and associate view
virtual bool Initialize(void);
virtual wxPropertyListPanel *OnCreatePanel(wxFrame *parent, wxPropertyListView *v);
inline virtual wxPropertyListPanel *GetPropertyPanel(void) const { return m_propertyPanel; }
private:
wxPropertyListView* m_view;
wxPropertyListPanel* m_propertyPanel;
};
/*
* Some default validators
*/
class wxRealListValidator: public wxPropertyListValidator
{
DECLARE_DYNAMIC_CLASS(wxRealListValidator)
public:
// 0.0, 0.0 means no range
wxRealListValidator(float min = 0.0, float max = 0.0, long flags = wxPROP_ALLOW_TEXT_EDITING):wxPropertyListValidator(flags)
{
m_realMin = min; m_realMax = max;
}
~wxRealListValidator(void) {}
bool OnPrepareControls(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when TICK is pressed or focus is lost.
// Return FALSE if value didn't check out; signal to restore old value.
bool OnCheckValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when TICK is pressed or focus is lost or view wants to update
// the property list.
// Does the transfer from the property editing area to the property itself
bool OnRetrieveValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
protected:
float m_realMin;
float m_realMax;
};
class wxIntegerListValidator: public wxPropertyListValidator
{
DECLARE_DYNAMIC_CLASS(wxIntegerListValidator)
public:
// 0, 0 means no range
wxIntegerListValidator(long min = 0, long max = 0, long flags = wxPROP_ALLOW_TEXT_EDITING):wxPropertyListValidator(flags)
{
m_integerMin = min; m_integerMax = max;
}
~wxIntegerListValidator(void) {}
bool OnPrepareControls(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when TICK is pressed or focus is lost.
// Return FALSE if value didn't check out; signal to restore old value.
bool OnCheckValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when TICK is pressed or focus is lost or view wants to update
// the property list.
// Does the transfer from the property editing area to the property itself
bool OnRetrieveValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
protected:
long m_integerMin;
long m_integerMax;
};
class wxBoolListValidator: public wxPropertyListValidator
{
DECLARE_DYNAMIC_CLASS(wxBoolListValidator)
protected:
public:
wxBoolListValidator(long flags = 0):wxPropertyListValidator(flags)
{
}
~wxBoolListValidator(void) {}
bool OnPrepareControls(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnPrepareDetailControls(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnClearDetailControls(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when TICK is pressed or focus is lost.
// Return FALSE if value didn't check out; signal to restore old value.
bool OnCheckValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when TICK is pressed or focus is lost or view wants to update
// the property list.
// Does the transfer from the property editing area to the property itself
bool OnRetrieveValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnDisplayValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when the property is double clicked. Extra functionality can be provided,
// cycling through possible values.
virtual bool OnDoubleClick(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
};
class wxStringListValidator: public wxPropertyListValidator
{
DECLARE_DYNAMIC_CLASS(wxStringListValidator)
public:
wxStringListValidator(wxStringList *list = NULL, long flags = 0);
~wxStringListValidator(void)
{
if (m_strings)
delete m_strings;
}
bool OnPrepareControls(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnPrepareDetailControls(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnClearDetailControls(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when TICK is pressed or focus is lost.
// Return FALSE if value didn't check out; signal to restore old value.
bool OnCheckValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when TICK is pressed or focus is lost or view wants to update
// the property list.
// Does the transfer from the property editing area to the property itself
bool OnRetrieveValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnDisplayValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when the property is double clicked. Extra functionality can be provided,
// cycling through possible values.
bool OnDoubleClick(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
protected:
wxStringList* m_strings;
};
class wxFilenameListValidator: public wxPropertyListValidator
{
DECLARE_DYNAMIC_CLASS(wxFilenameListValidator)
public:
wxFilenameListValidator(wxString message = "Select a file", wxString wildcard = "*.*", long flags = 0);
~wxFilenameListValidator(void);
// Called when TICK is pressed or focus is lost.
// Return FALSE if value didn't check out; signal to restore old value.
bool OnCheckValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when TICK is pressed or focus is lost or view wants to update
// the property list.
// Does the transferance from the property editing area to the property itself
bool OnRetrieveValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnDisplayValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnDoubleClick(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnPrepareControls(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when the edit (...) button is pressed.
void OnEdit(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
protected:
wxString m_filenameWildCard;
wxString m_filenameMessage;
};
class wxColourListValidator: public wxPropertyListValidator
{
DECLARE_DYNAMIC_CLASS(wxColourListValidator)
protected:
public:
wxColourListValidator(long flags = 0);
~wxColourListValidator(void);
bool OnCheckValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnRetrieveValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnDisplayValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnDoubleClick(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnPrepareControls(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when the edit (...) button is pressed.
void OnEdit(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
};
class wxListOfStringsListValidator: public wxPropertyListValidator
{
DECLARE_DYNAMIC_CLASS(wxListOfStringsListValidator)
protected:
public:
wxListOfStringsListValidator(long flags = 0);
~wxListOfStringsListValidator(void)
{
}
bool OnPrepareControls(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when TICK is pressed or focus is lost.
// Return FALSE if value didn't check out; signal to restore old value.
bool OnCheckValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when TICK is pressed or focus is lost or view wants to update
// the property list.
// Does the transfer from the property editing area to the property itself
bool OnRetrieveValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool OnDisplayValue(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
// Called when the property is double clicked.
bool OnDoubleClick(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
bool EditStringList(wxWindow *parent, wxStringList *stringList, const char *title = "String List Editor");
// Called when the edit (...) button is pressed.
void OnEdit(wxProperty *property, wxPropertyListView *view, wxWindow *parentWindow);
};
#endif
// _WX_PROPLIST_H_

View File

@@ -11,7 +11,8 @@
WXDIR = $(WXWIN)
TARGET=bombs
OBJECTS=$(TARGET).obj bombs1.obj game.obj
OBJECTS=dialoged.obj reseditr.obj dlghndlr.obj reswrite.obj\
winprop.obj edtree.obj edlist.obj symbtabl.obj winstyle.obj
!include $(WXDIR)\src\makeprog.msc

View File

@@ -11,7 +11,7 @@
PROGRAM=bombs
OBJECTS=$(PROGRAM).o bombs1.o game.o
OBJECTS = bombs.o bombs1.o game.o
include ../../src/makeprog.env

View File

@@ -16,6 +16,8 @@ WXDIR = ..
THISDIR=$(WXDIR)/samples
all:
cd $(WXDIR)/samples/bombs; make -f makefile.g95
cd $(WXDIR)/samples/fractal; make -f makefile.g95
cd $(WXDIR)/samples/splitter; make -f makefile.g95
cd $(WXDIR)/samples/resource; make -f makefile.g95
cd $(WXDIR)/samples/controls; make -f makefile.g95
@@ -26,6 +28,7 @@ all:
cd $(WXDIR)/samples/minimal; make -f makefile.g95
cd $(WXDIR)/samples/layout; make -f makefile.g95
cd $(WXDIR)/samples/printing; make -f makefile.g95
cd $(WXDIR)/samples/proplist; make -f makefile.g95
cd $(WXDIR)/samples/toolbar; make -f makefile.g95
cd $(WXDIR)/samples/dialogs; make -f makefile.g95
cd $(WXDIR)/samples/docview; make -f makefile.g95
@@ -43,11 +46,14 @@ all:
# cd $(WXDIR)/samples/regtest; make -f makefile.g95
clean:
cd $(WXDIR)/samples/bombs; make -f makefile.g95 clean
cd $(WXDIR)/samples/fractal; make -f makefile.g95 clean
cd $(WXDIR)/samples/splitter; make -f makefile.g95 clean
cd $(WXDIR)/samples/mdi; make -f makefile.g95 clean
cd $(WXDIR)/samples/minimal; make -f makefile.g95 clean
cd $(WXDIR)/samples/layout; make -f makefile.g95 clean
cd $(WXDIR)/samples/printing; make -f makefile.g95 clean
cd $(WXDIR)/samples/proplist; make -f makefile.g95 clean
cd $(WXDIR)/samples/toolbar; make -f makefile.g95 clean
cd $(WXDIR)/samples/dialogs; make -f makefile.g95 clean
cd $(WXDIR)/samples/resource; make -f makefile.g95 clean

View File

@@ -74,28 +74,18 @@ all:
nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
cd $(WXDIR)\samples\minifram
nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
cd $(WXDIR)\samples\bombs
nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
cd $(WXDIR)\samples\fractal
nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
cd $(WXDIR)\samples\wxpoem
nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
cd $(WXDIR)\samples\types
nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
cd $(WXDIR)\samples\proplist
nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
# cd $(WXDIR)\samples\regtest
# nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
# cd $(WXDIR)\samples\hello
# nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
# cd $(WXDIR)\samples\fractal
# nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
# cd $(WXDIR)\samples\ipc
# nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
# cd $(WXDIR)\samples\wxpoem
# nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
# cd $(WXDIR)\samples\types
# nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
# cd $(WXDIR)\samples\pressup
# nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
# cd $(WXDIR)\samples\bombs
# nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
# cd $(WXDIR)\samples\animate
# nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
# cd $(WXDIR)\samples\panel
# nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
# cd $(WXDIR)\samples\odbc
# nmake -f makefile.nt DEBUG_FLAGS=$(DEBUG_FLAGS) LINK_DEBUG_FLAGS=$(LINK_DEBUG_FLAGS)
clean:
cd $(WXDIR)\samples\splitter
@@ -150,24 +140,14 @@ clean:
nmake -f makefile.nt clean
cd $(WXDIR)\samples\minifram
nmake -f makefile.nt clean
# cd $(WXDIR)\samples\hello
# nmake -f makefile.nt clean
# cd $(WXDIR)\samples\fractal
# nmake -f makefile.nt clean
# cd $(WXDIR)\samples\ipc
# nmake -f makefile.nt clean
# cd $(WXDIR)\samples\types
# nmake -f makefile.nt clean
# cd $(WXDIR)\samples\pressup
# nmake -f makefile.nt clean
# cd $(WXDIR)\samples\bombs
# nmake -f makefile.nt clean
# cd $(WXDIR)\samples\odbc
# nmake -f makefile.nt clean
# cd $(WXDIR)\samples\animate
# nmake -f makefile.nt clean
# cd $(WXDIR)\samples\panel
# nmake -f makefile.nt clean
# cd $(WXDIR)\samples\wxpoem
# nmake -f makefile.nt clean
cd $(WXDIR)\samples\bombs
nmake -f makefile.nt clean
cd $(WXDIR)\samples\fractal
nmake -f makefile.nt clean
cd $(WXDIR)\samples\wxpoem
nmake -f makefile.nt clean
cd $(WXDIR)\samples\types
nmake -f makefile.nt clean
cd $(WXDIR)\samples\proplist
nmake -f makefile.nt clean

View File

@@ -15,6 +15,7 @@ TARGET=motif
THISDIR = $(WXDIR)/samples
all:
cd bombs; $(MAKE) -f makefile.unx $(TARGET)
cd config; $(MAKE) -f makefile.unx $(TARGET)
cd controls; $(MAKE) -f makefile.unx $(TARGET)
cd dialogs; $(MAKE) -f makefile.unx $(TARGET)
@@ -22,6 +23,7 @@ all:
cd docview; $(MAKE) -f makefile.unx $(TARGET)
cd docvwmdi; $(MAKE) -f makefile.unx $(TARGET)
cd dynamic; $(MAKE) -f makefile.unx $(TARGET)
cd fractal; $(MAKE) -f makefile.unx $(TARGET)
cd grid; $(MAKE) -f makefile.unx $(TARGET)
cd help; $(MAKE) -f makefile.unx $(TARGET)
cd image; $(MAKE) -f makefile.unx $(TARGET)
@@ -33,6 +35,7 @@ all:
cd nativdlg; $(MAKE) -f makefile.unx $(TARGET)
cd notebook; $(MAKE) -f makefile.unx $(TARGET)
cd printing; $(MAKE) -f makefile.unx $(TARGET)
cd proplist; $(MAKE) -f makefile.unx $(TARGET)
cd resource; $(MAKE) -f makefile.unx $(TARGET)
cd sashtest; $(MAKE) -f makefile.unx $(TARGET)
cd splitter; $(MAKE) -f makefile.unx $(TARGET)
@@ -45,6 +48,7 @@ all:
cd wxpoem; $(MAKE) -f makefile.unx $(TARGET)
clean:
cd bombs; $(MAKE) -f makefile.unx clean$(TARGET)
cd config; $(MAKE) -f makefile.unx clean$(TARGET)
cd controls; $(MAKE) -f makefile.unx clean$(TARGET)
cd dialogs; $(MAKE) -f makefile.unx clean$(TARGET)
@@ -52,6 +56,7 @@ clean:
cd docview; $(MAKE) -f makefile.unx clean$(TARGET)
cd docvwmdi; $(MAKE) -f makefile.unx clean$(TARGET)
cd dynamic; $(MAKE) -f makefile.unx clean$(TARGET)
cd fractal; $(MAKE) -f makefile.unx clean$(TARGET)
cd grid; $(MAKE) -f makefile.unx clean$(TARGET)
cd help; $(MAKE) -f makefile.unx clean$(TARGET)
cd image; $(MAKE) -f makefile.unx clean$(TARGET)
@@ -63,6 +68,7 @@ clean:
cd nativdlg; $(MAKE) -f makefile.unx clean$(TARGET)
cd notebook; $(MAKE) -f makefile.unx clean$(TARGET)
cd printing; $(MAKE) -f makefile.unx clean$(TARGET)
cd proplist; $(MAKE) -f makefile.unx clean$(TARGET)
cd resource; $(MAKE) -f makefile.unx clean$(TARGET)
cd sashtest; $(MAKE) -f makefile.unx clean$(TARGET)
cd splitter; $(MAKE) -f makefile.unx clean$(TARGET)

View File

@@ -0,0 +1 @@
include ../../setup/general/makeapp

View File

@@ -0,0 +1,26 @@
# WXXT base directory
WXBASEDIR=@WXBASEDIR@
# set the OS type for compilation
OS=@OS@
# compile a library only
RULE=bin
# define library name
BIN_TARGET=test
# define library sources
BIN_SRC=\
test.cpp
#define library objects
BIN_OBJ=\
test.o
# additional things needed to link
BIN_LINK=
# additional things needed to compile
ADD_COMPILE=
# include the definitions now
include ../../../template.mak

BIN
samples/proplist/cross.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 B

View File

@@ -0,0 +1,64 @@
#
# File: makefile.b32
# Author: Julian Smart
# Created: 1993
# Updated:
# Copyright:
#
# "%W% %G%"
#
# Makefile : Builds test example
# WXWIN and BCCDIR are set by parent make
WXDIR = $(WXWIN)
!include $(WXDIR)\src\makeb32.env
WXLIBDIR = $(WXDIR)\lib
WXINC = $(WXDIR)\include\msw
WXLIB = $(WXLIBDIR)\wx32.lib
LIBS=$(WXLIB) cw32 import32 ole2w32
TARGET=test
!if "$(FINAL)" == "0"
LINKFLAGS=/v /Tpe /L$(WXLIBDIR);$(BCCDIR)\lib
OPT = -Od
DEBUG_FLAGS= -v
!else
LINKFLAGS=/Tpe /L$(WXLIBDIR);$(BCCDIR)\lib
OPT = -Od
DEBUG_FLAGS =
!endif
CPPFLAGS=$(DEBUG_FLAGS) $(OPT) @$(CFG)
OBJECTS = test.obj
$(TARGET).exe: $(OBJECTS) $(TARGET).res
tlink32 $(LINKFLAGS) @&&!
c0w32.obj $(OBJECTS)
$(TARGET)
nul
$(LIBS)
$(TARGET).def
$(TARGET).res
!
.$(SRCSUFF).obj:
bcc32 $(CPPFLAGS) -c {$< }
.c.obj:
bcc32 $(CPPFLAGS) -P- -c {$< }
test.obj: test.$(SRCSUFF)
$(TARGET).res : $(TARGET).rc $(WXDIR)\include\wx\msw\wx.rc
brc32 -r /i$(BCCDIR)\include /i$(WXDIR)\include $(TARGET)
clean:
-erase *.obj
-erase *.exe
-erase *.res
-erase *.map
-erase *.rws

View File

@@ -0,0 +1,19 @@
#
# File: makefile.bcc
# Author: Julian Smart
# Created: 1998
# Updated:
#
# Builds a BC++ 16-bit sample
!if "$(WXWIN)" == ""
!error You must define the WXWIN variable in autoexec.bat, e.g. WXWIN=c:\wx
!endif
WXDIR = $(WXWIN)
TARGET=test
OBJECTS=$(TARGET).obj
!include $(WXDIR)\src\makeprog.bcc

View File

@@ -0,0 +1,17 @@
#
# File: makefile.dos
# Author: Julian Smart
# Created: 1998
# Updated:
#
# Makefile : Builds 16-bit sample, VC++ 1.5
# Use FINAL=1 argument to nmake to build final version with no debugging
# info
WXDIR = $(WXWIN)
TARGET=test
OBJECTS=$(TARGET).obj
!include $(WXDIR)\src\makeprog.msc

View File

@@ -0,0 +1,37 @@
#
# File: makefile.unx
# Author: Julian Smart
# Created: 1993
# Updated:
# Copyright: (c) 1993, AIAI, University of Edinburgh
#
# "%W% %G%"
#
# Makefile for test example (UNIX).
WXDIR = ../..
# All common UNIX compiler flags and options are now in
# this central makefile.
include $(WXDIR)/src/makeg95.env
OBJECTS = $(OBJDIR)/test.$(OBJSUFF) $(OBJDIR)/test_resources.$(OBJSUFF)
all: $(OBJDIR) test$(GUISUFFIX)$(EXESUFF)
wx:
$(OBJDIR):
mkdir $(OBJDIR)
test$(GUISUFFIX)$(EXESUFF): $(OBJECTS) $(WXLIB)
$(CC) $(LDFLAGS) -o test$(GUISUFFIX)$(EXESUFF) $(OBJECTS) $(LDLIBS)
$(OBJDIR)/test.$(OBJSUFF): test.$(SRCSUFF)
$(CC) -c $(CPPFLAGS) -o $@ test.$(SRCSUFF)
$(OBJDIR)/test_resources.o: test.rc
$(RESCOMP) -i test.rc -o $(OBJDIR)/test_resources.o $(RESFLAGS)
clean:
rm -f $(OBJECTS) test$(GUISUFFIX).exe core *.rsc *.res

View File

@@ -0,0 +1,64 @@
#
# File: makefile.nt
# Author: Julian Smart
# Created: 1993
# Updated:
# Copyright: (c) 1993, AIAI, University of Edinburgh
#
# "%W% %G%"
#
# Makefile : Builds test example (MS VC++).
# Use FINAL=1 argument to nmake to build final version with no debugging
# info
# Set WXDIR for your system
WXDIR = $(WXWIN)
WXUSINGDLL=0
!include $(WXDIR)\src\ntwxwin.mak
THISDIR = $(WXDIR)\samples\test
PROGRAM=test
OBJECTS = $(PROGRAM).obj
$(PROGRAM): $(PROGRAM).exe
all: wx $(PROGRAM).exe
wx:
cd $(WXDIR)\src\msw
nmake -f makefile.nt FINAL=$(FINAL)
cd $(THISDIR)
wxclean:
cd $(WXDIR)\src\msw
nmake -f makefile.nt clean
cd $(THISDIR)
$(PROGRAM).exe: $(DUMMYOBJ) $(WXLIB) $(OBJECTS) $(PROGRAM).res
$(link) @<<
-out:$(PROGRAM).exe
$(LINKFLAGS)
$(DUMMYOBJ) $(OBJECTS) $(PROGRAM).res
$(LIBS)
<<
$(PROGRAM).obj: $(PROGRAM).$(SRCSUFF) $(DUMMYOBJ)
$(cc) @<<
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF)
<<
$(PROGRAM).res : $(PROGRAM).rc $(WXDIR)\include\wx\msw\wx.rc
$(rc) -r /i$(WXDIR)\include -fo$@ $(PROGRAM).rc
clean:
-erase *.obj
-erase *.exe
-erase *.res
-erase *.map
-erase *.sbr
-erase *.pdb

321
samples/proplist/test.cpp Normal file
View File

@@ -0,0 +1,321 @@
/////////////////////////////////////////////////////////////////////////////
// Name: test.cpp
// Purpose: Property sheet test implementation
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation "test.h"
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "test.h"
// A macro needed for some compilers (AIX) that need 'main' to be defined
// in the application itself.
IMPLEMENT_WXWIN_MAIN
IMPLEMENT_APP(MyApp)
wxPropertyValidatorRegistry myListValidatorRegistry;
wxPropertyValidatorRegistry myFormValidatorRegistry;
MyApp::MyApp(void)
{
m_childWindow = NULL;
m_mainFrame = NULL;
}
bool MyApp::OnInit(void)
{
RegisterValidators();
// Create the main frame window
m_mainFrame = new MyFrame(NULL, "wxPropertySheet Demo", wxPoint(0, 0), wxSize(300, 400), wxDEFAULT_FRAME);
// Make a menubar
wxMenu *file_menu = new wxMenu;
file_menu->Append(PROPERTY_TEST_DIALOG_LIST, "Test property list &dialog...");
file_menu->Append(PROPERTY_TEST_FRAME_LIST, "Test property list &frame...");
file_menu->AppendSeparator();
file_menu->Append(PROPERTY_TEST_DIALOG_FORM, "Test property form d&ialog...");
file_menu->Append(PROPERTY_TEST_FRAME_FORM, "Test property form f&rame...");
file_menu->AppendSeparator();
file_menu->Append(PROPERTY_QUIT, "E&xit");
wxMenu *help_menu = new wxMenu;
help_menu->Append(PROPERTY_ABOUT, "&About");
wxMenuBar *menu_bar = new wxMenuBar;
menu_bar->Append(file_menu, "&File");
menu_bar->Append(help_menu, "&Help");
// Associate the menu bar with the frame
m_mainFrame->SetMenuBar(menu_bar);
m_mainFrame->Centre(wxBOTH);
m_mainFrame->Show(TRUE);
SetTopWindow(m_mainFrame);
return TRUE;
}
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_CLOSE(MyFrame::OnCloseWindow)
EVT_MENU(PROPERTY_QUIT, MyFrame::OnQuit)
EVT_MENU(PROPERTY_ABOUT, MyFrame::OnAbout)
EVT_MENU(PROPERTY_TEST_DIALOG_LIST, MyFrame::OnDialogList)
EVT_MENU(PROPERTY_TEST_FRAME_LIST, MyFrame::OnFrameList)
EVT_MENU(PROPERTY_TEST_DIALOG_FORM, MyFrame::OnDialogForm)
EVT_MENU(PROPERTY_TEST_FRAME_FORM, MyFrame::OnFrameForm)
END_EVENT_TABLE()
// Define my frame constructor
MyFrame::MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size, long type):
wxFrame(frame, -1, title, pos, size, type)
{
}
// Define the behaviour for the frame closing
// - must delete all frames except for the main one.
void MyFrame::OnCloseWindow(wxCloseEvent& event)
{
if (wxGetApp().m_childWindow)
{
wxGetApp().m_childWindow->Close(TRUE);
}
Destroy();
}
void MyFrame::OnQuit(wxCommandEvent& event)
{
Close(TRUE);
}
void MyFrame::OnDialogList(wxCommandEvent& event)
{
wxGetApp().PropertyListTest(TRUE);
}
void MyFrame::OnFrameList(wxCommandEvent& event)
{
wxGetApp().PropertyListTest(FALSE);
}
void MyFrame::OnDialogForm(wxCommandEvent& event)
{
wxGetApp().PropertyFormTest(TRUE);
}
void MyFrame::OnFrameForm(wxCommandEvent& event)
{
wxGetApp().PropertyFormTest(FALSE);
}
void MyFrame::OnAbout(wxCommandEvent& event)
{
(void)wxMessageBox("Property Classes Demo\nAuthor: Julian Smart", "About Property Classes Test");
}
void MyApp::RegisterValidators(void)
{
myListValidatorRegistry.RegisterValidator((wxString)"real", new wxRealListValidator);
myListValidatorRegistry.RegisterValidator((wxString)"string", new wxStringListValidator);
myListValidatorRegistry.RegisterValidator((wxString)"integer", new wxIntegerListValidator);
myListValidatorRegistry.RegisterValidator((wxString)"bool", new wxBoolListValidator);
myListValidatorRegistry.RegisterValidator((wxString)"stringlist", new wxListOfStringsListValidator);
myFormValidatorRegistry.RegisterValidator((wxString)"real", new wxRealFormValidator);
myFormValidatorRegistry.RegisterValidator((wxString)"string", new wxStringFormValidator);
myFormValidatorRegistry.RegisterValidator((wxString)"integer", new wxIntegerFormValidator);
myFormValidatorRegistry.RegisterValidator((wxString)"bool", new wxBoolFormValidator);
}
void MyApp::PropertyListTest(bool useDialog)
{
if (m_childWindow)
return;
wxPropertySheet *sheet = new wxPropertySheet;
sheet->AddProperty(new wxProperty("fred", 1.0, "real"));
sheet->AddProperty(new wxProperty("tough choice", (bool)TRUE, "bool"));
sheet->AddProperty(new wxProperty("ian", (long)45, "integer", new wxIntegerListValidator(-50, 50)));
sheet->AddProperty(new wxProperty("bill", 25.0, "real", new wxRealListValidator(0.0, 100.0)));
sheet->AddProperty(new wxProperty("julian", "one", "string"));
sheet->AddProperty(new wxProperty("bitmap", "none", "string", new wxFilenameListValidator("Select a bitmap file", "*.bmp")));
wxStringList *strings = new wxStringList("one", "two", "three", NULL);
sheet->AddProperty(new wxProperty("constrained", "one", "string", new wxStringListValidator(strings)));
wxStringList *strings2 = new wxStringList("earth", "fire", "wind", "water", NULL);
sheet->AddProperty(new wxProperty("string list", strings2, "stringlist"));
wxPropertyListView *view =
new wxPropertyListView(NULL,
wxPROP_BUTTON_CHECK_CROSS|wxPROP_DYNAMIC_VALUE_FIELD|wxPROP_PULLDOWN|wxPROP_SHOWVALUES);
wxDialog *propDialog = NULL;
wxPropertyListFrame *propFrame = NULL;
if (useDialog)
{
propDialog = new PropListDialog(view, NULL, "Property Sheet Test",
wxPoint(-1, -1), wxSize(400, 500), wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODELESS);
m_childWindow = propDialog;
}
else
{
propFrame = new PropListFrame(view, NULL, "Property Sheet Test", wxPoint(-1, -1), wxSize(400, 500));
m_childWindow = propFrame;
}
view->AddRegistry(&myListValidatorRegistry);
if (useDialog)
{
view->ShowView(sheet, propDialog);
propDialog->Centre(wxBOTH);
propDialog->Show(TRUE);
}
else
{
propFrame->Initialize();
view->ShowView(sheet, propFrame->GetPropertyPanel());
propFrame->Centre(wxBOTH);
propFrame->Show(TRUE);
}
}
void MyApp::PropertyFormTest(bool useDialog)
{
if (m_childWindow)
return;
#if 0
wxPropertySheet *sheet = new wxPropertySheet;
sheet->AddProperty(new wxProperty("fred", 25.0, "real", new wxRealFormValidator(0.0, 100.0)));
sheet->AddProperty(new wxProperty("tough choice", (bool)TRUE, "bool"));
sheet->AddProperty(new wxProperty("ian", (long)45, "integer", new wxIntegerFormValidator(-50, 50)));
sheet->AddProperty(new wxProperty("julian", "one", "string"));
wxStringList *strings = new wxStringList("one", "two", "three", NULL);
sheet->AddProperty(new wxProperty("constrained", "one", "string", new wxStringFormValidator(strings)));
wxPropertyFormView *view = new wxPropertyFormView(NULL);
wxDialogBox *propDialog = NULL;
wxPropertyFormFrame *propFrame = NULL;
if (useDialog)
{
propDialog = new PropFormDialog(view, NULL, "Property Form Test", wxPoint(-1, -1), wxSize(380, 250),
wxDEFAULT_DIALOG_STYLE|wxDIALOG_MODAL);
m_childWindow = propDialog;
}
else
{
propFrame = new PropFormFrame(view, NULL, "Property Form Test", wxPoint(-1, -1), wxSize(280, 250));
propFrame->Initialize();
m_childWindow = propFrame;
}
wxPanel *panel = propDialog ? propDialog : propFrame->GetPropertyPanel();
panel->SetLabelPosition(wxVERTICAL);
// Add items to the panel
(void) new wxButton(panel, -1, "OK", -1, -1, -1, -1, 0, "ok");
(void) new wxButton(panel, -1, "Cancel", -1, -1, 80, -1, 0, "cancel");
(void) new wxButton(panel, -1, "Update", -1, -1, 80, -1, 0, "update");
(void) new wxButton(panel, -1, "Revert", -1, -1, -1, -1, 0, "revert");
panel->NewLine();
// The name of this text item matches the "fred" property
(void) new wxText(panel, -1, "Fred", "", -1, -1, 90, -1, 0, "fred");
(void) new wxCheckBox(panel, -1, "Yes or no", -1, -1, -1, -1, 0, "tough choice");
(void) new wxSlider(panel, -1, "Scale", 0, -50, 50, 150, -1, -1, wxHORIZONTAL, "ian");
panel->NewLine();
(void) new wxListBox(panel, -1, "Constrained", wxSINGLE, -1, -1, 100, 90, 0, NULL, 0, "constrained");
view->AddRegistry(&myFormValidatorRegistry);
if (useDialog)
{
view->ShowView(sheet, propDialog);
view->AssociateNames();
view->TransferToDialog();
propDialog->Centre(wxBOTH);
propDialog->Show(TRUE);
}
else
{
view->ShowView(sheet, propFrame->GetPropertyPanel());
view->AssociateNames();
view->TransferToDialog();
propFrame->Centre(wxBOTH);
propFrame->Show(TRUE);
}
#endif
}
BEGIN_EVENT_TABLE(PropListFrame, wxPropertyListFrame)
EVT_CLOSE(PropListFrame::OnCloseWindow)
END_EVENT_TABLE()
void PropListFrame::OnCloseWindow(wxCloseEvent& event)
{
wxGetApp().m_childWindow = NULL;
wxPropertyListFrame::OnCloseWindow(event);
}
BEGIN_EVENT_TABLE(PropListDialog, wxPropertyListDialog)
EVT_CLOSE(PropListDialog::OnCloseWindow)
END_EVENT_TABLE()
void PropListDialog::OnCloseWindow(wxCloseEvent& event)
{
wxGetApp().m_childWindow = NULL;
wxPropertyListDialog::OnCloseWindow(event);
}
BEGIN_EVENT_TABLE(PropFormFrame, wxPropertyFormFrame)
EVT_CLOSE(PropFormFrame::OnCloseWindow)
END_EVENT_TABLE()
void PropFormFrame::OnCloseWindow(wxCloseEvent& event)
{
wxGetApp().m_childWindow = NULL;
wxPropertyFormFrame::OnCloseWindow(event);
}
BEGIN_EVENT_TABLE(PropFormDialog, wxPropertyFormDialog)
EVT_CLOSE(PropFormDialog::OnCloseWindow)
END_EVENT_TABLE()
void PropFormDialog::OnCloseWindow(wxCloseEvent& event)
{
wxGetApp().m_childWindow = NULL;
wxPropertyFormDialog::OnCloseWindow(event);
}

View File

@@ -0,0 +1,8 @@
NAME TEST
DESCRIPTION 'wxProperty test'
EXETYPE WINDOWS
STUB 'WINSTUB.EXE'
CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD MOVEABLE MULTIPLE
HEAPSIZE 1024
STACKSIZE 8192

127
samples/proplist/test.h Normal file
View File

@@ -0,0 +1,127 @@
/////////////////////////////////////////////////////////////////////////////
// Name: test.h
// Purpose: Property sheet sample
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma interface "test.h"
#endif
#ifndef _PROPTEST_H_
#define _PROPTEST_H_
#include "wx/proplist.h"
#include "wx/propform.h"
class MyChild;
// Define a new application
class MyFrame;
class MyApp: public wxApp
{
public:
MyApp(void);
bool OnInit(void);
void RegisterValidators(void);
void PropertyListTest(bool useDialog);
void PropertyFormTest(bool useDialog);
MyFrame* m_mainFrame;
wxWindow* m_childWindow;
};
DECLARE_APP(MyApp)
// Define a new frame
class MyFrame: public wxFrame
{
public:
MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size, long type);
void OnCloseWindow(wxCloseEvent& event);
void OnQuit(wxCommandEvent& event);
void OnDialogList(wxCommandEvent& event);
void OnFrameList(wxCommandEvent& event);
void OnDialogForm(wxCommandEvent& event);
void OnFrameForm(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
DECLARE_EVENT_TABLE()
};
class PropListFrame: public wxPropertyListFrame
{
public:
PropListFrame(wxPropertyListView *v, wxFrame *parent, const wxString& title,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME, const wxString& name = "frame"):
wxPropertyListFrame(v, parent, title, pos, size, style, name)
{
}
void OnCloseWindow(wxCloseEvent& event);
DECLARE_EVENT_TABLE()
};
class PropListDialog: public wxPropertyListDialog
{
public:
PropListDialog(wxPropertyListView *v, wxWindow *parent, const wxString& title,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = "dialogBox"):
wxPropertyListDialog(v, parent, title, pos, size, style, name)
{
}
void OnCloseWindow(wxCloseEvent& event);
DECLARE_EVENT_TABLE()
};
class PropFormFrame: public wxPropertyFormFrame
{
public:
PropFormFrame(wxPropertyFormView *v, wxFrame *parent, const wxString& title,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_FRAME, const wxString& name = "frame"):
wxPropertyFormFrame(v, parent, title, pos, size, style, name)
{
}
void OnCloseWindow(wxCloseEvent& event);
DECLARE_EVENT_TABLE()
};
class PropFormDialog: public wxPropertyFormDialog
{
public:
PropFormDialog(wxPropertyFormView *v, wxWindow *parent, const wxString& title,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxDEFAULT_DIALOG_STYLE, const wxString& name = "dialogBox"):
wxPropertyFormDialog(v, parent, title, pos, size, style, name)
{
}
void OnCloseWindow(wxCloseEvent& event);
DECLARE_EVENT_TABLE()
};
#define PROPERTY_QUIT 1
#define PROPERTY_ABOUT 2
#define PROPERTY_TEST_DIALOG_LIST 3
#define PROPERTY_TEST_FRAME_LIST 4
#define PROPERTY_TEST_DIALOG_FORM 5
#define PROPERTY_TEST_FRAME_FORM 6
#endif

BIN
samples/proplist/tick.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 B

View File

@@ -1329,7 +1329,8 @@ void wxTable::SetColDefs (int index, char *fieldName, int dataType, void *pData,
int cType, int size, bool keyField, bool upd,
bool insAllow, bool derivedCol)
{
if (strlen(fieldName) > (uint)DB_MAX_COLUMN_NAME_LEN) // glt 4/21/97
// Please, no uint, it doesn't exist for VC++
if (strlen(fieldName) > (unsigned int) DB_MAX_COLUMN_NAME_LEN) // glt 4/21/97
{
strncpy (colDefs[index].ColName, fieldName, DB_MAX_COLUMN_NAME_LEN);
colDefs[index].ColName[DB_MAX_COLUMN_NAME_LEN] = 0; // glt 10/23/97

1119
src/generic/prop.cpp Normal file

File diff suppressed because it is too large Load Diff

743
src/generic/propform.cpp Normal file
View File

@@ -0,0 +1,743 @@
/////////////////////////////////////////////////////////////////////////////
// Name: propform.cpp
// Purpose: Property form classes
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation "propform.h"
#endif
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#if wxUSE_IOSTREAMH
#if defined(__WXMSW__) && !defined(__GNUWIN32__)
#include <strstrea.h>
#else
#include <strstream.h>
#endif
#else
#include <strstream>
#endif
#include "wx/window.h"
#include "wx/utils.h"
#include "wx/list.h"
#include "wx/propform.h"
/*
* Property view
*/
IMPLEMENT_DYNAMIC_CLASS(wxPropertyFormView, wxPropertyView)
BEGIN_EVENT_TABLE(wxPropertyFormView, wxPropertyView)
EVT_BUTTON(wxID_OK, wxPropertyFormView::OnOk)
EVT_BUTTON(wxID_CANCEL, wxPropertyFormView::OnCancel)
EVT_BUTTON(wxID_HELP, wxPropertyFormView::OnHelp)
EVT_BUTTON(wxID_PROP_REVERT, wxPropertyFormView::OnRevert)
EVT_BUTTON(wxID_PROP_UPDATE, wxPropertyFormView::OnUpdate)
END_EVENT_TABLE()
bool wxPropertyFormView::sm_dialogCancelled = FALSE;
wxPropertyFormView::wxPropertyFormView(wxWindow *propPanel, long flags):wxPropertyView(flags)
{
m_propertyWindow = propPanel;
m_managedWindow = NULL;
m_windowCloseButton = NULL;
m_windowCancelButton = NULL;
m_windowHelpButton = NULL;
m_detailedEditing = FALSE;
}
wxPropertyFormView::~wxPropertyFormView(void)
{
}
void wxPropertyFormView::ShowView(wxPropertySheet *ps, wxWindow *panel)
{
m_propertySheet = ps;
AssociatePanel(panel);
// CreateControls();
// UpdatePropertyList();
}
// Update this view of the viewed object, called e.g. by
// the object itself.
bool wxPropertyFormView::OnUpdateView(void)
{
return TRUE;
}
bool wxPropertyFormView::Check(void)
{
if (!m_propertySheet)
return FALSE;
wxNode *node = m_propertySheet->GetProperties().First();
while (node)
{
wxProperty *prop = (wxProperty *)node->Data();
wxPropertyValidator *validator = FindPropertyValidator(prop);
if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
{
wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
if (!formValidator->OnCheckValue(prop, this, m_propertyWindow))
return FALSE;
}
node = node->Next();
}
return TRUE;
}
bool wxPropertyFormView::TransferToPropertySheet(void)
{
if (!m_propertySheet)
return FALSE;
wxNode *node = m_propertySheet->GetProperties().First();
while (node)
{
wxProperty *prop = (wxProperty *)node->Data();
wxPropertyValidator *validator = FindPropertyValidator(prop);
if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
{
wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
formValidator->OnRetrieveValue(prop, this, m_propertyWindow);
}
node = node->Next();
}
return TRUE;
}
bool wxPropertyFormView::TransferToDialog(void)
{
if (!m_propertySheet)
return FALSE;
wxNode *node = m_propertySheet->GetProperties().First();
while (node)
{
wxProperty *prop = (wxProperty *)node->Data();
wxPropertyValidator *validator = FindPropertyValidator(prop);
if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
{
wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
formValidator->OnDisplayValue(prop, this, m_propertyWindow);
}
node = node->Next();
}
return TRUE;
}
bool wxPropertyFormView::AssociateNames(void)
{
if (!m_propertySheet || !m_propertyWindow)
return FALSE;
wxNode *node = m_propertyWindow->GetChildren().First();
while (node)
{
wxWindow *win = (wxWindow *)node->Data();
if (win->GetName() != "")
{
wxProperty *prop = m_propertySheet->GetProperty(win->GetName());
if (prop)
prop->SetWindow(win);
}
node = node->Next();
}
return TRUE;
}
bool wxPropertyFormView::OnClose(void)
{
delete this;
return TRUE;
}
void wxPropertyFormView::OnOk(wxCommandEvent& WXUNUSED(event))
{
// Retrieve the value if any
if (!Check())
return;
sm_dialogCancelled = FALSE;
TransferToPropertySheet();
m_managedWindow->Close(TRUE);
}
void wxPropertyFormView::OnCancel(wxCommandEvent& WXUNUSED(event))
{
sm_dialogCancelled = TRUE;
m_managedWindow->Close(TRUE);
}
void wxPropertyFormView::OnHelp(wxCommandEvent& WXUNUSED(event))
{
}
void wxPropertyFormView::OnUpdate(wxCommandEvent& WXUNUSED(event))
{
if (Check())
TransferToPropertySheet();
}
void wxPropertyFormView::OnRevert(wxCommandEvent& WXUNUSED(event))
{
TransferToDialog();
}
void wxPropertyFormView::OnCommand(wxWindow& win, wxCommandEvent& event)
{
if (!m_propertySheet)
return;
if (win.GetName() == "")
return;
if (strcmp(win.GetName(), "ok") == 0)
OnOk(event);
else if (strcmp(win.GetName(), "cancel") == 0)
OnCancel(event);
else if (strcmp(win.GetName(), "help") == 0)
OnHelp(event);
else if (strcmp(win.GetName(), "update") == 0)
OnUpdate(event);
else if (strcmp(win.GetName(), "revert") == 0)
OnRevert(event);
else
{
// Find a validator to route the command to.
wxNode *node = m_propertySheet->GetProperties().First();
while (node)
{
wxProperty *prop = (wxProperty *)node->Data();
if (prop->GetWindow() && (prop->GetWindow() == &win))
{
wxPropertyValidator *validator = FindPropertyValidator(prop);
if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
{
wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
formValidator->OnCommand(prop, this, m_propertyWindow, event);
return;
}
}
node = node->Next();
}
}
}
void wxPropertyFormView::OnDoubleClick(wxControl *item)
{
if (!m_propertySheet)
return;
// Find a validator to route the command to.
wxNode *node = m_propertySheet->GetProperties().First();
while (node)
{
wxProperty *prop = (wxProperty *)node->Data();
if (prop->GetWindow() && ((wxControl *)prop->GetWindow() == item))
{
wxPropertyValidator *validator = FindPropertyValidator(prop);
if (validator && validator->IsKindOf(CLASSINFO(wxPropertyFormValidator)))
{
wxPropertyFormValidator *formValidator = (wxPropertyFormValidator *)validator;
formValidator->OnDoubleClick(prop, this, m_propertyWindow);
return;
}
}
node = node->Next();
}
}
/*
* Property form dialog box
*/
IMPLEMENT_CLASS(wxPropertyFormDialog, wxDialog)
wxPropertyFormDialog::wxPropertyFormDialog(wxPropertyFormView *v, wxWindow *parent, const wxString& title,
const wxPoint& pos, const wxSize& size, long style, const wxString& name):
wxDialog(parent, -1, title, pos, size, style, name)
{
m_view = v;
m_view->AssociatePanel(this);
m_view->SetManagedWindow(this);
// SetAutoLayout(TRUE);
}
bool wxPropertyFormDialog::OnClose(void)
{
if (m_view)
{
m_view->OnClose();
m_view = NULL;
return TRUE;
}
else
return FALSE;
}
void wxPropertyFormDialog::OnDefaultAction(wxControl *item)
{
m_view->OnDoubleClick(item);
}
void wxPropertyFormDialog::OnCommand(wxWindow& win, wxCommandEvent& event)
{
if ( m_view )
m_view->OnCommand(win, event);
}
// Extend event processing to search the view's event table
bool wxPropertyFormDialog::ProcessEvent(wxEvent& event)
{
if ( !m_view || ! m_view->ProcessEvent(event) )
return wxEvtHandler::ProcessEvent(event);
else
return TRUE;
}
/*
* Property form panel
*/
IMPLEMENT_CLASS(wxPropertyFormPanel, wxPanel)
void wxPropertyFormPanel::OnDefaultAction(wxControl *item)
{
m_view->OnDoubleClick(item);
}
void wxPropertyFormPanel::OnCommand(wxWindow& win, wxCommandEvent& event)
{
m_view->OnCommand(win, event);
}
// Extend event processing to search the view's event table
bool wxPropertyFormPanel::ProcessEvent(wxEvent& event)
{
if ( !m_view || ! m_view->ProcessEvent(event) )
return wxEvtHandler::ProcessEvent(event);
else
return TRUE;
}
/*
* Property frame
*/
IMPLEMENT_CLASS(wxPropertyFormFrame, wxFrame)
bool wxPropertyFormFrame::OnClose(void)
{
if (m_view)
return m_view->OnClose();
else
return FALSE;
}
wxPanel *wxPropertyFormFrame::OnCreatePanel(wxFrame *parent, wxPropertyFormView *v)
{
return new wxPropertyFormPanel(v, parent);
}
bool wxPropertyFormFrame::Initialize(void)
{
m_propertyPanel = OnCreatePanel(this, m_view);
if (m_propertyPanel)
{
m_view->AssociatePanel(m_propertyPanel);
m_view->SetManagedWindow(this);
return TRUE;
}
else
return FALSE;
}
/*
* Property form specific validator
*/
IMPLEMENT_ABSTRACT_CLASS(wxPropertyFormValidator, wxPropertyValidator)
/*
* Default validators
*/
IMPLEMENT_DYNAMIC_CLASS(wxRealFormValidator, wxPropertyFormValidator)
///
/// Real number form validator
///
bool wxRealFormValidator::OnCheckValue( wxProperty *property, wxPropertyFormView *WXUNUSED(view),
wxWindow *parentWindow)
{
if (m_realMin == 0.0 && m_realMax == 0.0)
return TRUE;
// The item used for viewing the real number: should be a text item.
wxWindow *m_propertyWindow = property->GetWindow();
if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
return FALSE;
wxString value(((wxTextCtrl *)m_propertyWindow)->GetValue());
float val = 0.0;
if (!StringToFloat(WXSTRINGCAST value, &val))
{
char buf[200];
sprintf(buf, "Value %s is not a valid real number!", (const char *)value);
wxMessageBox(buf, "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow);
return FALSE;
}
if (val < m_realMin || val > m_realMax)
{
char buf[200];
sprintf(buf, "Value must be a real number between %.2f and %.2f!", m_realMin, m_realMax);
wxMessageBox(buf, "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow);
return FALSE;
}
return TRUE;
}
bool wxRealFormValidator::OnRetrieveValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow) )
{
// The item used for viewing the real number: should be a text item.
wxWindow *m_propertyWindow = property->GetWindow();
if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
return FALSE;
wxString value(((wxTextCtrl *)m_propertyWindow)->GetValue());
if (value.Length() == 0)
return FALSE;
float f = (float)atof((const char *)value);
property->GetValue() = f;
return TRUE;
}
bool wxRealFormValidator::OnDisplayValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow) )
{
// The item used for viewing the real number: should be a text item.
wxWindow *m_propertyWindow = property->GetWindow();
if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
return FALSE;
wxTextCtrl *textItem = (wxTextCtrl *)m_propertyWindow;
textItem->SetValue(FloatToString(property->GetValue().RealValue()));
return TRUE;
}
///
/// Integer validator
///
IMPLEMENT_DYNAMIC_CLASS(wxIntegerFormValidator, wxPropertyFormValidator)
bool wxIntegerFormValidator::OnCheckValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
wxWindow *parentWindow)
{
if (m_integerMin == 0.0 && m_integerMax == 0.0)
return TRUE;
// The item used for viewing the real number: should be a text item or a slider
wxWindow *m_propertyWindow = property->GetWindow();
if (!m_propertyWindow)
return FALSE;
long val = 0;
if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
{
wxString value(((wxTextCtrl *)m_propertyWindow)->GetValue());
if (!StringToLong(WXSTRINGCAST value, &val))
{
char buf[200];
sprintf(buf, "Value %s is not a valid integer!", (const char *)value);
wxMessageBox(buf, "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow);
return FALSE;
}
}
else if (m_propertyWindow->IsKindOf(CLASSINFO(wxSlider)))
{
val = (long)((wxSlider *)m_propertyWindow)->GetValue();
}
else
return FALSE;
if (val < m_integerMin || val > m_integerMax)
{
char buf[200];
sprintf(buf, "Value must be an integer between %ld and %ld!", m_integerMin, m_integerMax);
wxMessageBox(buf, "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow);
return FALSE;
}
return TRUE;
}
bool wxIntegerFormValidator::OnRetrieveValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow))
{
// The item used for viewing the real number: should be a text item or a slider
wxWindow *m_propertyWindow = property->GetWindow();
if (!m_propertyWindow)
return FALSE;
if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
{
wxString value(((wxTextCtrl *)m_propertyWindow)->GetValue());
if (value.Length() == 0)
return FALSE;
long i = atol((const char *)value);
property->GetValue() = i;
}
else if (m_propertyWindow->IsKindOf(CLASSINFO(wxSlider)))
{
property->GetValue() = (long)((wxSlider *)m_propertyWindow)->GetValue();
}
else
return FALSE;
return TRUE;
}
bool wxIntegerFormValidator::OnDisplayValue( wxProperty *property, wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow))
{
// The item used for viewing the real number: should be a text item or a slider
wxWindow *m_propertyWindow = property->GetWindow();
if (!m_propertyWindow)
return FALSE;
if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
{
wxTextCtrl *textItem = (wxTextCtrl *)m_propertyWindow;
textItem->SetValue(LongToString(property->GetValue().IntegerValue()));
}
else if (m_propertyWindow->IsKindOf(CLASSINFO(wxSlider)))
{
((wxSlider *)m_propertyWindow)->SetValue((int)property->GetValue().IntegerValue());
}
else
return FALSE;
return TRUE;
}
///
/// Boolean validator
///
IMPLEMENT_DYNAMIC_CLASS(wxBoolFormValidator, wxPropertyFormValidator)
bool wxBoolFormValidator::OnCheckValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow))
{
// The item used for viewing the boolean: should be a checkbox
wxWindow *m_propertyWindow = property->GetWindow();
if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxCheckBox)))
return FALSE;
return TRUE;
}
bool wxBoolFormValidator::OnRetrieveValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow) )
{
// The item used for viewing the boolean: should be a checkbox.
wxWindow *m_propertyWindow = property->GetWindow();
if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxCheckBox)))
return FALSE;
wxCheckBox *checkBox = (wxCheckBox *)m_propertyWindow;
property->GetValue() = (bool)checkBox->GetValue();
return TRUE;
}
bool wxBoolFormValidator::OnDisplayValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow))
{
// The item used for viewing the boolean: should be a checkbox.
wxWindow *m_propertyWindow = property->GetWindow();
if (!m_propertyWindow || !m_propertyWindow->IsKindOf(CLASSINFO(wxCheckBox)))
return FALSE;
wxCheckBox *checkBox = (wxCheckBox *)m_propertyWindow;
checkBox->SetValue((bool)property->GetValue().BoolValue());
return TRUE;
}
///
/// String validator
///
IMPLEMENT_DYNAMIC_CLASS(wxStringFormValidator, wxPropertyFormValidator)
wxStringFormValidator::wxStringFormValidator(wxStringList *list, long flags):
wxPropertyFormValidator(flags)
{
m_strings = list;
}
bool wxStringFormValidator::OnCheckValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
wxWindow *parentWindow )
{
if (!m_strings)
return TRUE;
// The item used for viewing the string: should be a text item, choice item or listbox.
wxWindow *m_propertyWindow = property->GetWindow();
if (!m_propertyWindow)
return FALSE;
if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
{
wxTextCtrl *text = (wxTextCtrl *)m_propertyWindow;
if (!m_strings->Member(text->GetValue()))
{
wxString s("Value ");
s += text->GetValue();
s += " is not valid.";
wxMessageBox(s, "Property value error", wxOK | wxICON_EXCLAMATION, parentWindow);
return FALSE;
}
}
else
{
// Any other item constrains the string value,
// so we don't have to check it.
}
return TRUE;
}
bool wxStringFormValidator::OnRetrieveValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow) )
{
// The item used for viewing the string: should be a text item, choice item or listbox.
wxWindow *m_propertyWindow = property->GetWindow();
if (!m_propertyWindow)
return FALSE;
if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
{
wxTextCtrl *text = (wxTextCtrl *)m_propertyWindow;
property->GetValue() = text->GetValue();
}
else if (m_propertyWindow->IsKindOf(CLASSINFO(wxListBox)))
{
wxListBox *lbox = (wxListBox *)m_propertyWindow;
if (lbox->GetSelection() > -1)
property->GetValue() = lbox->GetStringSelection();
}
/*
else if (m_propertyWindow->IsKindOf(CLASSINFO(wxRadioBox)))
{
wxRadioBox *rbox = (wxRadioBox *)m_propertyWindow;
int n = 0;
if ((n = rbox->GetSelection()) > -1)
property->GetValue() = rbox->GetString(n);
}
*/
else if (m_propertyWindow->IsKindOf(CLASSINFO(wxChoice)))
{
wxChoice *choice = (wxChoice *)m_propertyWindow;
if (choice->GetSelection() > -1)
property->GetValue() = choice->GetStringSelection();
}
else
return FALSE;
return TRUE;
}
bool wxStringFormValidator::OnDisplayValue(wxProperty *property, wxPropertyFormView *WXUNUSED(view),
wxWindow *WXUNUSED(parentWindow) )
{
// The item used for viewing the string: should be a text item, choice item or listbox.
wxWindow *m_propertyWindow = property->GetWindow();
if (!m_propertyWindow)
return FALSE;
if (m_propertyWindow->IsKindOf(CLASSINFO(wxTextCtrl)))
{
wxTextCtrl *text = (wxTextCtrl *)m_propertyWindow;
text->SetValue(property->GetValue().StringValue());
}
else if (m_propertyWindow->IsKindOf(CLASSINFO(wxListBox)))
{
wxListBox *lbox = (wxListBox *)m_propertyWindow;
if (lbox->Number() == 0 && m_strings)
{
// Try to initialize the listbox from 'strings'
wxNode *node = m_strings->First();
while (node)
{
char *s = (char *)node->Data();
lbox->Append(s);
node = node->Next();
}
}
lbox->SetStringSelection(property->GetValue().StringValue());
}
/*
else if (m_propertyWindow->IsKindOf(CLASSINFO(wxRadioBox)))
{
wxRadioBox *rbox = (wxRadioBox *)m_propertyWindow;
rbox->SetStringSelection(property->GetValue().StringValue());
}
*/
else if (m_propertyWindow->IsKindOf(CLASSINFO(wxChoice)))
{
wxChoice *choice = (wxChoice *)m_propertyWindow;
#ifndef __XVIEW__
if (choice->Number() == 0 && m_strings)
{
// Try to initialize the choice item from 'strings'
// XView doesn't allow this kind of thing.
wxNode *node = m_strings->First();
while (node)
{
char *s = (char *)node->Data();
choice->Append(s);
node = node->Next();
}
}
#endif
choice->SetStringSelection(property->GetValue().StringValue());
}
else
return FALSE;
return TRUE;
}

1948
src/generic/proplist.cpp Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -146,6 +146,9 @@ LIB_CPP_SRC=\
../generic/panelg.cpp \
../generic/printps.cpp \
../generic/prntdlgg.cpp \
../generic/prop.cpp \
../generic/propform.cpp \
../generic/proplist.cpp \
../generic/sashwin.cpp \
../generic/scrolwin.cpp \
../generic/splitter.cpp \

View File

@@ -76,6 +76,9 @@ GENERICOBJS= \
$(MSWDIR)\imaglist.obj \
$(MSWDIR)\laywin.obj \
$(MSWDIR)\panelg.obj \
$(MSWDIR)\prop.obj \
$(MSWDIR)\proplist.obj \
$(MSWDIR)\propform.obj \
$(MSWDIR)\sashwin.obj \
$(MSWDIR)\scrolwin.obj \
$(MSWDIR)\splitter.obj \
@@ -606,6 +609,12 @@ $(MSWDIR)\msgdlgg.obj: $(GENDIR)\msgdlgg.$(SRCSUFF)
$(MSWDIR)\panelg.obj: $(GENDIR)\panelg.$(SRCSUFF)
$(MSWDIR)\prop.obj: $(GENDIR)\prop.$(SRCSUFF)
$(MSWDIR)\proplist.obj: $(GENDIR)\proplist.$(SRCSUFF)
$(MSWDIR)\propform.obj: $(GENDIR)\propform.$(SRCSUFF)
$(MSWDIR)\printps.obj: $(GENDIR)\printps.$(SRCSUFF)
$(MSWDIR)\prntdlgg.obj: $(GENDIR)\prntdlgg.$(SRCSUFF)

View File

@@ -80,6 +80,9 @@ GENERICOBJS= \
$(MSWDIR)\msgdlgg.obj \
$(MSWDIR)\notebook.obj \
$(MSWDIR)\panelg.obj \
$(MSWDIR)\prop.obj \
$(MSWDIR)\propform.obj \
$(MSWDIR)\proplist.obj \
$(MSWDIR)\sashwin.obj \
$(MSWDIR)\scrolwin.obj \
$(MSWDIR)\splitter.obj \
@@ -592,6 +595,12 @@ $(MSWDIR)\printps.obj: $(GENDIR)\printps.$(SRCSUFF)
$(MSWDIR)\prntdlgg.obj: $(GENDIR)\prntdlgg.$(SRCSUFF)
$(MSWDIR)\prop.obj: $(GENDIR)\prop.$(SRCSUFF)
$(MSWDIR)\proplist.obj: $(GENDIR)\proplist.$(SRCSUFF)
$(MSWDIR)\propform.obj: $(GENDIR)\propform.$(SRCSUFF)
$(MSWDIR)\sashwin.obj: $(GENDIR)\sashwin.$(SRCSUFF)
$(MSWDIR)\scrolwin.obj: $(GENDIR)\scrolwin.$(SRCSUFF)

View File

@@ -58,6 +58,9 @@ GENERICOBJS= \
$(GENDIR)\listctrl.obj \
$(GENDIR)\notebook.obj \
$(GENDIR)\panelg.obj \
$(GENDIR)\prop.obj \
$(GENDIR)\propform.obj \
$(GENDIR)\proplist.obj \
$(GENDIR)\scrolwin.obj \
$(GENDIR)\splitter.obj \
$(GENDIR)\statusbr.obj \
@@ -990,6 +993,21 @@ $(GENDIR)/prntdlgg.obj: $*.$(SRCSUFF)
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
<<
$(GENDIR)/prop.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
<<
$(GENDIR)/propform.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
<<
$(GENDIR)/proplist.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
<<
$(GENDIR)/scrolwin.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)

View File

@@ -66,6 +66,9 @@ GENERICOBJS= \
$(GENDIR)/laywin.$(OBJSUFF) \
$(GENDIR)/msgdlgg.$(OBJSUFF) \
$(GENDIR)/panelg.$(OBJSUFF) \
$(GENDIR)/prop.$(OBJSUFF) \
$(GENDIR)/propform.$(OBJSUFF) \
$(GENDIR)/proplist.$(OBJSUFF) \
$(GENDIR)/sashwin.$(OBJSUFF) \
$(GENDIR)/scrolwin.$(OBJSUFF) \
$(GENDIR)/splitter.$(OBJSUFF) \

View File

@@ -53,6 +53,9 @@ GENERICOBJS= \
$(GENDIR)\gridg.obj \
$(GENDIR)\laywin.obj \
$(GENDIR)\panelg.obj \
$(GENDIR)\prop.obj \
$(GENDIR)\propform.obj \
$(GENDIR)\proplist.obj \
$(GENDIR)\sashwin.obj \
$(GENDIR)\scrolwin.obj \
$(GENDIR)\splitter.obj \
@@ -1115,6 +1118,21 @@ $(GENDIR)/panelg.obj: $*.$(SRCSUFF)
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
<<
$(GENDIR)/prop.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
<<
$(GENDIR)/propform.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
<<
$(GENDIR)/proplist.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
<<
$(GENDIR)/printps.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
@@ -1380,18 +1398,23 @@ docs: allhlp allhtml allpdfrtf
alldocs: docs
hlp: wxhlp portinghlp # faqhlp
wxhlp: $(DOCDIR)/winhelp/wx.hlp
wxprophlp: $(DOCDIR)/winhelp/wxprop.hlp
faqhlp: $(DOCDIR)/winhelp/faq.hlp
refhlp: $(DOCDIR)/winhelp/techref.hlp
rtf: $(DOCDIR)/winhelp/wx.rtf
faqrtf: $(DOCDIR)/winhelp/faq.rtf
wxproprtf: $(DOCDIR)/winhelp/wxprop.rtf
pdfrtf: $(DOCDIR)/pdf/wx.rtf
faqpdfrtf: $(DOCDIR)/pdf/faq.rtf
wxproppdfrtf: $(DOCDIR)/pdf/wxprop.rtf
refpdfrtf: $(DOCDIR)/pdf/techref.rtf
html: wxhtml # faqhtml
wxhtml: $(DOCDIR)\html\wx\wx.htm
faqhtml: $(DOCDIR)\html\faq\faq.htm
wxprophtml: $(DOCDIR)\html\proplist\prop.htm
ps: wxps referencps # faqps
wxps: $(WXDIR)\docs\ps\wx.ps
wxpropps: $(WXDIR)\docs\ps\wxprop.ps
faqps: $(WXDIR)\docs\ps\faq.ps
referencps: $(WXDIR)\docs\ps\referenc.ps
@@ -1401,9 +1424,7 @@ portinghlp: $(DOCDIR)/winhelp/porting.hlp
portingpdfrtf: $(DOCDIR)/pdf/porting.rtf
portingps: $(WXDIR)\docs\ps\porting.ps
allhlp: wxhlp portinghlp # faqhlp
cd $(WXDIR)\utils\wxprop\src
nmake -f makefile.nt hlp
allhlp: wxhlp portinghlp wxprop # faqhlp
cd $(WXDIR)\utils\dialoged\src
nmake -f makefile.nt hlp
cd $(THISDIR)
@@ -1434,9 +1455,7 @@ allhlp: wxhlp portinghlp # faqhlp
# cd $(WXDIR)\utils\clips2c\src
# nmake -f makefile.nt hlp
allhtml: wxhtml portinghtml # faqhtml
cd $(WXDIR)\utils\wxprop\src
nmake -f makefile.nt html
allhtml: wxhtml portinghtml wxprophtml # faqhtml
cd $(WXDIR)\utils\dialoged\src
nmake -f makefile.nt html
cd $(THISDIR)
@@ -1468,16 +1487,12 @@ allhtml: wxhtml portinghtml # faqhtml
# cd $(WXDIR)\utils\clips2c\src
# nmake -f makefile.nt html
allps: wxps referencps portingps # faqps
cd $(WXDIR)\utils\wxprop\src
nmake -f makefile.nt ps
allps: wxps referencps portingps wxpropps # faqps
cd $(WXDIR)\utils\dialoged\src
nmake -f makefile.nt ps
cd $(THISDIR)
allpdfrtf: pdfrtf portingpdfrtf # faqpdfrtf
cd $(WXDIR)\utils\wxprop\src
nmake -f makefile.nt pdfrtf
allpdfrtf: pdfrtf portingpdfrtf wxproppdfrtf # faqpdfrtf
cd $(WXDIR)\utils\dialoged\src
nmake -f makefile.nt pdfrtf
cd $(THISDIR)
@@ -1529,6 +1544,14 @@ $(DOCDIR)/winhelp/faq.hlp: $(DOCDIR)/latex/faq/faq.rtf $(DOCDIR)/latex/f
move faq.cnt $(DOCDIR)\winhelp\faq.cnt
cd $(THISDIR)
$(DOCDIR)/winhelp/wxprop.hlp: $(DOCDIR)/latex/proplist/wxprop.rtf $(DOCDIR)/latex/proplist/wxprop.hpj
cd $(DOCDIR)/latex/proplist
-erase wxprop.ph
hc wxprop
move wxprop.hlp $(DOCDIR)\winhelp\wxprop.hlp
move wxprop.cnt $(DOCDIR)\winhelp\wxprop.cnt
cd $(THISDIR)
$(DOCDIR)/winhelp/techref.hlp: $(DOCDIR)/latex/techref/techref.rtf $(DOCDIR)/latex/techref/techref.hpj
cd $(DOCDIR)/latex/techref
-erase techref.ph
@@ -1552,6 +1575,11 @@ $(DOCDIR)/latex/faq/faq.rtf: $(DOCDIR)/latex/faq/faq.tex
-start /w tex2rtf $(DOCDIR)/latex/faq/faq.tex $(DOCDIR)/latex/faq/faq.rtf -twice -winhelp
cd $(THISDIR)
$(DOCDIR)/latex/proplist/wxprop.rtf: $(DOCDIR)/latex/proplist/prop.tex $(DOCDIR)/latex/proplist/body.tex $(DOCDIR)/latex/proplist/classes.tex $(DOCDIR)/latex/proplist/changes.tex
cd $(DOCDIR)\latex\proplist
-start /w tex2rtf $(DOCDIR)/latex/proplist/prop.tex $(DOCDIR)/latex/proplist/wxprop.rtf -twice -winhelp
cd $(THISDIR)
$(DOCDIR)/latex/techref/techref.rtf: $(DOCDIR)/latex/techref/techref.tex
cd $(DOCDIR)\latex\techref
-start /w tex2rtf $(DOCDIR)/latex/techref/techref.tex $(DOCDIR)/latex/techref/techref.rtf -twice -winhelp
@@ -1575,6 +1603,12 @@ $(DOCDIR)/pdf/faq.rtf: $(DOCDIR)/latex/faq/faq.tex
-start /w tex2rtf $(DOCDIR)/latex/faq/faq.tex $(DOCDIR)/pdf/faq.rtf -twice -rtf
cd $(THISDIR)
$(DOCDIR)/pdf/wxprop.rtf: $(DOCDIR)/latex/proplist/proplist.tex $(DOCDIR)/latex/proplist/body.tex $(DOCDIR)/latex/proplist/classes.tex $(DOCDIR)/latex/proplist/changes.tex
cd $(DOCDIR)\latex\proplist
-copy *.bmp *.wmf $(DOCDIR)\pdf
-start /w tex2rtf $(DOCDIR)/latex/proplist/wxprop.tex $(DOCDIR)/pdf/wxprop.rtf -twice -rtf
cd $(THISDIR)
$(DOCDIR)/pdf/techref.rtf: $(DOCDIR)/latex/techref/techref.tex
cd $(DOCDIR)\latex\techref
-copy *.bmp *.wmf $(DOCDIR)\pdf
@@ -1608,7 +1642,17 @@ $(DOCDIR)\html\faq\faq.htm: $(DOCDIR)\latex\faq\faq.tex
-erase $(DOCDIR)\html\faq\*.con
-erase $(DOCDIR)\html\faq\*.ref
-erase $(DOCDIR)\latex\faq\*.con
-erase $(DOCDIR)\latexfaq\*.ref
-erase $(DOCDIR)\latex\faq\*.ref
cd $(THISDIR)
$(DOCDIR)\html\proplist\prop.htm: $(DOCDIR)\latex\proplist\prop.tex $(DOCDIR)\latex\proplist\body.tex $(DOCDIR)\latex\proplist\classes.tex $(DOCDIR)\latex\proplist\changes.tex
cd $(DOCDIR)\latex\proplist
-mkdir $(DOCDIR)\html\proplist
-start /w tex2rtf $(DOCDIR)\latex\proplist\wxprop.tex $(DOCDIR)\html\proplist\prop.htm -twice -html
-erase $(DOCDIR)\html\proplist\*.con
-erase $(DOCDIR)\html\proplist\*.ref
-erase $(DOCDIR)\latex\proplist\*.con
-erase $(DOCDIR)\latex\proplist\*.ref
cd $(THISDIR)
$(WXDIR)\docs\latex\wx\manual.dvi: $(DOCDIR)/latex/wx/body.tex $(DOCDIR)/latex/wx/manual.tex

View File

@@ -31,6 +31,9 @@ GENERICOBJS= choicdgg.obj &
gridg.obj &
laywin.obj &
panelg.obj &
prop.obj &
propform.obj &
proplist.obj &
sashwin.obj &
scrolwin.obj &
splitter.obj &
@@ -721,6 +724,15 @@ panelg.obj: $(GENDIR)\panelg.cpp
printps.obj: $(GENDIR)\printps.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
prop.obj: $(GENDIR)\prop.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
propform.obj: $(GENDIR)\propform.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
proplist.obj: $(GENDIR)\proplist.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
prntdlgg.obj: $(GENDIR)\prntdlgg.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<

View File

@@ -103,6 +103,9 @@ GENERICOBJS= \
$(GENDIR)\gridg.obj \
$(GENDIR)\msgdlgg.obj \
$(GENDIR)\panelg.obj \
$(GENDIR)\prop.obj \
$(GENDIR)\propform.obj \
$(GENDIR)\proplist.obj \
$(GENDIR)\printps.obj \
$(GENDIR)\prntdlgg.obj \
$(GENDIR)\scrolwin.obj \
@@ -893,6 +896,21 @@ $(GENDIR)/panelg.obj: $*.$(SRCSUFF)
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
<<
$(GENDIR)/prop.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
<<
$(GENDIR)/propform.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
<<
$(GENDIR)/proplist.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@
<<
$(GENDIR)/printps.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /c /Tp $*.$(SRCSUFF) /Fo$@

View File

@@ -142,6 +142,9 @@ LIB_CPP_SRC=\
../generic/laywin.cpp \
../generic/msgdlgg.cpp \
../generic/panelg.cpp \
../generic/prop.cpp \
../generic/proplist.cpp \
../generic/propform.cpp \
../generic/printps.cpp \
../generic/prntdlgg.cpp \
../generic/sashwin.cpp \

View File

@@ -15,18 +15,17 @@ no independent file format.
provide immediate visual feedback of changed properties.
\end{enumerate}
Dialog Editor should be compiled and used with wxWindows 1.65 or later.
Dialog Editor 2.0 should be compiled and used with wxWindows 2.0.
\section{Current status}
Dialog Editor currently runs under MS Windows. It has yet to
be tested under Motif and XView: see \helpref{Technical notes}{technotes} for a discussion
of what needs to be done.
Dialog Editor currently runs under wxMSW and wxGTK. It has yet to
be tested under wxMotif.
\section{Future developments}
\begin{itemize}\itemsep=0pt
\item XView and Motif versions.
\item Motif compilation.
\item It would be nice to have a dialog browser, showing thumbnails of
all dialogs in a particular directory.
\item Maybe add a menubar editor (from wxBuilder).
@@ -42,24 +41,23 @@ all dialogs in a particular directory.
\subsection{File menu}
\begin{twocollist}\itemsep=0pt
\twocolitem{New project}{Creates a new project (clears index and resets project name).}
\twocolitem{New dialog}{Creates a new dialog resource.}
\twocolitem{New project}{Creates a new project (clears index and resets project name).}
\twocolitem{Open}{Opens an existing resource file.}
\twocolitem{Save}{Saves the current resources.}
\twocolitem{Save as}{Saves the current resources in a named file.}
\twocolitem{Save As...}{Saves the current resources in a named file.}
\twocolitem{Clear}{Clears the current resources.}
\twocolitem{Exit}{Exit the program.}
\twocolitem{Exit}{Exits the program.}
\end{twocollist}
\subsection{Edit menu}
\begin{twocollist}\itemsep=0pt
\twocolitem{Recreate}{Recreates the currently selected panel item from the underlying resource. This may be necessary
\twocolitem{Test Dialog}{Creates the current dialog for test purposes.}
\twocolitem{Recreate}{Recreates the currently selected control from the underlying resource. This may be necessary
to regenerate items that cannot be changed dynamically, and which have got out of sync with the displayed
item.}
\twocolitem{Delete}{Deletes the currently selected resource.}
\twocolitem{Toggle edit/test mode}{Toggles from edit to test mode, and vice versa. Edit mode is used for editing
dialogs, test mode allows panel items to be manipulated as they will appear to the user.}
\end{twocollist}
\subsection{Help menu}
@@ -93,35 +91,15 @@ The command toolbar consists of the following tools:
\latexonly{\newpage}
\section{Tool palette}
The tool palette is used to select a type of panel item to create on the dialog.
To create a new panel item, select a tool with left-click, then left-click on the dialog to
window. Select the pointer tool to use left-click for selecting and deselecting
The tool palette is used to select a type of control to create on the dialog.
To create a new control, select a tool with left-click, then left-click on the dialog.
Select the pointer tool to use left-click for selecting and deselecting
items.
The tool palette consists of the following tools.
\section{Resource tree}
\begin{twocollist}%\itemsep=0pt
\twocolitem{\icon{arrow.eps}{Pointer}}{Click this to select/deselect items on a dialog.}
\twocolitem{\icon{message.eps}{Message}}{Text message item.}
\twocolitem{\icon{picture.eps}{Bitmap message}}{Bitmap message item.}
\twocolitem{\icon{button.eps}{Button}}{Text button item.}
\twocolitem{\icon{bmpbuttn.eps}{Bitmap button}}{Bitmap button item.}
\twocolitem{\icon{check.eps}{Checkbox}}{Checkbox item.}
\twocolitem{\icon{radio.eps}{Radiobox}}{Radiobox item.}
\twocolitem{\icon{listbox.eps}{Listbox}}{Listbox item.}
\twocolitem{\icon{choice.eps}{Choice}}{Choice item.}
\twocolitem{\icon{text.eps}{Text}}{Single-line text item.}
\twocolitem{\icon{mtext.eps}{Multitext}}{Multi-line text item.}
\twocolitem{\icon{slider.eps}{Slider}}{Slider item.}
\twocolitem{\icon{group.eps}{Groupbpx}}{Groupbox item.}
\twocolitem{\icon{gauge.eps}{Gauge}}{Gauge item.}
\twocolitem{\icon{scroll.eps}{Scrollbar}}{Scrollbar item.}
\end{twocollist}
\section{Resource list}
The resource list shows a list of the dialogs, panel items and bitmaps currently loaded
in Dialog Editor. Double-clicking on a dialog item shows the associated dialog box.
The resource tree shows a list of the dialogs, controls and bitmaps currently loaded
in Dialog Editor. Double-clicking on an item shows the associated resource.
\chapter{Procedures}\label{procedures}
\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
@@ -138,16 +116,16 @@ status line.
\section{Creating a dialog}
To create a new dialog, click on the {\bf File: New} menu item, or equivalent
toolbar button. A dialog will appear. To put a panel item on the dialog, left-click
toolbar button. A dialog will appear. To put a control on the dialog, left-click
on the appropriate palette icon and then left-click on the dialog. A new item
will appear at the place you clicked.
You can edit any panel item or dialog by control-left clicking. A property editor
You can edit any control or dialog by control-left clicking. A property editor
will appear, allowing any property to be selected and edited (see \helpref{Using property editors}{propeditors}).
You can also edit items by right-clicking to show a menu, and then selecting {\it Edit properties}.
To move a panel item, drag the item with the left mouse button, or edit
the position values in the property editor. To resize a panel item, you
To move a control, drag the item with the left mouse button, or edit
the position values in the property editor. To resize a control, you
can either select it by left-clicking and then dragging on a selection
handle, or edit the size values in the property editor.
@@ -169,7 +147,7 @@ the file selector, and properties containing list of user-definable strings use
string editor.
When you change a property value, this value is immediately reflected in
the dialog or panel item. If the item allows this value to be changed
the dialog or control. If the item allows this value to be changed
dynamically, the relevant wxWindows function will be called internally
to effect the change. If the value cannot be changed dynamically, the
item will be destroyed and re-created, which means that there will be
@@ -186,12 +164,37 @@ wxWindows resources have been enabled when building the wxWindows library.
These files can be loaded dynamically, or included directly into program source
with a \verb$#include$ directive. See the wxWindows user manual for further details.
\section{Working with identifiers}
Dialog Editor keeps track of identifiers in your resources, and reads and writes an include file of the
form {\tt name.h} where 'name' is the root name of your {\tt .wxr} file. Dialog Editor
knows about the predefined identifiers such as wxID\_OK.
When you create a dialog or control, the identifier is initially generated. When you
edit the identifier via a property editor, you can choose a new name, such as a predefined
symbol and optionally change the integer assigned to the name (assuming it's not a
predefined symbol).
When you save the project, the identifier include file is saved as well. Include this file
in your project so that you can refer to controls and dialogs by identifier rather than
obscure integers. Note that the {\tt .wxr} file itself can only contain integer ids and not the symbols,
due to way in which the resource file is loaded.
\section{Multi-platform development}
{\tt .wxr} files generated on one environment (e.g. Windows) can be used in another (e.g. Motif).
However, because the same panel item can have different sizes on different GUIs,
{\tt .wxr} files generated on one environment (e.g. Windows) can be used in another (e.g. GTK).
If you use default fonts and colouring (set {\bf useSystemDefaults} to True in the dialog properties)
then the dialog fonts and colours will take on the native values, rather than ones specified in the
resource. Without this, colours in the dialog resource may not match system colours.
Also, set {\bf useDialogUnits} to True whenever possible since this will cause the dialog
to be created using a scale based on the current system font size, and will result in dialogs that are
portable between screen resolutions as well as platforms.
Because the same control can have different sizes on different GUIs,
the user should be cautious in assuming that one resource file will work for all
platforms. It may be better to plan to conditionally include or load different
resource files for different platforms, with spacing modified to suit each
environment.
environment. The best thing is to try your dialog resource on several platforms
and see whether tweaking is required for some platforms.

View File

@@ -2,14 +2,16 @@
\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
\setfooter{\thepage}{}{}{}{}{\thepage}%
Version 1.0
Version 2.0
\begin{itemize}\itemsep=0pt
\item No XView or Motif versions yet.
\item In Watcom-compiled 32-bit Windows version, bitmap buttons and messages
don't work properly.
\item Some panel item properties missing, e.g. wxPASSWORD, wxREADONLY.
\item No Motif version yet.
\item Some control properties missing.
\item When dragging a selected item, other selected items should follow (to be
consistent with convention), but don't.
\item wxSlider sizing a bit broken: a wxWindows problem.
\item No grid.
\item No keyboard shortcuts.
\item No tab ordering.
\item In dialog unit mode, controls will sometimes move slightly when properties are edited,
because translating between units isn't always reversible (rounding errors?).
\end{itemize}

View File

@@ -2,6 +2,14 @@
\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
\setfooter{\thepage}{}{}{}{}{\thepage}%
December 31st 1998, Version 2.0
\begin{itemize}\itemsep=0pt
\item wxWindows 2.0 port.
\item Major user interface changes.
\item Allows identifiers to be edited and reads/writes an id header file.
\end{itemize}
March 15th 1997, Version 1.7
\begin{itemize}\itemsep=0pt

File diff suppressed because it is too large Load Diff

View File

@@ -5,11 +5,9 @@
%\special{!/@scaleunit 1 def}
\parskip=10pt
\parindent=0pt
\title{User Manual for wxWindows Dialog Editor Version 1.7}
\winhelponly{\author{by Julian Smart, A.I. Applications Institute, University of Edinburgh\\}}
\winhelpignore{\author{Julian Smart\\Artificial Intelligence Applications Institute\\
University of Edinburgh\\EH1 1HN}
\date{March 1997}
\title{User Manual for wxWindows Dialog Editor Version 2.0}
\winhelponly{\author{by Julian Smart, Anthemion Software}
\date{December 1998}
}
\makeindex
\begin{document}
@@ -26,36 +24,20 @@ University of Edinburgh\\EH1 1HN}
\setfooter{\thepage}{}{}{}{}{\thepage}%
\begin{center}
Copyright (c) 1996 Artificial Intelligence Applications Institute,
The University of Edinburgh\\
Copyright (c) 1998 Julian Smart et al
\end{center}
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose is hereby granted without fee, provided that the
above copyright notice, author statement and this permission notice appear in
all copies of this software and related documentation.
THE SOFTWARE IS PROVIDED ``AS-IS'' AND WITHOUT WARRANTY OF ANY KIND, EXPRESS,
IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
IN NO EVENT SHALL THE ARTIFICIAL INTELLIGENCE APPLICATIONS INSTITUTE OR THE
UNIVERSITY OF EDINBURGH BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR
CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF
DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH
THE USE OR PERFORMANCE OF THIS SOFTWARE.
Please see the wxWindows licence for licensing details.
\input{body.tex}
\input{classes.tex}
\input{changes.tex}
\input{bugs.tex}
\input{tech.tex}
\newpage
\addcontentsline{toc}{chapter}{Index}
%\newpage
%
\addcontentsline{toc}{chapter}{Index}%
\printindex%
\setheader{{\it INDEX}}{}{}{}{}{{\it INDEX}}%
\setfooter{\thepage}{}{}{}{}{\thepage}%
\printindex
\end{document}

View File

@@ -17,12 +17,10 @@ BIN_OBJ=dialoged.o dlghndlr.o edlist.o edtree.o \
reseditr.o reswrite.o symbtabl.o winprop.o winstyle.o
# additional things needed to link
BIN_LINK= \
-lwx_prop_gtk
BIN_LINK=
# additional things needed to compile
ADD_COMPILE= \
-I../../../wxprop/src
ADD_COMPILE=
# include the definitions now
include ../../../../template.mak

View File

@@ -149,6 +149,20 @@ void wxResourceEditorDialogHandler::OnLeftClick(int x, int y, int keys)
return;
}
// Round down to take account of dialog units
wxItemResource* resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(handlerDialog);
if (resource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
{
wxPoint pt = handlerDialog->ConvertPixelsToDialog(wxPoint(x, y));
// Convert back so we've rounded down
pt = handlerDialog->ConvertDialogToPixels(pt);
pt = handlerDialog->ConvertPixelsToDialog(pt);
pt = handlerDialog->ConvertDialogToPixels(pt);
x = pt.x;
y = pt.y;
}
switch (wxResourceManager::GetCurrentResourceManager()->GetEditorControlList()->GetSelection())
{
case RESED_BUTTON:
@@ -1000,34 +1014,66 @@ void wxResourceEditorControlHandler::OnDragEnd(int x, int y, int WXUNUSED(keys),
height1 = (ypos + height) - y;
break;
}
handlerControl->SetSize(x1, y1, width1, height1);
// Also update the associated resource
// Update the associated resource
// We need to convert to dialog units if this is not a dialog or panel, but
// the parent resource specifies dialog units.
int resourceX = x1;
int resourceY = y1;
int resourceWidth = width1;
int resourceHeight = height1;
if (parentResource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
{
wxPoint pt = handlerControl->GetParent()->ConvertPixelsToDialog(wxPoint(x1, y1));
x1 = pt.x; y1 = pt.y;
wxSize sz = handlerControl->GetParent()->ConvertPixelsToDialog(wxSize(width1, height1));
width1 = sz.x; height1 = sz.y;
// Convert back so we've rounded down
sz = handlerControl->GetParent()->ConvertDialogToPixels(sz);
sz = handlerControl->GetParent()->ConvertPixelsToDialog(sz);
resourceWidth = sz.x; resourceHeight = sz.y;
sz = handlerControl->GetParent()->ConvertDialogToPixels(sz);
width1 = sz.x;
height1 = sz.y;
pt = handlerControl->GetParent()->ConvertDialogToPixels(pt);
pt = handlerControl->GetParent()->ConvertPixelsToDialog(pt);
resourceX = pt.x; resourceY = pt.y;
pt = handlerControl->GetParent()->ConvertDialogToPixels(pt);
x1 = pt.x;
y1 = pt.y;
}
resource->SetSize(x1, y1, width1, height1);
handlerControl->SetSize(x1, y1, width1, height1);
resource->SetSize(resourceX, resourceY, resourceWidth, resourceHeight);
}
else
{
// Correction 31/12/98. We need to round down the values to take into account
// the fact that several pixels map to the same dialog unit.
int newX = (int)(x - dragOffsetX);
int newY = (int)(y - dragOffsetY);
handlerControl->Move(newX, newY);
OldOnMove(newX, newY);
int resourceX = newX;
int resourceY = newY;
// Also update the associated resource
// Update the associated resource
if (parentResource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
{
wxPoint pt = handlerControl->GetParent()->ConvertPixelsToDialog(wxPoint(newX, newY));
newX = pt.x; newY = pt.y;
pt = handlerControl->GetParent()->ConvertDialogToPixels(pt);
pt = handlerControl->GetParent()->ConvertPixelsToDialog(pt);
resourceX = pt.x; resourceY = pt.y;
pt = handlerControl->GetParent()->ConvertDialogToPixels(pt);
// Having converted it several times, we know it'll map to dialog units exactly.
newX = pt.x;
newY = pt.y;
}
resource->SetSize(newX, newY, resource->GetWidth(), resource->GetHeight());
handlerControl->Move(newX, newY);
OldOnMove(newX, newY);
resource->SetSize(resourceX, resourceY, resource->GetWidth(), resource->GetHeight());
// Also move other selected items
wxNode *node = panel->GetChildren().First();
@@ -1044,18 +1090,28 @@ void wxResourceEditorControlHandler::OnDragEnd(int x, int y, int WXUNUSED(keys),
item->GetPosition(&x1, &y1);
int x2 = (int)(x1 + (x - dragOffsetX) - xpos);
int y2 = (int)(y1 + (y - dragOffsetY) - ypos);
// Update the associated resource
resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(item);
if (parentResource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
{
wxPoint pt = item->GetParent()->ConvertPixelsToDialog(wxPoint(x2, y2));
pt = item->GetParent()->ConvertDialogToPixels(pt);
pt = item->GetParent()->ConvertPixelsToDialog(pt);
resourceX = pt.x; resourceY = pt.y;
pt = handlerControl->GetParent()->ConvertDialogToPixels(pt);
// Having converted it several times, we know it'll map to dialog units exactly
x2 = pt.x;
y2 = pt.y;
}
item->Move(x2, y2);
((wxResourceEditorControlHandler *)item->GetEventHandler())->OldOnMove(x2, y2);
((wxResourceEditorControlHandler *)item->GetEventHandler())->DrawSelectionHandles(dc);
// Also update the associated resource
resource = wxResourceManager::GetCurrentResourceManager()->FindResourceForWindow(item);
if (parentResource->GetResourceStyle() & wxRESOURCE_DIALOG_UNITS)
{
wxPoint pt = item->GetParent()->ConvertPixelsToDialog(wxPoint(newX, newY));
x2 = pt.x; y2 = pt.y;
}
resource->SetSize(x2, y2, resource->GetWidth(), resource->GetHeight());
resource->SetSize(resourceX, resourceY, resource->GetWidth(), resource->GetHeight());
}
}

View File

@@ -16,13 +16,9 @@ WXDIR = $(WXWIN)
WXLIBDIR = $(WXDIR)\lib
WXINC = $(WXDIR)\include\msw
WXBASESRC = $(WXDIR)\src\base
WXBASEINC = $(WXDIR)\include\base
WXLIB = $(WXLIBDIR)\wx32.lib
WXPROPDIR = $(WXDIR)\utils\wxprop
WXPROPINC = $(WXPROPDIR)\src
WXPROPLIB = $(WXDIR)\lib\wxprop.lib
LIBS=$(WXLIB) $(WXPROPLIB) cw32 import32 ole2w32
LIBS=$(WXLIB) cw32 import32 ole2w32
INCFILE = includes.cfg
TARGET=dialoged
@@ -40,7 +36,7 @@ CPPFLAGS=$(DEBUG_FLAGS) $(OPT) @$(CFG) @$(INCFILE)
OBJECTS = dialoged.obj reseditr.obj dlghndlr.obj reswrite.obj winprop.obj edtree.obj edlist.obj symbtable.obj winstyle.obj
$(TARGET).exe: wxprop $(INCFILE) $(OBJECTS) $(TARGET).def $(TARGET).res
$(TARGET).exe: $(INCFILE) $(OBJECTS) $(TARGET).def $(TARGET).res
tlink32 $(LINKFLAGS) @&&!
c0w32.obj $(OBJECTS)
$(TARGET)
@@ -58,11 +54,6 @@ $(INCFILE): $(MAKEFILENAME)
$(TARGET).res : $(TARGET).rc $(WXDIR)\include\msw\wx.rc
brc32 -r /i$(BCCDIR)\include /i$(WXDIR)\include\msw /i$(WXDIR)\contrib\fafa $(TARGET)
wxprop:
cd $(WXPROPDIR)\src
make -f makefile.b32
cd $(WXDIR)\utils\dialoged\src
clean:
-erase *.obj *.exe *.res *.map *.rws

View File

@@ -1,87 +1,20 @@
#
# File: makefile.bcc
# Author: Julian Smart
# Created: 1993
# Created: 1998
# Updated:
# Copyright: (c) 1993, AIAI, University of Edinburgh
#
# "%W% %G%"
#
# Makefile : Builds Dialog Editor (Borland, 16-bit)
!if "$(BCCDIR)" == ""
!error You must define the BCCDIR variable in autoexec.bat, e.g. BCCDIR=d:\bc4
!endif
# Builds a BC++ 16-bit Dialog Editor
!if "$(WXWIN)" == ""
!error You must define the WXWIN variable in autoexec.bat, e.g. WXWIN=c:\wx
!endif
!ifndef FINAL
FINAL=0
!endif
WXDIR = $(WXWIN)
!include $(WXDIR)\src\makebcc.env
THISDIR = $(WXDIR)\utils\dialoged\src
WXLIB = $(WXDIR)\lib\wx.lib
WXPROPDIR = $(WXDIR)\utils\wxprop
WXPROPINC = $(WXPROPDIR)\src
WXPROPLIB = $(WXPROPDIR)\lib\wxprop.lib
TARGET=dialoged
OBJECTS=dialoged.obj reseditr.obj dlghndlr.obj reswrite.obj\
winprop.obj edtree.obj edlist.obj symbtabl.obj winstyle.obj
LIBS=$(WXLIB) $(WXPROPLIB) mathwl cwl import
INC=-I$(WXDIR)\include\base -I$(WXDIR)\include\msw
CFG=$(WXDIR)\src\wxwin.cfg
INCFILE = includes.cfg
!include $(WXDIR)\src\makeprog.bcc
!if "$(FINAL)" == "0"
LINKFLAGS=/v/Vt /Twe /L$(WXDIR)\lib;$(BCCDIR)\lib
OPT = -Od
DEBUG_FLAGS= -v
!else
LINKFLAGS=/Twe /L$(WXDIR)\lib;$(BCCDIR)\lib
OPT = -O2
DEBUG_FLAGS =
!endif
CPPFLAGS=$(DEBUG_FLAGS) $(OPT) @$(CFG) @$(INCFILE)
OBJECTS = wx_resed.obj wx_rdlg.obj wx_reswr.obj wx_repal.obj wx_rprop.obj dialoged.obj
all: dialoged.exe
dialoged.exe: $(INCFILE) $(WXLIB) $(OBJECTS) dialoged.def dialoged.res
tlink $(LINKFLAGS) @&&!
c0wl.obj $(OBJECTS)
dialoged
nul
$(LIBS) $(WXPROPLIB)
dialoged.def
!
rc -30 -K dialoged.res
.$(SRCSUFF).obj:
bcc $(CPPFLAGS) -c {$< }
dialoged.obj: dialoged.$(SRCSUFF) wx_resed.h
wx_resed.obj: wx_resed.$(SRCSUFF) wx_resed.h wx_rprop.h
wx_resed.obj: wx_rdlg.$(SRCSUFF) wx_resed.h wx_rprop.h
wx_rprop.obj: wx_rprop.$(SRCSUFF) wx_resed.h wx_rprop.h
wx_reswr.obj: wx_reswr.$(SRCSUFF) wx_resed.h
wx_repal.obj: wx_repal.$(SRCSUFF) wx_repal.h
dialoged.res : dialoged.rc $(WXDIR)\include\msw\wx.rc
rc -r /i$(BCCDIR)\include /i$(WXDIR)\include\msw /i$(WXDIR)\contrib\fafa dialoged
$(INCFILE): $(MAKEFILENAME)
copy &&!
-I..\..\wxprop\src
! $(INCFILE)
clean:
-erase *.obj
-erase *.exe
-erase *.res
-erase *.map
-erase *.rws

View File

@@ -20,23 +20,8 @@ WXLIB = $(WXDIR)\lib\wx.lib
DOCDIR = $(WXDIR)\utils\dialoged\docs
PROPDIR = $(WXDIR)\utils\wxprop
PROPINC = $(PROPDIR)\src
PROPLIB = $(PROPDIR)\lib\wxprop.lib
TREEDIR = $(WXDIR)\utils\wxtree
TREEINC = $(TREEDIR)\src
TREELIB = $(TREEDIR)\lib\wxtree.lib
DIBDIR = $(WXDIR)\utils\dib
DIBLIB = $(DIBDIR)\dib.lib
DIBINC = $(DIBDIR)
RCDIR = $(WXDIR)\utils\rcparser
RCLIB = $(RCDIR)\lib\rcparser.lib
RCINC = $(RCDIR)\src
LIBS=$(WXLIB) $(PROPLIB) oldnames libw llibcew commdlg shell ddeml
LIBS=$(WXLIB) oldnames libw llibcew commdlg shell ddeml
INC=/I$(WXDIR)\include\base /I$(WXDIR)\include\msw /I$(PROPINC)
!ifndef FINAL

View File

@@ -14,10 +14,6 @@
# Set WXDIR for your system
WXDIR = $(WXWIN)
THISDIR = $(WXDIR)\utils\dialoged\src
PROPDIR = $(WXDIR)\utils\wxprop
PROPLIB=$(PROPDIR)\lib\wxprop.lib
EXTRALIBS=$(PROPDIR)\lib\wxprop.lib
EXTRAINC=/I$(PROPDIR)\src
DOCDIR=$(WXDIR)\docs
LOCALDOCDIR=$(WXDIR)\utils\dialoged\docs
@@ -28,7 +24,7 @@ PROGRAM=dialoged
OBJECTS = dialoged.obj reseditr.obj dlghndlr.obj reswrite.obj\
winprop.obj edtree.obj edlist.obj symbtabl.obj winstyle.obj
all: wxprop dialoged.exe
all: dialoged.exe
wx:
cd $(WXDIR)\src\msw
@@ -40,7 +36,7 @@ wxclean:
nmake -f makefile.nt clean
cd $(THISDIR)
$(PROGRAM).exe: $(DUMMYOBJ) $(WXLIB) $(OBJECTS) $(PROPLIB) $(PROGRAM).res
$(PROGRAM).exe: $(DUMMYOBJ) $(WXLIB) $(OBJECTS) $(PROGRAM).res
$(link) @<<
-out:$(PROGRAM).exe
$(LINKFLAGS)
@@ -96,16 +92,6 @@ $(CPPFLAGS) /c /Tp $*.$(SRCSUFF)
$(PROGRAM).res : $(PROGRAM).rc $(WXDIR)\include\wx\msw\wx.rc
$(rc) -r /i$(WXDIR)\include -fo$@ $(PROGRAM).rc
wxprop:
cd $(PROPDIR)\src
nmake -f makefile.nt FINAL=$(FINAL)
cd $(THISDIR)
clean_wxprop:
cd $(PROPDIR)\src
nmake -f makefile.nt clean
cd $(THISDIR)
clean:
-erase *.obj
-erase *.sbr

View File

@@ -1,123 +1,18 @@
#
# File: makefile.unx
# Author: Julian Smart
# Created: 1993
# Created: 1998
# Updated:
# Copyright: (c) 1993, AIAI, University of Edinburgh
# Copyright: (c) 1998 Julian Smart
#
# "%W% %G%"
#
# Makefile for dialoged example (UNIX).
# Makefile for Dialog Editor (Unix)
WXDIR = ../../..
PROGRAM=dialoged
# All common UNIX compiler flags and options are now in
# this central makefile.
include $(WXDIR)/src/make.env
OBJECTS = dialoged.o reseditr.o dlghndlr.o reswrite.o\
winprop.o edtree.o edlist.o symbtabl.o winstyle.o
WXPROPDIR = $(WXDIR)/utils/wxprop
WXPROPINC = $(WXDIR)/utils/wxprop/src
WXPROPLIB = $(WXDIR)/utils/wxprop/lib
include ../../../src/makeprog.env
DIALOGEDDIR = $(WXDIR)/utils/dialoged
OBJECTS = $(OBJDIR)/dialoged.o $(OBJDIR)/wx_repal.o $(OBJDIR)/wx_resed.o $(OBJDIR)/wx_rdlg.o $(OBJDIR)/wx_reswr.o $(OBJDIR)/wx_rprop.o
INC = $(COMPPATHS) -I$(WXDIR)/include/x -I$(WXDIR)/include/base -I$(WXPROPINC)
XVIEWLDLIBS = -lwxprop_ol -lwx_ol -lxview -lolgx -lX11 -lm $(COMPLIBS)
MOTIFLDLIBS = -lwxprop_motif -lwx_motif -lXm -lXt -lX11 -lm $(COMPLIBS)
HPLDLIBS = -lwxprop_hp -lwx_hp -lXm -lXt -lX11 -lm $(HPCOMPLIBS)
# Default
LDLIBS=$(XVIEWLDLIBS)
CPPFLAGS = $(XINCLUDE) $(INC) $(OPTIONS) $(GUI) -DDEBUG='$(DEBUG)' $(DEBUGFLAGS) $(WARN) $(OPT)
LDFLAGS = $(XLIB) -L$(WXDIR)/lib -L$(WXPROPLIB)
.SUFFIXES:
all: $(OBJDIR) dialoged$(GUISUFFIX)
wx_ol:
cd $(WXDIR)/src/x; $(MAKE) -f makefile.unx xview
wx_motif:
cd $(WXDIR)/src/x; $(MAKE) -f makefile.unx motif
motif:
$(MAKE) -f makefile.unx dialoged_motif GUISUFFIX=_motif GUI=-Dwx_motif GUISUFFIX=_motif OPT='$(OPT)' LDLIBS='$(MOTIFLDLIBS)'\
OPTIONS='$(OPTIONS)' DEBUG='$(DEBUG)' DEBUGFLAGS='$(DEBUGFLAGS)' WARN='$(WARN)' XLIB='$(XLIB)' XINCLUDE='$(XINCLUDE)' XVIEW_LINK=
xview:
$(MAKE) -f makefile.unx dialoged_ol GUI=-Dwx_xview GUISUFFIX=_ol CC=$(CC) OPTIONS='$(OPTIONS)'\
DEBUG='$(DEBUG)' DEBUGFLAGS='$(DEBUGFLAGS)' WARN='$(WARN)' XLIB='$(XLIB)' XINCLUDE='$(XINCLUDE)'
hp:
$(MAKE) -f makefile.unx GUI=-Dwx_motif GUISUFFIX=_hp CC=CC DEBUG='$(DEBUG)' DEBUGFLAGS='$(DEBUGFLAGS)' WARN='-w' \
XINCLUDE='$(HPXINCLUDE)' XLIB='$(HPXLIB)' XVIEW_LINK='' LDLIBS='$(HPLDLIBS)'
$(OBJDIR):
mkdir $(OBJDIR)
dialoged$(GUISUFFIX): $(OBJECTS) $(WXLIB)
$(CC) $(LDFLAGS) -o dialoged$(GUISUFFIX) $(OBJECTS) $(XVIEW_LINK) $(LDLIBS)
$(OBJDIR)/dialoged.o: dialoged.$(SRCSUFF) dialoged.h
$(CC) -c $(CPPFLAGS) -o $@ dialoged.$(SRCSUFF)
$(OBJDIR)/wx_rprop.o: wx_rprop.$(SRCSUFF)
$(CC) -c $(CPPFLAGS) -o $@ wx_rprop.$(SRCSUFF)
$(OBJDIR)/wx_resed.o: wx_resed.$(SRCSUFF) wx_resed.h
$(CC) -c $(CPPFLAGS) -o $@ wx_resed.$(SRCSUFF)
$(OBJDIR)/wx_rdlg.o: wx_rdlg.$(SRCSUFF) wx_resed.h
$(CC) -c $(CPPFLAGS) -o $@ wx_rdlg.$(SRCSUFF)
$(OBJDIR)/wx_repal.o: wx_repal.$(SRCSUFF) wx_repal.h
$(CC) -c $(CPPFLAGS) -o $@ wx_repal.$(SRCSUFF)
$(OBJDIR)/wx_reswr.o: wx_reswr.$(SRCSUFF) wx_resed.h
$(CC) -c $(CPPFLAGS) -o $@ wx_reswr.$(SRCSUFF)
wxprop_motif:
cd $(WXPROPDIR)/src; $(MAKE) -f makefile.unx motif OPT='$(OPT)'
wxprop_ol:
cd $(WXPROPDIR)/src
$(MAKE) -f makefile.unx xview OPT='$(OPT)'
clean_motif:
$(MAKE) -f makefile.unx GUISUFFIX=_motif cleanany
clean_ol:
$(MAKE) -f makefile.unx GUISUFFIX=_ol cleanany
clean_hp:
$(MAKE) -f makefile.unx GUISUFFIX=_hp cleanany
cleanany:
rm -f $(OBJECTS) $(TESTOBJECTS) test$(GUISUFFIX) dialoged$(GUISUFFIX) core
HTMLDIR=/home/hardy/html/wx/manuals
docs: ps xlp
ps: $(DIALOGEDDIR)/docs/dialoged.ps
xlp: $(DIALOGEDDIR)/docs/dialoged.xlp
html: $(HTMLDIR)/dialoged/dialoged_contents.html
$(DIALOGEDDIR)/docs/dialoged.xlp: $(DIALOGEDDIR)/docs/dialoged.tex $(DIALOGEDDIR)/docs/classes.tex $(DIALOGEDDIR)/docs/body.tex $(DIALOGEDDIR)/docs/tech.tex
cd ../docs; tex2rtf dialoged.tex tmp.xlp -xlp -twice
sed -e "s/WXHELPCONTENTS/wxChart Manual/g" < $(DIALOGEDDIR)/docs/tmp.xlp > $(DIALOGEDDIR)/docs/dialoged.xlp
/bin/rm -f $(DIALOGEDDIR)/docs/tmp.xlp
$(HTMLDIR)/dialoged/dialoged_contents.html: $(DIALOGEDDIR)/docs/dialoged.tex $(DIALOGEDDIR)/docs/body.tex $(DIALOGEDDIR)/docs/tech.tex
cd ../docs; tex2rtf dialoged.tex $(HTMLDIR)/dialoged/dialoged.html -html -twice
$(DIALOGEDDIR)/docs/dialoged.dvi: $(DIALOGEDDIR)/docs/dialoged.tex $(DIALOGEDDIR)/docs/classes.tex
cd $(DIALOGEDDIR)/docs; latex dialoged; latex dialoged; makeindex dialoged; latex dialoged; latex dialoged
# makeindex dialoged; bibtex dialoged; latex dialoged; latex dialoged
$(DIALOGEDDIR)/docs/dialoged.ps: $(DIALOGEDDIR)/docs/dialoged.dvi
cd $(DIALOGEDDIR)/docs; dvips -f -r < dialoged.dvi > dialoged.ps

View File

@@ -1,62 +1,15 @@
# Dialog Editor makefile for Watcom
#
# Makefile for WATCOM
#
# Created by D.Chubraev, chubraev@iem.ee.ethz.ch
# 8 Nov 1994
#
WXDIR = ..\..\..
WXDIR = $(%WXWIN)
# EXTRACPPFLAGS = $(CLIPSFLAGS)
PROGRAM = dialoged
OBJECTS = dialoged.obj reseditr.obj dlghndlr.obj reswrite.obj winprop.obj edtree.obj edlist.obj symbtabl.obj winstyle.obj
!include $(WXDIR)\src\makewat.env
WXPROPDIR = $(WXDIR)\utils\wxprop
WXPROPLIB = $(WXPROPDIR)\lib\wxprop.lib
WXPROPINC = $(WXPROPDIR)\src
THISDIR = $(WXDIR)\utils\dialoged\src
NAME = dialoged
LNK = $(name).lnk
IFLAGS = -i=$(WXINC) -i=$(WXBASEINC) -i=$(WXPROPINC)
PROGOBJECTS = dialoged.obj wx_resed.obj wx_rdlg.obj wx_reswr.obj wx_repal.obj wx_rprop.obj
all: wx wxprop erasepch $(PROGOBJECTS) dialoged.exe
wx: .SYMBOLIC
cd $(WXDIR)\src\msw
wmake -f makefile.wat all
cd $(THISDIR)
wxprop: .SYMBOLIC
cd $(WXPROPDIR)\src
wmake -f makefile.wat all
cd $(THISDIR)
$(name).exe : $(PROGOBJECTS) $(name).res $(LNK) $(WXDIR)\lib\wx$(LEVEL).lib $(WXPROPLIB)
wlink @$(LNK)
$(BINDCOMMAND) $(name).res
$(name).res : $(name).rc $(WXDIR)\include\msw\wx.rc
$(RC) $(RESFLAGS1) /i$(WXDIR)\include\msw /i$(WXDIR)\contrib\fafa $(name).rc
$(LNK) : makefile.wat
%create $(LNK)
@%append $(LNK) $(DEBUGINFO)
@%append $(LNK) system $(LINKOPTION)
@%append $(LNK) $(MINDATA)
@%append $(LNK) $(MAXDATA)
@%append $(LNK) $(STACK)
@%append $(LNK) name $(name)
@%append $(LNK) file $(WXDIR)\lib\wx$(LEVEL).lib
@%append $(LNK) file $(WXPROPLIB)
@for %i in ($(EXTRALIBS)) do @%append $(LNK) file %i
@for %i in ($(PROGOBJECTS)) do @%append $(LNK) file %i
cleanutils: .SYMBOLIC
cd $(WXPROPDIR)\src
wmake -f makefile.wat clean
cd $(THISDIR)
clean: .SYMBOLIC
-erase *.obj *.bak *.err *.pch *.lbc *.res
!include $(WXDIR)\src\makeprog.wat

View File

@@ -1,3 +0,0 @@
Linux
linux-gnu
linux