Compare commits
1 Commits
b4_mousewh
...
wxPython-2
Author | SHA1 | Date | |
---|---|---|---|
|
c6440f0a90 |
@@ -1,347 +0,0 @@
|
||||
\section{\class{wxMouseEvent}}\label{wxmouseevent}
|
||||
|
||||
This event class contains information about mouse events.
|
||||
See \helpref{wxWindow::OnMouseEvent}{wxwindowonmouseevent}.
|
||||
|
||||
{\bf NB: } Note that under Windows mouse enter and leave events are not natively supported
|
||||
by the system but are generated by wxWindows itself. This has several
|
||||
drawbacks: the LEAVE\_WINDOW event might be received some time after the mouse
|
||||
left the window and the state variables for it may have changed during this
|
||||
time.
|
||||
|
||||
{\bf NB: } Note the difference between methods like
|
||||
\helpref{LeftDown}{wxmouseeventleftdown} and
|
||||
\helpref{LeftIsDown}{wxmouseeventleftisdown}: the formet returns {\tt TRUE}
|
||||
when the event corresponds to the left mouse button click while the latter
|
||||
returns {\tt TRUE} if the left mouse button is currently being pressed. For
|
||||
example, when the user is dragging the mouse you can use
|
||||
\helpref{LeftIsDown}{wxmouseeventleftisdown} to test
|
||||
whether the left mouse button is (still) depressed. Also, by convention, if
|
||||
\helpref{LeftDown}{wxmouseeventleftdown} returns {\tt TRUE},
|
||||
\helpref{LeftIsDown}{wxmouseeventleftisdown} will also return {\tt TRUE} in
|
||||
wxWindows whatever the underlying GUI behaviour is (which is
|
||||
platform-dependent). The same applies, of course, to other mouse buttons as
|
||||
well.
|
||||
|
||||
\wxheading{Derived from}
|
||||
|
||||
\helpref{wxEvent}{wxevent}
|
||||
|
||||
\wxheading{Include files}
|
||||
|
||||
<wx/event.h>
|
||||
|
||||
\wxheading{Event table macros}
|
||||
|
||||
To process a mouse event, use these event handler macros to direct input to member
|
||||
functions that take a wxMouseEvent argument.
|
||||
|
||||
\twocolwidtha{7cm}
|
||||
\begin{twocollist}\itemsep=0pt
|
||||
\twocolitem{{\bf EVT\_LEFT\_DOWN(func)}}{Process a wxEVT\_LEFT\_DOWN event.}
|
||||
\twocolitem{{\bf EVT\_LEFT\_UP(func)}}{Process a wxEVT\_LEFT\_UP event.}
|
||||
\twocolitem{{\bf EVT\_LEFT\_DCLICK(func)}}{Process a wxEVT\_LEFT\_DCLICK event.}
|
||||
\twocolitem{{\bf EVT\_MIDDLE\_DOWN(func)}}{Process a wxEVT\_MIDDLE\_DOWN event.}
|
||||
\twocolitem{{\bf EVT\_MIDDLE\_UP(func)}}{Process a wxEVT\_MIDDLE\_UP event.}
|
||||
\twocolitem{{\bf EVT\_MIDDLE\_DCLICK(func)}}{Process a wxEVT\_MIDDLE\_DCLICK event.}
|
||||
\twocolitem{{\bf EVT\_RIGHT\_DOWN(func)}}{Process a wxEVT\_RIGHT\_DOWN event.}
|
||||
\twocolitem{{\bf EVT\_RIGHT\_UP(func)}}{Process a wxEVT\_RIGHT\_UP event.}
|
||||
\twocolitem{{\bf EVT\_RIGHT\_DCLICK(func)}}{Process a wxEVT\_RIGHT\_DCLICK event.}
|
||||
\twocolitem{{\bf EVT\_MOTION(func)}}{Process a wxEVT\_MOTION event.}
|
||||
\twocolitem{{\bf EVT\_ENTER\_WINDOW(func)}}{Process a wxEVT\_ENTER\_WINDOW event.}
|
||||
\twocolitem{{\bf EVT\_LEAVE\_WINDOW(func)}}{Process a wxEVT\_LEAVE\_WINDOW event.}
|
||||
\twocolitem{{\bf EVT\_MOUSE\_EVENTS(func)}}{Process all mouse events.}
|
||||
\end{twocollist}%
|
||||
|
||||
\latexignore{\rtfignore{\wxheading{Members}}}
|
||||
|
||||
\membersection{wxMouseEvent::m\_altDown}
|
||||
|
||||
\member{bool}{m\_altDown}
|
||||
|
||||
TRUE if the Alt key is pressed down.
|
||||
|
||||
\membersection{wxMouseEvent::m\_controlDown}
|
||||
|
||||
\member{bool}{m\_controlDown}
|
||||
|
||||
TRUE if control key is pressed down.
|
||||
|
||||
\membersection{wxMouseEvent::m\_leftDown}
|
||||
|
||||
\member{bool}{m\_leftDown}
|
||||
|
||||
TRUE if the left mouse button is currently pressed down.
|
||||
|
||||
\membersection{wxMouseEvent::m\_middleDown}
|
||||
|
||||
\member{bool}{m\_middleDown}
|
||||
|
||||
TRUE if the middle mouse button is currently pressed down.
|
||||
|
||||
\membersection{wxMouseEvent::m\_rightDown}
|
||||
|
||||
\member{bool}{m\_rightDown}
|
||||
|
||||
TRUE if the right mouse button is currently pressed down.
|
||||
|
||||
\membersection{wxMouseEvent::m\_leftDown}
|
||||
|
||||
\member{bool}{m\_leftDown}
|
||||
|
||||
TRUE if the left mouse button is currently pressed down.
|
||||
|
||||
\membersection{wxMouseEvent::m\_metaDown}
|
||||
|
||||
\member{bool}{m\_metaDown}
|
||||
|
||||
TRUE if the Meta key is pressed down.
|
||||
|
||||
\membersection{wxMouseEvent::m\_shiftDown}
|
||||
|
||||
\member{bool}{m\_shiftDown}
|
||||
|
||||
TRUE if shift is pressed down.
|
||||
|
||||
\membersection{wxMouseEvent::m\_x}
|
||||
|
||||
\member{long}{m\_x}
|
||||
|
||||
X-coordinate of the event.
|
||||
|
||||
\membersection{wxMouseEvent::m\_y}
|
||||
|
||||
\member{long}{m\_y}
|
||||
|
||||
Y-coordinate of the event.
|
||||
|
||||
\membersection{wxMouseEvent::wxMouseEvent}
|
||||
|
||||
\func{}{wxMouseEvent}{\param{WXTYPE}{ mouseEventType = 0}, \param{int}{ id = 0}}
|
||||
|
||||
Constructor. Valid event types are:
|
||||
|
||||
\begin{itemize}
|
||||
\itemsep=0pt
|
||||
\item {\bf wxEVT\_ENTER\_WINDOW}
|
||||
\item {\bf wxEVT\_LEAVE\_WINDOW}
|
||||
\item {\bf wxEVT\_LEFT\_DOWN}
|
||||
\item {\bf wxEVT\_LEFT\_UP}
|
||||
\item {\bf wxEVT\_LEFT\_DCLICK}
|
||||
\item {\bf wxEVT\_MIDDLE\_DOWN}
|
||||
\item {\bf wxEVT\_MIDDLE\_UP}
|
||||
\item {\bf wxEVT\_MIDDLE\_DCLICK}
|
||||
\item {\bf wxEVT\_RIGHT\_DOWN}
|
||||
\item {\bf wxEVT\_RIGHT\_UP}
|
||||
\item {\bf wxEVT\_RIGHT\_DCLICK}
|
||||
\item {\bf wxEVT\_MOTION}
|
||||
\end{itemize}
|
||||
|
||||
\membersection{wxMouseEvent::AltDown}
|
||||
|
||||
\func{bool}{AltDown}{\void}
|
||||
|
||||
Returns TRUE if the Alt key was down at the time of the event.
|
||||
|
||||
\membersection{wxMouseEvent::Button}
|
||||
|
||||
\func{bool}{Button}{\param{int}{ button}}
|
||||
|
||||
Returns TRUE if the identified mouse button is changing state. Valid
|
||||
values of {\it button} are 1, 2 or 3 for left, middle and right
|
||||
buttons respectively.
|
||||
|
||||
Not all mice have middle buttons so a portable application should avoid
|
||||
this one.
|
||||
|
||||
\membersection{wxMouseEvent::ButtonDClick}\label{buttondclick}
|
||||
|
||||
\func{bool}{ButtonDClick}{\param{int}{ but = -1}}
|
||||
|
||||
If the argument is omitted, this returns TRUE if the event was a mouse
|
||||
double click event. Otherwise the argument specifies which double click event
|
||||
was generated (1, 2 or 3 for left, middle and right buttons respectively).
|
||||
|
||||
\membersection{wxMouseEvent::ButtonDown}
|
||||
|
||||
\func{bool}{ButtonDown}{\param{int}{ but = -1}}
|
||||
|
||||
If the argument is omitted, this returns TRUE if the event was a mouse
|
||||
button down event. Otherwise the argument specifies which button-down event
|
||||
was generated (1, 2 or 3 for left, middle and right buttons respectively).
|
||||
|
||||
\membersection{wxMouseEvent::ButtonUp}
|
||||
|
||||
\func{bool}{ButtonUp}{\param{int}{ but = -1}}
|
||||
|
||||
If the argument is omitted, this returns TRUE if the event was a mouse
|
||||
button up event. Otherwise the argument specifies which button-up event
|
||||
was generated (1, 2 or 3 for left, middle and right buttons respectively).
|
||||
|
||||
\membersection{wxMouseEvent::ControlDown}
|
||||
|
||||
\func{bool}{ControlDown}{\void}
|
||||
|
||||
Returns TRUE if the control key was down at the time of the event.
|
||||
|
||||
\membersection{wxMouseEvent::Dragging}
|
||||
|
||||
\func{bool}{Dragging}{\void}
|
||||
|
||||
Returns TRUE if this was a dragging event (motion while a button is depressed).
|
||||
|
||||
\membersection{wxMouseEvent::Entering}\label{wxmouseevententering}
|
||||
|
||||
\func{bool}{Entering}{\void}
|
||||
|
||||
Returns TRUE if the mouse was entering the window.
|
||||
|
||||
See also \helpref{wxMouseEvent::Leaving}{wxmouseeventleaving}.
|
||||
|
||||
\membersection{wxMouseEvent::GetPosition}\label{wxmouseeventgetposition}
|
||||
|
||||
\constfunc{wxPoint}{GetPosition}{\void}
|
||||
|
||||
\constfunc{void}{GetPosition}{\param{wxCoord*}{ x}, \param{wxCoord*}{ y}}
|
||||
|
||||
\constfunc{void}{GetPosition}{\param{long*}{ x}, \param{long*}{ y}}
|
||||
|
||||
Sets *x and *y to the position at which the event occurred.
|
||||
|
||||
Returns the physical mouse position in pixels.
|
||||
|
||||
\membersection{wxMouseEvent::GetLogicalPosition}\label{wxmouseeventgetlogicalposition}
|
||||
|
||||
\constfunc{wxPoint}{GetLogicalPosition}{\param{const wxDC\&}{ dc}}
|
||||
|
||||
Returns the logical mouse position in pixels (i.e. translated according to the
|
||||
translation set for the DC, which usually indicates that the window has been scrolled).
|
||||
|
||||
\membersection{wxMouseEvent::GetX}\label{wxmouseeventgetx}
|
||||
|
||||
\constfunc{long}{GetX}{\void}
|
||||
|
||||
Returns X coordinate of the physical mouse event position.
|
||||
|
||||
\membersection{wxMouseEvent::GetY}\label{wxmouseeventgety}
|
||||
|
||||
\func{long}{GetY}{\void}
|
||||
|
||||
Returns Y coordinate of the physical mouse event position.
|
||||
|
||||
\membersection{wxMouseEvent::IsButton}
|
||||
|
||||
\constfunc{bool}{IsButton}{\void}
|
||||
|
||||
Returns TRUE if the event was a mouse button event (not necessarily a button down event -
|
||||
that may be tested using {\it ButtonDown}).
|
||||
|
||||
\membersection{wxMouseEvent::Leaving}\label{wxmouseeventleaving}
|
||||
|
||||
\constfunc{bool}{Leaving}{\void}
|
||||
|
||||
Returns TRUE if the mouse was leaving the window.
|
||||
|
||||
See also \helpref{wxMouseEvent::Entering}{wxmouseevententering}.
|
||||
|
||||
\membersection{wxMouseEvent::LeftDClick}
|
||||
|
||||
\constfunc{bool}{LeftDClick}{\void}
|
||||
|
||||
Returns TRUE if the event was a left double click.
|
||||
|
||||
\membersection{wxMouseEvent::LeftDown}\label{wxmouseeventleftdown}
|
||||
|
||||
\constfunc{bool}{LeftDown}{\void}
|
||||
|
||||
Returns TRUE if the left mouse button changed to down.
|
||||
|
||||
\membersection{wxMouseEvent::LeftIsDown}\label{wxmouseeventleftisdown}
|
||||
|
||||
\constfunc{bool}{LeftIsDown}{\void}
|
||||
|
||||
Returns TRUE if the left mouse button is currently down, independent
|
||||
of the current event type.
|
||||
|
||||
Please notice that it is {\bf not} the same as
|
||||
\helpref{LeftDown}{wxmouseeventleftdown} which returns TRUE if the left mouse
|
||||
button was just pressed. Rather, it describes the state of the mouse button
|
||||
before the event happened.
|
||||
|
||||
This event is usually used in the mouse event handlers which process "move
|
||||
mouse" messages to determine whether the user is (still) dragging the mouse.
|
||||
|
||||
\membersection{wxMouseEvent::LeftUp}
|
||||
|
||||
\constfunc{bool}{LeftUp}{\void}
|
||||
|
||||
Returns TRUE if the left mouse button changed to up.
|
||||
|
||||
\membersection{wxMouseEvent::MetaDown}
|
||||
|
||||
\constfunc{bool}{MetaDown}{\void}
|
||||
|
||||
Returns TRUE if the Meta key was down at the time of the event.
|
||||
|
||||
\membersection{wxMouseEvent::MiddleDClick}
|
||||
|
||||
\constfunc{bool}{MiddleDClick}{\void}
|
||||
|
||||
Returns TRUE if the event was a middle double click.
|
||||
|
||||
\membersection{wxMouseEvent::MiddleDown}
|
||||
|
||||
\constfunc{bool}{MiddleDown}{\void}
|
||||
|
||||
Returns TRUE if the middle mouse button changed to down.
|
||||
|
||||
\membersection{wxMouseEvent::MiddleIsDown}\label{wxmouseeventmiddleisdown}
|
||||
|
||||
\constfunc{bool}{MiddleIsDown}{\void}
|
||||
|
||||
Returns TRUE if the middle mouse button is currently down, independent
|
||||
of the current event type.
|
||||
|
||||
\membersection{wxMouseEvent::MiddleUp}
|
||||
|
||||
\constfunc{bool}{MiddleUp}{\void}
|
||||
|
||||
Returns TRUE if the middle mouse button changed to up.
|
||||
|
||||
\membersection{wxMouseEvent::Moving}
|
||||
|
||||
\constfunc{bool}{Moving}{\void}
|
||||
|
||||
Returns TRUE if this was a motion event (no buttons depressed).
|
||||
|
||||
\membersection{wxMouseEvent::RightDClick}
|
||||
|
||||
\constfunc{bool}{RightDClick}{\void}
|
||||
|
||||
Returns TRUE if the event was a right double click.
|
||||
|
||||
\membersection{wxMouseEvent::RightDown}
|
||||
|
||||
\constfunc{bool}{RightDown}{\void}
|
||||
|
||||
Returns TRUE if the right mouse button changed to down.
|
||||
|
||||
\membersection{wxMouseEvent::RightIsDown}\label{wxmouseeventrightisdown}
|
||||
|
||||
\constfunc{bool}{RightIsDown}{\void}
|
||||
|
||||
Returns TRUE if the right mouse button is currently down, independent
|
||||
of the current event type.
|
||||
|
||||
\membersection{wxMouseEvent::RightUp}
|
||||
|
||||
\constfunc{bool}{RightUp}{\void}
|
||||
|
||||
Returns TRUE if the right mouse button changed to up.
|
||||
|
||||
\membersection{wxMouseEvent::ShiftDown}
|
||||
|
||||
\constfunc{bool}{ShiftDown}{\void}
|
||||
|
||||
Returns TRUE if the shift key was down at the time of the event.
|
||||
|
1936
include/wx/event.h
@@ -1,154 +0,0 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/generic/scrolwin.h
|
||||
// Purpose: wxScrolledWindow class
|
||||
// Author: Julian Smart
|
||||
// Modified by:
|
||||
// Created: 01/02/97
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Julian Smart and Markus Holzem
|
||||
// Licence: wxWindows license
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_GENERIC_SCROLLWIN_H_
|
||||
#define _WX_GENERIC_SCROLLWIN_H_
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma interface "scrolwin.h"
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// headers and constants
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#include "wx/window.h"
|
||||
#include "wx/panel.h"
|
||||
|
||||
WXDLLEXPORT_DATA(extern const wxChar*) wxPanelNameStr;
|
||||
|
||||
// default scrolled window style
|
||||
#ifndef wxScrolledWindowStyle
|
||||
#define wxScrolledWindowStyle (wxHSCROLL | wxVSCROLL)
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxGenericScrolledWindow
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxGenericScrolledWindow : public wxPanel
|
||||
{
|
||||
public:
|
||||
wxGenericScrolledWindow();
|
||||
wxGenericScrolledWindow(wxWindow *parent,
|
||||
wxWindowID id = -1,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = wxScrolledWindowStyle,
|
||||
const wxString& name = wxPanelNameStr)
|
||||
{
|
||||
Create(parent, id, pos, size, style, name);
|
||||
}
|
||||
|
||||
~wxGenericScrolledWindow();
|
||||
|
||||
bool Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = wxScrolledWindowStyle,
|
||||
const wxString& name = wxPanelNameStr);
|
||||
|
||||
// Normally the wxGenericScrolledWindow will scroll itself, but in
|
||||
// some rare occasions you might want it to scroll another
|
||||
// window (e.g. a child of it in order to scroll only a portion
|
||||
// the area between the scrollbars (spreadsheet: only cell area
|
||||
// will move).
|
||||
virtual void SetTargetWindow( wxWindow *target );
|
||||
virtual wxWindow *GetTargetWindow();
|
||||
|
||||
// Number of pixels per user unit (0 or -1 for no scrollbar)
|
||||
// Length of virtual canvas in user units
|
||||
// Length of page in user units
|
||||
virtual void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY,
|
||||
int noUnitsX, int noUnitsY,
|
||||
int xPos = 0, int yPos = 0,
|
||||
bool noRefresh = FALSE );
|
||||
|
||||
// Physically scroll the window
|
||||
virtual void Scroll(int x_pos, int y_pos);
|
||||
|
||||
#if WXWIN_COMPATIBILITY
|
||||
virtual void GetScrollUnitsPerPage(int *x_page, int *y_page) const;
|
||||
virtual void CalcUnscrolledPosition(int x, int y, float *xx, float *yy) const;
|
||||
#endif
|
||||
|
||||
int GetScrollPageSize(int orient) const;
|
||||
void SetScrollPageSize(int orient, int pageSize);
|
||||
|
||||
virtual void GetScrollPixelsPerUnit(int *x_unit, int *y_unit) const;
|
||||
|
||||
// Enable/disable Windows scrolling in either direction.
|
||||
// If TRUE, wxWindows scrolls the canvas and only a bit of
|
||||
// the canvas is invalidated; no Clear() is necessary.
|
||||
// If FALSE, the whole canvas is invalidated and a Clear() is
|
||||
// necessary. Disable for when the scroll increment is used
|
||||
// to actually scroll a non-constant distance
|
||||
virtual void EnableScrolling(bool x_scrolling, bool y_scrolling);
|
||||
|
||||
// Get the view start
|
||||
virtual void GetViewStart(int *x, int *y) const;
|
||||
// Compatibility
|
||||
void ViewStart(int *x, int *y) const
|
||||
{ GetViewStart( x, y ); }
|
||||
|
||||
// Actual size in pixels when scrolling is taken into account
|
||||
virtual void GetVirtualSize(int *x, int *y) const;
|
||||
|
||||
// Set the scale factor, used in PrepareDC
|
||||
void SetScale(double xs, double ys) { m_scaleX = xs; m_scaleY = ys; }
|
||||
double GetScaleX() const { return m_scaleX; }
|
||||
double GetScaleY() const { return m_scaleY; }
|
||||
|
||||
virtual void CalcScrolledPosition(int x, int y, int *xx, int *yy) const;
|
||||
virtual void CalcUnscrolledPosition(int x, int y, int *xx, int *yy) const;
|
||||
|
||||
// Adjust the scrollbars
|
||||
virtual void AdjustScrollbars(void);
|
||||
|
||||
// Override this function to draw the graphic (or just process EVT_PAINT)
|
||||
virtual void OnDraw(wxDC& WXUNUSED(dc)) {};
|
||||
|
||||
// Override this function if you don't want to have wxGenericScrolledWindow
|
||||
// automatically change the origin according to the scroll position.
|
||||
virtual void PrepareDC(wxDC& dc);
|
||||
|
||||
// implementation from now on
|
||||
void OnScroll(wxScrollWinEvent& event);
|
||||
void OnSize(wxSizeEvent& event);
|
||||
void OnPaint(wxPaintEvent& event);
|
||||
void OnChar(wxKeyEvent& event);
|
||||
|
||||
// Calculate scroll increment
|
||||
virtual int CalcScrollInc(wxScrollWinEvent& event);
|
||||
|
||||
protected:
|
||||
wxWindow *m_targetWindow;
|
||||
int m_xScrollPixelsPerLine;
|
||||
int m_yScrollPixelsPerLine;
|
||||
bool m_xScrollingEnabled;
|
||||
bool m_yScrollingEnabled;
|
||||
int m_xScrollPosition;
|
||||
int m_yScrollPosition;
|
||||
int m_xScrollLines;
|
||||
int m_yScrollLines;
|
||||
int m_xScrollLinesPerPage;
|
||||
int m_yScrollLinesPerPage;
|
||||
double m_scaleX;
|
||||
double m_scaleY;
|
||||
|
||||
private:
|
||||
DECLARE_EVENT_TABLE()
|
||||
DECLARE_ABSTRACT_CLASS(wxGenericScrolledWindow)
|
||||
};
|
||||
|
||||
#endif
|
||||
// _WX_GENERIC_SCROLLWIN_H_
|
@@ -1,936 +0,0 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/msw/setup.h
|
||||
// Purpose: Configuration for the library
|
||||
// Author: Julian Smart
|
||||
// Modified by:
|
||||
// Created: 01/02/97
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Julian Smart
|
||||
// Licence: wxWindows license
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_SETUP_H_
|
||||
#define _WX_SETUP_H_
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// global settings
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// define this to 0 when building wxBase library - this can also be done from
|
||||
// makefile/project file overriding the value here
|
||||
#ifndef wxUSE_GUI
|
||||
#define wxUSE_GUI 1
|
||||
#endif // wxUSE_GUI
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// compatibility settings
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// This setting determines the compatibility with 1.68 API:
|
||||
// Level 0: no backward compatibility, all new features
|
||||
// Level 1: some extra methods are defined for compatibility.
|
||||
//
|
||||
// Default is 0.
|
||||
//
|
||||
// Recommended setting: 0 (in fact the compatibility code is now very minimal
|
||||
// so there is little advantage to setting it to 1.
|
||||
#define WXWIN_COMPATIBILITY 0
|
||||
|
||||
// in wxMSW version 2.1.11 and earlier, wxIcon always derives from wxBitmap,
|
||||
// but this is very dangerous because you can mistakenly pass an icon instead
|
||||
// of a bitmap to a function taking "const wxBitmap&" - which will *not* work
|
||||
// because an icon is not a valid bitmap
|
||||
//
|
||||
// Starting from 2.1.12, you have the choice under this backwards compatible
|
||||
// behaviour (your code will still compile, but probably won't behave as
|
||||
// expected!) and not deriving wxIcon class from wxBitmap, but providing a
|
||||
// conversion ctor wxBitmap(const wxIcon&) instead.
|
||||
//
|
||||
// Recommended setting: 0
|
||||
#define wxICON_IS_BITMAP 0
|
||||
|
||||
// Define as 1 for font size to be backward compatible to 1.63 and earlier.
|
||||
// 1.64 and later define point sizes to be compatible with Windows.
|
||||
//
|
||||
// Default is 0
|
||||
//
|
||||
// Recommended setting: 0
|
||||
#define wxFONT_SIZE_COMPATIBILITY 0
|
||||
|
||||
// Set to 0 for accurate dialog units, else 1 to be as per 2.1.16 and before.
|
||||
// If migrating between versions, your dialogs may seem to shrink.
|
||||
//
|
||||
// Default is 1
|
||||
//
|
||||
// Recommended setting: 0 (the new calculations are more correct!)
|
||||
#define wxDIALOG_UNIT_COMPATIBILITY 1
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// debugging settings
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Generic comment about debugging settings: they are very useful if you don't
|
||||
// use any other memory leak detection tools such as Purify/BoundsChecker, but
|
||||
// are probably redundant otherwise. Also, Visual C++ CRT has the same features
|
||||
// as wxWindows memory debugging subsystem built in since version 5.0 and you
|
||||
// may prefer to use it instead of built in memory debugging code because it is
|
||||
// faster and more fool proof.
|
||||
//
|
||||
// Using VC++ CRT memory debugging is enabled by default in debug mode
|
||||
// (__WXDEBUG__) if wxUSE_GLOBAL_MEMORY_OPERATORS is *not* enabled (i.e. is 0)
|
||||
// and if __NO_VC_CRTDBG__ is not defined.
|
||||
|
||||
// If 1, enables wxDebugContext, for writing error messages to file, etc. If
|
||||
// __WXDEBUG__ is not defined, will still use normal memory operators. It's
|
||||
// recommended to set this to 1, since you may well need to output an error log
|
||||
// in a production version (or non-debugging beta).
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1 but see comment above
|
||||
#define wxUSE_DEBUG_CONTEXT 1
|
||||
|
||||
// If 1, enables debugging versions of wxObject::new and wxObject::delete *IF*
|
||||
// __WXDEBUG__ is also defined.
|
||||
//
|
||||
// WARNING: this code may not work with all architectures, especially if
|
||||
// alignment is an issue. This switch is currently ignored for mingw / cygwin
|
||||
//
|
||||
// Default is 1
|
||||
//
|
||||
// Recommended setting: 1 but see comment in the beginning of this section
|
||||
#define wxUSE_MEMORY_TRACING 1
|
||||
|
||||
// In debug mode, cause new and delete to be redefined globally.
|
||||
// If this causes problems (e.g. link errors), set this to 0.
|
||||
// This switch is currently ignored for mingw / cygwin
|
||||
//
|
||||
// Default is 1
|
||||
//
|
||||
// Recommended setting: 1 but see comment in the beginning of this section
|
||||
#define wxUSE_GLOBAL_MEMORY_OPERATORS 1
|
||||
|
||||
// In debug mode, causes new to be defined to be WXDEBUG_NEW (see object.h). If
|
||||
// this causes problems (e.g. link errors), set this to 0. You may need to set
|
||||
// this to 0 if using templates (at least for VC++). This switch is currently
|
||||
// ignored for mingw / cygwin
|
||||
//
|
||||
// Default is 1
|
||||
//
|
||||
// Recommended setting: 1 but see comment in the beginning of this section
|
||||
#define wxUSE_DEBUG_NEW_ALWAYS 1
|
||||
|
||||
// wxHandleFatalExceptions() may be used to catch the program faults at run
|
||||
// time and, instead of terminating the program with a usual GPF message box,
|
||||
// call the user-defined wxApp::OnFatalException() function. If you set
|
||||
// wxUSE_ON_FATAL_EXCEPTION to 0, wxHandleFatalExceptions() will not work.
|
||||
//
|
||||
// This setting is for Win32 only and can only be enabled if your compiler
|
||||
// supports Win32 structured exception handling (currently only VC++ does)
|
||||
//
|
||||
// Default is 1
|
||||
//
|
||||
// Recommended setting: 1 if your compiler supports it.
|
||||
#ifdef _MSC_VER
|
||||
#define wxUSE_ON_FATAL_EXCEPTION 1
|
||||
#else
|
||||
#define wxUSE_ON_FATAL_EXCEPTION 0
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Unicode support
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Set wxUSE_UNICODE to 1 to compile wxWindows in Unicode mode: wxChar will be
|
||||
// defined as wchar_t, wxString will use Unicode internally. If you set this
|
||||
// to 1, you must use wxT() macro for all literal strings in the program.
|
||||
//
|
||||
// Unicode is currently only fully supported under Windows NT/2000 (Windows 9x
|
||||
// doesn't support it and the programs compiled in Unicode mode will not run
|
||||
// under 9x).
|
||||
//
|
||||
// Default is 0
|
||||
//
|
||||
// Recommended setting: 0 (unless you only plan to use Windows NT/2000)
|
||||
#define wxUSE_UNICODE 0
|
||||
|
||||
// Setting wxUSE_WCHAR_T to 1 gives you some degree of Unicode support without
|
||||
// compiling the program in Unicode mode. More precisely, it will be possible
|
||||
// to construct wxString from a wide (Unicode) string and convert any wxString
|
||||
// to Unicode.
|
||||
//
|
||||
// Default is 1
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_WCHAR_T 1
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// global features
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Support for message/error logging. This includes wxLogXXX() functions and
|
||||
// wxLog and derived classes. Don't set this to 0 unless you really know what
|
||||
// you are doing.
|
||||
//
|
||||
// Default is 1
|
||||
//
|
||||
// Recommended setting: 1 (always)
|
||||
#define wxUSE_LOG 1
|
||||
|
||||
// Support for multithreaded applications: if 1, compile in thread classes
|
||||
// (thread.h) and make the library a bit more thread safe. Although thread
|
||||
// support is quite stable by now, you may still consider recompiling the
|
||||
// library without it if you have no use for it - this will result in a
|
||||
// somewhat smaller and faster operation.
|
||||
//
|
||||
// This is ignored under Win16, threads are only supported under Win32.
|
||||
//
|
||||
// Default is 1
|
||||
//
|
||||
// Recommended setting: 0 unless you do plan to develop MT applications
|
||||
#define wxUSE_THREADS 1
|
||||
|
||||
// If enabled (1), compiles wxWindows streams classes
|
||||
#define wxUSE_STREAMS 1
|
||||
|
||||
// Use standard C++ streams if 1. If 0, use wxWin streams implementation.
|
||||
#define wxUSE_STD_IOSTREAM 0
|
||||
|
||||
// Use serialization (requires utils/serialize)
|
||||
#define wxUSE_SERIAL 0
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// non GUI features selection
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Set wxUSE_LONGLONG to 1 to compile the wxLongLong class. This is a 64 bit
|
||||
// integer which is implemented in terms of native 64 bit integers if any or
|
||||
// uses emulation otherwise.
|
||||
//
|
||||
// This class is required by wxDateTime and so you should enable it if you want
|
||||
// to use wxDateTime. For most modern platforms, it will use the native 64 bit
|
||||
// integers in which case (almost) all of its functions are inline and it
|
||||
// almost does not take any space, so there should be no reason to switch it
|
||||
// off.
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_LONGLONG 1
|
||||
|
||||
// Set wxUSE_TIMEDATE to 1 to compile the wxDateTime and related classes which
|
||||
// allow to manipulate dates, times and time intervals. wxDateTime replaces the
|
||||
// old wxTime and wxDate classes which are still provided for backwards
|
||||
// compatibility (and implemented in terms of wxDateTime).
|
||||
//
|
||||
// Note that this class is relatively new and is still officially in alpha
|
||||
// stage because some features are not yet (fully) implemented. It is already
|
||||
// quite useful though and should only be disabled if you are aiming at
|
||||
// absolutely minimal version of the library.
|
||||
//
|
||||
// Requires: wxUSE_LONGLONG
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_TIMEDATE 1
|
||||
|
||||
// Setting wxUSE_CONFIG to 1 enables the use of wxConfig and related classes
|
||||
// which allow the application to store its settings in the persistent
|
||||
// storage. Setting this to 1 will also enable on-demand creation of the
|
||||
// global config object in wxApp.
|
||||
//
|
||||
// See also wxUSE_CONFIG_NATIVE below.
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_CONFIG 1
|
||||
|
||||
// If wxUSE_CONFIG is 1, you may choose to use either the native config
|
||||
// classes under Windows (using .INI files under Win16 and the registry under
|
||||
// Win32) or the portable text file format used by the config classes under
|
||||
// Unix.
|
||||
//
|
||||
// Default is 1 to use native classes. Note that you may still use
|
||||
// wxFileConfig even if you set this to 1 - just the config object created by
|
||||
// default for the applications needs will be a wxRegConfig or wxIniConfig and
|
||||
// not wxFileConfig.
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_CONFIG_NATIVE 1
|
||||
|
||||
// If wxUSE_DIALUP_MANAGER is 1, compile in wxDialUpManager class which allows
|
||||
// to connect/disconnect from the network and be notified whenever the dial-up
|
||||
// network connection is established/terminated. Requires wxUSE_DYNLIB_CLASS.
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_DIALUP_MANAGER 1
|
||||
|
||||
// Compile in wxLibrary class for run-time DLL loading and function calling.
|
||||
// Required by wxUSE_DIALUP_MANAGER.
|
||||
//
|
||||
// This setting is for Win32 only
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_DYNLIB_CLASS 1
|
||||
|
||||
// Set to 1 to use socket classes
|
||||
#define wxUSE_SOCKETS 1
|
||||
|
||||
// Set to 1 to enable virtual file systems (required by wxHTML)
|
||||
#define wxUSE_FILESYSTEM 1
|
||||
|
||||
// Set to 1 to enable virtual ZIP filesystem (requires wxUSE_FILESYSTEM)
|
||||
#define wxUSE_FS_ZIP 1
|
||||
|
||||
// Set to 1 to enable virtual Internet filesystem (requires wxUSE_FILESYSTEM)
|
||||
#define wxUSE_FS_INET 1
|
||||
|
||||
// Set to 1 to compile wxZipInput/OutputStream classes.
|
||||
#define wxUSE_ZIPSTREAM 1
|
||||
|
||||
// Set to 1 to compile wxZlibInput/OutputStream classes. Also required by
|
||||
// wxUSE_LIBPNG.
|
||||
#define wxUSE_ZLIB 1
|
||||
|
||||
// If enabled, the code written by Apple will be used to write, in a portable
|
||||
// way, float on the disk. See extended.c for the license which is different
|
||||
// from wxWindows one.
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1 unless you don't like the license terms (unlikely)
|
||||
#define wxUSE_APPLE_IEEE 1
|
||||
|
||||
// Use wxFile class.
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1 (highly recommended, required i18n code, wxConfig...)
|
||||
#define wxUSE_FILE 1
|
||||
|
||||
// use wxTextFile class: requires wxFile, required by wxFileConfig
|
||||
#define wxUSE_TEXTFILE 1
|
||||
|
||||
// i18n support: _() macro, wxLocale class. Requires wxTextFile.
|
||||
#define wxUSE_INTL 1
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Optional controls
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// wxToolBar related settings: if wxUSE_TOOLBAR is 0, don't compile any toolbar
|
||||
// classes at all. Otherwise, use the native toolbar class unless
|
||||
// wxUSE_TOOLBAR_NATIVE is 0. Additionally, the generic toolbar class which
|
||||
// supports some features which might not be supported by the native wxToolBar
|
||||
// class may be compiled in if wxUSE_TOOLBAR_SIMPLE is 1.
|
||||
//
|
||||
// Default is 1 for all settings.
|
||||
//
|
||||
// Recommended setting: 1 for wxUSE_TOOLBAR and wxUSE_TOOLBAR_NATIVE and 0 for
|
||||
// wxUSE_TOOLBAR_SIMPLE (the default is 1 mainly for backwards compatibility).
|
||||
#define wxUSE_TOOLBAR 1
|
||||
#define wxUSE_TOOLBAR_NATIVE 1
|
||||
#define wxUSE_TOOLBAR_SIMPLE 1
|
||||
|
||||
// wxNotebook is a control with several "tabs" located on one of its sides. It
|
||||
// may be used ot logically organise the data presented to the user instead of
|
||||
// putting everything in one huge dialog. It replaces wxTabControl and related
|
||||
// classes of wxWin 1.6x.
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_NOTEBOOK 1
|
||||
|
||||
// The corresponding controls will be compiled in if wxUSE_<CONTROL> is set to
|
||||
// 1 and not compiled into the library otherwise.
|
||||
//
|
||||
// Default is 1 for everything.
|
||||
//
|
||||
// Recommended setting: 1 (library might fail to compile for some combinations
|
||||
// of disabled controls)
|
||||
#define wxUSE_CARET 1
|
||||
#define wxUSE_CHECKBOX 1
|
||||
#define wxUSE_CHECKLISTBOX 1 // requires wxUSE_OWNER_DRAWN
|
||||
#define wxUSE_CHOICE 1
|
||||
#define wxUSE_COMBOBOX 1
|
||||
#define wxUSE_GAUGE 1
|
||||
#define wxUSE_LISTBOX 1
|
||||
#define wxUSE_RADIOBOX 1
|
||||
#define wxUSE_RADIOBTN 1
|
||||
#define wxUSE_SASH 1 // wxSashWindow
|
||||
#define wxUSE_SCROLLBAR 1
|
||||
#define wxUSE_SLIDER 1
|
||||
#define wxUSE_SPINBTN 1
|
||||
#define wxUSE_SPINCTRL 1
|
||||
#define wxUSE_STATLINE 1
|
||||
#define wxUSE_STATUSBAR 1
|
||||
#define wxUSE_TOGGLEBTN 1 // requires wxButton
|
||||
#define wxUSE_TOOLTIPS 1 // wxToolTip and wxWindow::SetToolTip()
|
||||
|
||||
// Two status bar implementations are available under Win32: the generic one
|
||||
// or the wrapper around native control. For native look and feel the native
|
||||
// version should be used.
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_NATIVE_STATUSBAR 1
|
||||
|
||||
// this setting is obsolete, value is ignored
|
||||
#define wxUSE_BUTTONBAR 1
|
||||
|
||||
// wxGrid class comes in two flavours: the original (pre wxWin 2.2) one and
|
||||
// the new, much imporved and enhanced version. The new version is backwards
|
||||
// compatible with the old one and should be used whenever possible, i.e. if
|
||||
// you set wxUSE_GRID to 1, set wxUSE_NEW_GRID to 1 too.
|
||||
//
|
||||
// Default is 1 for both options.
|
||||
//
|
||||
// Recommended setting: 1 for wxUSE_NEW_GRID, 0 if you have an old code using
|
||||
// wxGrid and 100% backwards compatibality (with all old wxGrid quirks) is
|
||||
// essential.
|
||||
//
|
||||
// WIN16/BC++ resets wxUSE_NEW_GRID to 0 because it exceeds the data limit.
|
||||
#define wxUSE_GRID 1
|
||||
#define wxUSE_NEW_GRID 1
|
||||
|
||||
// wxValidator class and related methods
|
||||
#define wxUSE_VALIDATORS 1
|
||||
|
||||
// wxAcceleratorTable/Entry classes and support for them in wxMenu(Bar)
|
||||
#define wxUSE_ACCEL 1
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// common dialogs
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Define 1 to use generic dialogs in Windows, even though they duplicate
|
||||
// native common dialog (e.g. wxColourDialog). This is mainly useful for
|
||||
// testing.
|
||||
//
|
||||
// Default is 0
|
||||
//
|
||||
// Recommended setting: 0
|
||||
#define wxUSE_GENERIC_DIALOGS_IN_MSW 0
|
||||
|
||||
// On rare occasions (e.g. using DJGPP) may want to omit common dialogs (e.g.
|
||||
// file selector, printer dialog). Switching this off also switches off the
|
||||
// printing architecture and interactive wxPrinterDC.
|
||||
//
|
||||
// Default is 1
|
||||
//
|
||||
// Recommended setting: 1 (unless it really doesn't work)
|
||||
#define wxUSE_COMMON_DIALOGS 1
|
||||
|
||||
// text entry dialog and wxGetTextFromUser function
|
||||
#define wxUSE_TEXTDLG 1
|
||||
|
||||
// progress dialog class for lengthy operations
|
||||
#define wxUSE_PROGRESSDLG 1
|
||||
|
||||
// wxBusyInfo displays window with message when app is busy. Works in same way
|
||||
// as wxBusyCursor
|
||||
#define wxUSE_BUSYINFO 1
|
||||
|
||||
// wxDirDlg class for getting a directory name from user
|
||||
#define wxUSE_DIRDLG 1
|
||||
|
||||
// support for startup tips (wxShowTip &c)
|
||||
#define wxUSE_STARTUP_TIPS 1
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Metafiles support
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Windows supports the graphics format known as metafile which is, though not
|
||||
// portable, is widely used under Windows and so is supported by wxWin (under
|
||||
// Windows only, of course). Win16 (Win3.1) used the so-called "Window
|
||||
// MetaFiles" or WMFs which were replaced with "Enhanced MetaFiles" or EMFs in
|
||||
// Win32 (Win9x, NT, 2000). Both of these are supported in wxWin and, by
|
||||
// default, WMFs will be used under Win16 and EMFs under Win32. This may be
|
||||
// changed by setting wxUSE_WIN_METAFILES_ALWAYS to 1 and/or setting
|
||||
// wxUSE_ENH_METAFILE to 0. You may also set wxUSE_METAFILE to 0 to not compile
|
||||
// in any metafile related classes at all.
|
||||
//
|
||||
// Default is 1 for wxUSE_ENH_METAFILE and 0 for wxUSE_WIN_METAFILES_ALWAYS.
|
||||
//
|
||||
// Recommended setting: default or 0 for everything for portable programs.
|
||||
#define wxUSE_METAFILE 1
|
||||
#define wxUSE_ENH_METAFILE 1
|
||||
#define wxUSE_WIN_METAFILES_ALWAYS 0
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Big GUI components
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Set to 0 to disable document/view architecture
|
||||
#define wxUSE_DOC_VIEW_ARCHITECTURE 1
|
||||
|
||||
// Set to 0 to disable MDI document/view architecture
|
||||
#define wxUSE_MDI_ARCHITECTURE 1
|
||||
|
||||
// Set to 0 to disable print/preview architecture code
|
||||
#define wxUSE_PRINTING_ARCHITECTURE 1
|
||||
|
||||
// wxHTML sublibrary allows to display HTML in wxWindow programs and much,
|
||||
// much more.
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1 (wxHTML is great!), set to 0 if you want compile a
|
||||
// smaller library.
|
||||
#define wxUSE_HTML 1
|
||||
|
||||
// wxPlot is a class to display functions plots in wxWindow.
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_PLOT 1
|
||||
|
||||
// OpenGL canvas
|
||||
#define wxUSE_GLCANVAS 0
|
||||
|
||||
// wxTreeLayout class
|
||||
#define wxUSE_TREELAYOUT 1
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// miscellaneous settings
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#define wxUSE_IPC 1
|
||||
// 0 for no interprocess comms
|
||||
#define wxUSE_HELP 1
|
||||
// 0 for no help facility
|
||||
#define wxUSE_MS_HTML_HELP 0
|
||||
// 0 for no MS HTML Help
|
||||
#define wxUSE_RESOURCES 1
|
||||
// 0 for no wxGetResource/wxWriteResource
|
||||
#define wxUSE_CONSTRAINTS 1
|
||||
// 0 for no window layout constraint system
|
||||
|
||||
#define wxUSE_CLIPBOARD 1
|
||||
// 0 for no clipboard functions
|
||||
|
||||
#define wxUSE_SPLINES 1
|
||||
// 0 for no splines
|
||||
|
||||
#define wxUSE_DRAG_AND_DROP 1
|
||||
// 0 for no drag and drop
|
||||
|
||||
#define wxUSE_XPM_IN_MSW 1
|
||||
// 0 for no XPM support in wxBitmap.
|
||||
// Default is 1, as XPM is now fully
|
||||
// supported this makes easier the issue
|
||||
// of portable icons and bitmaps.
|
||||
#define wxUSE_IMAGE_LOADING_IN_MSW 1
|
||||
// Use dynamic DIB loading/saving code in utils/dib under MSW.
|
||||
#define wxUSE_RESOURCE_LOADING_IN_MSW 1
|
||||
// Use dynamic icon/cursor loading/saving code
|
||||
// under MSW.
|
||||
#define wxUSE_WX_RESOURCES 1
|
||||
// Use .wxr resource mechanism (requires PrologIO library)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// postscript support settings
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Set to 1 for PostScript device context.
|
||||
#define wxUSE_POSTSCRIPT 0
|
||||
|
||||
// Set to 1 to use font metric files in GetTextExtent
|
||||
#define wxUSE_AFM_FOR_POSTSCRIPT 0
|
||||
|
||||
// Set to 0 to disable PostScript print/preview architecture code under Windows
|
||||
// (just use Windows printing).
|
||||
#define wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW 1
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// database classes
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Define 1 to use ODBC classes
|
||||
#define wxUSE_ODBC 0
|
||||
|
||||
// For backward compatibility reasons, this parameter now only controls the
|
||||
// default scrolling method used by cursors. This default behavior can be
|
||||
// overriden by setting the second param of wxDB::wxDbGetConnection() or
|
||||
// wxDb() constructor to indicate whether the connection (and any wxDbTable()s
|
||||
// that use the connection) should support forward only scrolling of cursors,
|
||||
// or both forward and backward support for backward scrolling cursors is
|
||||
// dependent on the data source as well as the ODBC driver being used.
|
||||
#define wxODBC_FWD_ONLY_CURSORS 1
|
||||
|
||||
// Default is 0. Set to 1 to use the deprecated classes, enum types, function,
|
||||
// member variables. With a setting of 1, full backward compatability with the
|
||||
// 2.0.x release is possible. It is STRONGLY recommended that this be set to 0,
|
||||
// as future development will be done only on the non-deprecated
|
||||
// functions/classes/member variables/etc.
|
||||
#define wxODBC_BACKWARD_COMPATABILITY 0
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// other compiler (mis)features
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Set this to 0 if your compiler can't cope with omission of prototype
|
||||
// parameters.
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1 (should never need to set this to 0)
|
||||
#define REMOVE_UNUSED_ARG 1
|
||||
|
||||
// VC++ 4.2 and above allows <iostream> and <iostream.h> but you can't mix
|
||||
// them. Set to 1 for <iostream.h>, 0 for <iostream>
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: whatever your compiler likes more
|
||||
#define wxUSE_IOSTREAMH 1
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// image format support
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// wxImage supports many different image formats which can be configured at
|
||||
// compile-time. BMP is always supported, others are optional and can be safely
|
||||
// disabled if you don't plan to use images in such format sometimes saving
|
||||
// substantial amount of code in the final library.
|
||||
//
|
||||
// Some formats require an extra library which is included in wxWin sources
|
||||
// which is mentioned if it is the case.
|
||||
|
||||
// Set to 1 for wxImage support (recommended).
|
||||
#define wxUSE_IMAGE 1
|
||||
|
||||
// Set to 1 for PNG format support (requires libpng). Also requires wxUSE_ZLIB.
|
||||
#define wxUSE_LIBPNG 1
|
||||
|
||||
// Set to 1 for JPEG format support (requires libjpeg)
|
||||
#define wxUSE_LIBJPEG 1
|
||||
|
||||
// Set to 1 for TIFF format support (requires libtiff)
|
||||
#define wxUSE_LIBTIFF 1
|
||||
|
||||
// Set to 1 for GIF format support
|
||||
#define wxUSE_GIF 1
|
||||
|
||||
// Set to 1 for PNM format support
|
||||
#define wxUSE_PNM 1
|
||||
|
||||
// Set to 1 for PCX format support
|
||||
#define wxUSE_PCX 1
|
||||
|
||||
// Set to 1 for XPM format support
|
||||
#define wxUSE_XPM 1
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Windows-only settings
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Set this to 1 if you want to use wxWindows and MFC in the same program. This
|
||||
// will override some other settings (see below)
|
||||
//
|
||||
// Default is 0.
|
||||
//
|
||||
// Recommended setting: 0 unless you really have to use MFC
|
||||
#define wxUSE_MFC 0
|
||||
|
||||
// Set this to 1 for generic OLE support: this is required for drag-and-drop,
|
||||
// clipboard, OLE Automation. Only set it to 0 if your compiler is very old and
|
||||
// can't compile/doesn't have the OLE headers.
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1
|
||||
#define wxUSE_OLE 1
|
||||
|
||||
// Set this to 1 to use Microsoft CTL3D library for "3D-look" under Win16 or NT
|
||||
// 3.x. This setting is ignored under Win9x and NT 4.0+.
|
||||
//
|
||||
// Default is 0 for (most) Win32 (systems), 1 for Win16
|
||||
//
|
||||
// Recommended setting: same as default
|
||||
#if defined(__WIN95__)
|
||||
#define wxUSE_CTL3D 0
|
||||
#else
|
||||
#define wxUSE_CTL3D 1
|
||||
#endif
|
||||
|
||||
// Define as 1 to use Microsoft's ItsyBitsy small title bar library, for
|
||||
// wxMiniFrame. This setting is only used for Win3.1; Win9x and NT use native
|
||||
// miniframes support instead.
|
||||
//
|
||||
// Default is 0 for (most) Win32 (systems), 1 for Win16
|
||||
//
|
||||
// Recommended setting: same as default
|
||||
#if defined(__WIN95__)
|
||||
#define wxUSE_ITSY_BITSY 0
|
||||
#else
|
||||
#define wxUSE_ITSY_BITSY 1
|
||||
#endif
|
||||
|
||||
// Set this to 1 to use RICHEDIT controls for wxTextCtrl with style wxTE_RICH
|
||||
// which allows to put more than ~32Kb of text in it even under Win9x (NT
|
||||
// doesn't have such limitation).
|
||||
//
|
||||
// Default is 1 for compilers which support it
|
||||
//
|
||||
// Recommended setting: 1, only set it to 0 if your compiler doesn't have
|
||||
// or can't compile <richedit.h>
|
||||
#if defined(__WIN95__) && !defined(__TWIN32__) && !defined(__GNUWIN32_OLD__)
|
||||
#define wxUSE_RICHEDIT 1
|
||||
#else
|
||||
#define wxUSE_RICHEDIT 0
|
||||
#endif
|
||||
|
||||
// Set this to 1 to enable support for the owner-drawn menu and listboxes. This
|
||||
// is required by wxUSE_CHECKLISTBOX.
|
||||
//
|
||||
// Default is 1.
|
||||
//
|
||||
// Recommended setting: 1, set to 0 for a small library size reduction
|
||||
#define wxUSE_OWNER_DRAWN 1
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// obsolete settings
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// NB: all settings in this section are obsolete and should not be used/changed
|
||||
// at all, they will disappear
|
||||
|
||||
// Set to 1 to use PenWindows
|
||||
#define wxUSE_PENWINDOWS 0
|
||||
|
||||
// Define 1 to use bitmap messages.
|
||||
#define wxUSE_BITMAP_MESSAGE 1
|
||||
|
||||
// If 1, enables provision of run-time type information.
|
||||
// NOW MANDATORY: don't change.
|
||||
#define wxUSE_DYNAMIC_CLASSES 1
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// disable the settings which don't work for some compilers
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#ifndef wxUSE_NORLANDER_HEADERS
|
||||
#if (defined(__MINGW32__) || defined(__CYGWIN__)) && ((__GNUC__>2) ||((__GNUC__==2) && (__GNUC_MINOR__>=95)))
|
||||
# define wxUSE_NORLANDER_HEADERS 1
|
||||
#else
|
||||
# define wxUSE_NORLANDER_HEADERS 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__GNUWIN32__)
|
||||
// These don't work as expected for mingw32 and cygwin32
|
||||
#undef wxUSE_MEMORY_TRACING
|
||||
#define wxUSE_MEMORY_TRACING 0
|
||||
|
||||
#undef wxUSE_GLOBAL_MEMORY_OPERATORS
|
||||
#define wxUSE_GLOBAL_MEMORY_OPERATORS 0
|
||||
|
||||
#undef wxUSE_DEBUG_NEW_ALWAYS
|
||||
#define wxUSE_DEBUG_NEW_ALWAYS 0
|
||||
|
||||
#undef wxUSE_MS_HTML_HELP
|
||||
#define wxUSE_MS_HTML_HELP 0
|
||||
|
||||
// Cygwin betas don't have wcslen
|
||||
#if defined(__CYGWIN__) || defined(__CYGWIN32__)
|
||||
# if ! ((__GNUC__>2) ||((__GNUC__==2) && (__GNUC_MINOR__>=95)))
|
||||
# undef wxUSE_WCHAR_T
|
||||
# define wxUSE_WCHAR_T 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#endif // __GNUWIN32__
|
||||
|
||||
// MFC duplicates these operators
|
||||
#if wxUSE_MFC
|
||||
#undef wxUSE_GLOBAL_MEMORY_OPERATORS
|
||||
#define wxUSE_GLOBAL_MEMORY_OPERATORS 0
|
||||
|
||||
#undef wxUSE_DEBUG_NEW_ALWAYS
|
||||
#define wxUSE_DEBUG_NEW_ALWAYS 0
|
||||
#endif // wxUSE_MFC
|
||||
|
||||
// ODBC classes aren't Unicode-compatible yet
|
||||
#if wxUSE_UNICODE
|
||||
#undef wxUSE_ODBC
|
||||
#define wxUSE_ODBC 0
|
||||
#endif
|
||||
|
||||
#if (!defined(WIN32) && !defined(__WIN32__)) || (defined(__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS)
|
||||
// Can't use OLE drag and drop in Windows 3.1 because we don't know how
|
||||
// to implement UUIDs
|
||||
// GnuWin32 doesn't have appropriate headers for e.g. IUnknown.
|
||||
#undef wxUSE_DRAG_AND_DROP
|
||||
#define wxUSE_DRAG_AND_DROP 0
|
||||
#endif
|
||||
|
||||
// Only WIN32 supports wxStatusBar95
|
||||
#if !defined(__WIN32__) && wxUSE_NATIVE_STATUSBAR
|
||||
#undef wxUSE_NATIVE_STATUSBAR
|
||||
#define wxUSE_NATIVE_STATUSBAR 0
|
||||
#endif
|
||||
|
||||
#if !wxUSE_OWNER_DRAWN
|
||||
#undef wxUSE_CHECKLISTBOX
|
||||
#define wxUSE_CHECKLISTBOX 0
|
||||
#endif
|
||||
|
||||
// Salford C++ doesn't like some of the memory operator definitions
|
||||
#ifdef __SALFORDC__
|
||||
#undef wxUSE_MEMORY_TRACING
|
||||
#define wxUSE_MEMORY_TRACING 0
|
||||
|
||||
#undef wxUSE_GLOBAL_MEMORY_OPERATORS
|
||||
#define wxUSE_GLOBAL_MEMORY_OPERATORS 0
|
||||
|
||||
#undef wxUSE_DEBUG_NEW_ALWAYS
|
||||
#define wxUSE_DEBUG_NEW_ALWAYS 0
|
||||
|
||||
#undef wxUSE_THREADS
|
||||
#define wxUSE_THREADS 0
|
||||
|
||||
#undef wxUSE_OWNER_DRAWN
|
||||
#define wxUSE_OWNER_DRAWN 0
|
||||
#endif // __SALFORDC__
|
||||
|
||||
#ifdef __TWIN32__
|
||||
|
||||
#undef wxUSE_THREADS
|
||||
#define wxUSE_THREADS 0
|
||||
|
||||
#undef wxUSE_ODBC
|
||||
#define wxUSE_ODBC 0
|
||||
|
||||
#endif // __TWIN32__
|
||||
|
||||
// BC++/Win16 can't cope with the amount of data in resource.cpp
|
||||
#if defined(__WIN16__) && defined(__BORLANDC__)
|
||||
#undef wxUSE_WX_RESOURCES
|
||||
#define wxUSE_WX_RESOURCES 0
|
||||
|
||||
#undef wxUSE_ODBC
|
||||
#define wxUSE_ODBC 0
|
||||
|
||||
#undef wxUSE_NEW_GRID
|
||||
#define wxUSE_NEW_GRID 0
|
||||
#endif
|
||||
|
||||
#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500)
|
||||
// BC++ 4.0 can't compile JPEG library
|
||||
#undef wxUSE_LIBJPEG
|
||||
#define wxUSE_LIBJPEG 0
|
||||
#endif
|
||||
|
||||
#if defined(__BORLANDC__)
|
||||
// Need a BC++-specific htmlhelp.lib before we can enable this
|
||||
#undef wxUSE_MS_HTML_HELP
|
||||
#define wxUSE_MS_HTML_HELP 0
|
||||
#endif
|
||||
|
||||
// wxUSE_DEBUG_NEW_ALWAYS = 1 not compatible with BC++ in DLL mode
|
||||
#if defined(__BORLANDC__) && (defined(WXMAKINGDLL) || defined(WXUSINGDLL))
|
||||
#undef wxUSE_DEBUG_NEW_ALWAYS
|
||||
#define wxUSE_DEBUG_NEW_ALWAYS 0
|
||||
#endif
|
||||
|
||||
#if defined(__WXMSW__) && defined(__WATCOMC__)
|
||||
/*
|
||||
#undef wxUSE_GLCANVAS
|
||||
#define wxUSE_GLCANVAS 0
|
||||
*/
|
||||
|
||||
#undef wxUSE_MS_HTML_HELP
|
||||
#define wxUSE_MS_HTML_HELP 0
|
||||
|
||||
#undef wxUSE_WCHAR_T
|
||||
#define wxUSE_WCHAR_T 0
|
||||
#endif
|
||||
|
||||
#if defined(__WXMSW__) && !defined(__WIN32__)
|
||||
|
||||
#undef wxUSE_SOCKETS
|
||||
#define wxUSE_SOCKETS 0
|
||||
|
||||
#undef wxUSE_THREADS
|
||||
#define wxUSE_THREADS 0
|
||||
|
||||
#undef wxUSE_TOOLTIPS
|
||||
#define wxUSE_TOOLTIPS 0
|
||||
|
||||
#undef wxUSE_SPINCTRL
|
||||
#define wxUSE_SPINCTRL 0
|
||||
|
||||
#undef wxUSE_SPINBTN
|
||||
#define wxUSE_SPINBTN 0
|
||||
|
||||
#undef wxUSE_LIBPNG
|
||||
#define wxUSE_LIBPNG 0
|
||||
|
||||
#undef wxUSE_LIBJPEG
|
||||
#define wxUSE_LIBJPEG 0
|
||||
|
||||
#undef wxUSE_LIBTIFF
|
||||
#define wxUSE_LIBTIFF 0
|
||||
|
||||
#undef wxUSE_GIF
|
||||
#define wxUSE_GIF 0
|
||||
|
||||
#undef wxUSE_PNM
|
||||
#define wxUSE_PNM 0
|
||||
|
||||
#undef wxUSE_PCX
|
||||
#define wxUSE_PCX 0
|
||||
|
||||
#undef wxUSE_GLCANVAS
|
||||
#define wxUSE_GLCANVAS 0
|
||||
|
||||
#undef wxUSE_MS_HTML_HELP
|
||||
#define wxUSE_MS_HTML_HELP 0
|
||||
|
||||
#undef wxUSE_WCHAR_T
|
||||
#define wxUSE_WCHAR_T 0
|
||||
|
||||
#endif // Win16
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// undef the things which don't make sense for wxBase build
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#if !wxUSE_GUI
|
||||
|
||||
#undef wxUSE_HTML
|
||||
#define wxUSE_HTML 0
|
||||
|
||||
#endif // !wxUSE_GUI
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// check the settings consistency: do it here to abort compilation immediately
|
||||
// and not almost in the very end when the relevant file fails to compile and
|
||||
// you need to modify setup.h and rebuild everything
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#if wxUSE_TIMEDATE && !wxUSE_LONGLONG
|
||||
#error wxDateTime requires wxLongLong
|
||||
#endif
|
||||
|
||||
#if wxUSE_TEXTFILE && !wxUSE_FILE
|
||||
#error You cannot compile wxTextFile without wxFile
|
||||
#endif
|
||||
|
||||
#if wxUSE_FILESYSTEM && !wxUSE_STREAMS
|
||||
#error You cannot compile virtual file systems without wxUSE_STREAMS
|
||||
#endif
|
||||
|
||||
#if wxUSE_HTML && !wxUSE_FILESYSTEM
|
||||
#error You cannot compile wxHTML without virtual file systems
|
||||
#endif
|
||||
|
||||
// add more tests here...
|
||||
|
||||
#endif
|
||||
// _WX_SETUP_H_
|
@@ -1,451 +0,0 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: window.h
|
||||
// Purpose: wxWindow class
|
||||
// Author: Julian Smart
|
||||
// Modified by:
|
||||
// Created: 01/02/97
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Julian Smart and Markus Holzem
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _WX_WINDOW_H_
|
||||
#define _WX_WINDOW_H_
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// headers
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma interface "window.h"
|
||||
#endif
|
||||
|
||||
// #include "wx/msw/winundef.h"
|
||||
|
||||
// VZ: apparently some version of Windows send extra mouse move messages after
|
||||
// a mouse click. My tests under NT 4.0 and 95 didn't show it so I'm
|
||||
// tempted to think that it was just an effect of a poor mouse and so the
|
||||
// code to work around this is currently disabled - just define this as 1
|
||||
// to reenable it
|
||||
#define wxUSE_MOUSEEVENT_HACK 0
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// forward declarations
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxButton;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// constants
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// FIXME does anybody use those? they're unused by wxWindows...
|
||||
enum
|
||||
{
|
||||
wxKEY_SHIFT = 1,
|
||||
wxKEY_CTRL = 2
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxWindow declaration for MSW
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxWindow : public wxWindowBase
|
||||
{
|
||||
public:
|
||||
wxWindow() { Init(); }
|
||||
|
||||
wxWindow(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = 0,
|
||||
const wxString& name = wxPanelNameStr)
|
||||
{
|
||||
Init();
|
||||
Create(parent, id, pos, size, style, name);
|
||||
}
|
||||
|
||||
virtual ~wxWindow();
|
||||
|
||||
bool Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = 0,
|
||||
const wxString& name = wxPanelNameStr);
|
||||
|
||||
// implement base class pure virtuals
|
||||
virtual void SetTitle( const wxString& title);
|
||||
virtual wxString GetTitle() const;
|
||||
|
||||
virtual void Raise();
|
||||
virtual void Lower();
|
||||
|
||||
virtual bool Show( bool show = TRUE );
|
||||
virtual bool Enable( bool enable = TRUE );
|
||||
|
||||
virtual void SetFocus();
|
||||
|
||||
virtual bool Reparent( wxWindowBase *newParent );
|
||||
|
||||
virtual void WarpPointer(int x, int y);
|
||||
virtual void CaptureMouse();
|
||||
virtual void ReleaseMouse();
|
||||
|
||||
virtual void Refresh( bool eraseBackground = TRUE,
|
||||
const wxRect *rect = (const wxRect *) NULL );
|
||||
virtual void Clear();
|
||||
|
||||
virtual bool SetCursor( const wxCursor &cursor );
|
||||
virtual bool SetFont( const wxFont &font );
|
||||
|
||||
virtual int GetCharHeight() const;
|
||||
virtual int GetCharWidth() const;
|
||||
virtual void GetTextExtent(const wxString& string,
|
||||
int *x, int *y,
|
||||
int *descent = (int *) NULL,
|
||||
int *externalLeading = (int *) NULL,
|
||||
const wxFont *theFont = (const wxFont *) NULL)
|
||||
const;
|
||||
|
||||
virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
|
||||
|
||||
virtual void SetScrollbar( int orient, int pos, int thumbVisible,
|
||||
int range, bool refresh = TRUE );
|
||||
virtual void SetScrollPos( int orient, int pos, bool refresh = TRUE );
|
||||
virtual int GetScrollPos( int orient ) const;
|
||||
virtual int GetScrollThumb( int orient ) const;
|
||||
virtual int GetScrollRange( int orient ) const;
|
||||
virtual void ScrollWindow( int dx, int dy,
|
||||
const wxRect* rect = (wxRect *) NULL );
|
||||
|
||||
#if wxUSE_DRAG_AND_DROP
|
||||
virtual void SetDropTarget( wxDropTarget *dropTarget );
|
||||
#endif // wxUSE_DRAG_AND_DROP
|
||||
|
||||
// Accept files for dragging
|
||||
virtual void DragAcceptFiles(bool accept);
|
||||
|
||||
#if WXWIN_COMPATIBILITY
|
||||
// Set/get scroll attributes
|
||||
virtual void SetScrollRange(int orient, int range, bool refresh = TRUE);
|
||||
virtual void SetScrollPage(int orient, int page, bool refresh = TRUE);
|
||||
virtual int OldGetScrollRange(int orient) const;
|
||||
virtual int GetScrollPage(int orient) const;
|
||||
|
||||
// event handlers
|
||||
// Handle a control command
|
||||
virtual void OnCommand(wxWindow& win, wxCommandEvent& event);
|
||||
|
||||
// Override to define new behaviour for default action (e.g. double
|
||||
// clicking on a listbox)
|
||||
virtual void OnDefaultAction(wxControl * WXUNUSED(initiatingItem)) { }
|
||||
#endif // WXWIN_COMPATIBILITY
|
||||
|
||||
#if wxUSE_CARET && WXWIN_COMPATIBILITY
|
||||
// caret manipulation (old MSW only functions, see wxCaret class for the
|
||||
// new API)
|
||||
void CreateCaret(int w, int h);
|
||||
void CreateCaret(const wxBitmap *bitmap);
|
||||
void DestroyCaret();
|
||||
void ShowCaret(bool show);
|
||||
void SetCaretPos(int x, int y);
|
||||
void GetCaretPos(int *x, int *y) const;
|
||||
#endif // wxUSE_CARET
|
||||
|
||||
// Native resource loading (implemented in src/msw/nativdlg.cpp)
|
||||
// FIXME: should they really be all virtual?
|
||||
virtual bool LoadNativeDialog(wxWindow* parent, wxWindowID& id);
|
||||
virtual bool LoadNativeDialog(wxWindow* parent, const wxString& name);
|
||||
wxWindow* GetWindowChild1(wxWindowID id);
|
||||
wxWindow* GetWindowChild(wxWindowID id);
|
||||
|
||||
// a MSW only function which sends a size event to the window using its
|
||||
// current size - this has an effect of refreshing the window layout
|
||||
/*
|
||||
FUNCTION IS NOW A MEMBER OF wxFrame - gt
|
||||
void SendSizeEvent();
|
||||
*/
|
||||
|
||||
// implementation from now on
|
||||
// --------------------------
|
||||
|
||||
// simple accessors
|
||||
// ----------------
|
||||
|
||||
WXHWND GetHWND() const { return m_hWnd; }
|
||||
void SetHWND(WXHWND hWnd) { m_hWnd = hWnd; }
|
||||
virtual WXWidget GetHandle() const { return GetHWND(); }
|
||||
|
||||
bool GetUseCtl3D() const { return m_useCtl3D; }
|
||||
bool GetTransparentBackground() const { return m_backgroundTransparent; }
|
||||
void SetTransparent(bool t = TRUE) { m_backgroundTransparent = t; }
|
||||
|
||||
// event handlers
|
||||
// --------------
|
||||
|
||||
void OnSetFocus(wxFocusEvent& event);
|
||||
void OnEraseBackground(wxEraseEvent& event);
|
||||
void OnIdle(wxIdleEvent& event);
|
||||
void OnPaint(wxPaintEvent& event);
|
||||
|
||||
public:
|
||||
// For implementation purposes - sometimes decorations make the client area
|
||||
// smaller
|
||||
virtual wxPoint GetClientAreaOrigin() const;
|
||||
|
||||
// Makes an adjustment to the window position (for example, a frame that has
|
||||
// a toolbar that it manages itself).
|
||||
virtual void AdjustForParentClientOrigin(int& x, int& y, int sizeFlags);
|
||||
|
||||
// Windows subclassing
|
||||
void SubclassWin(WXHWND hWnd);
|
||||
void UnsubclassWin();
|
||||
|
||||
WXFARPROC MSWGetOldWndProc() const { return m_oldWndProc; }
|
||||
void MSWSetOldWndProc(WXFARPROC proc) { m_oldWndProc = proc; }
|
||||
|
||||
wxWindow *FindItem(long id) const;
|
||||
wxWindow *FindItemByHWND(WXHWND hWnd, bool controlOnly = FALSE) const;
|
||||
|
||||
// Make a Windows extended style from the given wxWindows window style
|
||||
static WXDWORD MakeExtendedStyle(long style,
|
||||
bool eliminateBorders = FALSE);
|
||||
// Determine whether 3D effects are wanted
|
||||
WXDWORD Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D) const;
|
||||
|
||||
// MSW only: TRUE if this control is part of the main control
|
||||
virtual bool ContainsHWND(WXHWND WXUNUSED(hWnd)) const { return FALSE; };
|
||||
|
||||
// returns TRUE if the window has been created
|
||||
bool MSWCreate(int id,
|
||||
wxWindow *parent,
|
||||
const wxChar *wclass,
|
||||
wxWindow *wx_win,
|
||||
const wxChar *title,
|
||||
int x, int y, int width, int height,
|
||||
WXDWORD style,
|
||||
const wxChar *dialog_template = NULL,
|
||||
WXDWORD exendedStyle = 0);
|
||||
virtual bool MSWCommand(WXUINT param, WXWORD id);
|
||||
|
||||
#if WXWIN_COMPATIBILITY
|
||||
wxObject *GetChild(int number) const;
|
||||
virtual void MSWDeviceToLogical(float *x, float *y) const;
|
||||
#endif // WXWIN_COMPATIBILITY
|
||||
|
||||
// Create an appropriate wxWindow from a HWND
|
||||
virtual wxWindow* CreateWindowFromHWND(wxWindow* parent, WXHWND hWnd);
|
||||
|
||||
// Make sure the window style reflects the HWND style (roughly)
|
||||
virtual void AdoptAttributesFromHWND();
|
||||
|
||||
// Setup background and foreground colours correctly
|
||||
virtual void SetupColours();
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// helpers for message handlers: these perform the same function as the
|
||||
// message crackers from <windowsx.h> - they unpack WPARAM and LPARAM into
|
||||
// the correct parameters
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
void UnpackCommand(WXWPARAM wParam, WXLPARAM lParam,
|
||||
WXWORD *id, WXHWND *hwnd, WXWORD *cmd);
|
||||
void UnpackActivate(WXWPARAM wParam, WXLPARAM lParam,
|
||||
WXWORD *state, WXWORD *minimized, WXHWND *hwnd);
|
||||
void UnpackScroll(WXWPARAM wParam, WXLPARAM lParam,
|
||||
WXWORD *code, WXWORD *pos, WXHWND *hwnd);
|
||||
void UnpackCtlColor(WXWPARAM wParam, WXLPARAM lParam,
|
||||
WXWORD *nCtlColor, WXHDC *hdc, WXHWND *hwnd);
|
||||
void UnpackMenuSelect(WXWPARAM wParam, WXLPARAM lParam,
|
||||
WXWORD *item, WXWORD *flags, WXHMENU *hmenu);
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// internal handlers for MSW messages: all handlers return a boolean value:
|
||||
// TRUE means that the handler processed the event and FALSE that it didn't
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
// there are several cases where we have virtual functions for Windows
|
||||
// message processing: this is because these messages often require to be
|
||||
// processed in a different manner in the derived classes. For all other
|
||||
// messages, however, we do *not* have corresponding MSWOnXXX() function
|
||||
// and if the derived class wants to process them, it should override
|
||||
// MSWWindowProc() directly.
|
||||
|
||||
// scroll event (both horizontal and vertical)
|
||||
virtual bool MSWOnScroll(int orientation, WXWORD nSBCode,
|
||||
WXWORD pos, WXHWND control);
|
||||
|
||||
// child control notifications
|
||||
#ifdef __WIN95__
|
||||
virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
|
||||
#endif // __WIN95__
|
||||
|
||||
// owner-drawn controls need to process these messages
|
||||
virtual bool MSWOnDrawItem(int id, WXDRAWITEMSTRUCT *item);
|
||||
virtual bool MSWOnMeasureItem(int id, WXMEASUREITEMSTRUCT *item);
|
||||
|
||||
// the rest are not virtual
|
||||
bool HandleCreate(WXLPCREATESTRUCT cs, bool *mayCreate);
|
||||
bool HandleInitDialog(WXHWND hWndFocus);
|
||||
bool HandleDestroy();
|
||||
|
||||
bool HandlePaint();
|
||||
bool HandleEraseBkgnd(WXHDC pDC);
|
||||
|
||||
bool HandleMinimize();
|
||||
bool HandleMaximize();
|
||||
bool HandleSize(int x, int y, WXUINT flag);
|
||||
bool HandleGetMinMaxInfo(void *mmInfo);
|
||||
|
||||
bool HandleShow(bool show, int status);
|
||||
bool HandleActivate(int flag, bool minimized, WXHWND activate);
|
||||
|
||||
bool HandleCommand(WXWORD id, WXWORD cmd, WXHWND control);
|
||||
bool HandleSysCommand(WXWPARAM wParam, WXLPARAM lParam);
|
||||
|
||||
bool HandleCtlColor(WXHBRUSH *hBrush,
|
||||
WXHDC hdc,
|
||||
WXHWND hWnd,
|
||||
WXUINT nCtlColor,
|
||||
WXUINT message,
|
||||
WXWPARAM wParam,
|
||||
WXLPARAM lParam);
|
||||
|
||||
bool HandlePaletteChanged(WXHWND hWndPalChange);
|
||||
bool HandleQueryNewPalette();
|
||||
bool HandleSysColorChange();
|
||||
|
||||
bool HandleQueryEndSession(long logOff, bool *mayEnd);
|
||||
bool HandleEndSession(bool endSession, long logOff);
|
||||
|
||||
bool HandleSetFocus(WXHWND wnd);
|
||||
bool HandleKillFocus(WXHWND wnd);
|
||||
|
||||
bool HandleDropFiles(WXWPARAM wParam);
|
||||
|
||||
bool HandleMouseEvent(WXUINT msg, int x, int y, WXUINT flags);
|
||||
bool HandleMouseMove(int x, int y, WXUINT flags);
|
||||
|
||||
bool HandleChar(WXWPARAM wParam, WXLPARAM lParam, bool isASCII = FALSE);
|
||||
bool HandleKeyDown(WXWPARAM wParam, WXLPARAM lParam);
|
||||
bool HandleKeyUp(WXWPARAM wParam, WXLPARAM lParam);
|
||||
|
||||
bool HandleQueryDragIcon(WXHICON *hIcon);
|
||||
|
||||
bool HandleSetCursor(WXHWND hWnd, short nHitTest, int mouseMsg);
|
||||
|
||||
// Window procedure
|
||||
virtual long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
|
||||
|
||||
// Calls an appropriate default window procedure
|
||||
virtual long MSWDefWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
|
||||
virtual bool MSWProcessMessage(WXMSG* pMsg);
|
||||
virtual bool MSWTranslateMessage(WXMSG* pMsg);
|
||||
virtual void MSWDestroyWindow();
|
||||
|
||||
// Detach "Window" menu from menu bar so it doesn't get deleted
|
||||
void MSWDetachWindowMenu();
|
||||
|
||||
// this function should return the brush to paint the window background
|
||||
// with or 0 for the default brush
|
||||
virtual WXHBRUSH OnCtlColor(WXHDC hDC,
|
||||
WXHWND hWnd,
|
||||
WXUINT nCtlColor,
|
||||
WXUINT message,
|
||||
WXWPARAM wParam,
|
||||
WXLPARAM lParam);
|
||||
|
||||
#if WXWIN_COMPATIBILITY
|
||||
void SetShowing(bool show) { (void)Show(show); }
|
||||
bool IsUserEnabled() const { return IsEnabled(); }
|
||||
#endif // WXWIN_COMPATIBILITY
|
||||
|
||||
// Responds to colour changes: passes event on to children.
|
||||
void OnSysColourChanged(wxSysColourChangedEvent& event);
|
||||
|
||||
// initialize various fields of wxMouseEvent (common part of MSWOnMouseXXX)
|
||||
void InitMouseEvent(wxMouseEvent& event, int x, int y, WXUINT flags);
|
||||
|
||||
protected:
|
||||
// the window handle
|
||||
WXHWND m_hWnd;
|
||||
|
||||
// the old window proc (we subclass all windows)
|
||||
WXFARPROC m_oldWndProc;
|
||||
|
||||
// additional (MSW specific) flags
|
||||
bool m_useCtl3D:1; // Using CTL3D for this control
|
||||
bool m_backgroundTransparent:1;
|
||||
bool m_mouseInWindow:1;
|
||||
bool m_doubleClickAllowed:1;
|
||||
bool m_winCaptured:1;
|
||||
|
||||
// the size of one page for scrolling
|
||||
int m_xThumbSize;
|
||||
int m_yThumbSize;
|
||||
|
||||
#if wxUSE_MOUSEEVENT_HACK
|
||||
// the coordinates of the last mouse event and the type of it
|
||||
long m_lastMouseX,
|
||||
m_lastMouseY;
|
||||
int m_lastMouseEvent;
|
||||
#endif // wxUSE_MOUSEEVENT_HACK
|
||||
|
||||
WXHMENU m_hMenu; // Menu, if any
|
||||
|
||||
// the return value of WM_GETDLGCODE handler
|
||||
long m_lDlgCode;
|
||||
|
||||
// implement the base class pure virtuals
|
||||
virtual void DoClientToScreen( int *x, int *y ) const;
|
||||
virtual void DoScreenToClient( int *x, int *y ) const;
|
||||
virtual void DoGetPosition( int *x, int *y ) const;
|
||||
virtual void DoGetSize( int *width, int *height ) const;
|
||||
virtual void DoGetClientSize( int *width, int *height ) const;
|
||||
virtual void DoSetSize(int x, int y,
|
||||
int width, int height,
|
||||
int sizeFlags = wxSIZE_AUTO);
|
||||
virtual void DoSetClientSize(int width, int height);
|
||||
|
||||
// move the window to the specified location and resize it: this is called
|
||||
// from both DoSetSize() and DoSetClientSize() and would usually just call
|
||||
// ::MoveWindow() except for composite controls which will want to arrange
|
||||
// themselves inside the given rectangle
|
||||
virtual void DoMoveWindow(int x, int y, int width, int height);
|
||||
|
||||
#if wxUSE_TOOLTIPS
|
||||
virtual void DoSetToolTip( wxToolTip *tip );
|
||||
#endif // wxUSE_TOOLTIPS
|
||||
|
||||
private:
|
||||
// common part of all ctors
|
||||
void Init();
|
||||
|
||||
// the (non-virtual) handlers for the events
|
||||
bool HandleMove(int x, int y);
|
||||
bool HandleJoystickEvent(WXUINT msg, int x, int y, WXUINT flags);
|
||||
|
||||
#ifdef __WIN95__
|
||||
bool HandleNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
|
||||
#endif // __WIN95__
|
||||
|
||||
// the helper functions used by HandleChar/KeyXXX methods
|
||||
wxKeyEvent CreateKeyEvent(wxEventType evType, int id, WXLPARAM lp) const;
|
||||
|
||||
DECLARE_DYNAMIC_CLASS(wxWindow);
|
||||
DECLARE_NO_COPY_CLASS(wxWindow);
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// global functions
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// kbd code translation
|
||||
WXDLLEXPORT int wxCharCodeMSWToWX(int keySym);
|
||||
WXDLLEXPORT int wxCharCodeWXToMSW(int id, bool *IsVirtual);
|
||||
|
||||
#endif
|
||||
// _WX_WINDOW_H_
|
1145
src/common/event.cpp
8538
src/generic/grid.cpp
@@ -1,704 +0,0 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: generic/scrolwin.cpp
|
||||
// Purpose: wxGenericScrolledWindow implementation
|
||||
// Author: Julian Smart
|
||||
// Modified by:
|
||||
// Created: 01/02/97
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Julian Smart and Markus Holzem
|
||||
// Licence: wxWindows license
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// ============================================================================
|
||||
// declarations
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// headers
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma implementation "scrolwin.h"
|
||||
#endif
|
||||
|
||||
#ifdef __VMS
|
||||
#define XtDisplay XTDISPLAY
|
||||
#endif
|
||||
|
||||
// For compilers that support precompilation, includes "wx.h".
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
#pragma hdrstop
|
||||
#endif
|
||||
|
||||
#include "wx/utils.h"
|
||||
#include "wx/dcclient.h"
|
||||
|
||||
#include "wx/generic/scrolwin.h"
|
||||
#include "wx/panel.h"
|
||||
|
||||
#ifdef __WXMSW__
|
||||
#include "windows.h"
|
||||
#endif
|
||||
|
||||
#ifdef __WXMOTIF__
|
||||
// For wxRETAINED implementation
|
||||
#ifdef __VMS__ //VMS's Xm.h is not (yet) compatible with C++
|
||||
//This code switches off the compiler warnings
|
||||
# pragma message disable nosimpint
|
||||
#endif
|
||||
#include <Xm/Xm.h>
|
||||
#ifdef __VMS__
|
||||
# pragma message enable nosimpint
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef __WXGTK__
|
||||
#include "wx/scrolwin.h"
|
||||
IMPLEMENT_CLASS(wxScrolledWindow, wxGenericScrolledWindow)
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// event tables
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
BEGIN_EVENT_TABLE(wxGenericScrolledWindow, wxPanel)
|
||||
EVT_SCROLLWIN(wxGenericScrolledWindow::OnScroll)
|
||||
EVT_SIZE(wxGenericScrolledWindow::OnSize)
|
||||
EVT_PAINT(wxGenericScrolledWindow::OnPaint)
|
||||
EVT_CHAR(wxGenericScrolledWindow::OnChar)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxGenericScrolledWindow, wxPanel)
|
||||
|
||||
// ============================================================================
|
||||
// implementation
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxGenericScrolledWindow creation
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxGenericScrolledWindow::wxGenericScrolledWindow()
|
||||
{
|
||||
m_xScrollPixelsPerLine = 0;
|
||||
m_yScrollPixelsPerLine = 0;
|
||||
m_xScrollingEnabled = TRUE;
|
||||
m_yScrollingEnabled = TRUE;
|
||||
m_xScrollPosition = 0;
|
||||
m_yScrollPosition = 0;
|
||||
m_xScrollLines = 0;
|
||||
m_yScrollLines = 0;
|
||||
m_xScrollLinesPerPage = 0;
|
||||
m_yScrollLinesPerPage = 0;
|
||||
m_scaleX = 1.0;
|
||||
m_scaleY = 1.0;
|
||||
m_targetWindow = (wxWindow*) NULL;
|
||||
}
|
||||
|
||||
bool wxGenericScrolledWindow::Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxString& name)
|
||||
{
|
||||
m_xScrollPixelsPerLine = 0;
|
||||
m_yScrollPixelsPerLine = 0;
|
||||
m_xScrollingEnabled = TRUE;
|
||||
m_yScrollingEnabled = TRUE;
|
||||
m_xScrollPosition = 0;
|
||||
m_yScrollPosition = 0;
|
||||
m_xScrollLines = 0;
|
||||
m_yScrollLines = 0;
|
||||
m_xScrollLinesPerPage = 0;
|
||||
m_yScrollLinesPerPage = 0;
|
||||
m_scaleX = 1.0;
|
||||
m_scaleY = 1.0;
|
||||
|
||||
m_targetWindow = this;
|
||||
|
||||
bool ok = wxPanel::Create(parent, id, pos, size, style, name);
|
||||
|
||||
#ifdef __WXMSW__
|
||||
// we need to process arrows ourselves for scrolling
|
||||
m_lDlgCode |= DLGC_WANTARROWS;
|
||||
#endif // __WXMSW__
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
wxGenericScrolledWindow::~wxGenericScrolledWindow()
|
||||
{
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// setting scrolling parameters
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
* pixelsPerUnitX/pixelsPerUnitY: number of pixels per unit (e.g. pixels per text line)
|
||||
* noUnitsX/noUnitsY: : no. units per scrollbar
|
||||
*/
|
||||
void wxGenericScrolledWindow::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY,
|
||||
int noUnitsX, int noUnitsY,
|
||||
int xPos, int yPos, bool noRefresh )
|
||||
{
|
||||
int xpos, ypos;
|
||||
|
||||
CalcUnscrolledPosition(xPos, yPos, &xpos, &ypos);
|
||||
bool do_refresh =
|
||||
(
|
||||
(noUnitsX != 0 && m_xScrollLines == 0) ||
|
||||
(noUnitsX < m_xScrollLines && xpos > pixelsPerUnitX*noUnitsX) ||
|
||||
|
||||
(noUnitsY != 0 && m_yScrollLines == 0) ||
|
||||
(noUnitsY < m_yScrollLines && ypos > pixelsPerUnitY*noUnitsY) ||
|
||||
(xPos != m_xScrollPosition) ||
|
||||
(yPos != m_yScrollPosition)
|
||||
// (pixelsPerUnitX != m_xScrollPixelsPerLine) ||
|
||||
// (pixelsPerUnitY != m_yScrollPixelsPerLine)
|
||||
);
|
||||
|
||||
m_xScrollPixelsPerLine = pixelsPerUnitX;
|
||||
m_yScrollPixelsPerLine = pixelsPerUnitY;
|
||||
m_xScrollPosition = xPos;
|
||||
m_yScrollPosition = yPos;
|
||||
m_xScrollLines = noUnitsX;
|
||||
m_yScrollLines = noUnitsY;
|
||||
|
||||
#ifdef __WXMOTIF__
|
||||
// Sorry, some Motif-specific code to implement a backing pixmap
|
||||
// for the wxRETAINED style. Implementing a backing store can't
|
||||
// be entirely generic because it relies on the wxWindowDC implementation
|
||||
// to duplicate X drawing calls for the backing pixmap.
|
||||
|
||||
if ((m_windowStyle & wxRETAINED) == wxRETAINED)
|
||||
{
|
||||
Display* dpy = XtDisplay((Widget) GetMainWidget());
|
||||
|
||||
int totalPixelWidth = m_xScrollLines * m_xScrollPixelsPerLine;
|
||||
int totalPixelHeight = m_yScrollLines * m_yScrollPixelsPerLine;
|
||||
if (m_backingPixmap &&
|
||||
!((m_pixmapWidth == totalPixelWidth) &&
|
||||
(m_pixmapHeight == totalPixelHeight)))
|
||||
{
|
||||
XFreePixmap (dpy, (Pixmap) m_backingPixmap);
|
||||
m_backingPixmap = (WXPixmap) 0;
|
||||
}
|
||||
|
||||
if (!m_backingPixmap &&
|
||||
(noUnitsX != 0) && (noUnitsY != 0))
|
||||
{
|
||||
int depth = wxDisplayDepth();
|
||||
m_pixmapWidth = totalPixelWidth;
|
||||
m_pixmapHeight = totalPixelHeight;
|
||||
m_backingPixmap = (WXPixmap) XCreatePixmap (dpy, RootWindow (dpy, DefaultScreen (dpy)),
|
||||
m_pixmapWidth, m_pixmapHeight, depth);
|
||||
}
|
||||
|
||||
}
|
||||
#endif // Motif
|
||||
|
||||
AdjustScrollbars();
|
||||
|
||||
if (do_refresh && !noRefresh)
|
||||
m_targetWindow->Refresh();
|
||||
|
||||
#ifdef __WXMSW__
|
||||
// GRG: if this turns out to be really necessary, we could
|
||||
// at least move it to the above if { ... } so that it is
|
||||
// only done if noRefresh = FALSE (the default). OTOH, if
|
||||
// this doesn't break anything, which seems to be the
|
||||
// case, we could just leave it out.
|
||||
|
||||
// Necessary?
|
||||
// UpdateWindow ((HWND) m_targetWindow->GetHWND());
|
||||
#endif
|
||||
#ifdef __WXMAC__
|
||||
m_targetWindow->MacUpdateImmediately() ;
|
||||
#endif
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// target window handling
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void wxGenericScrolledWindow::SetTargetWindow( wxWindow *target )
|
||||
{
|
||||
wxASSERT_MSG( target, wxT("target window must not be NULL") );
|
||||
m_targetWindow = target;
|
||||
}
|
||||
|
||||
wxWindow *wxGenericScrolledWindow::GetTargetWindow()
|
||||
{
|
||||
return m_targetWindow;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// scrolling implementation itself
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void wxGenericScrolledWindow::OnScroll(wxScrollWinEvent& event)
|
||||
{
|
||||
int orient = event.GetOrientation();
|
||||
|
||||
int nScrollInc = CalcScrollInc(event);
|
||||
if (nScrollInc == 0) return;
|
||||
|
||||
if (orient == wxHORIZONTAL)
|
||||
{
|
||||
int newPos = m_xScrollPosition + nScrollInc;
|
||||
SetScrollPos(wxHORIZONTAL, newPos, TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
int newPos = m_yScrollPosition + nScrollInc;
|
||||
SetScrollPos(wxVERTICAL, newPos, TRUE );
|
||||
}
|
||||
|
||||
if (orient == wxHORIZONTAL)
|
||||
{
|
||||
m_xScrollPosition += nScrollInc;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_yScrollPosition += nScrollInc;
|
||||
}
|
||||
|
||||
if (orient == wxHORIZONTAL)
|
||||
{
|
||||
if (m_xScrollingEnabled)
|
||||
m_targetWindow->ScrollWindow(-m_xScrollPixelsPerLine * nScrollInc, 0, (const wxRect *) NULL);
|
||||
else
|
||||
m_targetWindow->Refresh();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_yScrollingEnabled)
|
||||
m_targetWindow->ScrollWindow(0, -m_yScrollPixelsPerLine * nScrollInc, (const wxRect *) NULL);
|
||||
else
|
||||
m_targetWindow->Refresh();
|
||||
}
|
||||
#ifdef __WXMAC__
|
||||
m_targetWindow->MacUpdateImmediately() ;
|
||||
#endif
|
||||
}
|
||||
|
||||
int wxGenericScrolledWindow::CalcScrollInc(wxScrollWinEvent& event)
|
||||
{
|
||||
int pos = event.GetPosition();
|
||||
int orient = event.GetOrientation();
|
||||
|
||||
int nScrollInc = 0;
|
||||
if (event.GetEventType() == wxEVT_SCROLLWIN_TOP)
|
||||
{
|
||||
if (orient == wxHORIZONTAL)
|
||||
nScrollInc = - m_xScrollPosition;
|
||||
else
|
||||
nScrollInc = - m_yScrollPosition;
|
||||
} else
|
||||
if (event.GetEventType() == wxEVT_SCROLLWIN_BOTTOM)
|
||||
{
|
||||
if (orient == wxHORIZONTAL)
|
||||
nScrollInc = m_xScrollLines - m_xScrollPosition;
|
||||
else
|
||||
nScrollInc = m_yScrollLines - m_yScrollPosition;
|
||||
} else
|
||||
if (event.GetEventType() == wxEVT_SCROLLWIN_LINEUP)
|
||||
{
|
||||
nScrollInc = -1;
|
||||
} else
|
||||
if (event.GetEventType() == wxEVT_SCROLLWIN_LINEDOWN)
|
||||
{
|
||||
nScrollInc = 1;
|
||||
} else
|
||||
if (event.GetEventType() == wxEVT_SCROLLWIN_PAGEUP)
|
||||
{
|
||||
if (orient == wxHORIZONTAL)
|
||||
nScrollInc = -GetScrollPageSize(wxHORIZONTAL);
|
||||
else
|
||||
nScrollInc = -GetScrollPageSize(wxVERTICAL);
|
||||
} else
|
||||
if (event.GetEventType() == wxEVT_SCROLLWIN_PAGEDOWN)
|
||||
{
|
||||
if (orient == wxHORIZONTAL)
|
||||
nScrollInc = GetScrollPageSize(wxHORIZONTAL);
|
||||
else
|
||||
nScrollInc = GetScrollPageSize(wxVERTICAL);
|
||||
} else
|
||||
if ((event.GetEventType() == wxEVT_SCROLLWIN_THUMBTRACK) ||
|
||||
(event.GetEventType() == wxEVT_SCROLLWIN_THUMBRELEASE))
|
||||
{
|
||||
if (orient == wxHORIZONTAL)
|
||||
nScrollInc = pos - m_xScrollPosition;
|
||||
else
|
||||
nScrollInc = pos - m_yScrollPosition;
|
||||
}
|
||||
|
||||
if (orient == wxHORIZONTAL)
|
||||
{
|
||||
if (m_xScrollPixelsPerLine > 0)
|
||||
{
|
||||
int w, h;
|
||||
m_targetWindow->GetClientSize(&w, &h);
|
||||
|
||||
int nMaxWidth = m_xScrollLines*m_xScrollPixelsPerLine;
|
||||
int noPositions = (int) ( ((nMaxWidth - w)/(double)m_xScrollPixelsPerLine) + 0.5 );
|
||||
if (noPositions < 0)
|
||||
noPositions = 0;
|
||||
|
||||
if ( (m_xScrollPosition + nScrollInc) < 0 )
|
||||
nScrollInc = -m_xScrollPosition; // As -ve as we can go
|
||||
else if ( (m_xScrollPosition + nScrollInc) > noPositions )
|
||||
nScrollInc = noPositions - m_xScrollPosition; // As +ve as we can go
|
||||
}
|
||||
else
|
||||
m_targetWindow->Refresh();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_yScrollPixelsPerLine > 0)
|
||||
{
|
||||
int w, h;
|
||||
m_targetWindow->GetClientSize(&w, &h);
|
||||
|
||||
int nMaxHeight = m_yScrollLines*m_yScrollPixelsPerLine;
|
||||
int noPositions = (int) ( ((nMaxHeight - h)/(double)m_yScrollPixelsPerLine) + 0.5 );
|
||||
if (noPositions < 0)
|
||||
noPositions = 0;
|
||||
|
||||
if ( (m_yScrollPosition + nScrollInc) < 0 )
|
||||
nScrollInc = -m_yScrollPosition; // As -ve as we can go
|
||||
else if ( (m_yScrollPosition + nScrollInc) > noPositions )
|
||||
nScrollInc = noPositions - m_yScrollPosition; // As +ve as we can go
|
||||
}
|
||||
else
|
||||
m_targetWindow->Refresh();
|
||||
}
|
||||
|
||||
return nScrollInc;
|
||||
}
|
||||
|
||||
// Adjust the scrollbars - new version.
|
||||
void wxGenericScrolledWindow::AdjustScrollbars()
|
||||
{
|
||||
int w, h;
|
||||
m_targetWindow->GetClientSize(&w, &h);
|
||||
|
||||
int oldXScroll = m_xScrollPosition;
|
||||
int oldYScroll = m_yScrollPosition;
|
||||
|
||||
if (m_xScrollLines > 0)
|
||||
{
|
||||
// Calculate page size i.e. number of scroll units you get on the
|
||||
// current client window
|
||||
int noPagePositions = (int) ( (w/(double)m_xScrollPixelsPerLine) + 0.5 );
|
||||
if (noPagePositions < 1) noPagePositions = 1;
|
||||
|
||||
// Correct position if greater than extent of canvas minus
|
||||
// the visible portion of it or if below zero
|
||||
m_xScrollPosition = wxMin( m_xScrollLines-noPagePositions, m_xScrollPosition);
|
||||
m_xScrollPosition = wxMax( 0, m_xScrollPosition );
|
||||
|
||||
SetScrollbar(wxHORIZONTAL, m_xScrollPosition, noPagePositions, m_xScrollLines);
|
||||
// The amount by which we scroll when paging
|
||||
SetScrollPageSize(wxHORIZONTAL, noPagePositions);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_xScrollPosition = 0;
|
||||
SetScrollbar (wxHORIZONTAL, 0, 0, 0, FALSE);
|
||||
}
|
||||
|
||||
if (m_yScrollLines > 0)
|
||||
{
|
||||
// Calculate page size i.e. number of scroll units you get on the
|
||||
// current client window
|
||||
int noPagePositions = (int) ( (h/(double)m_yScrollPixelsPerLine) + 0.5 );
|
||||
if (noPagePositions < 1) noPagePositions = 1;
|
||||
|
||||
// Correct position if greater than extent of canvas minus
|
||||
// the visible portion of it or if below zero
|
||||
m_yScrollPosition = wxMin( m_yScrollLines-noPagePositions, m_yScrollPosition );
|
||||
m_yScrollPosition = wxMax( 0, m_yScrollPosition );
|
||||
|
||||
SetScrollbar(wxVERTICAL, m_yScrollPosition, noPagePositions, m_yScrollLines);
|
||||
// The amount by which we scroll when paging
|
||||
SetScrollPageSize(wxVERTICAL, noPagePositions);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_yScrollPosition = 0;
|
||||
SetScrollbar (wxVERTICAL, 0, 0, 0, FALSE);
|
||||
}
|
||||
|
||||
if (oldXScroll != m_xScrollPosition)
|
||||
{
|
||||
if (m_xScrollingEnabled)
|
||||
m_targetWindow->ScrollWindow( m_xScrollPixelsPerLine * (oldXScroll-m_xScrollPosition), 0, (const wxRect *) NULL );
|
||||
else
|
||||
m_targetWindow->Refresh();
|
||||
}
|
||||
|
||||
if (oldYScroll != m_yScrollPosition)
|
||||
{
|
||||
if (m_yScrollingEnabled)
|
||||
m_targetWindow->ScrollWindow( 0, m_yScrollPixelsPerLine * (oldYScroll-m_yScrollPosition), (const wxRect *) NULL );
|
||||
else
|
||||
m_targetWindow->Refresh();
|
||||
}
|
||||
}
|
||||
|
||||
// Override this function if you don't want to have wxGenericScrolledWindow
|
||||
// automatically change the origin according to the scroll position.
|
||||
void wxGenericScrolledWindow::PrepareDC(wxDC& dc)
|
||||
{
|
||||
dc.SetDeviceOrigin( -m_xScrollPosition * m_xScrollPixelsPerLine,
|
||||
-m_yScrollPosition * m_yScrollPixelsPerLine );
|
||||
dc.SetUserScale( m_scaleX, m_scaleY );
|
||||
}
|
||||
|
||||
#if WXWIN_COMPATIBILITY
|
||||
void wxGenericScrolledWindow::GetScrollUnitsPerPage (int *x_page, int *y_page) const
|
||||
{
|
||||
*x_page = GetScrollPageSize(wxHORIZONTAL);
|
||||
*y_page = GetScrollPageSize(wxVERTICAL);
|
||||
}
|
||||
|
||||
void wxGenericScrolledWindow::CalcUnscrolledPosition(int x, int y, float *xx, float *yy) const
|
||||
{
|
||||
if ( xx )
|
||||
*xx = (float)(x + m_xScrollPosition * m_xScrollPixelsPerLine);
|
||||
if ( yy )
|
||||
*yy = (float)(y + m_yScrollPosition * m_yScrollPixelsPerLine);
|
||||
}
|
||||
#endif // WXWIN_COMPATIBILITY
|
||||
|
||||
void wxGenericScrolledWindow::GetScrollPixelsPerUnit (int *x_unit, int *y_unit) const
|
||||
{
|
||||
if ( x_unit )
|
||||
*x_unit = m_xScrollPixelsPerLine;
|
||||
if ( y_unit )
|
||||
*y_unit = m_yScrollPixelsPerLine;
|
||||
}
|
||||
|
||||
int wxGenericScrolledWindow::GetScrollPageSize(int orient) const
|
||||
{
|
||||
if ( orient == wxHORIZONTAL )
|
||||
return m_xScrollLinesPerPage;
|
||||
else
|
||||
return m_yScrollLinesPerPage;
|
||||
}
|
||||
|
||||
void wxGenericScrolledWindow::SetScrollPageSize(int orient, int pageSize)
|
||||
{
|
||||
if ( orient == wxHORIZONTAL )
|
||||
m_xScrollLinesPerPage = pageSize;
|
||||
else
|
||||
m_yScrollLinesPerPage = pageSize;
|
||||
}
|
||||
|
||||
/*
|
||||
* Scroll to given position (scroll position, not pixel position)
|
||||
*/
|
||||
void wxGenericScrolledWindow::Scroll( int x_pos, int y_pos )
|
||||
{
|
||||
if (!m_targetWindow)
|
||||
return;
|
||||
|
||||
if (((x_pos == -1) || (x_pos == m_xScrollPosition)) &&
|
||||
((y_pos == -1) || (y_pos == m_yScrollPosition))) return;
|
||||
|
||||
int w, h;
|
||||
m_targetWindow->GetClientSize(&w, &h);
|
||||
|
||||
if ((x_pos != -1) && (m_xScrollPixelsPerLine))
|
||||
{
|
||||
int old_x = m_xScrollPosition;
|
||||
m_xScrollPosition = x_pos;
|
||||
|
||||
// Calculate page size i.e. number of scroll units you get on the
|
||||
// current client window
|
||||
int noPagePositions = (int) ( (w/(double)m_xScrollPixelsPerLine) + 0.5 );
|
||||
if (noPagePositions < 1) noPagePositions = 1;
|
||||
|
||||
// Correct position if greater than extent of canvas minus
|
||||
// the visible portion of it or if below zero
|
||||
m_xScrollPosition = wxMin( m_xScrollLines-noPagePositions, m_xScrollPosition );
|
||||
m_xScrollPosition = wxMax( 0, m_xScrollPosition );
|
||||
|
||||
if (old_x != m_xScrollPosition) {
|
||||
m_targetWindow->SetScrollPos( wxHORIZONTAL, m_xScrollPosition, TRUE );
|
||||
m_targetWindow->ScrollWindow( (old_x-m_xScrollPosition)*m_xScrollPixelsPerLine, 0 );
|
||||
}
|
||||
}
|
||||
if ((y_pos != -1) && (m_yScrollPixelsPerLine))
|
||||
{
|
||||
int old_y = m_yScrollPosition;
|
||||
m_yScrollPosition = y_pos;
|
||||
|
||||
// Calculate page size i.e. number of scroll units you get on the
|
||||
// current client window
|
||||
int noPagePositions = (int) ( (h/(double)m_yScrollPixelsPerLine) + 0.5 );
|
||||
if (noPagePositions < 1) noPagePositions = 1;
|
||||
|
||||
// Correct position if greater than extent of canvas minus
|
||||
// the visible portion of it or if below zero
|
||||
m_yScrollPosition = wxMin( m_yScrollLines-noPagePositions, m_yScrollPosition );
|
||||
m_yScrollPosition = wxMax( 0, m_yScrollPosition );
|
||||
|
||||
if (old_y != m_yScrollPosition) {
|
||||
m_targetWindow->SetScrollPos( wxVERTICAL, m_yScrollPosition, TRUE );
|
||||
m_targetWindow->ScrollWindow( 0, (old_y-m_yScrollPosition)*m_yScrollPixelsPerLine );
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __WXMAC__
|
||||
m_targetWindow->MacUpdateImmediately();
|
||||
#endif
|
||||
}
|
||||
|
||||
void wxGenericScrolledWindow::EnableScrolling (bool x_scroll, bool y_scroll)
|
||||
{
|
||||
m_xScrollingEnabled = x_scroll;
|
||||
m_yScrollingEnabled = y_scroll;
|
||||
}
|
||||
|
||||
void wxGenericScrolledWindow::GetVirtualSize (int *x, int *y) const
|
||||
{
|
||||
if ( x )
|
||||
*x = m_xScrollPixelsPerLine * m_xScrollLines;
|
||||
if ( y )
|
||||
*y = m_yScrollPixelsPerLine * m_yScrollLines;
|
||||
}
|
||||
|
||||
// Where the current view starts from
|
||||
void wxGenericScrolledWindow::GetViewStart (int *x, int *y) const
|
||||
{
|
||||
if ( x )
|
||||
*x = m_xScrollPosition;
|
||||
if ( y )
|
||||
*y = m_yScrollPosition;
|
||||
}
|
||||
|
||||
void wxGenericScrolledWindow::CalcScrolledPosition(int x, int y, int *xx, int *yy) const
|
||||
{
|
||||
if ( xx )
|
||||
*xx = x - m_xScrollPosition * m_xScrollPixelsPerLine;
|
||||
if ( yy )
|
||||
*yy = y - m_yScrollPosition * m_yScrollPixelsPerLine;
|
||||
}
|
||||
|
||||
void wxGenericScrolledWindow::CalcUnscrolledPosition(int x, int y, int *xx, int *yy) const
|
||||
{
|
||||
if ( xx )
|
||||
*xx = x + m_xScrollPosition * m_xScrollPixelsPerLine;
|
||||
if ( yy )
|
||||
*yy = y + m_yScrollPosition * m_yScrollPixelsPerLine;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// event handlers
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// Default OnSize resets scrollbars, if any
|
||||
void wxGenericScrolledWindow::OnSize(wxSizeEvent& WXUNUSED(event))
|
||||
{
|
||||
#if wxUSE_CONSTRAINTS
|
||||
if (GetAutoLayout())
|
||||
Layout();
|
||||
#endif
|
||||
|
||||
AdjustScrollbars();
|
||||
}
|
||||
|
||||
// This calls OnDraw, having adjusted the origin according to the current
|
||||
// scroll position
|
||||
void wxGenericScrolledWindow::OnPaint(wxPaintEvent& WXUNUSED(event))
|
||||
{
|
||||
wxPaintDC dc(this);
|
||||
PrepareDC(dc);
|
||||
|
||||
OnDraw(dc);
|
||||
}
|
||||
|
||||
// kbd handling: notice that we use OnChar() and not OnKeyDown() for
|
||||
// compatibility here - if we used OnKeyDown(), the programs which process
|
||||
// arrows themselves in their OnChar() would never get the message and like
|
||||
// this they always have the priority
|
||||
void wxGenericScrolledWindow::OnChar(wxKeyEvent& event)
|
||||
{
|
||||
int stx, sty, // view origin
|
||||
szx, szy, // view size (total)
|
||||
clix, cliy; // view size (on screen)
|
||||
|
||||
ViewStart(&stx, &sty);
|
||||
GetClientSize(&clix, &cliy);
|
||||
GetVirtualSize(&szx, &szy);
|
||||
|
||||
if( m_xScrollPixelsPerLine )
|
||||
{
|
||||
clix /= m_xScrollPixelsPerLine;
|
||||
szx /= m_xScrollPixelsPerLine;
|
||||
}
|
||||
else
|
||||
{
|
||||
clix = 0;
|
||||
szx = -1;
|
||||
}
|
||||
if( m_yScrollPixelsPerLine )
|
||||
{
|
||||
cliy /= m_yScrollPixelsPerLine;
|
||||
szy /= m_yScrollPixelsPerLine;
|
||||
}
|
||||
else
|
||||
{
|
||||
cliy = 0;
|
||||
szy = -1;
|
||||
}
|
||||
|
||||
int dsty;
|
||||
switch ( event.KeyCode() )
|
||||
{
|
||||
case WXK_PAGEUP:
|
||||
case WXK_PRIOR:
|
||||
dsty = sty - (5 * cliy / 6);
|
||||
Scroll(-1, (dsty == -1) ? 0 : dsty);
|
||||
break;
|
||||
|
||||
case WXK_PAGEDOWN:
|
||||
case WXK_NEXT:
|
||||
Scroll(-1, sty + (5 * cliy / 6));
|
||||
break;
|
||||
|
||||
case WXK_HOME:
|
||||
Scroll(0, event.ControlDown() ? 0 : -1);
|
||||
break;
|
||||
|
||||
case WXK_END:
|
||||
Scroll(szx - clix, event.ControlDown() ? szy - cliy : -1);
|
||||
break;
|
||||
|
||||
case WXK_UP:
|
||||
Scroll(-1, sty - 1);
|
||||
break;
|
||||
|
||||
case WXK_DOWN:
|
||||
Scroll(-1, sty + 1);
|
||||
break;
|
||||
|
||||
case WXK_LEFT:
|
||||
Scroll(stx - 1, -1);
|
||||
break;
|
||||
|
||||
case WXK_RIGHT:
|
||||
Scroll(stx + 1, -1);
|
||||
break;
|
||||
|
||||
default:
|
||||
// not for us
|
||||
event.Skip();
|
||||
}
|
||||
}
|
4473
src/msw/window.cpp
117
utils/wxPython/.cvsignore
Normal file
@@ -0,0 +1,117 @@
|
||||
*.py
|
||||
*.pyc
|
||||
*.pyc
|
||||
*.pyd
|
||||
*.pyd
|
||||
*.pyo
|
||||
*.pyo
|
||||
*.zip
|
||||
.cvsignore
|
||||
.emacs.desktop
|
||||
__init__.py
|
||||
__init__.py
|
||||
__init__.pyc
|
||||
__init__.pyc
|
||||
__init__.pyo
|
||||
__init__.pyo
|
||||
build.local
|
||||
cmndlgs.py
|
||||
cmndlgs.py
|
||||
cmndlgs.pyc
|
||||
cmndlgs.pyc
|
||||
cmndlgs.pyo
|
||||
cmndlgs.pyo
|
||||
controls.py
|
||||
controls.py
|
||||
controls.pyc
|
||||
controls.pyc
|
||||
controls.pyo
|
||||
controls.pyo
|
||||
controls2.py
|
||||
controls2.py
|
||||
controls2.pyc
|
||||
controls2.pyc
|
||||
controls2.pyo
|
||||
controls2.pyo
|
||||
docs
|
||||
events.py
|
||||
events.py
|
||||
events.pyc
|
||||
events.pyc
|
||||
events.pyo
|
||||
events.pyo
|
||||
filelist
|
||||
frames.py
|
||||
frames.py
|
||||
frames.pyc
|
||||
frames.pyc
|
||||
frames.pyo
|
||||
frames.pyo
|
||||
gdi.py
|
||||
gdi.py
|
||||
gdi.pyc
|
||||
gdi.pyc
|
||||
gdi.pyo
|
||||
gdi.pyo
|
||||
glcanvas.py
|
||||
glcanvas.pyc
|
||||
glcanvasc.ilk
|
||||
glcanvasc.pyd
|
||||
image.py
|
||||
image.pyc
|
||||
mdi.py
|
||||
mdi.py
|
||||
mdi.pyc
|
||||
mdi.pyc
|
||||
mdi.pyo
|
||||
mdi.pyo
|
||||
misc.py
|
||||
misc.py
|
||||
misc.pyc
|
||||
misc.pyc
|
||||
misc.pyo
|
||||
misc.pyo
|
||||
printfw.py
|
||||
stattool.py
|
||||
stattool.py
|
||||
stattool.pyc
|
||||
stattool.pyc
|
||||
stattool.pyo
|
||||
stattool.pyo
|
||||
utils.py
|
||||
utils.py
|
||||
utils.pyc
|
||||
utils.pyc
|
||||
utils.pyo
|
||||
utilsc.ilk
|
||||
utilsc.pyd
|
||||
windows.py
|
||||
windows.py
|
||||
windows.pyc
|
||||
windows.pyc
|
||||
windows.pyo
|
||||
windows.pyo
|
||||
windows2.py
|
||||
windows2.py
|
||||
windows2.pyc
|
||||
windows2.pyc
|
||||
windows2.pyo
|
||||
windows2.pyo
|
||||
windows3.py
|
||||
windows3.pyc
|
||||
windows3.pyo
|
||||
wx.py
|
||||
wx.py
|
||||
wx.pyc
|
||||
wx.pyc
|
||||
wx.pyo
|
||||
wxPython.doc
|
||||
wxc.ilk
|
||||
wxc.pdb
|
||||
wxc.pyd
|
||||
wxp.py
|
||||
wxp.pyc
|
||||
wxp.pyo
|
||||
wxpc.ilk
|
||||
wxpc.pdb
|
||||
wxpc.pyd
|
411
utils/wxPython/README.txt
Normal file
@@ -0,0 +1,411 @@
|
||||
wxPython README
|
||||
---------------
|
||||
|
||||
Welcome to the wonderful world of wxPython!
|
||||
|
||||
Once you have installed the wxPython extension module, you can try it
|
||||
out by going to the [install dir]\wxPython\demo directory and typing:
|
||||
|
||||
python demo.py
|
||||
|
||||
There are also some other sample files there for you to play with and
|
||||
learn from.
|
||||
|
||||
If you selected to install the documentation then point your browser
|
||||
to [install dir]\wxPython\docs\index.htm and you will then be looking
|
||||
at the docs for wxWindows. For the most part you can use the C++ docs
|
||||
as most classes and methods are used identically. Where there are
|
||||
differences they are documented with a "wxPython Note."
|
||||
|
||||
On Win32 systems the binary self-installer creates a program group on
|
||||
the Start Menu that contains a link to running the demo and a link to
|
||||
the help file. To help you save disk space I'm now using Microsoft's
|
||||
HTML Help format. If your system doesn't know what to do with the help
|
||||
file, you can install the HTML Help Viewer as part of IE 4+, NT
|
||||
Service Pack 4+, or the HTML Workshop at
|
||||
|
||||
http://msdn.microsoft.com/workshop/author/htmlhelp/download.asp.
|
||||
|
||||
|
||||
|
||||
Getting Help
|
||||
------------
|
||||
|
||||
Since wxPython is a blending of multiple technologies, help comes from
|
||||
multiple sources. See the http://alldunn.com/wxPython for details on
|
||||
various sources of help, but probably the best source is the
|
||||
wxPython-users mail list. You can view the archive or subscribe by
|
||||
going to
|
||||
|
||||
http://starship.python.net/mailman/listinfo/wxpython-users
|
||||
|
||||
Or you can send mail directly to the list using this address:
|
||||
|
||||
wxpython-users@starship.python.net
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
What's new in 2.1b3
|
||||
--------------------
|
||||
|
||||
This release is syncronized with release 2.1 snapshot 9 of wxWindows.
|
||||
|
||||
Switched to using SWIG from CVS (see http://swig.cs.uchicago.edu/cvs.html)
|
||||
for some of the new features and such. Also they have encorporated my
|
||||
patches so there is really no reason to stick with the current (very
|
||||
old) release... This version of SWIG gives the following new
|
||||
features:
|
||||
|
||||
1. Keyword arguments. You no longer have to specify all the
|
||||
parameters with defaults to a method just to specify a
|
||||
non-default value on the end. You can now do this instead:
|
||||
|
||||
win = wxWindow(parent, -1, style = mystyle)
|
||||
|
||||
2. There is now an an equivalence between Python's None and C++'s
|
||||
NULL. This means that any methods that might return NULL will
|
||||
now return None and you can use none where wxWindows might be
|
||||
expecting NULL. This makes things much more snake-ish.
|
||||
|
||||
|
||||
There is a new build system based on a new Python program instead of
|
||||
raw makefiles. Now wxPython builds are virtually the same on MSW or
|
||||
Unix systems. See the end of this file for new build instructions and
|
||||
see distrib/build.py for more details.
|
||||
|
||||
wxDC.Bilt now includes the useMask parameter, and has been split into
|
||||
two different versions. wxDC.BlitXY is like what was there before and
|
||||
takes raw coordinants and sizes, and the new wxDC.Blit is for the new
|
||||
interface using wxPoints and a wxSize.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
What's new in 2.1b2
|
||||
--------------------
|
||||
|
||||
Added the missing wxWindow.GetUpdateRegion() method.
|
||||
|
||||
Made a new change in SWIG (update your patches everybody) that
|
||||
provides a fix for global shadow objects that get an exception in
|
||||
their __del__ when their extension module has already been deleted.
|
||||
It was only a 1 line change in .../SWIG/Modules/pycpp.cxx at about
|
||||
line 496 if you want to do it by hand.
|
||||
|
||||
It is now possible to run through MainLoop more than once in any one
|
||||
process. The cleanup that used to happen as MainLoop completed (and
|
||||
prevented it from running again) has been delayed until the wxc module
|
||||
is being unloaded by Python.
|
||||
|
||||
I fixed a bunch of stuff in the C++ version of wxGrid so it wouldn't
|
||||
make wxPython look bad.
|
||||
|
||||
wxWindow.PopupMenu() now takes a wxPoint instead of x,y. Added
|
||||
wxWindow.PopupMenuXY to be consistent with some other methods.
|
||||
|
||||
Added wxGrid.SetEditInPlace and wxGrid.GetEditInPlace.
|
||||
|
||||
You can now provide your own app.MainLoop method. See
|
||||
wxPython/demo/demoMainLoop.py for an example and some explaination.
|
||||
|
||||
Got the in-place-edit for the wxTreeCtrl fixed and added some demo
|
||||
code to show how to use it.
|
||||
|
||||
Put the wxIcon constructor back in for GTK as it now has one that
|
||||
matches MSW's.
|
||||
|
||||
Added wxGrid.GetCells
|
||||
|
||||
Added wxSystemSettings static methods as functions with names like
|
||||
wxSystemSettings_GetSystemColour.
|
||||
|
||||
Removed wxPyMenu since using menu callbacks have been depreciated in
|
||||
wxWindows. Use wxMenu and events instead.
|
||||
|
||||
Added alternate wxBitmap constructor (for MSW only) as
|
||||
wxBitmapFromData(data, type, width, height, depth = 1)
|
||||
|
||||
Added a helper function named wxPyTypeCast that can convert shadow
|
||||
objects of one type into shadow objects of another type. (Like doing
|
||||
a down-cast.) See the implementation in wx.py for some docs.
|
||||
|
||||
Fixed wxImage GetData and SetData to properly use String objects for
|
||||
data transfer.
|
||||
|
||||
Added access methods to wxGridEvent.
|
||||
|
||||
New Makefile/Setup files supporting multiple dynamic extension modules
|
||||
for unix systems.
|
||||
|
||||
Fixes for the wxGLCanvas demo to work around a strange bug in gtk.
|
||||
|
||||
SWIG support routines now compiled separately instead of being bundled
|
||||
in wx.cpp.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
What's new in 2.1b1
|
||||
--------------------
|
||||
Fixed wxComboBox.SetSelection so that it actually sets the selected
|
||||
item. (Actually just removed it from wxPython and let it default to
|
||||
wxChoice.SetSelection which was already doing the right thing.)
|
||||
|
||||
Added the Printing Framework.
|
||||
|
||||
Switched back to using the wxWindows DLL for the pre-built Win32
|
||||
version. The problem was needing to reinitialize static class info
|
||||
data after loading each extension module.
|
||||
|
||||
Lots of little tweaks and additions to reflect changes to various
|
||||
wxWindows classes.
|
||||
|
||||
Fixed a bug with attaching objects to tree items. Actually was a
|
||||
symptom of a larger problem with not obtaining the interpreter lock
|
||||
when doing any Py_DECREFs.
|
||||
|
||||
wxSizer and friends. Sizers are layout tools that manage a colection
|
||||
of windows and sizers. Different types of sizers apply different
|
||||
types of layout algorithms. You saw it here first! These classes are
|
||||
not even in the wxWindows C++ library yet!
|
||||
|
||||
|
||||
|
||||
What's new in 2.0b9
|
||||
-------------------
|
||||
Bug fix for ListCtrl in test4.py (Was a missing file... DSM!)
|
||||
|
||||
Bug fix for occassional GPF on Win32 systems upon termination of a
|
||||
wxPython application.
|
||||
|
||||
Added wxListBox.GetSelections returning selections as a Tuple.
|
||||
|
||||
Added a wxTreeItemData that is able to hold any Python object and be
|
||||
associated with items in a wxTreeCtrl. Added test pytree.py to show
|
||||
this feature off.
|
||||
|
||||
Added wxSafeYield function.
|
||||
|
||||
OpenGL Canvas can be optionally compiled in to wxPython.
|
||||
|
||||
Awesome new Demo Framework for showing off wxPython and for learning
|
||||
how it all works.
|
||||
|
||||
The pre-built Win32 version is no longer distributing the wxWindows
|
||||
DLL. It is statically linked with the wxWindows library instead.
|
||||
|
||||
Added a couple missing items from the docs.
|
||||
|
||||
Added wxImage, wxImageHandler, wxPNGHandler, wxJPEGHandler,
|
||||
wxGIFHandler and wxBMPHandler.
|
||||
|
||||
Added new methods to wxTextCtrl.
|
||||
|
||||
Fixed some problems with how SWIG was wrapping some wxTreeCtrl
|
||||
methods.
|
||||
|
||||
|
||||
|
||||
What's new in 2.0b8
|
||||
-------------------
|
||||
Support for using Python threads in wxPython apps.
|
||||
|
||||
Several missing methods from various classes.
|
||||
|
||||
Various bug fixes.
|
||||
|
||||
|
||||
|
||||
What's new in 2.0b7
|
||||
-------------------
|
||||
Added DLG_PNT and DLG_SZE convienience methods to wxWindow class.
|
||||
|
||||
Added missing constructor and other methods for wxMenuItem.
|
||||
|
||||
|
||||
|
||||
What's new in 2.0b6
|
||||
-------------------
|
||||
Just a quickie update to fix the self-installer to be compatible with
|
||||
Python 1.5.2b2's Registry settings.
|
||||
|
||||
|
||||
What's new in 2.0b5
|
||||
-------------------
|
||||
Well obviously the numbering scheme has changed. I did this to
|
||||
reflect the fact that this truly is the second major revision of
|
||||
wxPython, (well the third actually if you count the one I did for
|
||||
wxWindows 1.68 and then threw away...) and also that it is associated
|
||||
with the 2.0 version of wxWindows.
|
||||
|
||||
I have finally started documenting wxPython. There are several pages
|
||||
in the wxWindows documentation tree specifically about wxPython, and I
|
||||
have added notes within the class references about where and how wxPython
|
||||
diverges from wxWindows.
|
||||
|
||||
Added wxWindow_FromHWND(hWnd) for wxMSW to construct a wxWindow from a
|
||||
window handle. If you can get the window handle into the python code,
|
||||
it should just work... More news on this later.
|
||||
|
||||
Added wxImageList, wxToolTip.
|
||||
|
||||
Re-enabled wxConfig.DeleteAll() since it is reportedly fixed for the
|
||||
wxRegConfig class.
|
||||
|
||||
As usual, some bug fixes, tweaks, etc.
|
||||
|
||||
|
||||
|
||||
What's new in 0.5.3
|
||||
-------------------
|
||||
Added wxSashWindow, wxSashEvent, wxLayoutAlgorithm, etc.
|
||||
|
||||
Various cleanup, tweaks, minor additions, etc. to maintain
|
||||
compatibility with the current wxWindows.
|
||||
|
||||
|
||||
|
||||
What's new in 0.5.0
|
||||
-------------------
|
||||
Changed the import semantics from "from wxPython import *" to "from
|
||||
wxPython.wx import *" This is for people who are worried about
|
||||
namespace pollution, they can use "from wxPython import wx" and then
|
||||
prefix all the wxPython identifiers with "wx."
|
||||
|
||||
Added wxTaskbarIcon for wxMSW.
|
||||
|
||||
Made the events work for wxGrid.
|
||||
|
||||
Added wxConfig.
|
||||
|
||||
Added wxMiniFrame for wxGTK.
|
||||
|
||||
Changed many of the args and return values that were pointers to gdi
|
||||
objects to references to reflect changes in the wxWindows API.
|
||||
|
||||
Other assorted fixes and additions.
|
||||
|
||||
|
||||
|
||||
|
||||
What's new in 0.4.2
|
||||
-------------------
|
||||
|
||||
wxPython on wxGTK works!!! Both dynamic and static on Linux and
|
||||
static on Solaris have been tested. Many thanks go to Harm
|
||||
<H.v.d.Heijden@phys.tue.nl> for his astute detective work on tracking
|
||||
down a nasty DECREF bug. Okay so I have to confess that it was just a
|
||||
DSM (Dumb Stupid Mistake) on my part but it was nasty none the less
|
||||
because the behavior was so different on different platforms.
|
||||
|
||||
The dynamicly loaded module on Solaris is still segfaulting, so it
|
||||
must have been a different issue all along...
|
||||
|
||||
|
||||
|
||||
What's New in 0.4
|
||||
-----------------
|
||||
|
||||
1. Worked on wxGTK compatibility. It is partially working. On a
|
||||
Solaris/Sparc box wxPython is working but only when it is statically
|
||||
linked with the Python interpreter. When built as a dyamically loaded
|
||||
extension module, things start acting weirdly and it soon seg-faults.
|
||||
And on Linux both the statically linked and the dynamically linked
|
||||
version segfault shortly after starting up.
|
||||
|
||||
2. Added Toolbar, StatusBar and SplitterWindow classes.
|
||||
|
||||
3. Varioius bug fixes, enhancements, etc.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
Build Instructions
|
||||
------------------
|
||||
I used SWIG (http://www.swig.org) to create the source code for the
|
||||
extension module. This enabled me to only have to deal with a small
|
||||
amount of code and only have to bother with the exceptional issues.
|
||||
SWIG takes care of the rest and generates all the repetative code for
|
||||
me. You don't need SWIG to build the extension module as all the
|
||||
generated C++ code is included under the src directory.
|
||||
|
||||
I added a few minor features to SWIG to control some of the code
|
||||
generation. If you want to play around with this you will need to get
|
||||
a recent version of SWIG from their CVS or from a daily build. See
|
||||
http://www.swig.org/ for details.
|
||||
|
||||
wxPython is organized as a Python package. This means that the
|
||||
directory containing the results of the build process should be a
|
||||
subdirectory of a directory on the PYTHONPATH. (And preferably should
|
||||
be named wxPython.) You can control where the build process will dump
|
||||
wxPython by setting the TARGETDIR variable for the build utility, (see
|
||||
below.)
|
||||
|
||||
|
||||
1. Build wxWindows as described in its BuildCVS.txt file. For *nix
|
||||
systems I run configure with these flags:
|
||||
|
||||
--with-gtk
|
||||
--with-libjpeg
|
||||
--without-odbc
|
||||
--enable-unicode=no
|
||||
--enable-threads=yes
|
||||
--enable-socket=yes
|
||||
--enable-static=no
|
||||
--enable-shared=yes
|
||||
--disable-std_iostreams
|
||||
|
||||
You can use whatever flags you want, but I know these work.
|
||||
|
||||
For Win32 systems I use Visual C++ 6.0, but 5.0 should work. The
|
||||
build utility currently does not support any other win32 compilers.
|
||||
|
||||
2. At this point you may want to make an alias or symlink, script,
|
||||
batch file, whatever on the PATH that invokes
|
||||
$(WXWIN)/utils/wxPython/distrib/build.py to help simplify matters
|
||||
somewhat. For example, on my win32 system I have a file named
|
||||
build.bat in a directory on the PATH that contains:
|
||||
|
||||
python $(WXWIN)/utils/wxPython/distrib/build.py %1 %2 %3 %4 %5 %6
|
||||
|
||||
|
||||
3. Change into the $(WXWIN)/utils/wxPython/src directory.
|
||||
|
||||
4. Type "build -b" to build wxPython and "build -i" to install it.
|
||||
|
||||
The build.py script actually generates a Makefile based on what it
|
||||
finds on your system and information found in the build.cfg file.
|
||||
If you have troubles building or you want it built or installed in
|
||||
a different way, take a look at the docstring in build.py. You may
|
||||
be able to override configuration options in a file named
|
||||
build.local.
|
||||
|
||||
5. To build and install the add-on modules, change to the appropriate
|
||||
directory under $(WXWIN)/utils/wxPython/modules and run the build
|
||||
utility again.
|
||||
|
||||
6. Change to the $(WXWIN)/utils/wxPython/demo directory.
|
||||
|
||||
7. Try executing the demo program. For example:
|
||||
|
||||
python demo.py
|
||||
|
||||
To run it without requiring a console on win32, you can use the
|
||||
pythonw.exe version of Python either from the command line or from a
|
||||
shortcut.
|
||||
|
||||
|
||||
|
||||
----------------
|
||||
Robin Dunn
|
||||
robin@alldunn.com
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
139
utils/wxPython/SWIG.patches/Include.patch
Normal file
@@ -0,0 +1,139 @@
|
||||
*** swig.h.old Wed Feb 04 15:59:40 1998
|
||||
--- swig.h Fri Aug 28 15:46:32 1998
|
||||
***************
|
||||
*** 178,185 ****
|
||||
--- 178,211 ----
|
||||
char *firstkey();
|
||||
char *nextkey();
|
||||
};
|
||||
|
||||
+ // -------------------------------------------------------------------
|
||||
+ // Simple Vector class
|
||||
+ // User is responsible for deleting contents before deleteing Vector
|
||||
+ // -------------------------------------------------------------------
|
||||
+
|
||||
+ class Vector {
|
||||
+ public:
|
||||
+ Vector(size_t allocSize=8);
|
||||
+ ~Vector();
|
||||
+
|
||||
+ size_t size() { return m_size; }
|
||||
+ size_t count() { return m_count; }
|
||||
+ size_t append(void* object);
|
||||
+ size_t extend(size_t newSize);
|
||||
+
|
||||
+ void*& operator[] (size_t idx);
|
||||
+
|
||||
+ static void* s_nullPtr;
|
||||
+
|
||||
+ private:
|
||||
+ size_t m_size;
|
||||
+ size_t m_count;
|
||||
+ void** m_data;
|
||||
+ };
|
||||
+
|
||||
+
|
||||
/************************************************************************
|
||||
* class DataType
|
||||
*
|
||||
* Defines the basic datatypes supported by the translator.
|
||||
***************
|
||||
*** 684,691 ****
|
||||
--- 710,761 ----
|
||||
extern char *name_get(char *vname, int suppress=0);
|
||||
extern char *name_set(char *vname, int suppress=0);
|
||||
extern char *name_construct(char *classname, int suppress=0);
|
||||
extern char *name_destroy(char *classname, int suppress=0);
|
||||
+
|
||||
+ // ----------------------------------------------------------------------
|
||||
+ // class CPP_class
|
||||
+ //
|
||||
+ // Class for managing class members (internally)
|
||||
+ // ----------------------------------------------------------------------
|
||||
+
|
||||
+ class CPP_member;
|
||||
+
|
||||
+ class CPP_class {
|
||||
+ public:
|
||||
+ char *classname; // Real class name
|
||||
+ char *classrename; // New name of class (if applicable)
|
||||
+ char *classtype; // class type (struct, union, class)
|
||||
+ int strip; // Strip off class declarator
|
||||
+ int wextern; // Value of extern wrapper variable for this class
|
||||
+ int have_constructor; // Status bit indicating if we've seen a constructor
|
||||
+ int have_destructor; // Status bit indicating if a destructor has been seen
|
||||
+ int is_abstract; // Status bit indicating if this is an abstract class
|
||||
+ int generate_default; // Generate default constructors
|
||||
+ int objective_c; // Set if this is an objective C class
|
||||
+ int error; // Set if this class can't be generated
|
||||
+ int line; // Line number
|
||||
+ char **baseclass; // Base classes (if any)
|
||||
+ Hash *local; // Hash table for local types
|
||||
+ Hash *scope; // Local scope hash table
|
||||
+ DocEntry *de; // Documentation entry of class
|
||||
+ CPP_member *members; // Linked list of members
|
||||
+ CPP_class *next; // Next class
|
||||
+ static CPP_class *classlist; // List of all classes stored
|
||||
+
|
||||
+ Vector addPragmas;
|
||||
+
|
||||
+ CPP_class(char *name, char *ctype);
|
||||
+ void add_member(CPP_member *m);
|
||||
+ CPP_member *search_member(char *name);
|
||||
+ void inherit_decls(int mode);
|
||||
+ void emit_decls();
|
||||
+ static CPP_class *search(char *name);
|
||||
+ void create_default();
|
||||
+ static void create_all();
|
||||
+ };
|
||||
+
|
||||
+ extern CPP_class *current_class;
|
||||
|
||||
/***********************************************************************
|
||||
* -- Revision History
|
||||
* $Log$
|
||||
* Revision 1.2 1999/07/31 07:54:05 RD
|
||||
* wxPython 2.1b1:
|
||||
*
|
||||
* Added the missing wxWindow.GetUpdateRegion() method.
|
||||
*
|
||||
* Made a new change in SWIG (update your patches everybody) that
|
||||
* provides a fix for global shadow objects that get an exception in
|
||||
* their __del__ when their extension module has already been deleted.
|
||||
* It was only a 1 line change in .../SWIG/Modules/pycpp.cxx at about
|
||||
* line 496 if you want to do it by hand.
|
||||
*
|
||||
* It is now possible to run through MainLoop more than once in any one
|
||||
* process. The cleanup that used to happen as MainLoop completed (and
|
||||
* prevented it from running again) has been delayed until the wxc module
|
||||
* is being unloaded by Python.
|
||||
*
|
||||
* wxWindow.PopupMenu() now takes a wxPoint instead of x,y. Added
|
||||
* wxWindow.PopupMenuXY to be consistent with some other methods.
|
||||
*
|
||||
* Added wxGrid.SetEditInPlace and wxGrid.GetEditInPlace.
|
||||
*
|
||||
* You can now provide your own app.MainLoop method. See
|
||||
* wxPython/demo/demoMainLoop.py for an example and some explaination.
|
||||
*
|
||||
* Got the in-place-edit for the wxTreeCtrl fixed and added some demo
|
||||
* code to show how to use it.
|
||||
*
|
||||
* Put the wxIcon constructor back in for GTK as it now has one that
|
||||
* matches MSW's.
|
||||
*
|
||||
* Added wxGrid.GetCells
|
||||
*
|
||||
* Added wxSystemSettings static methods as functions with names like
|
||||
* wxSystemSettings_GetSystemColour.
|
||||
*
|
||||
* Removed wxPyMenu since using menu callbacks have been depreciated in
|
||||
* wxWindows. Use wxMenu and events instead.
|
||||
*
|
||||
* Added alternate wxBitmap constructor (for MSW only) as
|
||||
* wxBitmapFromData(data, type, width, height, depth = 1)
|
||||
*
|
||||
* Added a helper function named wxPyTypeCast that can convert shadow
|
||||
* objects of one type into shadow objects of another type. (Like doing
|
||||
* a down-cast.) See the implementation in wx.py for some docs.
|
||||
*
|
202
utils/wxPython/SWIG.patches/Modules.patch
Normal file
@@ -0,0 +1,202 @@
|
||||
*** python.cxx.old Fri Jan 02 23:17:40 1998
|
||||
--- python.cxx Fri Aug 28 15:49:18 1998
|
||||
***************
|
||||
*** 1678,1685 ****
|
||||
--- 1678,1702 ----
|
||||
fprintf(stderr,"%s : Line %d. Unable to locate file %s\n", input_file, line_number, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
+ } else if (strcmp(cmd, "addtomethod") == 0) {
|
||||
+ // parse value, expected to be in the form "methodName:line"
|
||||
+ char* txtptr = strchr(value, ':');
|
||||
+ if (txtptr) {
|
||||
+ // add name and line to a list in current_class
|
||||
+ *txtptr = 0;
|
||||
+ txtptr++;
|
||||
+ AddPragmaData* apData = new AddPragmaData(value, txtptr);
|
||||
+ current_class->addPragmas.append(apData);
|
||||
+
|
||||
+ } else {
|
||||
+ fprintf(stderr,"%s : Line %d. Malformed addtomethod pragma. Should be \"methodName:text\"\n",
|
||||
+ input_file, line_number);
|
||||
+ }
|
||||
+ } else if (strcmp(cmd, "addtoclass") == 0) {
|
||||
+ AddPragmaData* apData = new AddPragmaData("__class__", value);
|
||||
+ current_class->addPragmas.append(apData);
|
||||
} else {
|
||||
fprintf(stderr,"%s : Line %d. Unrecognized pragma.\n", input_file, line_number);
|
||||
}
|
||||
}
|
||||
*** python.h.old Thu Jul 24 23:18:50 1997
|
||||
--- python.h Fri Aug 28 15:46:08 1998
|
||||
***************
|
||||
*** 184,191 ****
|
||||
--- 184,203 ----
|
||||
void cpp_declare_const(char *name, char *iname, DataType *type, char *value);
|
||||
void cpp_class_decl(char *, char *,char *);
|
||||
void pragma(char *, char *, char *);
|
||||
void add_typedef(DataType *t, char *name);
|
||||
+
|
||||
+ void emitAddPragmas(String& output, char* name, char* spacing);
|
||||
};
|
||||
|
||||
#define PYSHADOW_MEMBER 0x2
|
||||
+
|
||||
+ struct AddPragmaData {
|
||||
+ String m_method;
|
||||
+ String m_text;
|
||||
+
|
||||
+ AddPragmaData(char* method, char* text)
|
||||
+ : m_method(method),
|
||||
+ m_text(text)
|
||||
+ {}
|
||||
+ };
|
||||
|
||||
*** pycpp.cxx.old Fri Jan 02 21:23:22 1998
|
||||
--- pycpp.cxx Tue Jul 20 14:34:36 1999
|
||||
***************
|
||||
*** 275,282 ****
|
||||
--- 275,283 ----
|
||||
#endif
|
||||
}
|
||||
}
|
||||
// if ((t->type != T_VOID) || (t->is_pointer))
|
||||
+ emitAddPragmas(*pyclass, realname, tab8);
|
||||
*pyclass << tab8 << "return val\n";
|
||||
|
||||
// Change the usage string to reflect our shadow class
|
||||
|
||||
***************
|
||||
*** 393,400 ****
|
||||
--- 394,402 ----
|
||||
}
|
||||
}
|
||||
*construct << ")\n";
|
||||
*construct << tab8 << "self.thisown = 1\n";
|
||||
+ emitAddPragmas(*construct, "__init__", tab8);
|
||||
have_constructor = 1;
|
||||
} else {
|
||||
|
||||
// Hmmm. We seem to be creating a different constructor. We're just going to create a
|
||||
***************
|
||||
*** 490,503 ****
|
||||
if (class_renamed) realname = class_name;
|
||||
else realname = name;
|
||||
}
|
||||
|
||||
! *pyclass << tab4 << "def __del__(self):\n"
|
||||
<< tab8 << "if self.thisown == 1 :\n"
|
||||
<< tab8 << tab4 << module << "." << name_destroy(realname) << "(self.this)\n";
|
||||
!
|
||||
have_destructor = 1;
|
||||
-
|
||||
if (doc_entry) {
|
||||
doc_entry->usage = "";
|
||||
doc_entry->usage << "del this";
|
||||
}
|
||||
--- 492,504 ----
|
||||
if (class_renamed) realname = class_name;
|
||||
else realname = name;
|
||||
}
|
||||
|
||||
! *pyclass << tab4 << "def __del__(self, " << module << "=" << module << "):\n"
|
||||
<< tab8 << "if self.thisown == 1 :\n"
|
||||
<< tab8 << tab4 << module << "." << name_destroy(realname) << "(self.this)\n";
|
||||
! emitAddPragmas(*pyclass, "__del__", tab8);
|
||||
have_destructor = 1;
|
||||
if (doc_entry) {
|
||||
doc_entry->usage = "";
|
||||
doc_entry->usage << "del this";
|
||||
}
|
||||
***************
|
||||
*** 551,558 ****
|
||||
--- 552,561 ----
|
||||
repr << tab4 << "def __repr__(self):\n"
|
||||
<< tab8 << "return \"<C " << class_name <<" instance>\"\n";
|
||||
|
||||
classes << repr;
|
||||
+ emitAddPragmas(classes, "__class__", tab4);
|
||||
+
|
||||
}
|
||||
|
||||
// Now build the real class with a normal constructor
|
||||
|
||||
***************
|
||||
*** 746,753 ****
|
||||
--- 749,778 ----
|
||||
hash.add(name,copy_string((char *) hash.lookup(t->name)));
|
||||
}
|
||||
}
|
||||
|
||||
+ // --------------------------------------------------------------------------------
|
||||
+ // PYTHON::emitAddPragmas(String& output, char* name, char* spacing);
|
||||
+ //
|
||||
+ // Search the current_class->addPragmas vector for any text belonging to name.
|
||||
+ // Append the text properly spcaed to the output string.
|
||||
+ //
|
||||
+ // --------------------------------------------------------------------------------
|
||||
+
|
||||
+ void PYTHON::emitAddPragmas(String& output, char* name, char* spacing)
|
||||
+ {
|
||||
+ AddPragmaData* apData;
|
||||
+ size_t count;
|
||||
+ int i;
|
||||
+
|
||||
+ count = current_class->addPragmas.count();
|
||||
+ for (i=0; i<count; i++) {
|
||||
+ apData = (AddPragmaData*)current_class->addPragmas[i];
|
||||
+ if (strcmp(apData->m_method, name) == 0) {
|
||||
+ output << spacing << apData->m_text << "\n";
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
|
||||
/*********************************************************************************
|
||||
*
|
||||
* $Log$
|
||||
* Revision 1.2 1999/07/31 07:54:05 RD
|
||||
* wxPython 2.1b1:
|
||||
*
|
||||
* Added the missing wxWindow.GetUpdateRegion() method.
|
||||
*
|
||||
* Made a new change in SWIG (update your patches everybody) that
|
||||
* provides a fix for global shadow objects that get an exception in
|
||||
* their __del__ when their extension module has already been deleted.
|
||||
* It was only a 1 line change in .../SWIG/Modules/pycpp.cxx at about
|
||||
* line 496 if you want to do it by hand.
|
||||
*
|
||||
* It is now possible to run through MainLoop more than once in any one
|
||||
* process. The cleanup that used to happen as MainLoop completed (and
|
||||
* prevented it from running again) has been delayed until the wxc module
|
||||
* is being unloaded by Python.
|
||||
*
|
||||
* wxWindow.PopupMenu() now takes a wxPoint instead of x,y. Added
|
||||
* wxWindow.PopupMenuXY to be consistent with some other methods.
|
||||
*
|
||||
* Added wxGrid.SetEditInPlace and wxGrid.GetEditInPlace.
|
||||
*
|
||||
* You can now provide your own app.MainLoop method. See
|
||||
* wxPython/demo/demoMainLoop.py for an example and some explaination.
|
||||
*
|
||||
* Got the in-place-edit for the wxTreeCtrl fixed and added some demo
|
||||
* code to show how to use it.
|
||||
*
|
||||
* Put the wxIcon constructor back in for GTK as it now has one that
|
||||
* matches MSW's.
|
||||
*
|
||||
* Added wxGrid.GetCells
|
||||
*
|
||||
* Added wxSystemSettings static methods as functions with names like
|
||||
* wxSystemSettings_GetSystemColour.
|
||||
*
|
||||
* Removed wxPyMenu since using menu callbacks have been depreciated in
|
||||
* wxWindows. Use wxMenu and events instead.
|
||||
*
|
||||
* Added alternate wxBitmap constructor (for MSW only) as
|
||||
* wxBitmapFromData(data, type, width, height, depth = 1)
|
||||
*
|
||||
* Added a helper function named wxPyTypeCast that can convert shadow
|
||||
* objects of one type into shadow objects of another type. (Like doing
|
||||
* a down-cast.) See the implementation in wx.py for some docs.
|
||||
*
|
530
utils/wxPython/SWIG.patches/SWIG.patch
Normal file
@@ -0,0 +1,530 @@
|
||||
*** cplus.cxx.old Mon Feb 02 15:55:42 1998
|
||||
--- cplus.cxx Fri Aug 28 13:02:50 1998
|
||||
***************
|
||||
*** 581,612 ****
|
||||
// Class for managing class members (internally)
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
static char *inherit_base_class = 0;
|
||||
|
||||
- class CPP_class {
|
||||
- public:
|
||||
- char *classname; // Real class name
|
||||
- char *classrename; // New name of class (if applicable)
|
||||
- char *classtype; // class type (struct, union, class)
|
||||
- int strip; // Strip off class declarator
|
||||
- int wextern; // Value of extern wrapper variable for this class
|
||||
- int have_constructor; // Status bit indicating if we've seen a constructor
|
||||
- int have_destructor; // Status bit indicating if a destructor has been seen
|
||||
- int is_abstract; // Status bit indicating if this is an abstract class
|
||||
- int generate_default; // Generate default constructors
|
||||
- int objective_c; // Set if this is an objective C class
|
||||
- int error; // Set if this class can't be generated
|
||||
- int line; // Line number
|
||||
- char **baseclass; // Base classes (if any)
|
||||
- Hash *local; // Hash table for local types
|
||||
- Hash *scope; // Local scope hash table
|
||||
- DocEntry *de; // Documentation entry of class
|
||||
- CPP_member *members; // Linked list of members
|
||||
- CPP_class *next; // Next class
|
||||
- static CPP_class *classlist; // List of all classes stored
|
||||
|
||||
! CPP_class(char *name, char *ctype) {
|
||||
CPP_class *c;
|
||||
classname = copy_string(name);
|
||||
classtype = copy_string(ctype);
|
||||
classrename = 0;
|
||||
--- 581,593 ----
|
||||
// Class for managing class members (internally)
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
static char *inherit_base_class = 0;
|
||||
+ CPP_class *CPP_class::classlist = 0;
|
||||
+ CPP_class *current_class;
|
||||
|
||||
|
||||
! CPP_class::CPP_class(char *name, char *ctype) {
|
||||
CPP_class *c;
|
||||
classname = copy_string(name);
|
||||
classtype = copy_string(ctype);
|
||||
classrename = 0;
|
||||
***************
|
||||
*** 642,650 ****
|
||||
// ------------------------------------------------------------------------------
|
||||
// Add a new C++ member to this class
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
! void add_member(CPP_member *m) {
|
||||
CPP_member *cm;
|
||||
|
||||
// Set base class where this was defined
|
||||
if (inherit_base_class)
|
||||
--- 623,631 ----
|
||||
// ------------------------------------------------------------------------------
|
||||
// Add a new C++ member to this class
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
! void CPP_class::add_member(CPP_member *m) {
|
||||
CPP_member *cm;
|
||||
|
||||
// Set base class where this was defined
|
||||
if (inherit_base_class)
|
||||
***************
|
||||
*** 664,672 ****
|
||||
// ------------------------------------------------------------------------------
|
||||
// Search for a member with the given name. Returns the member on success, 0 on failure
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
! CPP_member *search_member(char *name) {
|
||||
CPP_member *m;
|
||||
char *c;
|
||||
m = members;
|
||||
while (m) {
|
||||
--- 645,653 ----
|
||||
// ------------------------------------------------------------------------------
|
||||
// Search for a member with the given name. Returns the member on success, 0 on failure
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
! CPP_member *CPP_class::search_member(char *name) {
|
||||
CPP_member *m;
|
||||
char *c;
|
||||
m = members;
|
||||
while (m) {
|
||||
***************
|
||||
*** 680,688 ****
|
||||
// ------------------------------------------------------------------------------
|
||||
// Inherit. Put all the declarations associated with this class into the current
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
! void inherit_decls(int mode) {
|
||||
CPP_member *m;
|
||||
m = members;
|
||||
while (m) {
|
||||
inherit_base_class = m->base;
|
||||
--- 661,669 ----
|
||||
// ------------------------------------------------------------------------------
|
||||
// Inherit. Put all the declarations associated with this class into the current
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
! void CPP_class::inherit_decls(int mode) {
|
||||
CPP_member *m;
|
||||
m = members;
|
||||
while (m) {
|
||||
inherit_base_class = m->base;
|
||||
***************
|
||||
*** 696,704 ****
|
||||
// ------------------------------------------------------------------------------
|
||||
// Emit all of the declarations associated with this class
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
! void emit_decls() {
|
||||
CPP_member *m = members;
|
||||
int last_scope = name_scope(0);
|
||||
abstract = is_abstract;
|
||||
while (m) {
|
||||
--- 677,685 ----
|
||||
// ------------------------------------------------------------------------------
|
||||
// Emit all of the declarations associated with this class
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
! void CPP_class::emit_decls() {
|
||||
CPP_member *m = members;
|
||||
int last_scope = name_scope(0);
|
||||
abstract = is_abstract;
|
||||
while (m) {
|
||||
***************
|
||||
*** 713,721 ****
|
||||
// ------------------------------------------------------------------------------
|
||||
// Search for a given class in the list
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
! static CPP_class *search(char *name) {
|
||||
CPP_class *c;
|
||||
c = classlist;
|
||||
if (!name) return 0;
|
||||
while (c) {
|
||||
--- 694,702 ----
|
||||
// ------------------------------------------------------------------------------
|
||||
// Search for a given class in the list
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
! CPP_class *CPP_class::search(char *name) {
|
||||
CPP_class *c;
|
||||
c = classlist;
|
||||
if (!name) return 0;
|
||||
while (c) {
|
||||
***************
|
||||
*** 729,737 ****
|
||||
// Add default constructors and destructors
|
||||
//
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
! void create_default() {
|
||||
if (!generate_default) return;
|
||||
|
||||
// Try to generate a constructor if not available.
|
||||
|
||||
--- 710,718 ----
|
||||
// Add default constructors and destructors
|
||||
//
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
! void CPP_class::create_default() {
|
||||
if (!generate_default) return;
|
||||
|
||||
// Try to generate a constructor if not available.
|
||||
|
||||
***************
|
||||
*** 751,764 ****
|
||||
// ------------------------------------------------------------------------------
|
||||
// Dump *all* of the classes saved out to the various
|
||||
// language modules (this does what cplus_close_class used to do)
|
||||
// ------------------------------------------------------------------------------
|
||||
- static void create_all();
|
||||
- };
|
||||
-
|
||||
- CPP_class *CPP_class::classlist = 0;
|
||||
- static CPP_class *current_class;
|
||||
-
|
||||
void CPP_class::create_all() {
|
||||
CPP_class *c;
|
||||
c = classlist;
|
||||
while (c) {
|
||||
--- 732,739 ----
|
||||
*** vector.cxx.old Fri Aug 28 15:23:16 1998
|
||||
--- vector.cxx Fri Aug 28 15:46:52 1998
|
||||
***************
|
||||
*** 0 ****
|
||||
--- 1,182 ----
|
||||
+
|
||||
+ /*******************************************************************************
|
||||
+ * Simplified Wrapper and Interface Generator (SWIG)
|
||||
+ *
|
||||
+ * Dave Beazley
|
||||
+ *
|
||||
+ * Department of Computer Science Theoretical Division (T-11)
|
||||
+ * University of Utah Los Alamos National Laboratory
|
||||
+ * Salt Lake City, Utah 84112 Los Alamos, New Mexico 87545
|
||||
+ * beazley@cs.utah.edu beazley@lanl.gov
|
||||
+ *
|
||||
+ * Copyright (c) 1995-1997
|
||||
+ * The University of Utah and the Regents of the University of California
|
||||
+ * All Rights Reserved
|
||||
+ *
|
||||
+ * Permission is hereby granted, without written agreement and without
|
||||
+ * license or royalty fees, to use, copy, modify, and distribute this
|
||||
+ * software and its documentation for any purpose, provided that
|
||||
+ * (1) The above copyright notice and the following two paragraphs
|
||||
+ * appear in all copies of the source code and (2) redistributions
|
||||
+ * including binaries reproduces these notices in the supporting
|
||||
+ * documentation. Substantial modifications to this software may be
|
||||
+ * copyrighted by their authors and need not follow the licensing terms
|
||||
+ * described here, provided that the new terms are clearly indicated in
|
||||
+ * all files where they apply.
|
||||
+ *
|
||||
+ * IN NO EVENT SHALL THE AUTHOR, THE UNIVERSITY OF CALIFORNIA, THE
|
||||
+ * UNIVERSITY OF UTAH OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY
|
||||
+ * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
|
||||
+ * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION,
|
||||
+ * EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF
|
||||
+ * THE POSSIBILITY OF SUCH DAMAGE.
|
||||
+ *
|
||||
+ * THE AUTHOR, THE UNIVERSITY OF CALIFORNIA, AND THE UNIVERSITY OF UTAH
|
||||
+ * SPECIFICALLY DISCLAIM ANY WARRANTIES,INCLUDING, BUT NOT LIMITED TO,
|
||||
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
+ * PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
|
||||
+ * THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE,
|
||||
+ * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
||||
+ *
|
||||
+ *******************************************************************************/
|
||||
+
|
||||
+ #include "internal.h"
|
||||
+
|
||||
+ /*******************************************************************************
|
||||
+ * $Header$
|
||||
+ *
|
||||
+ * File : vector.cxx
|
||||
+ *
|
||||
+ * A very simple Vector class. Allways assumes that memory allocations are
|
||||
+ * successful. Should be made more robust...
|
||||
+ *
|
||||
+ *******************************************************************************/
|
||||
+
|
||||
+ void* Vector::s_nullPtr = NULL;
|
||||
+
|
||||
+ // -----------------------------------------------------------------------------
|
||||
+ // Vector::Vector(size_t allocSize = 8)
|
||||
+ //
|
||||
+ // Constructor. Creates a new Vector.
|
||||
+ //
|
||||
+ // Inputs : initial allocation size (optional)
|
||||
+ //
|
||||
+ // Output : New Vector object.
|
||||
+ //
|
||||
+ // Side Effects : None
|
||||
+ // -----------------------------------------------------------------------------
|
||||
+
|
||||
+ Vector::Vector(size_t allocSize)
|
||||
+ : m_size(allocSize),
|
||||
+ m_count(0),
|
||||
+ m_data(0)
|
||||
+ {
|
||||
+ if (m_size) {
|
||||
+ m_data = new void*[m_size];
|
||||
+ int i;
|
||||
+ for (i=0; i<m_size;i++)
|
||||
+ m_data[i] = 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ // -----------------------------------------------------------------------------
|
||||
+ // Vector::~Vector
|
||||
+ //
|
||||
+ // Destructor. Only cleans up the vector, not its contents!
|
||||
+ //
|
||||
+ // -----------------------------------------------------------------------------
|
||||
+
|
||||
+
|
||||
+ Vector::~Vector() {
|
||||
+ if (m_data) {
|
||||
+ delete [] m_data;
|
||||
+ }
|
||||
+
|
||||
+ m_data = 0;
|
||||
+ m_size = m_count = 0;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+
|
||||
+ // -----------------------------------------------------------------------------
|
||||
+ // size_t Vector::extend(size_t newSize)
|
||||
+ //
|
||||
+ // Extends the vector to at least newSize length. Won't do anything if newSize
|
||||
+ // is smaller than the current size of the vector.
|
||||
+ //
|
||||
+ // Returns the new allocated size.
|
||||
+ //
|
||||
+ // -----------------------------------------------------------------------------
|
||||
+
|
||||
+ #define GRANULARITY 16
|
||||
+
|
||||
+ size_t Vector::extend(size_t newSize) {
|
||||
+
|
||||
+ if (newSize > m_size) {
|
||||
+ newSize = newSize + (GRANULARITY - (newSize % GRANULARITY));
|
||||
+
|
||||
+ void** temp = new void*[newSize];
|
||||
+ memcpy(temp, m_data, m_size*sizeof(void*));
|
||||
+
|
||||
+ int i;
|
||||
+ for (i=m_size; i<newSize; i++)
|
||||
+ temp[i] = 0;
|
||||
+
|
||||
+ delete [] m_data;
|
||||
+ m_data = temp;
|
||||
+ m_size = newSize;
|
||||
+ }
|
||||
+ return m_size;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ // -----------------------------------------------------------------------------
|
||||
+ // Vector::append(void* object)
|
||||
+ //
|
||||
+ // Appends the object pointer to vector at index m_count. Increments m_count.
|
||||
+ // Returns the new count.
|
||||
+ // -----------------------------------------------------------------------------
|
||||
+
|
||||
+ size_t Vector::append(void* object) {
|
||||
+ if (m_count >= m_size) {
|
||||
+ extend(m_count + 1);
|
||||
+ }
|
||||
+
|
||||
+ m_data[m_count] = object;
|
||||
+ m_count += 1;
|
||||
+
|
||||
+ return m_count;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ // -----------------------------------------------------------------------------
|
||||
+ // Vector::operator[] (size_t idx)
|
||||
+ //
|
||||
+ // Returns a reference to the void pointer at idx. If idx is beyond the range
|
||||
+ // of the vector, returns a reference to s_nullPtr.
|
||||
+ //
|
||||
+ // -----------------------------------------------------------------------------
|
||||
+
|
||||
+ void*& Vector::operator[] (size_t idx) {
|
||||
+ if (idx >= m_size) {
|
||||
+ s_nullPtr = 0;
|
||||
+ return s_nullPtr;
|
||||
+ }
|
||||
+
|
||||
+ return m_data[idx];
|
||||
+ }
|
||||
+
|
||||
+
|
||||
+ /***********************************************************************
|
||||
+ *
|
||||
+ * -- Revision History
|
||||
+ * $Log$
|
||||
+ * Revision 1.3 1999/07/31 07:54:05 RD
|
||||
+ * wxPython 2.1b1:
|
||||
+ *
|
||||
+ * Added the missing wxWindow.GetUpdateRegion() method.
|
||||
+ *
|
||||
+ * Made a new change in SWIG (update your patches everybody) that
|
||||
+ * provides a fix for global shadow objects that get an exception in
|
||||
+ * their __del__ when their extension module has already been deleted.
|
||||
+ * It was only a 1 line change in .../SWIG/Modules/pycpp.cxx at about
|
||||
+ * line 496 if you want to do it by hand.
|
||||
+ *
|
||||
+ * It is now possible to run through MainLoop more than once in any one
|
||||
+ * process. The cleanup that used to happen as MainLoop completed (and
|
||||
+ * prevented it from running again) has been delayed until the wxc module
|
||||
+ * is being unloaded by Python.
|
||||
+ *
|
||||
+ * wxWindow.PopupMenu() now takes a wxPoint instead of x,y. Added
|
||||
+ * wxWindow.PopupMenuXY to be consistent with some other methods.
|
||||
+ *
|
||||
+ * Added wxGrid.SetEditInPlace and wxGrid.GetEditInPlace.
|
||||
+ *
|
||||
+ * You can now provide your own app.MainLoop method. See
|
||||
+ * wxPython/demo/demoMainLoop.py for an example and some explaination.
|
||||
+ *
|
||||
+ * Got the in-place-edit for the wxTreeCtrl fixed and added some demo
|
||||
+ * code to show how to use it.
|
||||
+ *
|
||||
+ * Put the wxIcon constructor back in for GTK as it now has one that
|
||||
+ * matches MSW's.
|
||||
+ *
|
||||
+ * Added wxGrid.GetCells
|
||||
+ *
|
||||
+ * Added wxSystemSettings static methods as functions with names like
|
||||
+ * wxSystemSettings_GetSystemColour.
|
||||
+ *
|
||||
+ * Removed wxPyMenu since using menu callbacks have been depreciated in
|
||||
+ * wxWindows. Use wxMenu and events instead.
|
||||
+ *
|
||||
+ * Added alternate wxBitmap constructor (for MSW only) as
|
||||
+ * wxBitmapFromData(data, type, width, height, depth = 1)
|
||||
+ *
|
||||
+ * Added a helper function named wxPyTypeCast that can convert shadow
|
||||
+ * objects of one type into shadow objects of another type. (Like doing
|
||||
+ * a down-cast.) See the implementation in wx.py for some docs.
|
||||
+ *
|
||||
+ *
|
||||
+ ***********************************************************************/
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
+
|
||||
*** makefile.msc.old Mon Jun 23 16:15:32 1997
|
||||
--- makefile.msc Fri Aug 28 11:21:58 1998
|
||||
***************
|
||||
*** 33,50 ****
|
||||
# Normally, you shouldn't have to change anything below this point #
|
||||
########################################################################
|
||||
|
||||
LIBOBJS = main.obj scanner.obj symbol.obj include.obj types.obj parms.obj emit.obj newdoc.obj ascii.obj \
|
||||
! html.obj latex.obj cplus.obj lang.obj hash.obj sstring.obj wrapfunc.obj getopt.obj comment.obj typemap.obj naming.obj
|
||||
|
||||
LIBSRCS = main.cxx scanner.cxx symbol.cxx include.cxx types.cxx parms.cxx emit.cxx \
|
||||
! newdoc.cxx ascii.cxx html.cxx latex.cxx cplus.cxx lang.cxx hash.cxx \
|
||||
sstring.cxx wrapfunc.cxx getopt.cxx comment.cxx typemap.cxx naming.cxx
|
||||
|
||||
LIBHEADERS = internal.h ../Include/swig.h latex.h ascii.h html.h nodoc.h
|
||||
LIBNAME = ..\libswig.lib
|
||||
INCLUDE = -I../Include -I$(STD_INC)
|
||||
! CFLAGS = -Zi -nologo -DSWIG_LIB="\"$(SWIG_LIB)\"" -DSWIG_CC="\"$(CC)\"" -DMSDOS -DSTDC_HEADERS=1 -DHAVE_LIBDL=1 $(SWIG_OPTS)
|
||||
LD_FLAGS = -VERBOSE
|
||||
|
||||
|
||||
#
|
||||
--- 33,50 ----
|
||||
# Normally, you shouldn't have to change anything below this point #
|
||||
########################################################################
|
||||
|
||||
LIBOBJS = main.obj scanner.obj symbol.obj include.obj types.obj parms.obj emit.obj newdoc.obj ascii.obj \
|
||||
! html.obj latex.obj cplus.obj lang.obj hash.obj vector.obj sstring.obj wrapfunc.obj getopt.obj comment.obj typemap.obj naming.obj
|
||||
|
||||
LIBSRCS = main.cxx scanner.cxx symbol.cxx include.cxx types.cxx parms.cxx emit.cxx \
|
||||
! newdoc.cxx ascii.cxx html.cxx latex.cxx cplus.cxx lang.cxx hash.cxx vector.cxx \
|
||||
sstring.cxx wrapfunc.cxx getopt.cxx comment.cxx typemap.cxx naming.cxx
|
||||
|
||||
LIBHEADERS = internal.h ../Include/swig.h latex.h ascii.h html.h nodoc.h
|
||||
LIBNAME = ..\libswig.lib
|
||||
INCLUDE = -I../Include -I$(STD_INC)
|
||||
! CFLAGS = -Zi -nologo -DSWIG_LIB="\"$(SWIG_LIB)\"" -DSWIG_CC="\"$(CC)\"" -DMSDOS -DSTDC_HEADERS=1 -DHAVE_LIBDL=1 $(SWIG_OPTS) $(OTHERFLAGS)
|
||||
LD_FLAGS = -VERBOSE
|
||||
|
||||
|
||||
#
|
||||
*** makefile.bc.old Sun Jan 04 13:49:24 1998
|
||||
--- makefile.bc Fri Aug 28 15:42:58 1998
|
||||
***************
|
||||
*** 34,47 ****
|
||||
########################################################################
|
||||
|
||||
LIBOBJS = main.obj scanner.obj symbol.obj include.obj types.obj parms.obj \
|
||||
emit.obj newdoc.obj ascii.obj \
|
||||
! html.obj latex.obj cplus.obj lang.obj hash.obj sstring.obj \
|
||||
wrapfunc.obj getopt.obj comment.obj typemap.obj naming.obj
|
||||
|
||||
LIBSRCS = main.cxx scanner.cxx symbol.cxx include.cxx types.cxx parms.cxx \
|
||||
emit.cxx newdoc.cxx ascii.cxx html.cxx latex.cxx cplus.cxx lang.cxx hash.cxx \
|
||||
! sstring.cxx wrapfunc.cxx getopt.cxx comment.cxx typemap.cxx naming.cxx
|
||||
|
||||
LIBHEADERS = internal.h ../Include/swig.h latex.h ascii.h html.h nodoc.h
|
||||
LIBNAME = ..\libswig.lib
|
||||
INCLUDE = -I../Include -I$(STD_INC)
|
||||
--- 34,47 ----
|
||||
########################################################################
|
||||
|
||||
LIBOBJS = main.obj scanner.obj symbol.obj include.obj types.obj parms.obj \
|
||||
emit.obj newdoc.obj ascii.obj \
|
||||
! html.obj latex.obj cplus.obj lang.obj hash.obj vector.obj sstring.obj \
|
||||
wrapfunc.obj getopt.obj comment.obj typemap.obj naming.obj
|
||||
|
||||
LIBSRCS = main.cxx scanner.cxx symbol.cxx include.cxx types.cxx parms.cxx \
|
||||
emit.cxx newdoc.cxx ascii.cxx html.cxx latex.cxx cplus.cxx lang.cxx hash.cxx \
|
||||
! vector.cxx sstring.cxx wrapfunc.cxx getopt.cxx comment.cxx typemap.cxx naming.cxx
|
||||
|
||||
LIBHEADERS = internal.h ../Include/swig.h latex.h ascii.h html.h nodoc.h
|
||||
LIBNAME = ..\libswig.lib
|
||||
INCLUDE = -I../Include -I$(STD_INC)
|
||||
*** Makefile.in.old Wed May 28 23:56:56 1997
|
||||
--- Makefile.in Fri Aug 28 15:43:36 1998
|
||||
***************
|
||||
*** 51,63 ****
|
||||
# Normally, you shouldn't have to change anything below this point #
|
||||
########################################################################
|
||||
|
||||
LIBOBJS = main.o scanner.o symbol.o include.o types.o parms.o emit.o newdoc.o ascii.o \
|
||||
! html.o latex.o cplus.o lang.o hash.o sstring.o wrapfunc.o getopt.o comment.o \
|
||||
typemap.o naming.o
|
||||
|
||||
LIBSRCS = main.cxx scanner.cxx symbol.cxx include.cxx types.cxx parms.cxx emit.cxx \
|
||||
! newdoc.cxx ascii.cxx html.cxx latex.cxx cplus.cxx lang.cxx hash.cxx \
|
||||
sstring.cxx wrapfunc.cxx getopt.cxx comment.cxx typemap.cxx naming.cxx
|
||||
|
||||
LIBHEADERS = internal.h ../Include/swig.h latex.h ascii.h html.h nodoc.h
|
||||
LIB = ../libswig.a
|
||||
--- 51,63 ----
|
||||
# Normally, you shouldn't have to change anything below this point #
|
||||
########################################################################
|
||||
|
||||
LIBOBJS = main.o scanner.o symbol.o include.o types.o parms.o emit.o newdoc.o ascii.o \
|
||||
! html.o latex.o cplus.o lang.o hash.o vector.o sstring.o wrapfunc.o getopt.o comment.o \
|
||||
typemap.o naming.o
|
||||
|
||||
LIBSRCS = main.cxx scanner.cxx symbol.cxx include.cxx types.cxx parms.cxx emit.cxx \
|
||||
! newdoc.cxx ascii.cxx html.cxx latex.cxx cplus.cxx lang.cxx hash.cxx vector.cxx \
|
||||
sstring.cxx wrapfunc.cxx getopt.cxx comment.cxx typemap.cxx naming.cxx
|
||||
|
||||
LIBHEADERS = internal.h ../Include/swig.h latex.h ascii.h html.h nodoc.h
|
||||
LIB = ../libswig.a
|
5
utils/wxPython/demo/.cvsignore
Normal file
@@ -0,0 +1,5 @@
|
||||
*.pyc
|
||||
.emacs.desktop
|
||||
hangman_dict.txt
|
||||
setup.bat
|
||||
tmphtml.txt
|
13
utils/wxPython/demo/ColorPanel.py
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class ColoredPanel(wxWindow):
|
||||
def __init__(self, parent, color):
|
||||
wxWindow.__init__(self, parent, -1,
|
||||
wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER)
|
||||
self.SetBackgroundColour(color)
|
||||
|
||||
#---------------------------------------------------------------------------
|
126
utils/wxPython/demo/DialogUnits.py
Normal file
@@ -0,0 +1,126 @@
|
||||
#!/usr/bin/env python
|
||||
#----------------------------------------------------------------------------
|
||||
# Name: DialogUnits.py
|
||||
# Purpose: A minimal wxPython program that is a bit smarter than test1.
|
||||
#
|
||||
# Author: Robin Dunn
|
||||
#
|
||||
# Created: A long time ago, in a galaxy far, far away...
|
||||
# RCS-ID: $Id$
|
||||
# Copyright: (c) 1998 by Total Control Software
|
||||
# Licence: wxWindows license
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
## import all of the wxPython GUI package
|
||||
from wxPython.wx import *
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
## Create a new frame class, derived from the wxPython Frame.
|
||||
class MyFrame(wxFrame):
|
||||
|
||||
def __init__(self, parent, id, title):
|
||||
# First, call the base class' __init__ method to create the frame
|
||||
wxFrame.__init__(self, parent, id, title,
|
||||
wxPoint(100, 100), wxSize(160, 100))
|
||||
|
||||
# Associate some events with methods of this class
|
||||
EVT_SIZE(self, self.OnSize)
|
||||
EVT_MOVE(self, self.OnMove)
|
||||
|
||||
# Add a panel and some controls to display the size and position
|
||||
panel = wxPanel(self, -1)
|
||||
wxStaticText(panel, -1, "Size:",
|
||||
wxDLG_PNT(panel, wxPoint(4, 4)), wxDefaultSize)
|
||||
wxStaticText(panel, -1, "Pos:",
|
||||
wxDLG_PNT(panel, wxPoint(4, 16)), wxDefaultSize)
|
||||
self.sizeCtrl = wxTextCtrl(panel, -1, "",
|
||||
wxDLG_PNT(panel, wxPoint(24, 4)),
|
||||
wxDLG_SZE(panel, wxSize(36, -1)),
|
||||
wxTE_READONLY)
|
||||
|
||||
self.posCtrl = wxTextCtrl(panel, -1, "",
|
||||
wxDLG_PNT(panel, wxPoint(24, 16)),
|
||||
wxDLG_SZE(panel, wxSize(36, -1)),
|
||||
wxTE_READONLY)
|
||||
|
||||
print wxDLG_PNT(panel, wxPoint(24, 4)), wxDLG_SZE(panel, wxSize(36, -1))
|
||||
print wxDLG_PNT(panel, wxPoint(24, 16)),wxDLG_SZE(panel, wxSize(36, -1))
|
||||
|
||||
|
||||
# This method is called automatically when the CLOSE event is
|
||||
# sent to this window
|
||||
def OnCloseWindow(self, event):
|
||||
# tell the window to kill itself
|
||||
self.Destroy()
|
||||
|
||||
|
||||
# This method is called by the System when the window is resized,
|
||||
# because of the association above.
|
||||
def OnSize(self, event):
|
||||
size = event.GetSize()
|
||||
self.sizeCtrl.SetValue("%s, %s" % (size.width, size.height))
|
||||
|
||||
# tell the event system to continue looking for an event handler,
|
||||
# so the default handler will get called.
|
||||
event.Skip()
|
||||
|
||||
# This method is called by the System when the window is moved,
|
||||
# because of the association above.
|
||||
def OnMove(self, event):
|
||||
pos = event.GetPosition()
|
||||
self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y))
|
||||
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# if running standalone
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Every wxWindows application must have a class derived from wxApp
|
||||
class MyApp(wxApp):
|
||||
|
||||
# wxWindows calls this method to initialize the application
|
||||
def OnInit(self):
|
||||
|
||||
# Create an instance of our customized Frame class
|
||||
frame = MyFrame(NULL, -1, "This is a test")
|
||||
frame.Show(true)
|
||||
|
||||
# Tell wxWindows that this is our main window
|
||||
self.SetTopWindow(frame)
|
||||
|
||||
# Return a success flag
|
||||
return true
|
||||
|
||||
|
||||
app = MyApp(0) # Create an instance of the application class
|
||||
app.MainLoop() # Tell it to start processing events
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# if running as part of the Demo Framework...
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = MyFrame(frame, -1, "This is a test")
|
||||
frame.otherWin = win
|
||||
win.Show(true)
|
||||
|
||||
|
||||
overview = """\
|
||||
A simple example that shows how to use Dialog Units.
|
||||
"""
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
62
utils/wxPython/demo/Layoutf.py
Normal file
@@ -0,0 +1,62 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
from wxPython.lib.layoutf import Layoutf
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestLayoutf(wxPanel):
|
||||
def __init__(self, parent):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
|
||||
self.SetAutoLayout(true)
|
||||
EVT_BUTTON(self, 100, self.OnButton)
|
||||
|
||||
self.panelA = wxWindow(self, -1, wxPyDefaultPosition, wxPyDefaultSize, wxSIMPLE_BORDER)
|
||||
self.panelA.SetBackgroundColour(wxBLUE)
|
||||
self.panelA.SetConstraints(Layoutf('t=t10#1;l=l10#1;b=b10#1;r%r50#1',(self,)))
|
||||
|
||||
self.panelB = wxWindow(self, -1, wxPyDefaultPosition, wxPyDefaultSize, wxSIMPLE_BORDER)
|
||||
self.panelB.SetBackgroundColour(wxRED)
|
||||
self.panelB.SetConstraints(Layoutf('t=t10#1;r=r10#1;b%b30#1;l>10#2', (self,self.panelA)))
|
||||
|
||||
self.panelC = wxWindow(self, -1, wxPyDefaultPosition, wxPyDefaultSize, wxSIMPLE_BORDER)
|
||||
self.panelC.SetBackgroundColour(wxWHITE)
|
||||
self.panelC.SetConstraints(Layoutf('t_10#3;r=r10#1;b=b10#1;l>10#2', (self,self.panelA,self.panelB)))
|
||||
|
||||
b = wxButton(self.panelA, 100, ' Panel A ')
|
||||
b.SetConstraints(Layoutf('X=X#1;Y=Y#1;h*;w%w50#1', (self.panelA,)))
|
||||
|
||||
b = wxButton(self.panelB, 100, ' Panel B ')
|
||||
b.SetConstraints(Layoutf('t=t2#1;r=r4#1;h*;w*', (self.panelB,)))
|
||||
|
||||
self.panelD = wxWindow(self.panelC, -1, wxPyDefaultPosition, wxPyDefaultSize, wxSIMPLE_BORDER)
|
||||
self.panelD.SetBackgroundColour(wxGREEN)
|
||||
self.panelD.SetConstraints(Layoutf('b%h50#1;r%w50#1;h=h#2;w=w#2', (self.panelC, b)))
|
||||
|
||||
b = wxButton(self.panelC, 100, ' Panel C ')
|
||||
b.SetConstraints(Layoutf('t_#1;l>#1;h*;w*', (self.panelD,)))
|
||||
|
||||
wxStaticText(self.panelD, -1, "Panel D", wxPoint(4, 4)).SetBackgroundColour(wxGREEN)
|
||||
|
||||
def OnButton(self, event):
|
||||
wxBell()
|
||||
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestLayoutf(nb)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = Layoutf.__doc__
|
336
utils/wxPython/demo/Main.py
Normal file
@@ -0,0 +1,336 @@
|
||||
#!/bin/env python
|
||||
#----------------------------------------------------------------------------
|
||||
# Name: Main.py
|
||||
# Purpose: Testing lots of stuff, controls, window types, etc.
|
||||
#
|
||||
# Author: Robin Dunn & Gary Dumer
|
||||
#
|
||||
# Created:
|
||||
# RCS-ID: $Id$
|
||||
# Copyright: (c) 1999 by Total Control Software
|
||||
# Licence: wxWindows license
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
import sys, os
|
||||
from wxPython.wx import *
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
_treeList = [
|
||||
('Managed Windows', ['wxFrame', 'wxDialog', 'wxMiniFrame']),
|
||||
|
||||
('Miscellaneous Windows', ['wxGrid', 'wxSashWindow',
|
||||
'wxScrolledWindow', 'wxSplitterWindow',
|
||||
'wxStatusBar', 'wxToolBar', 'wxNotebook']),
|
||||
|
||||
('Common Dialogs', ['wxColourDialog', 'wxDirDialog', 'wxFileDialog',
|
||||
'wxSingleChoiceDialog', 'wxTextEntryDialog',
|
||||
'wxFontDialog', 'wxPageSetupDialog', 'wxPrintDialog',
|
||||
'wxMessageDialog', 'wxProgressDialog']),
|
||||
|
||||
('Controls', ['wxButton', 'wxCheckBox', 'wxCheckListBox', 'wxChoice',
|
||||
'wxComboBox', 'wxGauge', 'wxListBox', 'wxListCtrl', 'wxTextCtrl',
|
||||
'wxTreeCtrl', 'wxSpinButton', 'wxStaticText', 'wxStaticBitmap',
|
||||
'wxRadioBox', 'wxSlider']),
|
||||
|
||||
('Window Layout', ['wxLayoutConstraints', 'Sizers']),
|
||||
|
||||
('Miscellaneous', ['wxTimer', 'wxGLCanvas', 'DialogUnits', 'wxImage',
|
||||
'PrintFramework']),
|
||||
|
||||
('wxPython Library', ['Sizers', 'Layoutf', 'wxScrolledMessageDialog',
|
||||
'wxMultipleChoiceDialog', 'wxPlotCanvas']),
|
||||
|
||||
('Cool Contribs', ['pyTree', 'hangman', 'SlashDot', 'XMLtreeview']),
|
||||
|
||||
]
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class wxPythonDemo(wxFrame):
|
||||
def __init__(self, parent, id, title):
|
||||
wxFrame.__init__(self, parent, -1, title,
|
||||
wxDefaultPosition, wxSize(700, 550))
|
||||
if wxPlatform == '__WXMSW__':
|
||||
self.icon = wxIcon('bitmaps/mondrian.ico', wxBITMAP_TYPE_ICO)
|
||||
self.SetIcon(self.icon)
|
||||
|
||||
self.otherWin = None
|
||||
EVT_IDLE(self, self.OnIdle)
|
||||
|
||||
self.Centre(wxBOTH)
|
||||
self.CreateStatusBar(1, wxST_SIZEGRIP)
|
||||
splitter = wxSplitterWindow(self, -1)
|
||||
splitter2 = wxSplitterWindow(splitter, -1)
|
||||
|
||||
# Prevent TreeCtrl from displaying all items after destruction
|
||||
self.dying = false
|
||||
|
||||
# Make a File menu
|
||||
self.mainmenu = wxMenuBar()
|
||||
menu = wxMenu()
|
||||
mID = NewId()
|
||||
menu.Append(mID, 'E&xit', 'Get the heck outta here!')
|
||||
EVT_MENU(self, mID, self.OnFileExit)
|
||||
self.mainmenu.Append(menu, '&File')
|
||||
|
||||
# Make a Help menu
|
||||
mID = NewId()
|
||||
menu = wxMenu()
|
||||
menu.Append(mID, '&About', 'wxPython RULES!!!')
|
||||
EVT_MENU(self, mID, self.OnHelpAbout)
|
||||
self.mainmenu.Append(menu, '&Help')
|
||||
self.SetMenuBar(self.mainmenu)
|
||||
|
||||
selectedDemo = None
|
||||
selectedDemoName = "Nada"
|
||||
if len(sys.argv) == 2:
|
||||
selectedDemoName = sys.argv[1]
|
||||
|
||||
# Create a TreeCtrl
|
||||
tID = NewId()
|
||||
self.tree = wxTreeCtrl(splitter, tID)
|
||||
root = self.tree.AddRoot("Overview")
|
||||
for item in _treeList:
|
||||
child = self.tree.AppendItem(root, item[0])
|
||||
for childItem in item[1]:
|
||||
theDemo = self.tree.AppendItem(child, childItem)
|
||||
if childItem == selectedDemoName:
|
||||
selectedDemo = theDemo
|
||||
|
||||
self.tree.Expand(root)
|
||||
EVT_TREE_ITEM_EXPANDED (self.tree, tID, self.OnItemExpanded)
|
||||
EVT_TREE_ITEM_COLLAPSED (self.tree, tID, self.OnItemCollapsed)
|
||||
EVT_TREE_SEL_CHANGED (self.tree, tID, self.OnSelChanged)
|
||||
|
||||
# Create a Notebook
|
||||
self.nb = wxNotebook(splitter2, -1)
|
||||
|
||||
# Set up a TextCtrl on the Overview Notebook page
|
||||
self.ovr = wxTextCtrl(self.nb, -1, style = wxTE_MULTILINE|wxTE_READONLY)
|
||||
self.nb.AddPage(self.ovr, "Overview")
|
||||
|
||||
|
||||
# Set up a TextCtrl on the Demo Code Notebook page
|
||||
self.txt = wxTextCtrl(self.nb, -1,
|
||||
style = wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL)
|
||||
self.txt.SetFont(wxFont(9, wxMODERN, wxNORMAL, wxNORMAL, false))
|
||||
self.nb.AddPage(self.txt, "Demo Code")
|
||||
|
||||
|
||||
# Set up a log on the View Log Notebook page
|
||||
self.log = wxTextCtrl(splitter2, -1,
|
||||
style = wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL)
|
||||
(w, self.charHeight) = self.log.GetTextExtent('X')
|
||||
#self.WriteText('wxPython Demo Log:\n')
|
||||
|
||||
|
||||
# add the windows to the splitter and split it.
|
||||
splitter.SplitVertically(self.tree, splitter2)
|
||||
splitter.SetSashPosition(180, true)
|
||||
splitter.SetMinimumPaneSize(20)
|
||||
|
||||
splitter2.SplitHorizontally(self.nb, self.log)
|
||||
splitter2.SetSashPosition(360, true)
|
||||
splitter2.SetMinimumPaneSize(20)
|
||||
|
||||
# make our log window be stdout
|
||||
#sys.stdout = self
|
||||
|
||||
# select initial items
|
||||
self.nb.SetSelection(0)
|
||||
self.tree.SelectItem(root)
|
||||
if selectedDemo:
|
||||
self.tree.SelectItem(selectedDemo)
|
||||
self.tree.EnsureVisible(selectedDemo)
|
||||
|
||||
#---------------------------------------------
|
||||
def WriteText(self, text):
|
||||
self.log.WriteText(text)
|
||||
w, h = self.log.GetClientSizeTuple()
|
||||
numLines = h/self.charHeight
|
||||
x, y = self.log.PositionToXY(self.log.GetLastPosition())
|
||||
self.log.ShowPosition(self.log.XYToPosition(x, y-numLines))
|
||||
##self.log.ShowPosition(self.log.GetLastPosition())
|
||||
self.log.SetInsertionPointEnd()
|
||||
|
||||
def write(self, txt):
|
||||
self.WriteText(txt)
|
||||
|
||||
#---------------------------------------------
|
||||
def OnItemExpanded(self, event):
|
||||
item = event.GetItem()
|
||||
self.log.WriteText("OnItemExpanded: %s\n" % self.tree.GetItemText(item))
|
||||
|
||||
#---------------------------------------------
|
||||
def OnItemCollapsed(self, event):
|
||||
item = event.GetItem()
|
||||
self.log.WriteText("OnItemCollapsed: %s\n" % self.tree.GetItemText(item))
|
||||
|
||||
#---------------------------------------------
|
||||
def OnSelChanged(self, event):
|
||||
if self.dying:
|
||||
return
|
||||
|
||||
if self.nb.GetPageCount() == 3:
|
||||
if self.nb.GetSelection() == 2:
|
||||
self.nb.SetSelection(0)
|
||||
self.nb.DeletePage(2)
|
||||
|
||||
item = event.GetItem()
|
||||
itemText = self.tree.GetItemText(item)
|
||||
|
||||
if itemText == 'Overview':
|
||||
self.GetDemoFile('Main.py')
|
||||
self.SetOverview('Overview', overview)
|
||||
#self.nb.ResizeChildren();
|
||||
self.nb.Refresh();
|
||||
#wxYield()
|
||||
|
||||
else:
|
||||
if os.path.exists(itemText + '.py'):
|
||||
self.GetDemoFile(itemText + '.py')
|
||||
module = __import__(itemText, globals())
|
||||
self.SetOverview(itemText, module.overview)
|
||||
|
||||
# in case runTest is modal, make sure things look right...
|
||||
self.nb.Refresh();
|
||||
wxYield()
|
||||
|
||||
window = module.runTest(self, self.nb, self)
|
||||
if window:
|
||||
self.nb.AddPage(window, 'Demo')
|
||||
self.nb.SetSelection(2)
|
||||
self.nb.ResizeChildren();
|
||||
|
||||
else:
|
||||
self.ovr.Clear()
|
||||
self.txt.Clear()
|
||||
|
||||
|
||||
#---------------------------------------------
|
||||
# Get the Demo files
|
||||
def GetDemoFile(self, filename):
|
||||
self.txt.Clear()
|
||||
#if not self.txt.LoadFile(filename):
|
||||
# self.txt.WriteText("Cannot open %s file." % filename)
|
||||
try:
|
||||
self.txt.SetValue(open(filename).read())
|
||||
except IOError:
|
||||
self.txt.WriteText("Cannot open %s file." % filename)
|
||||
|
||||
|
||||
self.txt.SetInsertionPoint(0)
|
||||
self.txt.ShowPosition(0)
|
||||
|
||||
#---------------------------------------------
|
||||
def SetOverview(self, name, text):
|
||||
self.ovr.Clear()
|
||||
self.ovr.WriteText(text)
|
||||
self.nb.SetPageText(0, name)
|
||||
self.ovr.SetInsertionPoint(0)
|
||||
self.ovr.ShowPosition(0)
|
||||
|
||||
#---------------------------------------------
|
||||
# Menu methods
|
||||
def OnFileExit(self, event):
|
||||
self.Close()
|
||||
|
||||
|
||||
def OnHelpAbout(self, event):
|
||||
about = wxMessageDialog(self,
|
||||
"wxPython is a Python extension module that\n"
|
||||
"encapsulates the wxWindows GUI classes.\n\n"
|
||||
"This demo shows off some of the capabilities\n"
|
||||
"of wxPython.\n\n"
|
||||
" Developed by Robin Dunn",
|
||||
"About wxPython", wxOK)
|
||||
about.ShowModal()
|
||||
about.Destroy()
|
||||
|
||||
|
||||
#---------------------------------------------
|
||||
def OnCloseWindow(self, event):
|
||||
self.dying = true
|
||||
self.Destroy()
|
||||
|
||||
#---------------------------------------------
|
||||
def OnIdle(self, event):
|
||||
if self.otherWin:
|
||||
self.otherWin.Raise()
|
||||
self.otherWin = None
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class MyApp(wxApp):
|
||||
def OnInit(self):
|
||||
wxImage_AddHandler(wxJPEGHandler())
|
||||
wxImage_AddHandler(wxPNGHandler())
|
||||
wxImage_AddHandler(wxGIFHandler())
|
||||
frame = wxPythonDemo(NULL, -1, "wxPython: (A Demonstration)")
|
||||
frame.Show(true)
|
||||
self.SetTopWindow(frame)
|
||||
return true
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def main():
|
||||
app = MyApp(0)
|
||||
app.MainLoop()
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
Python
|
||||
------------
|
||||
|
||||
Python is an interpreted, interactive, object-oriented programming language often compared to Tcl, Perl, Scheme, or Java.
|
||||
|
||||
Python combines remarkable power with very clear syntax. It has modules, classes, exceptions, very high level dynamic data types, and dynamic typing. There are interfaces to many system calls and libraries, and new built-in modules are easily written in C or C++. Python is also usable as an extension language for applications that need a programmable interface.
|
||||
|
||||
wxWindows
|
||||
--------------------
|
||||
|
||||
wxWindows is a free C++ framework designed to make cross-platform programming child's play. Well, almost. wxWindows 2 supports Windows 3.1/95/98/NT, Unix with GTK/Motif/Lesstif, with a Mac version underway. Other ports are under consideration.
|
||||
|
||||
wxWindows is a set of libraries that allows C++ applications to compile and run on several different types of computers, with minimal source code changes. There is one library per supported GUI (such as Motif, or Windows). As well as providing a common API (Application Programming Interface) for GUI functionality, it provides functionality for accessing some commonly-used operating system facilities, such as copying or deleting files. wxWindows is a 'framework' in the sense that it provides a lot of built-in functionality, which the application can use or replace as required, thus saving a great deal of coding effort. Basic data structures such as strings, linked lists and hash tables are also supported.
|
||||
|
||||
wxPython
|
||||
----------------
|
||||
|
||||
wxPython is a Python extension module that encapsulates the wxWindows GUI classes. Currently it is only available for the Win32 and GTK ports of wxWindows, but as soon as the other ports are brought up to the same level as Win32 and GTK, it should be fairly trivial to enable wxPython to be used with the new GUI.
|
||||
|
||||
The wxPython extension module attempts to mirror the class heiarchy of wxWindows as closely as possible. This means that there is a wxFrame class in wxPython that looks, smells, tastes and acts almost the same as the wxFrame class in the C++ version. Unfortunately, because of differences in the languages, wxPython doesn't match wxWindows exactly, but the differences should be easy to absorb because they are natural to Python. For example, some methods that return multiple values via argument pointers in C++ will return a tuple of values in Python.
|
||||
|
||||
There is still much to be done for wxPython, many classes still need to be mirrored. Also, wxWindows is still somewhat of a moving target so it is a bit of an effort just keeping wxPython up to date. On the other hand, there are enough of the core classes completed that useful applications can be written.
|
||||
|
||||
wxPython is close enough to the C++ version that the majority of the wxPython documentation is actually just notes attached to the C++ documents that describe the places where wxPython is different. There is also a series of sample programs included, and a series of documentation pages that assist the programmer in getting started with wxPython.
|
||||
"""
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
179
utils/wxPython/demo/PrintFramework.py
Normal file
@@ -0,0 +1,179 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
from wxPython.lib.sizers import *
|
||||
from wxScrolledWindow import MyCanvas
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
class MyPrintout(wxPrintout):
|
||||
def __init__(self, canvas, log):
|
||||
wxPrintout.__init__(self)
|
||||
self.canvas = canvas
|
||||
self.log = log
|
||||
|
||||
def OnBeginDocument(self, start, end):
|
||||
self.log.WriteText("wxPrintout.OnBeginDocument\n")
|
||||
return self.base_OnBeginDocument(start, end)
|
||||
|
||||
def OnEndDocument(self):
|
||||
self.log.WriteText("wxPrintout.OnEndDocument\n")
|
||||
self.base_OnEndDocument()
|
||||
|
||||
def OnBeginPrinting(self):
|
||||
self.log.WriteText("wxPrintout.OnBeginPrinting\n")
|
||||
self.base_OnBeginPrinting()
|
||||
|
||||
def OnEndPrinting(self):
|
||||
self.log.WriteText("wxPrintout.OnEndPrinting\n")
|
||||
self.base_OnEndPrinting()
|
||||
|
||||
def OnPreparePrinting(self):
|
||||
self.log.WriteText("wxPrintout.OnPreparePrinting\n")
|
||||
self.base_OnPreparePrinting()
|
||||
|
||||
def HasPage(self, page):
|
||||
self.log.WriteText("wxPrintout.HasPage\n")
|
||||
if page == 1:
|
||||
return true
|
||||
else:
|
||||
return false
|
||||
|
||||
def GetPageInfo(self):
|
||||
self.log.WriteText("wxPrintout.GetPageInfo\n")
|
||||
return (1, 1, 1, 1)
|
||||
|
||||
def OnPrintPage(self, page):
|
||||
self.log.WriteText("wxPrintout.OnPrintPage\n")
|
||||
dc = self.GetDC()
|
||||
|
||||
#-------------------------------------------
|
||||
# One possible method of setting scaling factors...
|
||||
|
||||
maxX = self.canvas.getWidth()
|
||||
maxY = self.canvas.getHeight()
|
||||
|
||||
# Let's have at least 50 device units margin
|
||||
marginX = 50
|
||||
marginY = 50
|
||||
|
||||
# Add the margin to the graphic size
|
||||
maxX = maxX + (2 * marginX)
|
||||
maxY = maxY + (2 * marginY)
|
||||
|
||||
# Get the size of the DC in pixels
|
||||
(w, h) = dc.GetSizeTuple()
|
||||
|
||||
# Calculate a suitable scaling factor
|
||||
scaleX = float(w) / maxX
|
||||
scaleY = float(h) / maxY
|
||||
|
||||
# Use x or y scaling factor, whichever fits on the DC
|
||||
actualScale = min(scaleX, scaleY)
|
||||
|
||||
# Calculate the position on the DC for centring the graphic
|
||||
posX = (w - (self.canvas.getWidth() * actualScale)) / 2.0
|
||||
posY = (h - (self.canvas.getHeight() * actualScale)) / 2.0
|
||||
|
||||
# Set the scale and origin
|
||||
dc.SetUserScale(actualScale, actualScale)
|
||||
dc.SetDeviceOrigin(int(posX), int(posY))
|
||||
|
||||
#-------------------------------------------
|
||||
|
||||
self.canvas.DoDrawing(dc)
|
||||
return true
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
class TestPrintPanel(wxPanel):
|
||||
def __init__(self, parent, frame, log):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
self.log = log
|
||||
self.frame = frame
|
||||
|
||||
|
||||
self.printData = wxPrintData()
|
||||
self.printData.SetPaperId(wxPAPER_LETTER)
|
||||
|
||||
self.box = box.wxBoxSizer(wxVERTICAL)
|
||||
self.canvas = MyCanvas(self)
|
||||
self.box.Add(self.canvas, 1)
|
||||
|
||||
subbox = wxBoxSizer(wxHORIZONTAL)
|
||||
btn = wxButton(self, 1201, "Print Setup")
|
||||
EVT_BUTTON(self, 1201, self.OnPrintSetup)
|
||||
subbox.Add(btn, 1)
|
||||
|
||||
btn = wxButton(self, 1202, "Print Preview")
|
||||
EVT_BUTTON(self, 1202, self.OnPrintPreview)
|
||||
subbox.Add(btn, 1)
|
||||
|
||||
btn = wxButton(self, 1203, "Print")
|
||||
EVT_BUTTON(self, 1203, self.OnDoPrint)
|
||||
subbox.Add(btn, 1)
|
||||
|
||||
self.box.Add(subbox)
|
||||
|
||||
|
||||
|
||||
def OnSize(self, event):
|
||||
size = self.GetClientSize()
|
||||
self.box.Layout(size)
|
||||
|
||||
def OnPrintSetup(self, event):
|
||||
printerDialog = wxPrintDialog(self)
|
||||
printerDialog.GetPrintDialogData().SetPrintData(self.printData)
|
||||
printerDialog.GetPrintDialogData().SetSetupDialog(true)
|
||||
printerDialog.ShowModal();
|
||||
self.printData = printerDialog.GetPrintDialogData().GetPrintData()
|
||||
printerDialog.Destroy()
|
||||
|
||||
|
||||
def OnPrintPreview(self, event):
|
||||
self.log.WriteText("OnPrintPreview\n")
|
||||
printout = MyPrintout(self.canvas, self.log)
|
||||
printout2 = MyPrintout(self.canvas, self.log)
|
||||
self.preview = wxPrintPreview(printout, printout2, self.printData)
|
||||
if not self.preview.Ok():
|
||||
self.log.WriteText("Houston, we have a problem...\n")
|
||||
return
|
||||
|
||||
frame = wxPreviewFrame(self.preview, self.frame, "This is a print preview")
|
||||
|
||||
frame.Initialize()
|
||||
frame.SetPosition(self.frame.GetPosition())
|
||||
frame.SetSize(self.frame.GetSize())
|
||||
frame.Show(true)
|
||||
|
||||
|
||||
|
||||
def OnDoPrint(self, event):
|
||||
pdd = wxPrintDialogData()
|
||||
pdd.SetPrintData(self.printData)
|
||||
printer = wxPrinter(pdd)
|
||||
printout = MyPrintout(self.canvas, self.log)
|
||||
if not printer.Print(self.frame, printout):
|
||||
wxMessageBox("There was a problem printing.\nPerhaps your current printer is not set correctly?", "Printing", wxOK)
|
||||
else:
|
||||
self.printData = printer.GetPrintDialogData().GetPrintData()
|
||||
printout.Destroy()
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestPrintPanel(nb, frame, log)
|
||||
return win
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
||||
|
7
utils/wxPython/demo/README.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
To run the main demo in this directory, execute demo.py. In other
|
||||
words, one of the following commands should do it:
|
||||
|
||||
demo.py
|
||||
python demo.py
|
||||
pythonw demo.py
|
||||
|
365
utils/wxPython/demo/Sizers.py
Normal file
@@ -0,0 +1,365 @@
|
||||
#----------------------------------------------------------------------
|
||||
# sizer test code
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
from wxPython.wx import *
|
||||
from wxPython.lib.sizers import *
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def makeSimpleBox1(win):
|
||||
box = wxBoxSizer(wxHORIZONTAL)
|
||||
box.Add(wxButton(win, 1010, "one"), 0)
|
||||
box.Add(wxButton(win, 1010, "two"), 0)
|
||||
box.Add(wxButton(win, 1010, "three"), 0)
|
||||
box.Add(wxButton(win, 1010, "four"), 0)
|
||||
|
||||
return box
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def makeSimpleBox2(win):
|
||||
box = wxBoxSizer(wxVERTICAL)
|
||||
box.Add(wxButton(win, 1010, "one"), 0)
|
||||
box.Add(wxButton(win, 1010, "two"), 0)
|
||||
box.Add(wxButton(win, 1010, "three"), 0)
|
||||
box.Add(wxButton(win, 1010, "four"), 0)
|
||||
|
||||
return box
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def makeSimpleBox3(win):
|
||||
box = wxBoxSizer(wxHORIZONTAL)
|
||||
box.Add(wxButton(win, 1010, "one"), 0)
|
||||
box.Add(wxButton(win, 1010, "two"), 0)
|
||||
box.Add(wxButton(win, 1010, "three"), 0)
|
||||
box.Add(wxButton(win, 1010, "four"), 0)
|
||||
box.Add(wxButton(win, 1010, "five"), 1)
|
||||
|
||||
return box
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def makeSimpleBox4(win):
|
||||
box = wxBoxSizer(wxHORIZONTAL)
|
||||
box.Add(wxButton(win, 1010, "one"), 0)
|
||||
box.Add(wxButton(win, 1010, "two"), 0)
|
||||
box.Add(wxButton(win, 1010, "three"), 1)
|
||||
box.Add(wxButton(win, 1010, "four"), 1)
|
||||
box.Add(wxButton(win, 1010, "five"), 1)
|
||||
|
||||
return box
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def makeSimpleBox5(win):
|
||||
box = wxBoxSizer(wxHORIZONTAL)
|
||||
box.Add(wxButton(win, 1010, "one"), 0)
|
||||
box.Add(wxButton(win, 1010, "two"), 0)
|
||||
box.Add(wxButton(win, 1010, "three"), 3)
|
||||
box.Add(wxButton(win, 1010, "four"), 1)
|
||||
box.Add(wxButton(win, 1010, "five"), 1)
|
||||
|
||||
return box
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def makeSimpleBox6(win):
|
||||
box = wxBoxSizer(wxHORIZONTAL, wxSize(250, 50))
|
||||
box.Add(wxButton(win, 1010, "10"), 10)
|
||||
box.Add(wxButton(win, 1010, "20"), 20)
|
||||
box.Add(wxButton(win, 1010, "30"), 30)
|
||||
box.Add(wxButton(win, 1010, "15"), 15)
|
||||
box.Add(wxButton(win, 1010, "5"), 5)
|
||||
|
||||
return box
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def makeSimpleBorder1(win):
|
||||
bdr = wxBorderSizer(wxALL)
|
||||
btn = wxButton(win, 1010, "border")
|
||||
btn.SetSize(wxSize(80, 80))
|
||||
bdr.Add(btn, 15)
|
||||
|
||||
return bdr
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def makeSimpleBorder2(win):
|
||||
bdr = wxBorderSizer(wxEAST | wxWEST)
|
||||
btn = wxButton(win, 1010, "border")
|
||||
btn.SetSize(wxSize(80, 80))
|
||||
bdr.Add(btn, 15)
|
||||
|
||||
return bdr
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def makeSimpleBorder3(win):
|
||||
bdr = wxBorderSizer(wxNORTH | wxWEST)
|
||||
btn = wxButton(win, 1010, "border")
|
||||
btn.SetSize(wxSize(80, 80))
|
||||
bdr.Add(btn, 15)
|
||||
|
||||
return bdr
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def makeBoxInBox(win):
|
||||
box = wxBoxSizer(wxVERTICAL)
|
||||
|
||||
box.Add(wxButton(win, 1010, "one"))
|
||||
|
||||
box2 = wxBoxSizer(wxHORIZONTAL)
|
||||
box2.AddMany([ wxButton(win, 1010, "two"),
|
||||
wxButton(win, 1010, "three"),
|
||||
wxButton(win, 1010, "four"),
|
||||
wxButton(win, 1010, "five"),
|
||||
])
|
||||
|
||||
box3 = wxBoxSizer(wxVERTICAL)
|
||||
box3.AddMany([ (wxButton(win, 1010, "six"), 0),
|
||||
(wxButton(win, 1010, "seven"), 2),
|
||||
(wxButton(win, 1010, "eight"), 1),
|
||||
(wxButton(win, 1010, "nine"), 1),
|
||||
])
|
||||
|
||||
box2.Add(box3, 1)
|
||||
box.Add(box2, 1)
|
||||
|
||||
box.Add(wxButton(win, 1010, "ten"))
|
||||
|
||||
return box
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def makeBoxInBorder(win):
|
||||
bdr = wxBorderSizer(wxALL)
|
||||
box = makeSimpleBox3(win)
|
||||
bdr.Add(box, 15)
|
||||
|
||||
return bdr
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def makeBorderInBox(win):
|
||||
insideBox = wxBoxSizer(wxHORIZONTAL)
|
||||
|
||||
box2 = wxBoxSizer(wxHORIZONTAL)
|
||||
box2.AddMany([ wxButton(win, 1010, "one"),
|
||||
wxButton(win, 1010, "two"),
|
||||
wxButton(win, 1010, "three"),
|
||||
wxButton(win, 1010, "four"),
|
||||
wxButton(win, 1010, "five"),
|
||||
])
|
||||
|
||||
insideBox.Add(box2, 0)
|
||||
|
||||
bdr = wxBorderSizer(wxALL)
|
||||
bdr.Add(wxButton(win, 1010, "border"), 20)
|
||||
insideBox.Add(bdr, 1)
|
||||
|
||||
box3 = wxBoxSizer(wxVERTICAL)
|
||||
box3.AddMany([ (wxButton(win, 1010, "six"), 0),
|
||||
(wxButton(win, 1010, "seven"), 2),
|
||||
(wxButton(win, 1010, "eight"), 1),
|
||||
(wxButton(win, 1010, "nine"), 1),
|
||||
])
|
||||
insideBox.Add(box3, 1)
|
||||
|
||||
outsideBox = wxBoxSizer(wxVERTICAL)
|
||||
outsideBox.Add(wxButton(win, 1010, "top"))
|
||||
outsideBox.Add(insideBox, 1)
|
||||
outsideBox.Add(wxButton(win, 1010, "bottom"))
|
||||
|
||||
return outsideBox
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
theTests = [
|
||||
("Simple horizontal boxes", makeSimpleBox1,
|
||||
"This is a HORIZONTAL box sizer with four non-stretchable buttons held "
|
||||
"within it. Notice that the buttons are added and aligned in the horizontal "
|
||||
"dimension. Also notice that they are fixed size in the horizontal dimension, "
|
||||
"but will stretch vertically."
|
||||
),
|
||||
|
||||
("Simple vertical boxes", makeSimpleBox2,
|
||||
"Exactly the same as the previous sample but using a VERTICAL box sizer "
|
||||
"instead of a HORIZONTAL one."
|
||||
),
|
||||
|
||||
("Add a stretchable", makeSimpleBox3,
|
||||
"We've added one more button with the strechable flag turned on. Notice "
|
||||
"how it grows to fill the extra space in the otherwise fixed dimension."
|
||||
),
|
||||
|
||||
("More than one stretchable", makeSimpleBox4,
|
||||
"Here there are several items that are stretchable, they all divide up the "
|
||||
"extra space evenly."
|
||||
),
|
||||
|
||||
("Weighting factor", makeSimpleBox5,
|
||||
"This one shows more than one strechable, but one of them has a weighting "
|
||||
"factor so it gets more of the free space."
|
||||
),
|
||||
|
||||
# ("Percent Sizer", makeSimpleBox6,
|
||||
# "You can use the wxBoxSizer like a Percent Sizer. Just make sure that all "
|
||||
# "the weighting factors add up to 100!"
|
||||
# ),
|
||||
|
||||
("", None, ""),
|
||||
|
||||
("Simple border sizer", makeSimpleBorder1,
|
||||
"The wxBorderSizer leaves empty space around its contents. This one "
|
||||
"gives a border all the way around."
|
||||
),
|
||||
|
||||
("East and West border", makeSimpleBorder2,
|
||||
"You can pick and choose which sides have borders."
|
||||
),
|
||||
|
||||
("North and West border", makeSimpleBorder3,
|
||||
"You can pick and choose which sides have borders."
|
||||
),
|
||||
|
||||
("", None, ""),
|
||||
|
||||
("Boxes inside of boxes", makeBoxInBox,
|
||||
"This one shows nesting of boxes within boxes within boxes, using both "
|
||||
"orientations. Notice also that button seven has a greater weighting "
|
||||
"factor than its siblings."
|
||||
),
|
||||
|
||||
("Boxes inside a Border", makeBoxInBorder,
|
||||
"Sizers of different types can be nested withing each other as well. "
|
||||
"Here is a box sizer with several buttons embedded within a border sizer."
|
||||
),
|
||||
|
||||
("Border in a Box", makeBorderInBox,
|
||||
"Another nesting example. This one has Boxes and a Border inside another Box."
|
||||
),
|
||||
|
||||
]
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
class TestFrame(wxFrame):
|
||||
def __init__(self, parent, title, sizerFunc):
|
||||
wxFrame.__init__(self, parent, -1, title)
|
||||
EVT_BUTTON(self, 1010, self.OnButton)
|
||||
|
||||
self.sizer = sizerFunc(self)
|
||||
self.CreateStatusBar()
|
||||
self.SetStatusText("Resize this frame to see how the sizers respond...")
|
||||
self.sizer.FitWindow(self)
|
||||
|
||||
|
||||
def OnSize(self, event):
|
||||
size = self.GetClientSize()
|
||||
self.sizer.Layout(size)
|
||||
|
||||
def OnCloseWindow(self, event):
|
||||
self.MakeModal(false)
|
||||
self.Destroy()
|
||||
|
||||
def OnButton(self, event):
|
||||
self.Close(true)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
class TestSelectionPanel(wxPanel):
|
||||
def __init__(self, parent, frame):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
self.frame = frame
|
||||
|
||||
self.list = wxListBox(self, 401,
|
||||
wxDLG_PNT(self, 10, 10), wxDLG_SZE(self, 100, 60),
|
||||
[])
|
||||
EVT_LISTBOX(self, 401, self.OnSelect)
|
||||
EVT_LISTBOX_DCLICK(self, 401, self.OnDClick)
|
||||
|
||||
wxButton(self, 402, "Try it!", wxDLG_PNT(self, 120, 10)).SetDefault()
|
||||
EVT_BUTTON(self, 402, self.OnDClick)
|
||||
|
||||
self.text = wxTextCtrl(self, -1, "",
|
||||
wxDLG_PNT(self, 10, 80),
|
||||
wxDLG_SZE(self, 200, 60),
|
||||
wxTE_MULTILINE | wxTE_READONLY)
|
||||
|
||||
for item in theTests:
|
||||
self.list.Append(item[0])
|
||||
|
||||
|
||||
|
||||
def OnSelect(self, event):
|
||||
pos = self.list.GetSelection()
|
||||
self.text.SetValue(theTests[pos][2])
|
||||
|
||||
|
||||
def OnDClick(self, event):
|
||||
pos = self.list.GetSelection()
|
||||
title = theTests[pos][0]
|
||||
func = theTests[pos][1]
|
||||
|
||||
if func:
|
||||
win = TestFrame(self, title, func)
|
||||
win.CentreOnParent(wxBOTH)
|
||||
win.Show(true)
|
||||
win.MakeModal(true)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestSelectionPanel(nb, frame)
|
||||
return win
|
||||
|
||||
overview = wxSizer.__doc__ + '\n' + '-' * 80 + '\n' + \
|
||||
wxBoxSizer.__doc__ + '\n' + '-' * 80 + '\n' + \
|
||||
wxBorderSizer.__doc__
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
class MainFrame(wxFrame):
|
||||
def __init__(self):
|
||||
wxFrame.__init__(self, NULL, -1, "Testing...")
|
||||
|
||||
self.CreateStatusBar()
|
||||
mainmenu = wxMenuBar()
|
||||
menu = wxMenu()
|
||||
menu.Append(200, 'E&xit', 'Get the heck outta here!')
|
||||
mainmenu.Append(menu, "&File")
|
||||
self.SetMenuBar(mainmenu)
|
||||
EVT_MENU(self, 200, self.OnExit)
|
||||
self.panel = TestSelectionPanel(self)
|
||||
self.SetSize(wxSize(400, 380))
|
||||
|
||||
def OnCloseWindow(self, event):
|
||||
self.Destroy()
|
||||
|
||||
def OnExit(self, event):
|
||||
self.Close(true)
|
||||
|
||||
|
||||
class TestApp(wxApp):
|
||||
def OnInit(self):
|
||||
frame = MainFrame()
|
||||
frame.Show(true)
|
||||
self.SetTopWindow(frame)
|
||||
return true
|
||||
|
||||
app = TestApp(0)
|
||||
app.MainLoop()
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
378
utils/wxPython/demo/SlashDot.py
Normal file
@@ -0,0 +1,378 @@
|
||||
#!/usr/bin/python
|
||||
"""This is SlashDot 1.2
|
||||
|
||||
It's the obligatory Slashdot.org headlines reader that
|
||||
any modern widget set/library must have in order to be taken
|
||||
seriously :-)
|
||||
|
||||
Usage is quite simple; wxSlash attempts to download the
|
||||
'ultramode.txt' file from http://slashdot.org, which
|
||||
contains the headlines in a computer friendly format. It
|
||||
then displays said headlines in a wxWindows list control.
|
||||
|
||||
You can read articles using either Python's html library
|
||||
or an external browser. Uncheck the 'browser->internal' menu
|
||||
item to use the latter option. Use the settings dialog box
|
||||
to set which external browser is started.
|
||||
|
||||
This code is available under the wxWindows license, see
|
||||
elsewhere. If you modify this code, be aware of the fact
|
||||
that slashdot.org's maintainer, CmdrTaco, explicitly asks
|
||||
'ultramode.txt' downloaders not to do this automatically
|
||||
more than twice per hour. If this feature is abused,
|
||||
CmdrTaco may remove the ultramode file completely and that
|
||||
will make a *lot* of people unhappy.
|
||||
|
||||
I want to thank Alex Shnitman whose slashes.pl
|
||||
(Perl/GTK) script gave me the idea for this applet.
|
||||
|
||||
Have fun with it,
|
||||
|
||||
Harm van der Heijden (H.v.d.Heijden@phys.tue.nl)
|
||||
"""
|
||||
|
||||
from wxPython.wx import *
|
||||
from httplib import HTTP
|
||||
from htmllib import HTMLParser
|
||||
import os
|
||||
import re
|
||||
import formatter
|
||||
|
||||
class HTMLTextView(wxFrame):
|
||||
def __init__(self, parent, id, title='HTMLTextView', url=None):
|
||||
wxFrame.__init__(self, parent, id, title, wxPyDefaultPosition,
|
||||
wxSize(600,400))
|
||||
|
||||
self.mainmenu = wxMenuBar()
|
||||
|
||||
menu = wxMenu()
|
||||
menu.Append(201, '&Open URL...', 'Open URL')
|
||||
EVT_MENU(self, 201, self.OnFileOpen)
|
||||
menu.Append(209, 'E&xit', 'Exit viewer')
|
||||
EVT_MENU(self, 209, self.OnFileExit)
|
||||
|
||||
self.mainmenu.Append(menu, '&File')
|
||||
self.SetMenuBar(self.mainmenu)
|
||||
self.CreateStatusBar(1)
|
||||
|
||||
self.text = wxTextCtrl(self, -1, "", wxPyDefaultPosition,
|
||||
wxPyDefaultSize, wxTE_MULTILINE | wxTE_READONLY)
|
||||
|
||||
if (url):
|
||||
self.OpenURL(url)
|
||||
|
||||
def logprint(self, x):
|
||||
self.SetStatusText(x)
|
||||
|
||||
def OpenURL(self, url):
|
||||
self.url = url
|
||||
m = re.match('file:(\S+)\s*', url)
|
||||
if m:
|
||||
f = open(m.groups()[0],'r')
|
||||
else:
|
||||
m = re.match('http://([^/]+)(/\S*)\s*', url)
|
||||
if m:
|
||||
host = m.groups()[0]
|
||||
path = m.groups()[1]
|
||||
else:
|
||||
m = re.match('http://(\S+)\s*', url)
|
||||
if not m:
|
||||
# Invalid URL
|
||||
self.logprint("Invalid or unsupported URL: %s" % (url))
|
||||
return
|
||||
host = m.groups()[0]
|
||||
path = ''
|
||||
f = RetrieveAsFile(host,path,self.logprint)
|
||||
if not f:
|
||||
self.logprint("Could not open %s" % (url))
|
||||
return
|
||||
self.logprint("Receiving data...")
|
||||
data = f.read()
|
||||
tmp = open('tmphtml.txt','w')
|
||||
fmt = formatter.AbstractFormatter(formatter.DumbWriter(tmp))
|
||||
p = HTMLParser(fmt)
|
||||
self.logprint("Parsing data...")
|
||||
p.feed(data)
|
||||
p.close()
|
||||
tmp.close()
|
||||
tmp = open('tmphtml.txt', 'r')
|
||||
self.text.SetValue(tmp.read())
|
||||
self.SetTitle(url)
|
||||
self.logprint(url)
|
||||
|
||||
def OnFileOpen(self, event):
|
||||
dlg = wxTextEntryDialog(self, "Enter URL to open:", "")
|
||||
if dlg.ShowModal() == wxID_OK:
|
||||
url = dlg.GetValue()
|
||||
else:
|
||||
url = None
|
||||
if url:
|
||||
self.OpenURL(url)
|
||||
|
||||
def OnFileExit(self, event):
|
||||
self.Close()
|
||||
|
||||
def OnCloseWindow(self, event):
|
||||
self.Destroy()
|
||||
|
||||
|
||||
def ParseSlashdot(f):
|
||||
art_sep = re.compile('%%\r?\n')
|
||||
line_sep = re.compile('\r?\n')
|
||||
data = f.read()
|
||||
list = art_sep.split(data)
|
||||
art_list = []
|
||||
for i in range(1,len(list)-1):
|
||||
art_list.append(line_sep.split(list[i]))
|
||||
return art_list
|
||||
|
||||
def myprint(x):
|
||||
print x
|
||||
|
||||
def RetrieveAsFile(host, path='', logprint = myprint):
|
||||
try:
|
||||
h = HTTP(host)
|
||||
except:
|
||||
logprint("Failed to create HTTP connection to %s... is the network available?" % (host))
|
||||
return None
|
||||
h.putrequest('GET',path)
|
||||
h.putheader('Accept','text/html')
|
||||
h.putheader('Accept','text/plain')
|
||||
h.endheaders()
|
||||
errcode, errmsg, headers = h.getreply()
|
||||
if errcode != 200:
|
||||
logprint("HTTP error code %d: %s" % (errcode, errmsg))
|
||||
return None
|
||||
f = h.getfile()
|
||||
# f = open('/home/harm/ultramode.txt','r')
|
||||
return f
|
||||
|
||||
|
||||
class AppStatusBar(wxStatusBar):
|
||||
def __init__(self, parent):
|
||||
wxStatusBar.__init__(self,parent, -1)
|
||||
self.SetFieldsCount(2)
|
||||
self.SetStatusWidths([-1, 100])
|
||||
self.but = wxButton(self, 1001, "Refresh")
|
||||
EVT_BUTTON(self, 1001, parent.OnViewRefresh)
|
||||
self.OnSize(None)
|
||||
|
||||
def logprint(self,x):
|
||||
self.SetStatusText(x,0)
|
||||
|
||||
def OnSize(self, event):
|
||||
rect = self.GetFieldRect(1)
|
||||
self.but.SetPosition(wxPoint(rect.x+2, rect.y+2))
|
||||
self.but.SetSize(wxSize(rect.width-4, rect.height-4))
|
||||
|
||||
# This is a simple timer class to start a function after a short delay;
|
||||
class QuickTimer(wxTimer):
|
||||
def __init__(self, func, wait=100):
|
||||
wxTimer.__init__(self)
|
||||
self.callback = func
|
||||
self.Start(wait); # wait .1 second (.001 second doesn't work. why?)
|
||||
def Notify(self):
|
||||
self.Stop();
|
||||
apply(self.callback, ());
|
||||
|
||||
class AppFrame(wxFrame):
|
||||
def __init__(self, parent, id, title):
|
||||
wxFrame.__init__(self, parent, id, title, wxPyDefaultPosition,
|
||||
wxSize(650, 250))
|
||||
|
||||
# if the window manager closes the window:
|
||||
EVT_CLOSE(self, self.OnCloseWindow);
|
||||
|
||||
# Now Create the menu bar and items
|
||||
self.mainmenu = wxMenuBar()
|
||||
|
||||
menu = wxMenu()
|
||||
menu.Append(209, 'E&xit', 'Enough of this already!')
|
||||
EVT_MENU(self, 209, self.OnFileExit)
|
||||
self.mainmenu.Append(menu, '&File')
|
||||
menu = wxMenu()
|
||||
menu.Append(210, '&Refresh', 'Refresh headlines')
|
||||
EVT_MENU(self, 210, self.OnViewRefresh)
|
||||
menu.Append(211, '&Slashdot Index', 'View Slashdot index')
|
||||
EVT_MENU(self, 211, self.OnViewIndex)
|
||||
menu.Append(212, 'Selected &Article', 'View selected article')
|
||||
EVT_MENU(self, 212, self.OnViewArticle)
|
||||
self.mainmenu.Append(menu, '&View')
|
||||
menu = wxMenu()
|
||||
menu.Append(220, '&Internal', 'Use internal text browser',TRUE)
|
||||
menu.Check(220, true)
|
||||
self.UseInternal = 1;
|
||||
EVT_MENU(self, 220, self.OnBrowserInternal)
|
||||
menu.Append(222, '&Settings...', 'External browser Settings')
|
||||
EVT_MENU(self, 222, self.OnBrowserSettings)
|
||||
self.mainmenu.Append(menu, '&Browser')
|
||||
menu = wxMenu()
|
||||
menu.Append(230, '&About', 'Some documentation');
|
||||
EVT_MENU(self, 230, self.OnAbout)
|
||||
self.mainmenu.Append(menu, '&Help')
|
||||
|
||||
self.SetMenuBar(self.mainmenu)
|
||||
|
||||
if wxPlatform == '__WXGTK__':
|
||||
# I like lynx. Also Netscape 4.5 doesn't react to my cmdline opts
|
||||
self.BrowserSettings = "xterm -e lynx %s &"
|
||||
elif wxPlatform == '__WXMSW__':
|
||||
# netscape 4.x likes to hang out here...
|
||||
self.BrowserSettings = '\\progra~1\\Netscape\\Communicator\\Program\\netscape.exe %s'
|
||||
else:
|
||||
# a wild guess...
|
||||
self.BrowserSettings = 'netscape %s'
|
||||
|
||||
# A status bar to tell people what's happening
|
||||
self.sb = AppStatusBar(self)
|
||||
self.SetStatusBar(self.sb)
|
||||
|
||||
self.list = wxListCtrl(self, 1100)
|
||||
self.list.SetSingleStyle(wxLC_REPORT)
|
||||
self.list.InsertColumn(0, 'Subject')
|
||||
self.list.InsertColumn(1, 'Date')
|
||||
self.list.InsertColumn(2, 'Posted by')
|
||||
self.list.InsertColumn(3, 'Comments')
|
||||
self.list.SetColumnWidth(0, 300)
|
||||
self.list.SetColumnWidth(1, 150)
|
||||
self.list.SetColumnWidth(2, 100)
|
||||
self.list.SetColumnWidth(3, 100)
|
||||
|
||||
EVT_LIST_ITEM_SELECTED(self, 1100, self.OnItemSelected)
|
||||
EVT_LEFT_DCLICK(self.list, self.OnLeftDClick)
|
||||
|
||||
self.logprint("Connecting to slashdot... Please wait.")
|
||||
# wxYield doesn't yet work here. That's why we use a timer
|
||||
# to make sure that we see some GUI stuff before the slashdot
|
||||
# file is transfered.
|
||||
self.timer = QuickTimer(self.DoRefresh, 1000)
|
||||
|
||||
def logprint(self, x):
|
||||
self.sb.logprint(x)
|
||||
|
||||
def OnFileExit(self, event):
|
||||
self.Destroy()
|
||||
|
||||
def DoRefresh(self):
|
||||
f = RetrieveAsFile('slashdot.org','/ultramode.txt',self.sb.logprint)
|
||||
art_list = ParseSlashdot(f)
|
||||
self.list.DeleteAllItems()
|
||||
self.url = []
|
||||
self.current = -1
|
||||
i = 0;
|
||||
for article in art_list:
|
||||
self.list.InsertStringItem(i, article[0])
|
||||
self.list.SetStringItem(i, 1, article[2])
|
||||
self.list.SetStringItem(i, 2, article[3])
|
||||
self.list.SetStringItem(i, 3, article[6])
|
||||
self.url.append(article[1])
|
||||
i = i + 1
|
||||
self.logprint("File retrieved OK.")
|
||||
|
||||
def OnViewRefresh(self, event):
|
||||
self.logprint("Connecting to slashdot... Please wait.");
|
||||
wxYield()
|
||||
self.DoRefresh()
|
||||
|
||||
def DoViewIndex(self):
|
||||
if self.UseInternal:
|
||||
self.view = HTMLTextView(self, -1, 'slashdot.org',
|
||||
'http://slashdot.org')
|
||||
self.view.Show(true)
|
||||
else:
|
||||
self.logprint(self.BrowserSettings % ('http://slashdot.org'))
|
||||
#os.system(self.BrowserSettings % ('http://slashdot.org'))
|
||||
wxExecute(self.BrowserSettings % ('http://slashdot.org'))
|
||||
self.logprint("OK")
|
||||
|
||||
def OnViewIndex(self, event):
|
||||
self.logprint("Starting browser... Please wait.")
|
||||
wxYield()
|
||||
self.DoViewIndex()
|
||||
|
||||
def DoViewArticle(self):
|
||||
if self.current<0: return
|
||||
url = self.url[self.current]
|
||||
if self.UseInternal:
|
||||
self.view = HTMLTextView(self, -1, url, url)
|
||||
self.view.Show(true)
|
||||
else:
|
||||
self.logprint(self.BrowserSettings % (url))
|
||||
os.system(self.BrowserSettings % (url))
|
||||
self.logprint("OK")
|
||||
|
||||
def OnViewArticle(self, event):
|
||||
self.logprint("Starting browser... Please wait.")
|
||||
wxYield()
|
||||
self.DoViewArticle()
|
||||
|
||||
def OnBrowserInternal(self, event):
|
||||
if self.mainmenu.Checked(220):
|
||||
self.UseInternal = 1
|
||||
else:
|
||||
self.UseInternal = 0
|
||||
|
||||
def OnBrowserSettings(self, event):
|
||||
dlg = wxTextEntryDialog(self, "Enter command to view URL.\nUse %s as a placeholder for the URL.", "", self.BrowserSettings);
|
||||
if dlg.ShowModal() == wxID_OK:
|
||||
self.BrowserSettings = dlg.GetValue()
|
||||
|
||||
def OnAbout(self, event):
|
||||
dlg = wxMessageDialog(self, __doc__, "wxSlash", wxOK | wxICON_INFORMATION)
|
||||
dlg.ShowModal()
|
||||
|
||||
def OnItemSelected(self, event):
|
||||
self.current = event.m_itemIndex
|
||||
self.logprint("URL: %s" % (self.url[self.current]))
|
||||
|
||||
def OnLeftDClick(self, event):
|
||||
(x,y) = event.Position();
|
||||
# Actually, we should convert x,y to logical coords using
|
||||
# a dc, but only for a wxScrolledWindow widget.
|
||||
# Now wxGTK derives wxListCtrl from wxScrolledWindow,
|
||||
# and wxMSW from wxControl... So that doesn't work.
|
||||
#dc = wxClientDC(self.list)
|
||||
##self.list.PrepareDC(dc)
|
||||
#x = dc.DeviceToLogicalX( event.GetX() )
|
||||
#y = dc.DeviceToLogicalY( event.GetY() )
|
||||
id = self.list.HitTest(wxPoint(x,y))
|
||||
#print "Double click at %d %d" % (x,y), id
|
||||
# Okay, we got a double click. Let's assume it's the current selection
|
||||
wxYield()
|
||||
self.OnViewArticle(event)
|
||||
|
||||
def OnCloseWindow(self, event):
|
||||
self.Destroy()
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# if running standalone
|
||||
|
||||
if __name__ == '__main__':
|
||||
class MyApp(wxApp):
|
||||
def OnInit(self):
|
||||
frame = AppFrame(NULL, -1, "Slashdot Breaking News")
|
||||
frame.Show(true)
|
||||
self.SetTopWindow(frame)
|
||||
return true
|
||||
|
||||
app = MyApp(0)
|
||||
app.MainLoop()
|
||||
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# if running as part of the Demo Framework...
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = AppFrame(NULL, -1, "Slashdot Breaking News")
|
||||
frame.otherWin = win
|
||||
win.Show(true)
|
||||
|
||||
|
||||
overview = __doc__
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
66
utils/wxPython/demo/XMLtreeview.py
Normal file
@@ -0,0 +1,66 @@
|
||||
|
||||
import string
|
||||
|
||||
from wxPython.wx import *
|
||||
try:
|
||||
from xml.parsers import pyexpat
|
||||
haveXML = true
|
||||
except ImportError:
|
||||
haveXML = false
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
if not haveXML:
|
||||
def runTest(frame, nb, log):
|
||||
dlg = wxMessageDialog(frame, 'This demo requires the XML package. See http://www.python.org/sigs/xml-sig/',
|
||||
'Sorry', wxOK | wxICON_INFORMATION)
|
||||
dlg.ShowModal()
|
||||
dlg.Destroy()
|
||||
|
||||
else:
|
||||
|
||||
class XMLTree(wxTreeCtrl):
|
||||
def __init__(self, parent, ID):
|
||||
wxTreeCtrl.__init__(self, parent, ID)
|
||||
self.nodeStack = [self.AddRoot("Root")]
|
||||
|
||||
# Define a handler for start element events
|
||||
def StartElement(self, name, attrs ):
|
||||
self.nodeStack.append(self.AppendItem(self.nodeStack[-1], name))
|
||||
|
||||
def EndElement(self, name ):
|
||||
self.nodeStack = self.nodeStack[:-1]
|
||||
|
||||
def CharacterData(self, data ):
|
||||
if string.strip(data):
|
||||
self.AppendItem(self.nodeStack[-1], data)
|
||||
|
||||
|
||||
def LoadTree(self, filename):
|
||||
# Create a parser
|
||||
Parser = pyexpat.ParserCreate()
|
||||
|
||||
# Tell the parser what the start element handler is
|
||||
Parser.StartElementHandler = self.StartElement
|
||||
Parser.EndElementHandler = self.EndElement
|
||||
Parser.CharacterDataHandler = self.CharacterData
|
||||
|
||||
# Parse the XML File
|
||||
ParserStatus = Parser.Parse(open(filename,'r').read(), 1)
|
||||
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = XMLTree(nb, -1)
|
||||
win.LoadTree("paper.xml")
|
||||
return win
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
||||
|
BIN
utils/wxPython/demo/bitmaps/copy.bmp
Normal file
After Width: | Height: | Size: 238 B |
BIN
utils/wxPython/demo/bitmaps/image.bmp
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
utils/wxPython/demo/bitmaps/image.gif
Normal file
After Width: | Height: | Size: 6.9 KiB |
BIN
utils/wxPython/demo/bitmaps/image.jpg
Normal file
After Width: | Height: | Size: 7.9 KiB |
BIN
utils/wxPython/demo/bitmaps/image.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
utils/wxPython/demo/bitmaps/mondrian.ico
Normal file
After Width: | Height: | Size: 766 B |
BIN
utils/wxPython/demo/bitmaps/new.bmp
Normal file
After Width: | Height: | Size: 238 B |
BIN
utils/wxPython/demo/bitmaps/open.bmp
Normal file
After Width: | Height: | Size: 238 B |
BIN
utils/wxPython/demo/bitmaps/paste.bmp
Normal file
After Width: | Height: | Size: 238 B |
BIN
utils/wxPython/demo/bitmaps/smiles.bmp
Normal file
After Width: | Height: | Size: 246 B |
BIN
utils/wxPython/demo/bitmaps/smiles.ico
Normal file
After Width: | Height: | Size: 766 B |
BIN
utils/wxPython/demo/bitmaps/test2.bmp
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
utils/wxPython/demo/bitmaps/tog1.bmp
Normal file
After Width: | Height: | Size: 238 B |
BIN
utils/wxPython/demo/bitmaps/tog2.bmp
Normal file
After Width: | Height: | Size: 238 B |
4
utils/wxPython/demo/demo.py
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import Main
|
||||
Main.main()
|
121
utils/wxPython/demo/demoMainLoop.py
Executable file
@@ -0,0 +1,121 @@
|
||||
#!/usr/bin/env python
|
||||
#---------------------------------------------------------------------------
|
||||
"""
|
||||
This demo attempts to override the C++ MainLoop and implement it
|
||||
in Python. This is not part of the demo framework.
|
||||
|
||||
|
||||
THIS FEATURE IS STILL EXPERIMENTAL...
|
||||
"""
|
||||
|
||||
|
||||
from wxPython.wx import *
|
||||
import time
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class MyFrame(wxFrame):
|
||||
|
||||
def __init__(self, parent, id, title):
|
||||
wxFrame.__init__(self, parent, id, title,
|
||||
wxPoint(100, 100), wxSize(160, 150))
|
||||
|
||||
EVT_SIZE(self, self.OnSize)
|
||||
EVT_MOVE(self, self.OnMove)
|
||||
EVT_CLOSE(self, self.OnCloseWindow)
|
||||
EVT_IDLE(self, self.OnIdle)
|
||||
|
||||
self.count = 0
|
||||
|
||||
panel = wxPanel(self, -1)
|
||||
wxStaticText(panel, -1, "Size:",
|
||||
wxDLG_PNT(panel, wxPoint(4, 4)), wxDefaultSize)
|
||||
wxStaticText(panel, -1, "Pos:",
|
||||
wxDLG_PNT(panel, wxPoint(4, 16)), wxDefaultSize)
|
||||
|
||||
wxStaticText(panel, -1, "Idle:",
|
||||
wxDLG_PNT(panel, wxPoint(4, 28)), wxDefaultSize)
|
||||
|
||||
self.sizeCtrl = wxTextCtrl(panel, -1, "",
|
||||
wxDLG_PNT(panel, wxPoint(24, 4)),
|
||||
wxDLG_SZE(panel, wxSize(36, -1)),
|
||||
wxTE_READONLY)
|
||||
|
||||
self.posCtrl = wxTextCtrl(panel, -1, "",
|
||||
wxDLG_PNT(panel, wxPoint(24, 16)),
|
||||
wxDLG_SZE(panel, wxSize(36, -1)),
|
||||
wxTE_READONLY)
|
||||
|
||||
self.idleCtrl = wxTextCtrl(panel, -1, "",
|
||||
wxDLG_PNT(panel, wxPoint(24, 28)),
|
||||
wxDLG_SZE(panel, wxSize(36, -1)),
|
||||
wxTE_READONLY)
|
||||
|
||||
|
||||
def OnCloseWindow(self, event):
|
||||
app.keepGoing = false
|
||||
self.Destroy()
|
||||
|
||||
def OnIdle(self, event):
|
||||
self.idleCtrl.SetValue(str(self.count))
|
||||
self.count = self.count + 1
|
||||
|
||||
def OnSize(self, event):
|
||||
size = event.GetSize()
|
||||
self.sizeCtrl.SetValue("%s, %s" % (size.width, size.height))
|
||||
event.Skip()
|
||||
|
||||
def OnMove(self, event):
|
||||
pos = event.GetPosition()
|
||||
self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y))
|
||||
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class MyApp(wxApp):
|
||||
def MainLoop(self):
|
||||
# This outer loop determines when to exit the application, for
|
||||
# this example we let the main frame reset this flag when it
|
||||
# closes.
|
||||
while self.keepGoing:
|
||||
# At this point in the outer loop you could do whatever you
|
||||
# implemented your own MainLoop for. It should be quick and
|
||||
# non-blocking, otherwise your GUI will freeze. For example,
|
||||
# call Fnorb's reactor.do_one_event(0), etc.
|
||||
|
||||
# call_your_code_here()
|
||||
|
||||
|
||||
# This inner loop will process any GUI events until there
|
||||
# are no more waiting.
|
||||
while self.Pending():
|
||||
self.Dispatch()
|
||||
|
||||
# Send idle events to idle handlers. You may want to throtle
|
||||
# this back a bit so there is not too much CPU time spent in
|
||||
# the idle handlers. For this example, I'll just snooze a
|
||||
# little...
|
||||
time.sleep(0.25)
|
||||
self.ProcessIdle()
|
||||
|
||||
|
||||
|
||||
def OnInit(self):
|
||||
frame = MyFrame(NULL, -1, "This is a test")
|
||||
frame.Show(true)
|
||||
self.SetTopWindow(frame)
|
||||
|
||||
self.keepGoing = true
|
||||
|
||||
return true
|
||||
|
||||
|
||||
app = MyApp(0)
|
||||
app.MainLoop()
|
||||
|
||||
|
||||
|
||||
|
||||
|
465
utils/wxPython/demo/hangman.py
Normal file
@@ -0,0 +1,465 @@
|
||||
"""Hangman.py, a simple wxPython game, inspired by the
|
||||
old bsd game by Ken Arnold.
|
||||
From the original man page:
|
||||
|
||||
In hangman, the computer picks a word from the on-line
|
||||
word list and you must try to guess it. The computer
|
||||
keeps track of which letters have been guessed and how
|
||||
many wrong guesses you have made on the screen in a
|
||||
graphic fashion.
|
||||
|
||||
That says it all, doesn't it?
|
||||
|
||||
Have fun with it,
|
||||
|
||||
Harm van der Heijden (H.v.d.Heijden@phys.tue.nl)"""
|
||||
|
||||
import random,re,string
|
||||
from wxPython.wx import *
|
||||
|
||||
|
||||
|
||||
class WordFetcher:
|
||||
builtin_words = ' albatros banana electrometer eggshell'
|
||||
|
||||
def __init__(self, filename, min_length = 5):
|
||||
self.min_length = min_length
|
||||
print "Trying to open file %s" % (filename,)
|
||||
try:
|
||||
f = open(filename, "r")
|
||||
except:
|
||||
print "Couldn't open dictionary file %s, using builtins" % (filename,)
|
||||
self.words = self.builtin_words
|
||||
self.filename = None
|
||||
return
|
||||
self.words = f.read()
|
||||
self.filename = filename
|
||||
print "Got %d bytes." % (len(self.words),)
|
||||
|
||||
def SetMinLength(min_length):
|
||||
self.min_length = min_length
|
||||
|
||||
def Get(self):
|
||||
reg = re.compile('\s+([a-zA-Z]+)\s+')
|
||||
n = 50 # safety valve; maximum number of tries to find a suitable word
|
||||
while n:
|
||||
index = int(random.random()*len(self.words))
|
||||
m = reg.search(self.words[index:])
|
||||
if m and len(m.groups()[0]) >= self.min_length: break
|
||||
n = n - 1
|
||||
if n: return string.lower(m.groups()[0])
|
||||
return "error"
|
||||
|
||||
|
||||
|
||||
def stdprint(x):
|
||||
print x
|
||||
|
||||
|
||||
|
||||
class URLWordFetcher(WordFetcher):
|
||||
def __init__(self, url):
|
||||
self.OpenURL(url)
|
||||
WordFetcher.__init__(self, "hangman_dict.txt")
|
||||
|
||||
def logprint(self,x):
|
||||
print x
|
||||
|
||||
def RetrieveAsFile(self, host, path=''):
|
||||
from httplib import HTTP
|
||||
try:
|
||||
h = HTTP(host)
|
||||
except:
|
||||
self.logprint("Failed to create HTTP connection to %s... is the network available?" % (host))
|
||||
return None
|
||||
h.putrequest('GET',path)
|
||||
h.putheader('Accept','text/html')
|
||||
h.putheader('Accept','text/plain')
|
||||
h.endheaders()
|
||||
errcode, errmsg, headers = h.getreply()
|
||||
if errcode != 200:
|
||||
self.logprint("HTTP error code %d: %s" % (errcode, errmsg))
|
||||
return None
|
||||
f = h.getfile()
|
||||
return f
|
||||
|
||||
def OpenURL(self,url):
|
||||
from htmllib import HTMLParser
|
||||
import formatter
|
||||
self.url = url
|
||||
m = re.match('http://([^/]+)(/\S*)\s*', url)
|
||||
if m:
|
||||
host = m.groups()[0]
|
||||
path = m.groups()[1]
|
||||
else:
|
||||
m = re.match('http://(\S+)\s*', url)
|
||||
if not m:
|
||||
# Invalid URL
|
||||
self.logprint("Invalid or unsupported URL: %s" % (url))
|
||||
return
|
||||
host = m.groups()[0]
|
||||
path = ''
|
||||
f = self.RetrieveAsFile(host,path)
|
||||
if not f:
|
||||
self.logprint("Could not open %s" % (url))
|
||||
return
|
||||
self.logprint("Receiving data...")
|
||||
data = f.read()
|
||||
tmp = open('hangman_dict.txt','w')
|
||||
fmt = formatter.AbstractFormatter(formatter.DumbWriter(tmp))
|
||||
p = HTMLParser(fmt)
|
||||
self.logprint("Parsing data...")
|
||||
p.feed(data)
|
||||
p.close()
|
||||
tmp.close()
|
||||
|
||||
|
||||
|
||||
class HangmanWnd(wxWindow):
|
||||
def __init__(self, parent, id, pos=wxDefaultPosition, size=wxDefaultSize):
|
||||
wxWindow.__init__(self, parent, id, pos, size)
|
||||
self.SetBackgroundColour(wxNamedColour('white'))
|
||||
if wxPlatform == '__WXGTK__':
|
||||
self.font = wxFont(12, wxMODERN, wxNORMAL, wxNORMAL)
|
||||
else:
|
||||
self.font = wxFont(10, wxMODERN, wxNORMAL, wxNORMAL)
|
||||
self.SetFocus()
|
||||
|
||||
def StartGame(self, word):
|
||||
self.word = word
|
||||
self.guess = []
|
||||
self.tries = 0
|
||||
self.misses = 0
|
||||
self.Draw()
|
||||
|
||||
def EndGame(self):
|
||||
self.misses = 7;
|
||||
self.guess = map(chr, range(ord('a'),ord('z')+1))
|
||||
self.Draw()
|
||||
|
||||
def HandleKey(self, key):
|
||||
self.message = ""
|
||||
if self.guess.count(key):
|
||||
self.message = 'Already guessed %s' % (key,)
|
||||
return 0
|
||||
self.guess.append(key)
|
||||
self.guess.sort()
|
||||
self.tries = self.tries+1
|
||||
if not key in self.word:
|
||||
self.misses = self.misses+1
|
||||
if self.misses == 7:
|
||||
self.EndGame()
|
||||
return 1
|
||||
has_won = 1
|
||||
for letter in self.word:
|
||||
if not self.guess.count(letter):
|
||||
has_won = 0
|
||||
break
|
||||
if has_won:
|
||||
self.Draw()
|
||||
return 2
|
||||
self.Draw()
|
||||
return 0
|
||||
|
||||
def Draw(self, dc = None):
|
||||
if not dc:
|
||||
dc = wxClientDC(self)
|
||||
dc.SetFont(self.font)
|
||||
dc.Clear()
|
||||
(x,y) = self.GetSizeTuple()
|
||||
x1 = x-200; y1 = 20
|
||||
for letter in self.word:
|
||||
if self.guess.count(letter):
|
||||
dc.DrawText(letter, x1, y1)
|
||||
else:
|
||||
dc.DrawText('.', x1, y1)
|
||||
x1 = x1 + 10
|
||||
x1 = x-200
|
||||
dc.DrawText("tries %d misses %d" % (self.tries,self.misses),x1,50)
|
||||
guesses = ""
|
||||
for letter in self.guess:
|
||||
guesses = guesses + letter
|
||||
dc.DrawText("guessed:", x1, 70)
|
||||
dc.DrawText(guesses[:13], x1+80, 70)
|
||||
dc.DrawText(guesses[13:], x1+80, 90)
|
||||
dc.SetUserScale(x/1000.0, y/1000.0)
|
||||
self.DrawVictim(dc)
|
||||
|
||||
def DrawVictim(self, dc):
|
||||
dc.SetPen(wxPen(wxNamedColour('black'), 20))
|
||||
dc.DrawLines([(10, 980), (10,900), (700,900), (700,940), (720,940),
|
||||
(720,980), (900,980)])
|
||||
dc.DrawLines([(100,900), (100, 100), (300,100)])
|
||||
dc.DrawLine(100,200,200,100)
|
||||
if ( self.misses == 0 ): return
|
||||
dc.SetPen(wxPen(wxNamedColour('blue'), 10))
|
||||
dc.DrawLine(300,100,300,200)
|
||||
if ( self.misses == 1 ): return
|
||||
dc.DrawEllipse(250,200,100,100)
|
||||
if ( self.misses == 2 ): return
|
||||
dc.DrawLine(300,300,300,600)
|
||||
if ( self.misses == 3) : return
|
||||
dc.DrawLine(300,300,250,550)
|
||||
if ( self.misses == 4) : return
|
||||
dc.DrawLine(300,300,350,550)
|
||||
if ( self.misses == 5) : return
|
||||
dc.DrawLine(300,600,350,850)
|
||||
if ( self.misses == 6) : return
|
||||
dc.DrawLine(300,600,250,850)
|
||||
|
||||
def OnPaint(self, event):
|
||||
dc = wxPaintDC(self)
|
||||
self.Draw(dc)
|
||||
|
||||
|
||||
|
||||
class HangmanDemo(HangmanWnd):
|
||||
def __init__(self, wf, parent, id, pos, size):
|
||||
HangmanWnd.__init__(self, parent, id, pos, size)
|
||||
self.StartGame("dummy")
|
||||
self.start_new = 1
|
||||
self.wf = wf
|
||||
self.delay = 500
|
||||
self.timer = self.PlayTimer(self.MakeMove)
|
||||
|
||||
def MakeMove(self):
|
||||
self.timer.Stop()
|
||||
if self.start_new:
|
||||
self.StartGame(self.wf.Get())
|
||||
self.start_new = 0
|
||||
self.left = list('aaaabcdeeeeefghiiiiijklmnnnoooopqrssssttttuuuuvwxyz')
|
||||
else:
|
||||
key = self.left[int(random.random()*len(self.left))]
|
||||
while self.left.count(key): self.left.remove(key)
|
||||
self.start_new = self.HandleKey(key)
|
||||
self.timer.Start(self.delay)
|
||||
|
||||
def Stop(self):
|
||||
self.timer.Stop()
|
||||
|
||||
class PlayTimer(wxTimer):
|
||||
def __init__(self,func):
|
||||
wxTimer.__init__(self)
|
||||
self.func = func
|
||||
self.Start(1000)
|
||||
|
||||
def Notify(self):
|
||||
apply(self.func, ())
|
||||
|
||||
|
||||
|
||||
class HangmanDemoFrame(wxFrame):
|
||||
def __init__(self, wf, parent, id, pos, size):
|
||||
wxFrame.__init__(self, parent, id, "Hangman demo", pos, size)
|
||||
self.demo = HangmanDemo(wf, self, -1, wxDefaultPosition, wxDefaultSize)
|
||||
|
||||
def OnCloseWindow(self, event):
|
||||
self.demo.timer.Stop()
|
||||
self.Destroy()
|
||||
|
||||
|
||||
|
||||
class AboutBox(wxDialog):
|
||||
def __init__(self, parent,wf):
|
||||
wxDialog.__init__(self, parent, -1, "About Hangman", wxDefaultPosition, wxSize(350,450))
|
||||
self.wnd = HangmanDemo(wf, self, -1, wxPoint(1,1), wxSize(350,150))
|
||||
self.static = wxStaticText(self, -1, __doc__, wxPoint(1,160), wxSize(350, 250))
|
||||
self.button = wxButton(self, 2001, "OK", wxPoint(150,420), wxSize(50,-1))
|
||||
EVT_BUTTON(self, 2001, self.OnOK)
|
||||
|
||||
def OnOK(self, event):
|
||||
self.wnd.Stop()
|
||||
self.EndModal(wxID_OK)
|
||||
|
||||
|
||||
|
||||
class MyFrame(wxFrame):
|
||||
def __init__(self, parent, wf):
|
||||
self.wf = wf
|
||||
wxFrame.__init__(self, parent, -1, "hangman", wxDefaultPosition, wxSize(400,300))
|
||||
self.wnd = HangmanWnd(self, -1)
|
||||
menu = wxMenu()
|
||||
menu.Append(1001, "New")
|
||||
menu.Append(1002, "End")
|
||||
menu.AppendSeparator()
|
||||
menu.Append(1003, "Reset")
|
||||
menu.Append(1004, "Demo...")
|
||||
menu.AppendSeparator()
|
||||
menu.Append(1005, "Exit")
|
||||
menubar = wxMenuBar()
|
||||
menubar.Append(menu, "Game")
|
||||
menu = wxMenu()
|
||||
#menu.Append(1010, "Internal", "Use internal dictionary", TRUE)
|
||||
menu.Append(1011, "ASCII File...")
|
||||
urls = [ 'wxPython home', 'http://alldunn.com/wxPython/main.html',
|
||||
'slashdot.org', 'http://slashdot.org/',
|
||||
'cnn.com', 'http://cnn.com',
|
||||
'The New York Times', 'http://www.nytimes.com',
|
||||
'De Volkskrant', 'http://www.volkskrant.nl/frameless/25000006.html',
|
||||
'Gnu GPL', 'http://www.fsf.org/copyleft/gpl.html',
|
||||
'Bijbel: Genesis', 'http://www.coas.com/bijbel/gn1.htm']
|
||||
urlmenu = wxMenu()
|
||||
for item in range(0,len(urls),2):
|
||||
urlmenu.Append(1020+item/2, urls[item], urls[item+1])
|
||||
urlmenu.Append(1080, 'Other...', 'Enter an URL')
|
||||
menu.AppendMenu(1012, 'URL', urlmenu, 'Use a webpage')
|
||||
menu.Append(1013, 'Dump', 'Write contents to stdout')
|
||||
menubar.Append(menu, "Dictionary")
|
||||
self.urls = urls
|
||||
self.urloffset = 1020
|
||||
menu = wxMenu()
|
||||
menu.Append(1090, "About...")
|
||||
menubar.Append(menu, "Help")
|
||||
self.SetMenuBar(menubar)
|
||||
self.CreateStatusBar(2)
|
||||
EVT_MENU(self, 1001, self.OnGameNew)
|
||||
EVT_MENU(self, 1002, self.OnGameEnd)
|
||||
EVT_MENU(self, 1003, self.OnGameReset)
|
||||
EVT_MENU(self, 1004, self.OnGameDemo)
|
||||
EVT_MENU(self, 1005, self.OnWindowClose)
|
||||
EVT_MENU(self, 1011, self.OnDictFile)
|
||||
EVT_MENU_RANGE(self, 1020, 1020+len(urls)/2, self.OnDictURL)
|
||||
EVT_MENU(self, 1080, self.OnDictURLSel)
|
||||
EVT_MENU(self, 1013, self.OnDictDump)
|
||||
EVT_MENU(self, 1090, self.OnHelpAbout)
|
||||
EVT_CHAR(self.wnd, self.OnChar)
|
||||
self.OnGameReset()
|
||||
|
||||
def OnGameNew(self, event):
|
||||
word = self.wf.Get()
|
||||
self.in_progress = 1
|
||||
self.SetStatusText("",0)
|
||||
self.wnd.StartGame(word)
|
||||
|
||||
def OnGameEnd(self, event):
|
||||
self.UpdateAverages(0)
|
||||
self.in_progress = 0
|
||||
self.SetStatusText("",0)
|
||||
self.wnd.EndGame()
|
||||
|
||||
def OnGameReset(self, event=None):
|
||||
self.played = 0
|
||||
self.won = 0
|
||||
self.history = []
|
||||
self.average = 0.0
|
||||
self.OnGameNew(None)
|
||||
|
||||
def OnGameDemo(self, event):
|
||||
frame = HangmanDemoFrame(self.wf, self, -1, wxDefaultPosition, self.GetSize())
|
||||
frame.Show(TRUE)
|
||||
|
||||
def OnDictFile(self, event):
|
||||
fd = wxFileDialog(self)
|
||||
if (self.wf.filename):
|
||||
fd.SetFilename(self.wf.filename)
|
||||
if fd.ShowModal() == wxID_OK:
|
||||
file = fd.GetPath()
|
||||
self.wf = WordFetcher(file)
|
||||
|
||||
def OnDictURL(self, event):
|
||||
item = (event.GetId() - self.urloffset)*2
|
||||
print "Trying to open %s at %s" % (self.urls[item], self.urls[item+1])
|
||||
self.wf = URLWordFetcher(self.urls[item+1])
|
||||
|
||||
def OnDictURLSel(self, event):
|
||||
msg = wxTextEntryDialog(self, "Enter the URL of the dictionary document", "Enter URL")
|
||||
if msg.ShowModal() == wxID_OK:
|
||||
url = msg.GetValue()
|
||||
self.wf = URLWordFetcher(url)
|
||||
def OnDictDump(self, event):
|
||||
print self.wf.words
|
||||
|
||||
def OnHelpAbout(self, event):
|
||||
about = AboutBox(self, self.wf)
|
||||
about.ShowModal()
|
||||
about.wnd.Stop() # that damn timer won't stop!
|
||||
|
||||
def UpdateAverages(self, has_won):
|
||||
if has_won:
|
||||
self.won = self.won + 1
|
||||
self.played = self.played+1
|
||||
self.history.append(self.wnd.misses) # ugly
|
||||
total = 0.0
|
||||
for m in self.history:
|
||||
total = total + m
|
||||
self.average = float(total/len(self.history))
|
||||
|
||||
def OnChar(self, event):
|
||||
if not self.in_progress:
|
||||
#print "new"
|
||||
self.OnGameNew(None)
|
||||
return
|
||||
key = event.KeyCode();
|
||||
#print key
|
||||
if key >= ord('A') and key <= ord('Z'):
|
||||
key = key + ord('a') - ord('A')
|
||||
key = chr(key)
|
||||
if key < 'a' or key > 'z':
|
||||
event.Skip()
|
||||
return
|
||||
res = self.wnd.HandleKey(key)
|
||||
if res == 0:
|
||||
self.SetStatusText(self.wnd.message)
|
||||
elif res == 1:
|
||||
self.UpdateAverages(0)
|
||||
self.SetStatusText("Too bad, you're dead!",0)
|
||||
self.in_progress = 0
|
||||
elif res == 2:
|
||||
self.in_progress = 0
|
||||
self.UpdateAverages(1)
|
||||
self.SetStatusText("Congratulations!",0)
|
||||
if self.played:
|
||||
percent = (100.*self.won)/self.played
|
||||
else:
|
||||
percent = 0.0
|
||||
self.SetStatusText("p %d, w %d (%g %%), av %g" % (self.played,self.won, percent, self.average),1)
|
||||
|
||||
def OnWindowClose(self, event):
|
||||
self.Destroy()
|
||||
|
||||
|
||||
|
||||
class MyApp(wxApp):
|
||||
def OnInit(self):
|
||||
if wxPlatform == '__WXGTK__':
|
||||
defaultfile = "/usr/share/games/hangman-words"
|
||||
elif wxPlatform == '__WXMSW__':
|
||||
defaultfile = "c:\\windows\\hardware.txt"
|
||||
else:
|
||||
defaultfile = ""
|
||||
wf = WordFetcher(defaultfile)
|
||||
frame = MyFrame(NULL, wf)
|
||||
self.SetTopWindow(frame)
|
||||
frame.Show(TRUE)
|
||||
return TRUE
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
app = MyApp(0)
|
||||
app.MainLoop()
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
overview = __doc__
|
||||
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
if wxPlatform == '__WXGTK__' or wxPlatform == '__WXMOTIF__':
|
||||
defaultfile = "/usr/share/games/hangman-words"
|
||||
elif wxPlatform == '__WXMSW__':
|
||||
defaultfile = "c:\\windows\\hardware.txt"
|
||||
else:
|
||||
defaultfile = ""
|
||||
wf = WordFetcher(defaultfile)
|
||||
win = MyFrame(frame, wf)
|
||||
frame.otherWin = win
|
||||
win.Show(true)
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
77
utils/wxPython/demo/htmlview.py
Normal file
@@ -0,0 +1,77 @@
|
||||
from wxPython.wx import *
|
||||
from wxPython.html import *
|
||||
import sys
|
||||
|
||||
default_page = """
|
||||
<H1>HTML Viewer</H1>Please select <I>File->Open</I>
|
||||
to open a HTML file, or edit this page in the
|
||||
text control below and select <I>File->Update</I>
|
||||
<P>
|
||||
The python source can be seen
|
||||
<a href="%s">here</a>.
|
||||
""" % (sys.argv[0], )
|
||||
|
||||
class HtmlViewer(wxFrame):
|
||||
def __init__(self, parent, id, title, pos = wxDefaultPosition, size = wxSize(400,400)):
|
||||
wxFrame.__init__(self, parent, id, title, pos, size)
|
||||
self.CreateStatusBar(1)
|
||||
split = wxSplitterWindow(self, -1)
|
||||
self.html = wxHtmlWindow(split)
|
||||
self.html.SetRelatedFrame(self, "HTML Viewer: \%s")
|
||||
self.html.SetRelatedStatusBar(0)
|
||||
self.txt = wxTextCtrl(split, -1, default_page,
|
||||
wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_MULTILINE)
|
||||
split.SplitHorizontally(self.html, self.txt, size.y/2)
|
||||
mbar = wxMenuBar()
|
||||
menu = wxMenu()
|
||||
menu.Append(1500, "Open")
|
||||
menu.Append(1501, "Reset")
|
||||
menu.Append(1502, "Update HTML")
|
||||
menu.AppendSeparator()
|
||||
menu.Append(1503, "Exit")
|
||||
mbar.Append(menu, "File")
|
||||
menu = wxMenu()
|
||||
menu.Append(1510, "Back")
|
||||
menu.Append(1511, "Forward")
|
||||
mbar.Append(menu, "Go")
|
||||
self.SetMenuBar(mbar)
|
||||
self.filename = ""
|
||||
EVT_MENU(self, 1500, self.OnFileOpen)
|
||||
EVT_MENU(self, 1501, self.OnFileReset)
|
||||
EVT_MENU(self, 1502, self.OnFileUpdate)
|
||||
EVT_MENU(self, 1503, self.OnClose)
|
||||
EVT_MENU(self, 1510, self.OnGoBack)
|
||||
EVT_MENU(self, 1511, self.OnGoForward)
|
||||
# A default opening text
|
||||
self.html.SetPage( default_page )
|
||||
def OnFileOpen(self, event):
|
||||
dlg = wxFileDialog(NULL, "Open file")
|
||||
if dlg.ShowModal() == wxID_OK:
|
||||
self.filename = dlg.GetPath()
|
||||
self.html.LoadPage(self.filename)
|
||||
def OnFileReset(self, event):
|
||||
self.html.SetPage( default_page )
|
||||
self.txt.SetValue( default_page )
|
||||
def OnFileUpdate(self, event):
|
||||
self.html.SetPage( self.txt.GetValue() )
|
||||
def OnGoBack(self, event):
|
||||
self.html.HistoryBack()
|
||||
def OnGoForward(self, event):
|
||||
self.html.HistoryForward()
|
||||
def OnClose(self,event):
|
||||
self.Destroy()
|
||||
|
||||
class MyApp(wxApp):
|
||||
def OnInit(self):
|
||||
frame = HtmlViewer(NULL, -1, "HTML Viewer")
|
||||
frame.Show(TRUE)
|
||||
self.SetTopWindow(frame)
|
||||
return TRUE
|
||||
|
||||
wxImage_AddHandler(wxPNGHandler())
|
||||
wxImage_AddHandler(wxGIFHandler())
|
||||
wxImage_AddHandler(wxJPEGHandler())
|
||||
|
||||
theApp = MyApp(0)
|
||||
theApp.MainLoop()
|
97
utils/wxPython/demo/htmlwidget.py
Normal file
@@ -0,0 +1,97 @@
|
||||
from wxPython.wx import *
|
||||
from wxPython.html import *
|
||||
import sys,string
|
||||
|
||||
# A bunch of simple widgets, all somehow derived from wxWindow
|
||||
class Widget1(wxWindow):
|
||||
def __init__(self, parent, param):
|
||||
wxWindow.__init__(self, parent, -1)
|
||||
self.text = wxTextCtrl(self, -1, param['param_str'], wxPoint(5,5),
|
||||
wxSize(200,150), wxTE_MULTILINE)
|
||||
but = wxButton(self, 1001, "Click me", wxPoint(50,160), wxSize(100,30))
|
||||
EVT_BUTTON(self, 1001, self.OnButton)
|
||||
self.SetSize(wxSize(210,200))
|
||||
def OnButton(self, event):
|
||||
self.text.AppendText( "Click!\n" )
|
||||
|
||||
class Widget2(wxButton):
|
||||
def __init__(self, parent, param):
|
||||
wxButton.__init__(self, parent, int(param['id']), param['title'])
|
||||
|
||||
class Widget3(wxTextCtrl):
|
||||
def __init__(self, parent, param):
|
||||
wxTextCtrl.__init__(self, parent, -1, "No clicks")
|
||||
self.clicked = 0;
|
||||
EVT_BUTTON(parent, int(param['button_id']), self.OnButton)
|
||||
def OnButton(self, event):
|
||||
self.clicked = self.clicked + 1
|
||||
self.SetValue("%d clicks" % (self.clicked,))
|
||||
|
||||
# make the widgets known in the widget module (aka htmlc)
|
||||
widget.Widget1 = Widget1
|
||||
widget.Widget2 = Widget2
|
||||
widget.Widget3 = Widget3
|
||||
|
||||
# our default page
|
||||
default_page = """
|
||||
<H2>wxPython widgets go HTML</H2>
|
||||
A bunch of wxPython widgets are scattered on this HTML page.
|
||||
Here's one:
|
||||
<center><python class="Widget1" greeting="Hello World"></center>
|
||||
<hr>
|
||||
Here's another:
|
||||
<center><python class="Widget2" float=70 id=1002 title="Button A"></center>
|
||||
It should always take up 70% of the page width.
|
||||
<p>And then there's this, listening to button A:
|
||||
<python class="Widget3" button_id=1002></p>
|
||||
"""
|
||||
|
||||
# our explanation
|
||||
apology = """
|
||||
For some bizarre reason, it takes forever and a day to display the
|
||||
widgets if they are constructed in the frame's constructor. This
|
||||
only happens in MSW, wxGTK works fine.
|
||||
<p>Select <I>File->Show it</I> to draw the widgets."""
|
||||
|
||||
default_page = default_page + "The HTML code for this page is\n <pre>" + default_page + "</pre>"
|
||||
|
||||
|
||||
class HtmlViewer(wxFrame):
|
||||
def __init__(self, parent, id, title, pos = wxDefaultPosition, size = wxSize(400,400)):
|
||||
wxFrame.__init__(self, parent, id, title, pos, size)
|
||||
self.CreateStatusBar(1)
|
||||
self.html = wxHtmlWindow(self)
|
||||
self.html.SetRelatedFrame(self, "HTML Viewer: \%s")
|
||||
self.html.SetRelatedStatusBar(0)
|
||||
mbar = wxMenuBar()
|
||||
menu = wxMenu()
|
||||
menu.Append(1500, "Show it")
|
||||
menu.Append(1503, "Exit")
|
||||
mbar.Append(menu, "File")
|
||||
EVT_MENU(self, 1500, self.OnShowIt)
|
||||
EVT_MENU(self, 1503, self.OnClose)
|
||||
self.SetMenuBar(mbar)
|
||||
# change apology below to default_page, if you dare!
|
||||
self.html.SetPage( default_page )
|
||||
def OnClose(self,event):
|
||||
self.Destroy()
|
||||
def OnShowIt(self,event):
|
||||
self.html.SetPage( default_page )
|
||||
# now quickly remove the menu option, to hide that
|
||||
# other bug; namely that widgets aren't removed when the
|
||||
# HTML page is.
|
||||
self.GetMenuBar().Enable(1500, FALSE)
|
||||
|
||||
class MyApp(wxApp):
|
||||
def OnInit(self):
|
||||
frame = HtmlViewer(NULL, -1, "HTML Viewer")
|
||||
frame.Show(TRUE)
|
||||
self.SetTopWindow(frame)
|
||||
return TRUE
|
||||
|
||||
wxImage_AddHandler(wxPNGHandler())
|
||||
wxImage_AddHandler(wxGIFHandler())
|
||||
wxImage_AddHandler(wxJPEGHandler())
|
||||
|
||||
theApp = MyApp(0)
|
||||
theApp.MainLoop()
|
85
utils/wxPython/demo/paper.xml
Normal file
@@ -0,0 +1,85 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE gcapaper SYSTEM "gcapap-X.dtd" [
|
||||
<!ENTITY footprint SYSTEM "footprint.tif" NDATA tiff >
|
||||
<!ENTITY footprint SYSTEM "footprint.eps" NDATA eps >
|
||||
<!ENTITY shoes SYSTEM "shoes.tif" NDATA tiff >
|
||||
<!ENTITY super1 "Z">
|
||||
]>
|
||||
|
||||
<gcapaper><front><title>Using SGML to make footprints in the sand
|
||||
</title><keyword>footprints</keyword><keyword>sand</keyword>
|
||||
<author><fname>Jane</fname><surname>Doe</surname>
|
||||
<jobtitle>Empress</jobtitle>
|
||||
<address><affil>Universe Corporation</affil>
|
||||
<aline>1 Main Street</aline>
|
||||
<city>Perfect City</city>
|
||||
<province>Dorado</province>
|
||||
<cntry>Neutral</cntry><postcode>999999</postcode>
|
||||
<phone>+55 555 555 5550</phone>
|
||||
<fax>+55 555 555 5555</fax>
|
||||
<email>jane@universe.com</email>
|
||||
<web>www.universe.com</web>
|
||||
</address>
|
||||
<bio><para>Jane Doe is the Empress of the Universe <bibref refloc="jd000"/>, a position to which she has always aspired.</para></bio>
|
||||
</author>
|
||||
<author><fname>Fred</fname><surname>Bloggs</surname>
|
||||
<jobtitle>Designer</jobtitle>
|
||||
<address><affil>Fred (The Shoe) Bloggs Ltd</affil>
|
||||
<aline>1 Shoe Lane</aline>
|
||||
<city>Perfect City</city>
|
||||
<province>Dorado</province>
|
||||
<cntry>Neutral</cntry><postcode>999999</postcode>
|
||||
<phone>+55 555 555 1122</phone>
|
||||
<fax>+55 555 555 1133</fax>
|
||||
<email>fred@shoebloggs.com</email>
|
||||
<web>www.shoebloggs.com</web></address>
|
||||
<bio><para>Fred has always wanted to create the perfect shoe for making footprints in the sand. Now with SGML and XML, he has been able to document his design.</para></bio>
|
||||
</author>
|
||||
<abstract>
|
||||
<para><keyword>ease</keyword><keyword>documentation</keyword>It's not easy being an Empress of the Universe (<a href="http://www.universe.com"/>), but with the right pair of shoes and the right documentation on how to make footprints in the sand of life, it's easier than it was. Since the introduction of <acronym.grp><acronym>SGML</acronym><expansion>Standard Generalized Markup Language</expansion></acronym.grp> and <acronym.grp><acronym>XML</acronym><expansion>Extensible Markup Language</expansion></acronym.grp> it is now possible to identify and manage the key bits of information on this process.</para>
|
||||
</abstract>
|
||||
</front>
|
||||
<body><section id="jd001"><title>Introduction</title>
|
||||
<para><keyword>documentation</keyword>Since its inception, the Universe has always had sand, now it has an Empress, a good shoe design, and <acronym>SGML</acronym> / <acronym>XML</acronym> documentation. The time is now ripe for making <highlight style="ital">footprints</highlight> in the sand.</para></section>
|
||||
<section id="jd002"><title>Footprints - truly a push technology</title><keyword>push</keyword>
|
||||
<para>One could safely say that making footprints is a push technology. This is even more true when the footprint maker is the Empress of the Universe. </para>
|
||||
<subsec1 id="jd003"><title>The sands of time</title><keyword>time</keyword>
|
||||
<para>The 1<super>st</super> think to remember about the Universe is the time/space continuum to which it conforms. This then confuses the sands of time to be something more like the sands of time/space continuum because if you wait on those sands long enough they may be somewhere else - not necessarily because of the time/space continuum but because the winds will <highlight style="ital">push</highlight> them down the beach.</para></subsec1>
|
||||
<subsec1 id="jd004"><title>Identifying the footprints</title>
|
||||
<para>In order to truly understand who has walked on the sands and left the footprints, it is important to identify the <keyword>characteristics</keyword>characteristics of the footprint. In the graphic <xref refloc="jd005" type="title"/>, we can see the footprints are large, well shaped, and evenly distributed from front to back and side to side.</para>
|
||||
<figure id="jd005"><title>Footprint in Sand</title><caption><para>Note the evenly distributed shape and indention</para></caption><graphic figname="footprint"/></figure>
|
||||
<para>This footprint begs the question, 'What kind of remarkable <keyword>shoe</keyword>shoe could make such a wonderful footprint?'</para>
|
||||
<table id="t1">
|
||||
<tgroup cols="2">
|
||||
<thead><row><entry>Shoe Type</entry><entry>Remarkability Rating</entry></row></thead>
|
||||
<tbody><row><entry>Acme Shoe</entry><entry>Unremarkable</entry></row>
|
||||
<row><entry>Budget Shoe</entry><entry>Not worth remarking on</entry></row>
|
||||
<row><entry>Super Duper Shoe</entry><entry>Absolutely Remarkable</entry></row></tbody>
|
||||
</tgroup></table></subsec1>
|
||||
<subsec1 id="jd006"><title>The Shoe What Made the Footprint</title>
|
||||
<para>The remarkable footprint is made by a combination of a terrific shoe worn on a fantastic foot propelled by a one-of-a-kind Empress. As can be seen in Figure <xref refloc="jd007" type="number"/>, the shoe is worthy of an Empress.</para>
|
||||
<figure id="jd007"><title>The Terrific Shoe</title><graphic figname="shoes"/></figure>
|
||||
<para>The design goals of the shoe were:
|
||||
<randlist style = "bulleted">
|
||||
<li><para>to minimize time-consuming manual tasks such as shoelace tying;</para></li>
|
||||
<li><para>to allow different decorations to be placed on the toes; and</para></li>
|
||||
<li><para>to enforce a good arch.</para></li></randlist></para></subsec1></section>
|
||||
<section id="jd008"><title>Documenting the Shoe</title>
|
||||
<para>Documenting the shoe was the best part for Fred Bloggs. His superior design could be captured for all time in a neutrally-encoded, content-specific manner. An excerpt from his DTD gives an insight into the type of information he captured in his documentation.</para>
|
||||
<code.block><!DOCTYPE shoedoc [
|
||||
<!ELEMENT shoedoc - - (design, mfg, care, recycle) >
|
||||
<!ATTLIST shoedoc designer CDATA #REQUIRED
|
||||
date CDATA #REQUIRED>
|
||||
<!ELEMENT design - - (specs, desc) >
|
||||
etc.
|
||||
</code.block>
|
||||
<para>An excerpt from the documentation also gives us insights.</para>
|
||||
<code.block><![CDATA[<design>
|
||||
<specs sizerange="4-12" widthrange="aa-d" color="navy black white red taupe">
|
||||
<para>The arch shall be high. The toe shall be narrow, but not pinch. The heel shall not come off in grates. Sand shall not get in.</para></specs>]]>
|
||||
</code.block>
|
||||
</section></body>
|
||||
<rear><acknowl>
|
||||
<para>The authors wish to express our thanks to the Universe for being there and to gravity for holding the sand down long enough to see the footprints.</para></acknowl>
|
||||
<bibliog>
|
||||
<bibitem id="jd000"><bib>Barrett 00</bib><pub>Barrett, B., Being Empress Made Easy, Galaxy Division of Universal Publishers. 0000</pub></bibitem></bibliog></rear></gcapaper>
|
211
utils/wxPython/demo/pyTree.py
Normal file
@@ -0,0 +1,211 @@
|
||||
"""
|
||||
Hello, and welcome to this test of the wxTreeItemData
|
||||
class.
|
||||
|
||||
The wxTreeItemData class can be used to associate a python
|
||||
object with a wxTreeCtrl item. In this sample, its use is
|
||||
demonstrated via a tree control that shows the contents of a
|
||||
python namespace according to the standard dir()
|
||||
command. Every item in the tree has its label taken from the
|
||||
dir() output, and 'behind it' a reference to the python
|
||||
object is stored in a wxTreeItemData object.
|
||||
|
||||
As you may have guessed by now, this sample automatically
|
||||
displays '__doc__' strings if the selected python object
|
||||
happens to have one. Please expand the pyTree object to
|
||||
learn more about the implementation.
|
||||
|
||||
Version 1.0, April 4 1999.
|
||||
Harm van der Heijden (H.v.d.Heijden@phys.tue.nl)
|
||||
|
||||
P.S. Check out the string module. It's imported in this
|
||||
sample not because it's used, but because it's so
|
||||
beautifully documented...
|
||||
"""
|
||||
|
||||
from wxPython import wx
|
||||
import string # Don't use it, but it's fun expanding :-)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def _getindent(line):
|
||||
"""Returns the indentation level of the given line."""
|
||||
indent = 0
|
||||
for c in line:
|
||||
if c == ' ': indent = indent + 1
|
||||
elif c == '\t': indent = indent + 8
|
||||
else: break
|
||||
return indent
|
||||
|
||||
def _sourcefinder(func):
|
||||
"""Given a func_code object, this function tries to find and return
|
||||
the python source code of the function."""
|
||||
try:
|
||||
f = open(func.co_filename,"r")
|
||||
except:
|
||||
return "(could not open file %s)" % (func.co_filename,)
|
||||
|
||||
for i in range(func.co_firstlineno):
|
||||
line = f.readline()
|
||||
ind = _getindent(line)
|
||||
msg = ""
|
||||
while line:
|
||||
msg = msg + line
|
||||
line = f.readline()
|
||||
# the following should be <= ind, but then we get
|
||||
# confused by multiline docstrings. Using == works most of
|
||||
# the time... but not always!
|
||||
if _getindent(line) == ind: break
|
||||
return msg
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
class pyTree(wx.wxTreeCtrl):
|
||||
"""
|
||||
This wxTreeCtrl derivative displays a tree view of a Python namespace.
|
||||
Anything from which the dir() command returns a non-empty list is a branch
|
||||
in this tree.
|
||||
"""
|
||||
|
||||
def __init__(self, parent, id, root):
|
||||
"""
|
||||
Initialize function; because we insert branches into the tree
|
||||
as needed, we use the ITEM_EXPANDING event handler. The
|
||||
ITEM_COLLAPSED handler removes the stuff afterwards. The
|
||||
SEL_CHANGED handler attempts to display interesting
|
||||
information about the selected object.
|
||||
"""
|
||||
wx.wxTreeCtrl.__init__(self, parent, id)
|
||||
self.root = self.AddRoot(str(root), -1, -1, wx.wxTreeItemData(root))
|
||||
if dir(root):
|
||||
self.SetItemHasChildren(self.root, wx.TRUE)
|
||||
wx.EVT_TREE_ITEM_EXPANDING(self, self.GetId(), self.OnItemExpanding)
|
||||
wx.EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemCollapsed)
|
||||
wx.EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
|
||||
self.output = None
|
||||
|
||||
|
||||
def SetOutput(self, output):
|
||||
"""
|
||||
Set output function (accepts single string). Used to display string
|
||||
representation of the selected object by OnSelChanged.
|
||||
"""
|
||||
self.output = output
|
||||
|
||||
|
||||
def OnItemExpanding(self,event):
|
||||
"""
|
||||
The real workhorse of this class. First we retrieve the object
|
||||
(parent) belonging to the branch that is to be expanded. This
|
||||
is done by calling GetPyData(parent), which is a short-cut for
|
||||
GetPyItemData(parent).Get().
|
||||
|
||||
Then we get the dir() list of that object. For each item in
|
||||
this list, a tree item is created with associated
|
||||
wxTreeItemData referencing the child object. We get this
|
||||
object using child = getattr(parent, item).
|
||||
|
||||
Finally, we check wether the child returns a non-empty dir()
|
||||
list. If so, it is labeled as 'having children', so that it
|
||||
may be expanded. When it actually is expanded, this function
|
||||
will again figure out what the offspring is.
|
||||
"""
|
||||
item = event.GetItem()
|
||||
obj = self.GetPyData( item )
|
||||
lst = dir(obj)
|
||||
for key in lst:
|
||||
new_obj = getattr(obj,key)
|
||||
new_item = self.AppendItem( item, key, -1, -1,
|
||||
wx.wxTreeItemData(new_obj) )
|
||||
if dir(new_obj):
|
||||
self.SetItemHasChildren(new_item, wx.TRUE)
|
||||
|
||||
def OnItemCollapsed(self, event):
|
||||
"""
|
||||
We need to remove all children here, otherwise we'll see all
|
||||
that old rubbish again after the next expansion.
|
||||
"""
|
||||
item = event.GetItem()
|
||||
self.DeleteChildren(item)
|
||||
|
||||
def OnSelChanged(self, event):
|
||||
"""
|
||||
If an output function is defined, we try to print some
|
||||
informative, interesting and thought-provoking stuff to it.
|
||||
If it has a __doc__ string, we print it. If it's a function or
|
||||
unbound class method, we attempt to find the python source.
|
||||
"""
|
||||
if not self.output:
|
||||
return
|
||||
obj = self.GetPyData( event.GetItem() )
|
||||
msg = str(obj)
|
||||
if hasattr(obj, '__doc__'):
|
||||
msg = msg+"\n\nDocumentation string:\n\n%s" % ( getattr(obj, '__doc__'),)
|
||||
# Is it a function?
|
||||
func = None
|
||||
if hasattr(obj, "func_code"): # normal function
|
||||
func = getattr(obj, "func_code")
|
||||
elif hasattr(obj, "im_func"): # unbound class method
|
||||
func = getattr(getattr(obj, "im_func"), "func_code")
|
||||
if func: # if we found one, let's try to print the source
|
||||
msg = msg+"\n\nFunction source:\n\n" + _sourcefinder(func)
|
||||
|
||||
apply(self.output, (msg,))
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
overview = __doc__
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
"""
|
||||
This method is used by the wxPython Demo Framework for integrating
|
||||
this demo with the rest.
|
||||
"""
|
||||
thisModule = __import__(__name__, globals())
|
||||
win = wx.wxFrame(frame, -1, "PyTreeItemData Test")
|
||||
split = wx.wxSplitterWindow(win, -1)
|
||||
tree = pyTree(split, -1, thisModule)
|
||||
text = wx.wxTextCtrl(split, -1, "", wx.wxDefaultPosition,
|
||||
wx.wxDefaultSize, wx.wxTE_MULTILINE)
|
||||
split.SplitVertically(tree, text, 200)
|
||||
tree.SetOutput(text.SetValue)
|
||||
tree.SelectItem(tree.root)
|
||||
win.SetSize(wx.wxSize(800,500))
|
||||
frame.otherWin = win
|
||||
win.Show(1)
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
if __name__ == '__main__':
|
||||
|
||||
class MyFrame(wx.wxFrame):
|
||||
"""Very standard Frame class. Nothing special here!"""
|
||||
|
||||
def __init__(self):
|
||||
"""Make a splitter window; left a tree, right a textctrl. Wow."""
|
||||
import __main__
|
||||
wx.wxFrame.__init__(self, wx.NULL, -1, "PyTreeItemData Test",
|
||||
wx.wxDefaultPosition, wx.wxSize(800,500))
|
||||
split = wx.wxSplitterWindow(self, -1)
|
||||
tree = pyTree(split, -1, __main__)
|
||||
text = wx.wxTextCtrl(split, -1, "", wx.wxDefaultPosition,
|
||||
wx.wxDefaultSize, wx.wxTE_MULTILINE)
|
||||
split.SplitVertically(tree, text, 200)
|
||||
tree.SetOutput(text.SetValue)
|
||||
tree.SelectItem(tree.root)
|
||||
|
||||
class MyApp(wx.wxApp):
|
||||
"""This class is even less interesting than MyFrame."""
|
||||
|
||||
def OnInit(self):
|
||||
"""OnInit. Boring, boring, boring!"""
|
||||
frame = MyFrame()
|
||||
frame.Show(wx.TRUE)
|
||||
self.SetTopWindow(frame)
|
||||
return wx.TRUE
|
||||
|
||||
app = MyApp(0)
|
||||
app.MainLoop()
|
||||
|
||||
|
13
utils/wxPython/demo/quotes.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE quotations [
|
||||
<!ELEMENT collection (quotation)*>
|
||||
|
||||
<!ELEMENT em (#PCDATA) >
|
||||
<!ELEMENT foreign (#PCDATA) >
|
||||
<!ELEMENT cite (#PCDATA) >
|
||||
<!ELEMENT author (#PCDATA)>
|
||||
<!ELEMENT source (#PCDATA|cite)*>
|
||||
|
||||
<!ELEMENT quotation (#PCDATA|author|source)* >
|
||||
]>
|
||||
<collection><quotation>We will perhaps eventually be writing only small modules which are identified by name as they are used to build larger ones, so that devices like indentation, rather than delimiters, might become feasible for expressing local structure in the source language. <source>Donald E. Knuth, "Structured Programming with goto Statements", Computing Surveys, Vol 6 No 4, Dec. 1974</source> </quotation> <quotation> The infinities aren't contagious except in that they often appear that way due to to their large size. <source>Tim Peters on the IEEE 754 floating point standard, 27 Apr 1998</source> </quotation> </collection>
|
47
utils/wxPython/demo/wxButton.py
Normal file
@@ -0,0 +1,47 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
class TestPanel(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
self.log = log
|
||||
|
||||
wxButton(self, 10, "Hello", wxPoint(20, 20)).SetDefault()
|
||||
EVT_BUTTON(self, 10, self.OnClick)
|
||||
|
||||
wxButton(self, 20, "HELLO AGAIN!", wxPoint(20, 60), wxSize(90, 45))
|
||||
EVT_BUTTON(self, 20, self.OnClick)
|
||||
|
||||
bmp = wxBitmap('bitmaps/test2.bmp', wxBITMAP_TYPE_BMP)
|
||||
wxBitmapButton(self, 30, bmp, wxPoint(140, 20),
|
||||
wxSize(bmp.GetWidth()+10, bmp.GetHeight()+10))
|
||||
EVT_BUTTON(self, 30, self.OnClick)
|
||||
|
||||
|
||||
def OnClick(self, event):
|
||||
self.log.WriteText("Click! (%d)\n" % event.GetId())
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestPanel(nb, log)
|
||||
return win
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
||||
|
||||
|
80
utils/wxPython/demo/wxCheckBox.py
Normal file
@@ -0,0 +1,80 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestCheckBox(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
self.log = log
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
|
||||
wxStaticText(self, -1, "This example uses the wxCheckBox control.",
|
||||
wxPoint(10, 10))
|
||||
|
||||
cID = NewId()
|
||||
cb1 = wxCheckBox(self, cID, " Apples", wxPoint(65, 40), wxSize(150, 20), wxNO_BORDER)
|
||||
cb2 = wxCheckBox(self, cID+1, " Oranges", wxPoint(65, 60), wxSize(150, 20), wxNO_BORDER)
|
||||
cb2.SetValue(true)
|
||||
cb3 = wxCheckBox(self, cID+2, " Pears", wxPoint(65, 80), wxSize(150, 20), wxNO_BORDER)
|
||||
|
||||
EVT_CHECKBOX(self, cID, self.EvtCheckBox)
|
||||
EVT_CHECKBOX(self, cID+1, self.EvtCheckBox)
|
||||
EVT_CHECKBOX(self, cID+2, self.EvtCheckBox)
|
||||
|
||||
|
||||
def EvtCheckBox(self, event):
|
||||
self.log.WriteText('EvtCheckBox: %d\n' % event.Checked())
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestCheckBox(nb, log)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
A checkbox is a labelled box which is either on (checkmark is visible) or off (no checkmark).
|
||||
|
||||
wxCheckBox()
|
||||
-----------------------
|
||||
|
||||
Default constructor.
|
||||
|
||||
wxCheckBox(wxWindow* parent, wxWindowID id, const wxString& label, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxValidator& val, const wxString& name = "checkBox")
|
||||
|
||||
Constructor, creating and showing a checkbox.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Parent window. Must not be NULL.
|
||||
|
||||
id = Checkbox identifier. A value of -1 indicates a default value.
|
||||
|
||||
label = Text to be displayed next to the checkbox.
|
||||
|
||||
pos = Checkbox position. If the position (-1, -1) is specified then a default position is chosen.
|
||||
|
||||
size = Checkbox size. If the default size (-1, -1) is specified then a default size is chosen.
|
||||
|
||||
style = Window style. See wxCheckBox.
|
||||
|
||||
validator = Window validator.
|
||||
|
||||
name = Window name.
|
||||
"""
|
53
utils/wxPython/demo/wxCheckListBox.py
Normal file
@@ -0,0 +1,53 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
class TestPanel(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
self.log = log
|
||||
|
||||
sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
|
||||
'six', 'seven', 'eight', 'nine', 'ten', 'eleven',
|
||||
'twelve', 'thirteen', 'fourteen']
|
||||
|
||||
wxStaticText(self, -1, "This example uses the wxCheckListBox control.",
|
||||
wxPoint(45, 15))
|
||||
|
||||
lb = wxCheckListBox(self, 60, wxPoint(80, 50), wxSize(80, 120),
|
||||
sampleList)
|
||||
EVT_LISTBOX(self, 60, self.EvtListBox)
|
||||
EVT_LISTBOX_DCLICK(self, 60, self.EvtListBoxDClick)
|
||||
lb.SetSelection(0)
|
||||
|
||||
|
||||
def EvtListBox(self, event):
|
||||
self.log.WriteText('EvtListBox: %s\n' % event.GetString())
|
||||
|
||||
def EvtListBoxDClick(self, event):
|
||||
self.log.WriteText('EvtListBoxDClick:\n')
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestPanel(nb, log)
|
||||
return win
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
||||
|
||||
|
76
utils/wxPython/demo/wxChoice.py
Normal file
@@ -0,0 +1,76 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestChoice(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
self.log = log
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
|
||||
sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
|
||||
'six', 'seven', 'eight']
|
||||
|
||||
wxStaticText(self, -1, "This example uses the wxChoice control.",
|
||||
wxPoint(15, 10))
|
||||
|
||||
wxStaticText(self, -1, "Select one:", wxPoint(15, 50), wxSize(75, 20))
|
||||
wxChoice(self, 40, wxPoint(80, 50), wxSize(95, 20), #wxDefaultSize,
|
||||
sampleList)
|
||||
EVT_CHOICE(self, 40, self.EvtChoice)
|
||||
|
||||
def EvtChoice(self, event):
|
||||
self.log.WriteText('EvtChoice: %s\n' % event.GetString())
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestChoice(nb, log)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
A choice item is used to select one of a list of strings. Unlike a listbox, only the selection is visible until the user pulls down the menu of choices.
|
||||
|
||||
wxChoice()
|
||||
-------------------
|
||||
|
||||
Default constructor.
|
||||
|
||||
wxChoice(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, int n, const wxString choices[], long style = 0, const wxValidator& validator = wxDefaultValidator, const wxString& name = "choice")
|
||||
|
||||
Constructor, creating and showing a choice.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Parent window. Must not be NULL.
|
||||
|
||||
id = Window identifier. A value of -1 indicates a default value.
|
||||
|
||||
pos = Window position.
|
||||
|
||||
size = Window size. If the default size (-1, -1) is specified then the choice is sized appropriately.
|
||||
|
||||
n = Number of strings with which to initialise the choice control.
|
||||
|
||||
choices = An array of strings with which to initialise the choice control.
|
||||
|
||||
style = Window style. See wxChoice.
|
||||
|
||||
validator = Window validator.
|
||||
|
||||
name = Window name.
|
||||
"""
|
38
utils/wxPython/demo/wxColourDialog.py
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
data = wxColourData()
|
||||
data.SetChooseFull(true)
|
||||
dlg = wxColourDialog(frame, data)
|
||||
if dlg.ShowModal() == wxID_OK:
|
||||
data = dlg.GetColourData()
|
||||
log.WriteText('You selected: %s\n' % str(data.GetColour().Get()))
|
||||
dlg.Destroy()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
This class represents the colour chooser dialog.
|
||||
|
||||
wxColourDialog()
|
||||
------------------------------
|
||||
|
||||
wxColourDialog(wxWindow* parent, wxColourData* data = NULL)
|
||||
|
||||
Constructor. Pass a parent window, and optionally a pointer to a block of colour data, which will be copied to the colour dialog's colour data.
|
||||
|
||||
"""
|
79
utils/wxPython/demo/wxComboBox.py
Normal file
@@ -0,0 +1,79 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestComboBox(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
self.log = log
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
|
||||
sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
|
||||
'six', 'seven', 'eight']
|
||||
|
||||
wxStaticText(self, -1, "This example uses the wxComboBox control.",
|
||||
wxPoint(8, 10))
|
||||
|
||||
wxStaticText(self, -1, "Select one:", wxPoint(15, 50), wxSize(75, 18))
|
||||
wxComboBox(self, 500, "default value", wxPoint(80, 50), wxSize(95, -1),
|
||||
sampleList, wxCB_DROPDOWN)
|
||||
EVT_COMBOBOX(self, 500, self.EvtComboBox)
|
||||
|
||||
|
||||
def EvtComboBox(self, event):
|
||||
self.log.WriteText('EvtComboBox: %s\n' % event.GetString())
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestComboBox(nb, log)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
A combobox is like a combination of an edit control and a listbox. It can be displayed as static list with editable or read-only text field; or a drop-down list with text field; or a drop-down list without a text field.
|
||||
|
||||
A combobox permits a single selection only. Combobox items are numbered from zero.
|
||||
|
||||
wxComboBox()
|
||||
-----------------------
|
||||
|
||||
Default constructor.
|
||||
|
||||
wxComboBox(wxWindow* parent, wxWindowID id, const wxString& value = "", const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, int n, const wxString choices[], long style = 0, const wxValidator& validator = wxDefaultValidator, const wxString& name = "comboBox")
|
||||
|
||||
Constructor, creating and showing a combobox.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Parent window. Must not be NULL.
|
||||
|
||||
id = Window identifier. A value of -1 indicates a default value.
|
||||
|
||||
pos = Window position.
|
||||
|
||||
size = Window size. If the default size (-1, -1) is specified then the window is sized appropriately.
|
||||
|
||||
n = Number of strings with which to initialise the control.
|
||||
|
||||
choices = An array of strings with which to initialise the control.
|
||||
|
||||
style = Window style. See wxComboBox.
|
||||
|
||||
validator = Window validator.
|
||||
|
||||
name = Window name.
|
||||
"""
|
33
utils/wxPython/demo/wxDialog.py
Normal file
@@ -0,0 +1,33 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = wxDialog(frame, -1, "This is a wxDialog", wxDefaultPosition, wxSize(350, 200))
|
||||
|
||||
wxStaticText(win, -1, "This is a wxDialog", wxPoint(20, 20))
|
||||
wxButton(win, wxID_OK, " OK ", wxPoint(75, 120), wxDefaultSize).SetDefault()
|
||||
wxButton(win, wxID_CANCEL, " Cancel ", wxPoint(200, 120), wxDefaultSize)
|
||||
|
||||
val = win.ShowModal()
|
||||
if val == wxID_OK:
|
||||
log.WriteText("You pressed OK\n")
|
||||
else:
|
||||
log.WriteText("You pressed Cancel\n")
|
||||
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
53
utils/wxPython/demo/wxDirDialog.py
Normal file
@@ -0,0 +1,53 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
dlg = wxDirDialog(frame)
|
||||
if dlg.ShowModal() == wxID_OK:
|
||||
log.WriteText('You selected: %s\n' % dlg.GetPath())
|
||||
dlg.Destroy()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
This class represents the directory chooser dialog.
|
||||
|
||||
wxDirDialog()
|
||||
------------------------
|
||||
|
||||
wxDirDialog(wxWindow* parent, const wxString& message = "Choose a directory", const wxString& defaultPath = "", long style = 0, const wxPoint& pos = wxDefaultPosition)
|
||||
|
||||
Constructor. Use wxDirDialog::ShowModal to show the dialog.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Parent window.
|
||||
|
||||
message = Message to show on the dialog.
|
||||
|
||||
defaultPath = The default path, or the empty string.
|
||||
|
||||
style = A dialog style, currently unused.
|
||||
|
||||
pos = Dialog position.
|
||||
"""
|
62
utils/wxPython/demo/wxFileDialog.py
Normal file
@@ -0,0 +1,62 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
dlg = wxFileDialog(frame, "Choose a file", ".", "", "*.*", wxOPEN)
|
||||
if dlg.ShowModal() == wxID_OK:
|
||||
log.WriteText('You selected: %s\n' % dlg.GetPath())
|
||||
dlg.Destroy()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
This class represents the file chooser dialog.
|
||||
|
||||
wxFileDialog()
|
||||
----------------------------
|
||||
|
||||
wxFileDialog(wxWindow* parent, const wxString& message = "Choose a file", const wxString& defaultDir = ""
|
||||
, const wxString& defaultFile = "", const wxString& wildcard = "*.*", long style = 0, const wxPoint& pos = wxDefaultPosition)
|
||||
|
||||
Constructor. Use wxFileDialog::ShowModal to show the dialog.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Parent window.
|
||||
|
||||
message = Message to show on the dialog.
|
||||
|
||||
defaultDir = The default directory, or the empty string.
|
||||
|
||||
defaultFile = The default filename, or the empty string.
|
||||
|
||||
wildcard = A wildcard, such as "*.*".
|
||||
|
||||
style = A dialog style. A bitlist of:
|
||||
|
||||
wxOPEN This is an open dialog (Windows only).
|
||||
|
||||
wxSAVE This is a save dialog (Windows only).
|
||||
|
||||
wxHIDE_READONLY Hide read-only files (Windows only).
|
||||
|
||||
wxOVERWRITE_PROMPT Prompt for a conformation if a file will be overridden (Windows only).
|
||||
|
||||
pos = Dialog position.
|
||||
"""
|
39
utils/wxPython/demo/wxFontDialog.py
Normal file
@@ -0,0 +1,39 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
dlg = wxFontDialog(frame)
|
||||
if dlg.ShowModal() == wxID_OK:
|
||||
data = dlg.GetFontData()
|
||||
font = data.GetChosenFont()
|
||||
log.WriteText('You selected: "%s", %d points, color %s\n' %
|
||||
(font.GetFaceName(), font.GetPointSize(),
|
||||
data.GetColour().Get()))
|
||||
dlg.Destroy()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
This class represents the font chooser dialog.
|
||||
|
||||
wxFontDialog()
|
||||
----------------------------
|
||||
|
||||
wxFontDialog(wxWindow* parent, wxFontData* data = NULL)
|
||||
|
||||
Constructor. Pass a parent window, and optionally a pointer to a block of font data, which will be copied to the font dialog's font data.
|
||||
"""
|
41
utils/wxPython/demo/wxFrame.py
Normal file
@@ -0,0 +1,41 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class MyFrame(wxFrame):
|
||||
def __init__(self, parent, ID, title, pos, size):
|
||||
wxFrame.__init__(self, parent, ID, title, pos, size)
|
||||
panel = wxPanel(self, -1)
|
||||
|
||||
button = wxButton(panel, 1003, "Close Me")
|
||||
button.SetPosition(wxPoint(15, 15))
|
||||
EVT_BUTTON(self, 1003, self.OnCloseMe)
|
||||
|
||||
def OnCloseMe(self, event):
|
||||
self.Close(true)
|
||||
|
||||
def OnCloseWindow(self, event):
|
||||
self.Destroy()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = MyFrame(frame, -1, "This is a wxFrame", wxDefaultPosition, wxSize(350, 200))
|
||||
frame.otherWin = win
|
||||
win.Show(true)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
158
utils/wxPython/demo/wxGLCanvas.py
Normal file
@@ -0,0 +1,158 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
try:
|
||||
from wxPython.glcanvas import *
|
||||
haveGLCanvas = true
|
||||
except ImportError:
|
||||
haveGLCanvas = false
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
if not haveGLCanvas:
|
||||
def runTest(frame, nb, log):
|
||||
dlg = wxMessageDialog(frame, 'The wxGLCanvas has not been included with this build of wxPython!',
|
||||
'Sorry', wxOK | wxICON_INFORMATION)
|
||||
dlg.ShowModal()
|
||||
dlg.Destroy()
|
||||
|
||||
else:
|
||||
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
#win = TestGLCanvas(nb)
|
||||
#return win
|
||||
win = wxFrame(frame, -1, "GL Cube", wxDefaultPosition, wxSize(400,300))
|
||||
canvas = TestGLCanvas(win)
|
||||
frame.otherWin = win
|
||||
win.Show(true)
|
||||
return None
|
||||
|
||||
|
||||
|
||||
class TestGLCanvas(wxGLCanvas):
|
||||
def __init__(self, parent):
|
||||
wxGLCanvas.__init__(self, parent, -1)
|
||||
EVT_ERASE_BACKGROUND(self, self.OnEraseBackground)
|
||||
self.init = false
|
||||
|
||||
def OnEraseBackground(self, event):
|
||||
pass # Do nothing, to avoid flashing.
|
||||
|
||||
|
||||
def OnSize(self, event):
|
||||
size = self.GetClientSize()
|
||||
if self.GetContext() != 'NULL':
|
||||
self.SetCurrent()
|
||||
glViewport(0, 0, size.width, size.height)
|
||||
|
||||
|
||||
def OnPaint(self, event):
|
||||
dc = wxPaintDC(self)
|
||||
|
||||
ctx = self.GetContext()
|
||||
if ctx == "NULL": return
|
||||
|
||||
self.SetCurrent()
|
||||
|
||||
|
||||
if not self.init:
|
||||
self.InitGL()
|
||||
self.init = true
|
||||
|
||||
# clear color and depth buffers
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
# draw six faces of a cube
|
||||
glBegin(GL_QUADS)
|
||||
glNormal3f( 0.0, 0.0, 1.0)
|
||||
glVertex3f( 0.5, 0.5, 0.5)
|
||||
glVertex3f(-0.5, 0.5, 0.5)
|
||||
glVertex3f(-0.5,-0.5, 0.5)
|
||||
glVertex3f( 0.5,-0.5, 0.5)
|
||||
|
||||
glNormal3f( 0.0, 0.0,-1.0)
|
||||
glVertex3f(-0.5,-0.5,-0.5)
|
||||
glVertex3f(-0.5, 0.5,-0.5)
|
||||
glVertex3f( 0.5, 0.5,-0.5)
|
||||
glVertex3f( 0.5,-0.5,-0.5)
|
||||
|
||||
glNormal3f( 0.0, 1.0, 0.0)
|
||||
glVertex3f( 0.5, 0.5, 0.5)
|
||||
glVertex3f( 0.5, 0.5,-0.5)
|
||||
glVertex3f(-0.5, 0.5,-0.5)
|
||||
glVertex3f(-0.5, 0.5, 0.5)
|
||||
|
||||
glNormal3f( 0.0,-1.0, 0.0)
|
||||
glVertex3f(-0.5,-0.5,-0.5)
|
||||
glVertex3f( 0.5,-0.5,-0.5)
|
||||
glVertex3f( 0.5,-0.5, 0.5)
|
||||
glVertex3f(-0.5,-0.5, 0.5)
|
||||
|
||||
glNormal3f( 1.0, 0.0, 0.0)
|
||||
glVertex3f( 0.5, 0.5, 0.5)
|
||||
glVertex3f( 0.5,-0.5, 0.5)
|
||||
glVertex3f( 0.5,-0.5,-0.5)
|
||||
glVertex3f( 0.5, 0.5,-0.5)
|
||||
|
||||
glNormal3f(-1.0, 0.0, 0.0)
|
||||
glVertex3f(-0.5,-0.5,-0.5)
|
||||
glVertex3f(-0.5,-0.5, 0.5)
|
||||
glVertex3f(-0.5, 0.5, 0.5)
|
||||
glVertex3f(-0.5, 0.5,-0.5)
|
||||
glEnd()
|
||||
|
||||
self.SwapBuffers()
|
||||
|
||||
|
||||
def InitGL(self):
|
||||
# set viewing projection
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0);
|
||||
|
||||
# position viewer
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glTranslatef(0.0, 0.0, -2.0);
|
||||
|
||||
# position object
|
||||
glRotatef(30.0, 1.0, 0.0, 0.0);
|
||||
glRotatef(30.0, 0.0, 1.0, 0.0);
|
||||
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glEnable(GL_LIGHTING);
|
||||
glEnable(GL_LIGHT0);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def _test():
|
||||
class MyApp(wxApp):
|
||||
def OnInit(self):
|
||||
frame = wxFrame(NULL, -1, "GL Cube", wxDefaultPosition, wxSize(400,300))
|
||||
win = TestGLCanvas(frame)
|
||||
frame.Show(TRUE)
|
||||
self.SetTopWindow(frame)
|
||||
return TRUE
|
||||
|
||||
app = MyApp(0)
|
||||
app.MainLoop()
|
||||
|
||||
if __name__ == '__main__':
|
||||
_test()
|
55
utils/wxPython/demo/wxGauge.py
Normal file
@@ -0,0 +1,55 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
class TestPanel(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
self.log = log
|
||||
self.count = 0
|
||||
|
||||
wxStaticText(self, -1, "This example uses the wxGauge control.",
|
||||
wxPoint(45, 15))
|
||||
|
||||
#self.g1 = wxGauge(self, -1, 50, wxPoint(40, 50), wxSize(40, 160),
|
||||
# wxGA_VERTICAL)
|
||||
#self.g1.SetBezelFace(3)
|
||||
#self.g1.SetShadowWidth(3)
|
||||
|
||||
self.g2 = wxGauge(self, -1, 50, wxPoint(110, 50), wxSize(250, 25),
|
||||
wxGA_HORIZONTAL)
|
||||
self.g2.SetBezelFace(5)
|
||||
self.g2.SetShadowWidth(5)
|
||||
|
||||
EVT_IDLE(self, self.IdleHandler)
|
||||
|
||||
|
||||
def IdleHandler(self, event):
|
||||
self.count = self.count + 1
|
||||
if self.count >= 50:
|
||||
self.count = 0
|
||||
#self.g1.SetValue(self.count)
|
||||
self.g2.SetValue(self.count)
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestPanel(nb, log)
|
||||
return win
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
79
utils/wxPython/demo/wxGrid.py
Normal file
@@ -0,0 +1,79 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestGrid(wxGrid):
|
||||
def __init__(self, parent, log):
|
||||
wxGrid.__init__(self, parent, -1)
|
||||
self.log = log
|
||||
|
||||
self.CreateGrid(16, 16)
|
||||
self.SetColumnWidth(3, 200)
|
||||
self.SetRowHeight(4, 45)
|
||||
self.SetCellValue("First cell", 0, 0)
|
||||
self.SetCellValue("Another cell", 1, 1)
|
||||
self.SetCellValue("Yet another cell", 2, 2)
|
||||
self.SetCellTextFont(wxFont(12, wxROMAN, wxITALIC, wxNORMAL), 0, 0)
|
||||
self.SetCellTextColour(wxRED, 1, 1)
|
||||
self.SetCellBackgroundColour(wxCYAN, 2, 2)
|
||||
self.UpdateDimensions()
|
||||
self.AdjustScrollbars()
|
||||
|
||||
EVT_GRID_SELECT_CELL(self, self.OnSelectCell)
|
||||
EVT_GRID_CELL_CHANGE(self, self.OnCellChange)
|
||||
EVT_GRID_CELL_LCLICK(self, self.OnCellClick)
|
||||
EVT_GRID_LABEL_LCLICK(self, self.OnLabelClick)
|
||||
|
||||
self.SetEditInPlace(true)
|
||||
#print self.GetCells()
|
||||
|
||||
|
||||
def OnSelectCell(self, event):
|
||||
self.log.WriteText("OnSelectCell: (%d, %d)\n" % (event.m_row, event.m_col))
|
||||
|
||||
def OnCellChange(self, event):
|
||||
self.log.WriteText("OnCellChange: (%d, %d)\n" % (event.m_row, event.m_col))
|
||||
|
||||
def OnCellClick(self, event):
|
||||
self.log.WriteText("OnCellClick: (%d, %d)\n" % (event.m_row, event.m_col))
|
||||
|
||||
def OnLabelClick(self, event):
|
||||
self.log.WriteText("OnLabelClick: (%d, %d)\n" % (event.m_row, event.m_col))
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestGrid(nb, log)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
wxGrid is a class for displaying and editing tabular information.
|
||||
|
||||
wxGrid()
|
||||
-----------------
|
||||
|
||||
wxGrid(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style=0, const wxString& name="grid")
|
||||
|
||||
Constructor. Before using a wxGrid object, you must call CreateGrid to set up the required rows and columns.
|
||||
"""
|
40
utils/wxPython/demo/wxImage.py
Normal file
@@ -0,0 +1,40 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
bmp = wxImage('bitmaps/image.bmp', wxBITMAP_TYPE_BMP).ConvertToBitmap()
|
||||
gif = wxImage('bitmaps/image.gif', wxBITMAP_TYPE_GIF).ConvertToBitmap()
|
||||
png = wxImage('bitmaps/image.png', wxBITMAP_TYPE_PNG).ConvertToBitmap()
|
||||
jpg = wxImage('bitmaps/image.jpg', wxBITMAP_TYPE_JPEG).ConvertToBitmap()
|
||||
|
||||
panel = wxPanel(nb, -1)
|
||||
pos = 10
|
||||
wxStaticBitmap(panel, -1, bmp, wxPoint(10, pos),
|
||||
wxSize(bmp.GetWidth(), bmp.GetHeight()))
|
||||
|
||||
pos = pos + bmp.GetHeight() + 10
|
||||
wxStaticBitmap(panel, -1, gif, wxPoint(10, pos),
|
||||
wxSize(gif.GetWidth(), gif.GetHeight()))
|
||||
|
||||
pos = pos + gif.GetHeight() + 10
|
||||
wxStaticBitmap(panel, -1, png, wxPoint(10, pos),
|
||||
wxSize(png.GetWidth(), png.GetHeight()))
|
||||
|
||||
pos = pos + png.GetHeight() + 10
|
||||
wxStaticBitmap(panel, -1, jpg, wxPoint(10, pos),
|
||||
wxSize(jpg.GetWidth(), jpg.GetHeight()))
|
||||
|
||||
return panel
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
142
utils/wxPython/demo/wxLayoutConstraints.py
Normal file
@@ -0,0 +1,142 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestLayoutConstraints(wxWindow):
|
||||
def __init__(self, parent):
|
||||
wxWindow.__init__(self, parent, -1)
|
||||
self.SetBackgroundColour(wxNamedColour("MEDIUM ORCHID"))
|
||||
|
||||
self.SetAutoLayout(true)
|
||||
EVT_BUTTON(self, 100, self.OnButton)
|
||||
|
||||
self.panelA = wxWindow(self, -1, wxDefaultPosition, wxDefaultSize,
|
||||
wxSIMPLE_BORDER)
|
||||
self.panelA.SetBackgroundColour(wxBLUE)
|
||||
txt = wxStaticText(self.panelA, -1,
|
||||
"Resize the window and see\n"
|
||||
"what happens... Notice that\n"
|
||||
"there is no OnSize handler.",
|
||||
wxPoint(5,5), wxSize(-1, 50))
|
||||
txt.SetBackgroundColour(wxBLUE)
|
||||
txt.SetForegroundColour(wxWHITE)
|
||||
|
||||
lc = wxLayoutConstraints()
|
||||
lc.top.SameAs(self, wxTop, 10)
|
||||
lc.left.SameAs(self, wxLeft, 10)
|
||||
lc.bottom.SameAs(self, wxBottom, 10)
|
||||
lc.right.PercentOf(self, wxRight, 50)
|
||||
self.panelA.SetConstraints(lc)
|
||||
|
||||
self.panelB = wxWindow(self, -1, wxDefaultPosition, wxDefaultSize,
|
||||
wxSIMPLE_BORDER)
|
||||
self.panelB.SetBackgroundColour(wxRED)
|
||||
lc = wxLayoutConstraints()
|
||||
lc.top.SameAs(self, wxTop, 10)
|
||||
lc.right.SameAs(self, wxRight, 10)
|
||||
lc.bottom.PercentOf(self, wxBottom, 30)
|
||||
lc.left.RightOf(self.panelA, 10)
|
||||
self.panelB.SetConstraints(lc)
|
||||
|
||||
self.panelC = wxWindow(self, -1, wxDefaultPosition, wxDefaultSize,
|
||||
wxSIMPLE_BORDER)
|
||||
self.panelC.SetBackgroundColour(wxWHITE)
|
||||
lc = wxLayoutConstraints()
|
||||
lc.top.Below(self.panelB, 10)
|
||||
lc.right.SameAs(self, wxRight, 10)
|
||||
lc.bottom.SameAs(self, wxBottom, 10)
|
||||
lc.left.RightOf(self.panelA, 10)
|
||||
self.panelC.SetConstraints(lc)
|
||||
|
||||
b = wxButton(self.panelA, 100, ' Panel A ')
|
||||
lc = wxLayoutConstraints()
|
||||
lc.centreX.SameAs (self.panelA, wxCentreX)
|
||||
lc.centreY.SameAs (self.panelA, wxCentreY)
|
||||
lc.height.AsIs ()
|
||||
lc.width.PercentOf (self.panelA, wxWidth, 50)
|
||||
b.SetConstraints(lc);
|
||||
|
||||
b = wxButton(self.panelB, 100, ' Panel B ')
|
||||
lc = wxLayoutConstraints()
|
||||
lc.top.SameAs (self.panelB, wxTop, 2)
|
||||
lc.right.SameAs (self.panelB, wxRight, 4)
|
||||
lc.height.AsIs ()
|
||||
lc.width.AsIs ()
|
||||
b.SetConstraints(lc);
|
||||
|
||||
self.panelD = wxWindow(self.panelC, -1, wxDefaultPosition, wxDefaultSize,
|
||||
wxSIMPLE_BORDER)
|
||||
self.panelD.SetBackgroundColour(wxGREEN)
|
||||
wxStaticText(self.panelD, -1, "Panel D", wxPoint(4, 4)).SetBackgroundColour(wxGREEN)
|
||||
|
||||
b = wxButton(self.panelC, 100, ' Panel C ')
|
||||
lc = wxLayoutConstraints()
|
||||
lc.top.Below (self.panelD)
|
||||
lc.left.RightOf (self.panelD)
|
||||
lc.height.AsIs ()
|
||||
lc.width.AsIs ()
|
||||
b.SetConstraints(lc);
|
||||
|
||||
lc = wxLayoutConstraints()
|
||||
lc.bottom.PercentOf (self.panelC, wxHeight, 50)
|
||||
lc.right.PercentOf (self.panelC, wxWidth, 50)
|
||||
lc.height.SameAs (b, wxHeight)
|
||||
lc.width.SameAs (b, wxWidth)
|
||||
self.panelD.SetConstraints(lc);
|
||||
|
||||
|
||||
def OnButton(self, event):
|
||||
wxBell()
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestLayoutConstraints(nb)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
Objects of this class can be associated with a window to define its layout constraints, with respect to siblings or its parent.
|
||||
|
||||
The class consists of the following eight constraints of class wxIndividualLayoutConstraint, some or all of which should be accessed directly to set the appropriate constraints.
|
||||
|
||||
left: represents the left hand edge of the window
|
||||
|
||||
right: represents the right hand edge of the window
|
||||
|
||||
top: represents the top edge of the window
|
||||
|
||||
bottom: represents the bottom edge of the window
|
||||
|
||||
width: represents the width of the window
|
||||
|
||||
height: represents the height of the window
|
||||
|
||||
centreX: represents the horizontal centre point of the window
|
||||
|
||||
centreY: represents the vertical centre point of the window
|
||||
|
||||
Most constraints are initially set to have the relationship wxUnconstrained, which means that their values should be calculated by looking at known constraints. The exceptions are width and height, which are set to wxAsIs to ensure that if the user does not specify a constraint, the existing width and height will be used, to be compatible with panel items which often have take a default size. If the constraint is wxAsIs, the dimension will not be changed.
|
||||
|
||||
wxLayoutConstraints()
|
||||
-------------------------------------------
|
||||
|
||||
Constructor.
|
||||
"""
|
102
utils/wxPython/demo/wxListBox.py
Normal file
@@ -0,0 +1,102 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestListBox(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
self.log = log
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
|
||||
sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
|
||||
'six', 'seven', 'eight', 'nine', 'ten', 'eleven',
|
||||
'twelve', 'thirteen', 'fourteen']
|
||||
|
||||
wxStaticText(self, -1, "This example uses the wxListBox control.",
|
||||
wxPoint(45, 10))
|
||||
|
||||
wxStaticText(self, -1, "Select one:", wxPoint(15, 50), wxSize(65, 18))
|
||||
self.lb1 = wxListBox(self, 60, wxPoint(80, 50), wxSize(80, 120),
|
||||
sampleList, wxLB_SINGLE)
|
||||
EVT_LISTBOX(self, 60, self.EvtListBox)
|
||||
EVT_LISTBOX_DCLICK(self, 60, self.EvtListBoxDClick)
|
||||
EVT_RIGHT_UP(self.lb1, self.EvtRightButton)
|
||||
self.lb1.SetSelection(0)
|
||||
|
||||
|
||||
wxStaticText(self, -1, "Select many:", wxPoint(200, 50), wxSize(65, 18))
|
||||
self.lb2 = wxListBox(self, 70, wxPoint(280, 50), wxSize(80, 120),
|
||||
sampleList, wxLB_EXTENDED)
|
||||
EVT_LISTBOX(self, 70, self.EvtMultiListBox)
|
||||
EVT_LISTBOX_DCLICK(self, 70, self.EvtListBoxDClick)
|
||||
self.lb2.SetSelection(0)
|
||||
|
||||
|
||||
def EvtListBox(self, event):
|
||||
self.log.WriteText('EvtListBox: %s\n' % event.GetString())
|
||||
|
||||
def EvtListBoxDClick(self, event):
|
||||
self.log.WriteText('EvtListBoxDClick: %s\n' % self.lb1.GetSelection())
|
||||
|
||||
def EvtMultiListBox(self, event):
|
||||
self.log.WriteText('EvtMultiListBox: %s\n' % str(self.lb2.GetSelections()))
|
||||
|
||||
def EvtRightButton(self, event):
|
||||
self.log.WriteText('EvtRightButton: %s\n' % event.GetPosition())
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestListBox(nb, log)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
A listbox is used to select one or more of a list of strings. The strings are displayed in a scrolling box, with the selected string(s) marked in reverse video. A listbox can be single selection (if an item is selected, the previous selection is removed) or multiple selection (clicking an item toggles the item on or off independently of other selections).
|
||||
|
||||
List box elements are numbered from zero.
|
||||
|
||||
wxListBox()
|
||||
---------------------
|
||||
|
||||
Default constructor.
|
||||
|
||||
wxListBox(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, int n, const wxString choices[] = NULL, long style = 0, const wxValidator& validator = wxDefaultValidator, const wxString& name = "listBox")
|
||||
|
||||
Constructor, creating and showing a list box.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Parent window. Must not be NULL.
|
||||
|
||||
id = Window identifier. A value of -1 indicates a default value.
|
||||
|
||||
pos = Window position.
|
||||
|
||||
size = Window size. If the default size (-1, -1) is specified then the window is sized appropriately.
|
||||
|
||||
n = Number of strings with which to initialise the control.
|
||||
|
||||
choices = An array of strings with which to initialise the control.
|
||||
|
||||
style = Window style. See wxListBox.
|
||||
|
||||
validator = Window validator.
|
||||
|
||||
name = Window name.
|
||||
"""
|
169
utils/wxPython/demo/wxListCtrl.py
Normal file
@@ -0,0 +1,169 @@
|
||||
#!/bin/env python
|
||||
#----------------------------------------------------------------------------
|
||||
# Name: ListCtrl.py
|
||||
# Purpose: Testing lots of stuff, controls, window types, etc.
|
||||
#
|
||||
# Author: Robin Dunn & Gary Dumer
|
||||
#
|
||||
# Created:
|
||||
# RCS-ID: $Id$
|
||||
# Copyright: (c) 1998 by Total Control Software
|
||||
# Licence: wxWindows license
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestListCtrlPanel(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
|
||||
self.log = log
|
||||
tID = NewId()
|
||||
|
||||
self.il = wxImageList(16, 16)
|
||||
idx1 = self.il.Add(wxNoRefBitmap('bitmaps/smiles.bmp', wxBITMAP_TYPE_BMP))
|
||||
|
||||
self.list = wxListCtrl(self, tID, wxDefaultPosition, wxDefaultSize,
|
||||
wxLC_REPORT|wxSUNKEN_BORDER)
|
||||
self.list.SetImageList(self.il, wxIMAGE_LIST_SMALL)
|
||||
|
||||
self.list.SetToolTip(wxToolTip("This is a ToolTip!"))
|
||||
wxToolTip_Enable(true)
|
||||
|
||||
self.list.InsertColumn(0, "Column 0")
|
||||
self.list.InsertColumn(1, "Column 1")
|
||||
self.list.InsertColumn(2, "One More Column (2)")
|
||||
for x in range(50):
|
||||
self.list.InsertImageStringItem(x, "This is item %d" % x, idx1)
|
||||
self.list.SetStringItem(x, 1, "Col 1, item %d" % x)
|
||||
self.list.SetStringItem(x, 2, "item %d in column 2" % x)
|
||||
|
||||
self.list.SetColumnWidth(0, wxLIST_AUTOSIZE)
|
||||
self.list.SetColumnWidth(1, wxLIST_AUTOSIZE)
|
||||
self.list.SetColumnWidth(2, wxLIST_AUTOSIZE)
|
||||
|
||||
self.list.SetItemState(5, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED)
|
||||
|
||||
self.currentItem = 0
|
||||
EVT_LIST_ITEM_SELECTED(self, tID, self.OnItemSelected)
|
||||
EVT_LIST_DELETE_ITEM(self, tID, self.OnItemDelete)
|
||||
EVT_LEFT_DCLICK(self.list, self.OnDoubleClick)
|
||||
EVT_RIGHT_DOWN(self.list, self.OnRightDown)
|
||||
|
||||
# for wxMSW
|
||||
EVT_COMMAND_RIGHT_CLICK(self.list, tID, self.OnRightClick)
|
||||
|
||||
# for wxGTK
|
||||
EVT_RIGHT_UP(self.list, self.OnRightClick)
|
||||
|
||||
|
||||
def OnRightDown(self, event):
|
||||
self.x = event.GetX()
|
||||
self.y = event.GetY()
|
||||
self.log.WriteText("x, y = %s\n" % str((self.x, self.y)))
|
||||
event.Skip()
|
||||
|
||||
def OnItemSelected(self, event):
|
||||
self.currentItem = event.m_itemIndex
|
||||
self.log.WriteText("OnItemSelected: %s\n" % self.list.GetItemText(self.currentItem))
|
||||
|
||||
def OnItemDelete(self, event):
|
||||
self.log.WriteText("OnItemDelete\n")
|
||||
|
||||
|
||||
def OnDoubleClick(self, event):
|
||||
self.log.WriteText("OnDoubleClick item %s\n" % self.list.GetItemText(self.currentItem))
|
||||
|
||||
|
||||
def OnRightClick(self, event):
|
||||
self.log.WriteText("OnRightClick %s\n" % self.list.GetItemText(self.currentItem))
|
||||
self.menu = wxMenu()
|
||||
tPopupID1 = 0
|
||||
tPopupID2 = 1
|
||||
tPopupID3 = 2
|
||||
tPopupID4 = 3
|
||||
self.menu.Append(tPopupID1, "One")
|
||||
self.menu.Append(tPopupID2, "Two")
|
||||
self.menu.Append(tPopupID3, "Three")
|
||||
self.menu.Append(tPopupID4, "DeleteAllItems")
|
||||
EVT_MENU(self, tPopupID1, self.OnPopupOne)
|
||||
EVT_MENU(self, tPopupID2, self.OnPopupTwo)
|
||||
EVT_MENU(self, tPopupID3, self.OnPopupThree)
|
||||
EVT_MENU(self, tPopupID4, self.OnPopupFour)
|
||||
self.PopupMenu(self.menu, wxPoint(self.x, self.y))
|
||||
|
||||
def OnPopupOne(self, event):
|
||||
self.log.WriteText("Popup one\n")
|
||||
|
||||
def OnPopupTwo(self, event):
|
||||
self.log.WriteText("Popup two\n")
|
||||
|
||||
def OnPopupThree(self, event):
|
||||
self.log.WriteText("Popup three\n")
|
||||
|
||||
def OnPopupFour(self, event):
|
||||
self.list.DeleteAllItems()
|
||||
|
||||
def OnSize(self, event):
|
||||
w,h = self.GetClientSizeTuple()
|
||||
self.list.SetDimensions(0, 0, w, h)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestListCtrlPanel(nb, log)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
A list control presents lists in a number of formats: list view, report view, icon view and small icon view. Elements are numbered from zero.
|
||||
|
||||
wxListCtrl()
|
||||
------------------------
|
||||
|
||||
Default constructor.
|
||||
|
||||
wxListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxLC_ICON, const wxValidator& validator = wxDefaultValidator, const wxString& name = "listCtrl")
|
||||
|
||||
Constructor, creating and showing a list control.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Parent window. Must not be NULL.
|
||||
|
||||
id = Window identifier. A value of -1 indicates a default value.
|
||||
|
||||
pos = Window position.
|
||||
|
||||
size = Window size. If the default size (-1, -1) is specified then the window is sized appropriately.
|
||||
|
||||
style = Window style. See wxListCtrl.
|
||||
|
||||
validator = Window validator.
|
||||
|
||||
name = Window name.
|
||||
"""
|
62
utils/wxPython/demo/wxMessageDialog.py
Normal file
@@ -0,0 +1,62 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
dlg = wxMessageDialog(frame, 'Hello from Python and wxPython!',
|
||||
'A Message Box', wxOK | wxICON_INFORMATION)
|
||||
dlg.ShowModal()
|
||||
dlg.Destroy()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
wxMessageDialog()
|
||||
----------------------------------
|
||||
|
||||
wxMessageDialog(wxWindow* parent, const wxString& message, const wxString& caption = "Message box", long style = wxOK | wxCANCEL | wxCENTRE, const wxPoint& pos = wxDefaultPosition)
|
||||
|
||||
Constructor. Use wxMessageDialog::ShowModal to show the dialog.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Parent window.
|
||||
|
||||
message = Message to show on the dialog.
|
||||
|
||||
caption = The dialog caption.
|
||||
|
||||
style = A dialog style (bitlist) containing flags chosen from the following:
|
||||
|
||||
wxOK Show an OK button.
|
||||
|
||||
wxCANCEL Show a Cancel button.
|
||||
|
||||
wxYES_NO Show Yes and No buttons.
|
||||
|
||||
wxCENTRE Centre the message. Not Windows.
|
||||
|
||||
wxICON_EXCLAMATION Shows an exclamation mark icon. Windows only.
|
||||
|
||||
wxICON_HAND Shows a hand icon. Windows only.
|
||||
|
||||
wxICON_QUESTION Shows a question mark icon. Windows only.
|
||||
|
||||
wxICON_INFORMATION Shows an information (i) icon. Windows only.
|
||||
|
||||
pos = Dialog position.
|
||||
"""
|
42
utils/wxPython/demo/wxMiniFrame.py
Normal file
@@ -0,0 +1,42 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
class MyMiniFrame(wxMiniFrame):
|
||||
def __init__(self, parent, ID, title, pos, size, style):
|
||||
wxMiniFrame.__init__(self, parent, ID, title, pos, size, style)
|
||||
panel = wxPanel(self, -1)
|
||||
|
||||
button = wxButton(panel, 1003, "Close Me")
|
||||
button.SetPosition(wxPoint(15, 15))
|
||||
EVT_BUTTON(self, 1003, self.OnCloseMe)
|
||||
|
||||
def OnCloseMe(self, event):
|
||||
self.Close(true)
|
||||
|
||||
def OnCloseWindow(self, event):
|
||||
self.Destroy()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = MyMiniFrame(frame, -1, "This is a wxMiniFrame",
|
||||
wxDefaultPosition, wxSize(200, 200),
|
||||
wxDEFAULT_FRAME_STYLE | wxTINY_CAPTION_HORIZ)
|
||||
frame.otherWin = win
|
||||
win.Show(true)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
27
utils/wxPython/demo/wxMultipleChoiceDialog.py
Normal file
@@ -0,0 +1,27 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
from wxPython.lib.dialogs import wxMultipleChoiceDialog
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
lst = [ 'apple', 'pear', 'banana', 'coconut', 'orange',
|
||||
'etc', 'etc..', 'etc...' ]
|
||||
dlg = wxMultipleChoiceDialog(frame,
|
||||
"Pick some from\n this list\nblah blah...",
|
||||
"m.s.d.", lst)
|
||||
if (dlg.ShowModal() == wxID_OK):
|
||||
print "Selection:", dlg.GetValue(), " -> ", dlg.GetValueString()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
84
utils/wxPython/demo/wxNotebook.py
Normal file
@@ -0,0 +1,84 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
import ColorPanel
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
|
||||
testWin = wxNotebook(nb, -1)
|
||||
|
||||
win = ColorPanel.ColoredPanel(testWin, wxBLUE)
|
||||
testWin.AddPage(win, "Blue")
|
||||
st = wxStaticText(win, -1,
|
||||
"You can put nearly any type of window here!",
|
||||
wxPoint(10, 10))
|
||||
st.SetForegroundColour(wxWHITE)
|
||||
st.SetBackgroundColour(wxBLUE)
|
||||
|
||||
win = ColorPanel.ColoredPanel(testWin, wxRED)
|
||||
testWin.AddPage(win, "Red")
|
||||
|
||||
win = ColorPanel.ColoredPanel(testWin, wxGREEN)
|
||||
testWin.AddPage(win, "Green")
|
||||
|
||||
win = ColorPanel.ColoredPanel(testWin, wxCYAN)
|
||||
testWin.AddPage(win, "Cyan")
|
||||
|
||||
win = ColorPanel.ColoredPanel(testWin, wxWHITE)
|
||||
testWin.AddPage(win, "White")
|
||||
|
||||
win = ColorPanel.ColoredPanel(testWin, wxBLACK)
|
||||
testWin.AddPage(win, "Black")
|
||||
|
||||
win = ColorPanel.ColoredPanel(testWin, wxNamedColour('MIDNIGHT BLUE'))
|
||||
testWin.AddPage(win, "MIDNIGHT BLUE")
|
||||
|
||||
win = ColorPanel.ColoredPanel(testWin, wxNamedColour('INDIAN RED'))
|
||||
testWin.AddPage(win, "INDIAN RED")
|
||||
|
||||
return testWin
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
This class represents a notebook control, which manages multiple windows with associated tabs.
|
||||
|
||||
To use the class, create a wxNotebook object and call AddPage or InsertPage, passing a window to be used as the page. Do not explicitly delete the window for a page that is currently managed by wxNotebook.
|
||||
|
||||
wxNotebook()
|
||||
-------------------------
|
||||
|
||||
Default constructor.
|
||||
|
||||
wxNotebook(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size, long style = 0, const wxString& name = "notebook")
|
||||
|
||||
Constructs a notebook control.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = The parent window. Must be non-NULL.
|
||||
|
||||
id = The window identifier.
|
||||
|
||||
pos = The window position.
|
||||
|
||||
size = The window size.
|
||||
|
||||
style = The window style. Its value is a bit list of zero or more of wxTC_MULTILINE, wxTC_RIGHTJUSTIFY, wxTC_FIXEDWIDTH and wxTC_OWNERDRAW.
|
||||
"""
|
33
utils/wxPython/demo/wxPageSetupDialog.py
Normal file
@@ -0,0 +1,33 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
data = wxPageSetupDialogData()
|
||||
data.SetMarginTopLeft(wxPoint(50,50))
|
||||
data.SetMarginBottomRight(wxPoint(50,50))
|
||||
dlg = wxPageSetupDialog(frame, data)
|
||||
if dlg.ShowModal() == wxID_OK:
|
||||
data = dlg.GetPageSetupData()
|
||||
tl = data.GetMarginTopLeft()
|
||||
br = data.GetMarginBottomRight()
|
||||
log.WriteText('Margins are: %s %s\n' % (str(tl), str(br)))
|
||||
dlg.Destroy()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
39
utils/wxPython/demo/wxPlotCanvas.py
Normal file
@@ -0,0 +1,39 @@
|
||||
|
||||
from wxPython.lib.wxPlotCanvas import *
|
||||
from wxPython.lib import wxPlotCanvas
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def _InitObjects():
|
||||
# 100 points sin function, plotted as green circles
|
||||
data1 = 2.*Numeric.pi*Numeric.arange(200)/200.
|
||||
data1.shape = (100, 2)
|
||||
data1[:,1] = Numeric.sin(data1[:,0])
|
||||
markers1 = PolyMarker(data1, color='green', marker='circle',size=1)
|
||||
|
||||
# 50 points cos function, plotted as red line
|
||||
data1 = 2.*Numeric.pi*Numeric.arange(100)/100.
|
||||
data1.shape = (50,2)
|
||||
data1[:,1] = Numeric.cos(data1[:,0])
|
||||
lines = PolyLine(data1, color='red')
|
||||
|
||||
# A few more points...
|
||||
pi = Numeric.pi
|
||||
markers2 = PolyMarker([(0., 0.), (pi/4., 1.), (pi/2, 0.),
|
||||
(3.*pi/4., -1)], color='blue',
|
||||
fillcolor='green', marker='cross')
|
||||
|
||||
return PlotGraphics([markers1, lines, markers2])
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = PlotCanvas(nb)
|
||||
win.draw(_InitObjects(),'automatic','automatic');
|
||||
return win
|
||||
|
||||
overview = wxPlotCanvas.__doc__
|
||||
|
||||
#---------------------------------------------------------------------------
|
31
utils/wxPython/demo/wxPrintDialog.py
Normal file
@@ -0,0 +1,31 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
data = wxPrintDialogData()
|
||||
data.EnablePrintToFile(true)
|
||||
data.EnablePageNumbers(true)
|
||||
data.EnableSelection(true)
|
||||
dlg = wxPrintDialog(frame, data)
|
||||
if dlg.ShowModal() == wxID_OK:
|
||||
log.WriteText('\n')
|
||||
dlg.Destroy()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
38
utils/wxPython/demo/wxProgressDialog.py
Normal file
@@ -0,0 +1,38 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
max = 20
|
||||
dlg = wxProgressDialog("Progress dialog example",
|
||||
"An informative message",
|
||||
max,
|
||||
frame,
|
||||
wxPD_CAN_ABORT | wxPD_APP_MODAL)
|
||||
|
||||
keepGoing = true
|
||||
count = 0
|
||||
while keepGoing and count <= max:
|
||||
count = count + 1
|
||||
wxSleep(1)
|
||||
|
||||
if count == max / 2:
|
||||
keepGoing = dlg.Update(count, "Half-time!")
|
||||
else:
|
||||
keepGoing = dlg.Update(count)
|
||||
|
||||
dlg.Destroy()
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
81
utils/wxPython/demo/wxRadioBox.py
Normal file
@@ -0,0 +1,81 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestRadioButtons(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
self.log = log
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
|
||||
sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
|
||||
'six', 'seven', 'eight']
|
||||
|
||||
rb = wxRadioBox(self, 30, "wxRadioBox", wxPoint(35, 30), wxDefaultSize,
|
||||
sampleList, 3, wxRA_SPECIFY_COLS)
|
||||
EVT_RADIOBOX(self, 30, self.EvtRadioBox)
|
||||
|
||||
|
||||
rb = wxRadioBox(self, 30, "wxRadioBox", wxPoint(35, 120), wxDefaultSize,
|
||||
sampleList, 3, wxRA_SPECIFY_COLS | wxNO_BORDER)
|
||||
EVT_RADIOBOX(self, 30, self.EvtRadioBox)
|
||||
|
||||
|
||||
def EvtRadioBox(self, event):
|
||||
self.log.WriteText('EvtRadioBox: %d\n' % event.GetInt())
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestRadioButtons(nb, log)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
A radio box item is used to select one of number of mutually exclusive choices. It is displayed as a vertical column or horizontal row of labelled buttons.
|
||||
|
||||
wxRadioBox()
|
||||
----------------------
|
||||
|
||||
Default constructor.
|
||||
|
||||
wxRadioBox(wxWindow* parent, wxWindowID id, const wxString& label, const wxPoint& point = wxDefaultPosition, const wxSize& size = wxDefaultSize, int n = 0, const wxString choices[] = NULL, int majorDimension = 0, long style = wxRA_SPECIFY_COLS, const wxValidator& validator = wxDefaultValidator, const wxString& name = "radioBox")
|
||||
|
||||
Constructor, creating and showing a radiobox.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Parent window. Must not be NULL.
|
||||
|
||||
id = Window identifier. A value of -1 indicates a default value.
|
||||
|
||||
label = Label for the static box surrounding the radio buttons.
|
||||
|
||||
pos = Window position. If the position (-1, -1) is specified then a default position is chosen.
|
||||
|
||||
size = Window size. If the default size (-1, -1) is specified then a default size is chosen.
|
||||
|
||||
n = Number of choices with which to initialize the radiobox.
|
||||
|
||||
choices = An array of choices with which to initialize the radiobox.
|
||||
|
||||
majorDimension = Specifies the maximum number of rows (if style contains wxRA_SPECIFY_ROWS) or columns (if style contains wxRA_SPECIFY_COLS) for a two-dimensional radiobox.
|
||||
|
||||
style = Window style. See wxRadioBox.
|
||||
|
||||
validator = Window validator.
|
||||
|
||||
name = Window name.
|
||||
"""
|
152
utils/wxPython/demo/wxSashWindow.py
Normal file
@@ -0,0 +1,152 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestSashWindow(wxPanel):
|
||||
ID_WINDOW_TOP = 5100
|
||||
ID_WINDOW_LEFT1 = 5101
|
||||
ID_WINDOW_LEFT2 = 5102
|
||||
ID_WINDOW_BOTTOM = 5103
|
||||
|
||||
|
||||
def __init__(self, parent, log):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
|
||||
self.log = log
|
||||
|
||||
EVT_SASH_DRAGGED_RANGE(self, self.ID_WINDOW_TOP,
|
||||
self.ID_WINDOW_BOTTOM, self.OnSashDrag)
|
||||
|
||||
|
||||
# Create some layout windows
|
||||
# A window like a toolbar
|
||||
win = wxSashLayoutWindow(self, self.ID_WINDOW_TOP, wxDefaultPosition,
|
||||
wxSize(200, 30), wxNO_BORDER|wxSW_3D)
|
||||
win.SetDefaultSize(wxSize(1000, 30))
|
||||
win.SetOrientation(wxLAYOUT_HORIZONTAL)
|
||||
win.SetAlignment(wxLAYOUT_TOP)
|
||||
win.SetBackgroundColour(wxColour(255, 0, 0))
|
||||
win.SetSashVisible(wxSASH_BOTTOM, true)
|
||||
|
||||
self.topWindow = win
|
||||
|
||||
|
||||
# A window like a statusbar
|
||||
win = wxSashLayoutWindow(self, self.ID_WINDOW_BOTTOM,
|
||||
wxDefaultPosition, wxSize(200, 30),
|
||||
wxNO_BORDER|wxSW_3D)
|
||||
win.SetDefaultSize(wxSize(1000, 30))
|
||||
win.SetOrientation(wxLAYOUT_HORIZONTAL)
|
||||
win.SetAlignment(wxLAYOUT_BOTTOM)
|
||||
win.SetBackgroundColour(wxColour(0, 0, 255))
|
||||
win.SetSashVisible(wxSASH_TOP, true)
|
||||
|
||||
self.bottomWindow = win
|
||||
|
||||
|
||||
# A window to the left of the client window
|
||||
win = wxSashLayoutWindow(self, self.ID_WINDOW_LEFT1,
|
||||
wxDefaultPosition, wxSize(200, 30),
|
||||
wxNO_BORDER|wxSW_3D)
|
||||
win.SetDefaultSize(wxSize(120, 1000))
|
||||
win.SetOrientation(wxLAYOUT_VERTICAL)
|
||||
win.SetAlignment(wxLAYOUT_LEFT)
|
||||
win.SetBackgroundColour(wxColour(0, 255, 0))
|
||||
win.SetSashVisible(wxSASH_RIGHT, TRUE)
|
||||
win.SetExtraBorderSize(10)
|
||||
|
||||
textWindow = wxTextCtrl(win, -1, "", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_MULTILINE|wxSUNKEN_BORDER)
|
||||
textWindow.SetValue("A help window")
|
||||
|
||||
self.leftWindow1 = win
|
||||
|
||||
|
||||
# Another window to the left of the client window
|
||||
win = wxSashLayoutWindow(self, self.ID_WINDOW_LEFT2,
|
||||
wxDefaultPosition, wxSize(200, 30),
|
||||
wxNO_BORDER|wxSW_3D)
|
||||
win.SetDefaultSize(wxSize(120, 1000))
|
||||
win.SetOrientation(wxLAYOUT_VERTICAL)
|
||||
win.SetAlignment(wxLAYOUT_LEFT)
|
||||
win.SetBackgroundColour(wxColour(0, 255, 255))
|
||||
win.SetSashVisible(wxSASH_RIGHT, TRUE)
|
||||
|
||||
self.leftWindow2 = win
|
||||
|
||||
|
||||
def OnSashDrag(self, event):
|
||||
if event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE:
|
||||
return
|
||||
|
||||
eID = event.GetId()
|
||||
if eID == self.ID_WINDOW_TOP:
|
||||
self.topWindow.SetDefaultSize(wxSize(1000, event.GetDragRect().height))
|
||||
|
||||
elif eID == self.ID_WINDOW_LEFT1:
|
||||
self.leftWindow1.SetDefaultSize(wxSize(event.GetDragRect().width, 1000))
|
||||
|
||||
|
||||
elif eID == self.ID_WINDOW_LEFT2:
|
||||
self.leftWindow2.SetDefaultSize(wxSize(event.GetDragRect().width, 1000))
|
||||
|
||||
elif eID == self.ID_WINDOW_BOTTOM:
|
||||
self.bottomWindow.SetDefaultSize(wxSize(1000, event.GetDragRect().height))
|
||||
|
||||
wxLayoutAlgorithm().LayoutWindow(self)
|
||||
|
||||
|
||||
def OnSize(self, event):
|
||||
wxLayoutAlgorithm().LayoutWindow(self)
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestSashWindow(nb, log)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
wxSashLayoutWindow responds to OnCalculateLayout events generated by wxLayoutAlgorithm. It allows the application to use simple accessors to specify how the window should be laid out, rather than having to respond to events. The fact that the class derives from wxSashWindow allows sashes to be used if required, to allow the windows to be user-resizable.
|
||||
|
||||
wxSashLayoutWindow()
|
||||
-------------------------------------------
|
||||
|
||||
Default constructor.
|
||||
|
||||
wxSashLayoutWindow(wxSashLayoutWindow* parent, wxSashLayoutWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxCLIP_CHILDREN | wxSW_3D, const wxString& name = "layoutWindow")
|
||||
|
||||
Constructs a sash layout window, which can be a child of a frame, dialog or any other non-control window.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Pointer to a parent window.
|
||||
|
||||
id = Window identifier. If -1, will automatically create an identifier.
|
||||
|
||||
pos = Window position. wxDefaultPosition is (-1, -1) which indicates that wxSashLayoutWindows should generate a default position for the window. If using the wxSashLayoutWindow class directly, supply an actual position.
|
||||
|
||||
size = Window size. wxDefaultSize is (-1, -1) which indicates that wxSashLayoutWindows should generate a default size for the window.
|
||||
|
||||
style = Window style. For window styles, please see wxSashLayoutWindow.
|
||||
|
||||
name = Window name.
|
||||
"""
|
24
utils/wxPython/demo/wxScrolledMessageDialog.py
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
from wxPython.lib.dialogs import wxScrolledMessageDialog
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
f = open("Main.py", "r")
|
||||
msg = f.read()
|
||||
dlg = wxScrolledMessageDialog(frame, msg, "message test")
|
||||
dlg.ShowModal()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
129
utils/wxPython/demo/wxScrolledWindow.py
Normal file
@@ -0,0 +1,129 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class MyCanvas(wxScrolledWindow):
|
||||
def __init__(self, parent):
|
||||
wxScrolledWindow.__init__(self, parent, -1, wxPoint(0, 0), wxPyDefaultSize, wxSUNKEN_BORDER)
|
||||
|
||||
self.lines = []
|
||||
self.maxWidth = 1000
|
||||
self.maxHeight = 1000
|
||||
|
||||
self.SetBackgroundColour(wxNamedColor("WHITE"))
|
||||
self.Connect(-1, -1, wxEVT_LEFT_DOWN, self.OnLeftButtonEvent)
|
||||
self.Connect(-1, -1, wxEVT_LEFT_UP, self.OnLeftButtonEvent)
|
||||
self.Connect(-1, -1, wxEVT_MOTION, self.OnLeftButtonEvent)
|
||||
|
||||
self.SetCursor(wxStockCursor(wxCURSOR_PENCIL))
|
||||
bmp = wxBitmap('bitmaps/test2.bmp', wxBITMAP_TYPE_BMP)
|
||||
self.bmp = bmp
|
||||
|
||||
self.SetScrollbars(20, 20, self.maxWidth/20, self.maxHeight/20)
|
||||
|
||||
def getWidth(self):
|
||||
return self.maxWidth
|
||||
|
||||
def getHeight(self):
|
||||
return self.maxHeight
|
||||
|
||||
|
||||
def OnPaint(self, event):
|
||||
dc = wxPaintDC(self)
|
||||
self.PrepareDC(dc)
|
||||
self.DoDrawing(dc)
|
||||
|
||||
|
||||
def DoDrawing(self, dc):
|
||||
dc.BeginDrawing()
|
||||
pen1 = wxPen(wxNamedColour('RED'))
|
||||
dc.SetPen(pen1)
|
||||
dc.DrawRectangle(5, 5, 50, 50)
|
||||
|
||||
dc.SetBrush(wxLIGHT_GREY_BRUSH)
|
||||
dc.SetPen(wxPen(wxNamedColour('BLUE'), 4))
|
||||
dc.DrawRectangle(15, 15, 50, 50)
|
||||
|
||||
font = wxFont(14, wxSWISS, wxNORMAL, wxNORMAL)
|
||||
dc.SetFont(font)
|
||||
dc.SetTextForeground(wxColour(0xFF, 0x20, 0xFF))
|
||||
te = dc.GetTextExtent("Hello World")
|
||||
dc.DrawText("Hello World", 60, 65)
|
||||
|
||||
dc.SetPen(wxPen(wxNamedColour('VIOLET'), 4))
|
||||
dc.DrawLine(5, 65+te[1], 60+te[0], 65+te[1])
|
||||
|
||||
lst = [(100,110), (150,110), (150,160), (100,160)]
|
||||
dc.DrawLines(lst, -60)
|
||||
dc.SetPen(wxGREY_PEN)
|
||||
dc.DrawPolygon(lst, 75)
|
||||
dc.SetPen(wxGREEN_PEN)
|
||||
dc.DrawSpline(lst+[(100,100)])
|
||||
|
||||
dc.DrawBitmap(self.bmp, 200, 20)
|
||||
dc.SetTextForeground(wxColour(0, 0xFF, 0x80))
|
||||
dc.DrawText("a bitmap", 200, 85)
|
||||
|
||||
self.DrawSavedLines(dc)
|
||||
dc.EndDrawing()
|
||||
|
||||
|
||||
def DrawSavedLines(self, dc):
|
||||
dc.SetPen(wxPen(wxNamedColour('MEDIUM FOREST GREEN'), 4))
|
||||
for line in self.lines:
|
||||
for coords in line:
|
||||
apply(dc.DrawLine, coords)
|
||||
|
||||
|
||||
def SetXY(self, event):
|
||||
self.x, self.y = self.ConvertEventCoords(event)
|
||||
|
||||
def ConvertEventCoords(self, event):
|
||||
xView, yView = self.ViewStart()
|
||||
xDelta, yDelta = self.GetScrollPixelsPerUnit()
|
||||
return (event.GetX() + (xView * xDelta),
|
||||
event.GetY() + (yView * yDelta))
|
||||
|
||||
def OnLeftButtonEvent(self, event):
|
||||
if event.LeftDown():
|
||||
self.SetXY(event)
|
||||
self.curLine = []
|
||||
|
||||
elif event.Dragging():
|
||||
dc = wxClientDC(self)
|
||||
self.PrepareDC(dc)
|
||||
dc.BeginDrawing()
|
||||
dc.SetPen(wxPen(wxNamedColour('MEDIUM FOREST GREEN'), 4))
|
||||
coords = (self.x, self.y) + self.ConvertEventCoords(event)
|
||||
self.curLine.append(coords)
|
||||
apply(dc.DrawLine, coords)
|
||||
self.SetXY(event)
|
||||
dc.EndDrawing()
|
||||
|
||||
elif event.LeftUp():
|
||||
self.lines.append(self.curLine)
|
||||
self.curLine = []
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = MyCanvas(nb)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
59
utils/wxPython/demo/wxSingleChoiceDialog.py
Normal file
@@ -0,0 +1,59 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
dlg = wxSingleChoiceDialog(frame, 'Test Single Choice', 'The Caption',
|
||||
['zero', 'one', 'two', 'three', 'four', 'five',
|
||||
'six', 'seven', 'eight'])
|
||||
if dlg.ShowModal() == wxID_OK:
|
||||
log.WriteText('You selected: %s\n' % dlg.GetStringSelection())
|
||||
dlg.Destroy()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
This class represents a dialog that shows a list of strings, and allows the user to select one. Double-clicking on a list item is equivalent to single-clicking and then pressing OK.
|
||||
|
||||
wxSingleChoiceDialog()
|
||||
---------------------------------------------
|
||||
|
||||
wxSingleChoiceDialog(wxWindow* parent, const wxString& message, const wxString& caption, int n, const wxString* choices, char** clientData = NULL, long style = wxOK | wxCANCEL | wxCENTRE, const wxPoint& pos = wxDefaultPosition)
|
||||
|
||||
Constructor, taking an array of wxString choices and optional client data.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Parent window.
|
||||
|
||||
message = Message to show on the dialog.
|
||||
|
||||
caption = The dialog caption.
|
||||
n = The number of choices.
|
||||
|
||||
choices = An array of strings, or a string list, containing the choices.
|
||||
|
||||
style = A dialog style (bitlist) containing flags chosen from the following:
|
||||
|
||||
wxOK Show an OK button.
|
||||
|
||||
wxCANCEL Show a Cancel button.
|
||||
|
||||
wxCENTRE Centre the message. Not Windows.
|
||||
|
||||
pos = Dialog position.
|
||||
"""
|
41
utils/wxPython/demo/wxSlider.py
Normal file
@@ -0,0 +1,41 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
import string
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
class TestPanel(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
self.log = log
|
||||
self.count = 0
|
||||
|
||||
wxStaticText(self, -1, "This is a wxSlider.", wxPoint(45, 15))
|
||||
|
||||
slider = wxSlider(self, 100, 25, 1, 100, wxPoint(30, 60),
|
||||
wxSize(250, -1),
|
||||
wxSL_HORIZONTAL | wxSL_AUTOTICKS | wxSL_LABELS )
|
||||
slider.SetTickFreq(5, 1)
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestPanel(nb, log)
|
||||
return win
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
49
utils/wxPython/demo/wxSpinButton.py
Normal file
@@ -0,0 +1,49 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
import string
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
class TestPanel(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
self.log = log
|
||||
self.count = 0
|
||||
|
||||
wxStaticText(self, -1, "This example uses the wxSpinButton control.",
|
||||
wxPoint(45, 15))
|
||||
|
||||
|
||||
self.text = wxTextCtrl(self, -1, "1", wxPoint(30, 50), wxSize(60, -1))
|
||||
h = self.text.GetSize().height
|
||||
self.spin = wxSpinButton(self, 20, wxPoint(92, 50), wxSize(h*2, h))
|
||||
self.spin.SetRange(1, 100)
|
||||
self.spin.SetValue(1)
|
||||
|
||||
EVT_SPIN(self, 20, self.OnSpin)
|
||||
|
||||
|
||||
def OnSpin(self, event):
|
||||
self.text.SetValue(str(event.GetPosition()))
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestPanel(nb, log)
|
||||
return win
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
67
utils/wxPython/demo/wxSplitterWindow.py
Normal file
@@ -0,0 +1,67 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
splitter = wxSplitterWindow(nb, -1)
|
||||
|
||||
p1 = wxWindow(splitter, -1)
|
||||
p1.SetBackgroundColour(wxRED)
|
||||
wxStaticText(p1, -1, "Panel One", wxPoint(5,5)).SetBackgroundColour(wxRED)
|
||||
|
||||
p2 = wxWindow(splitter, -1)
|
||||
p2.SetBackgroundColour(wxBLUE)
|
||||
wxStaticText(p2, -1, "Panel Two", wxPoint(5,5)).SetBackgroundColour(wxBLUE)
|
||||
|
||||
splitter.SplitVertically(p1, p2)
|
||||
splitter.SetSashPosition(100)
|
||||
splitter.SetMinimumPaneSize(20)
|
||||
|
||||
return splitter
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
This class manages up to two subwindows. The current view can be split into two programmatically (perhaps from a menu command), and unsplit either programmatically or via the wxSplitterWindow user interface.
|
||||
|
||||
wxSplitterWindow()
|
||||
-----------------------------------
|
||||
|
||||
Default constructor.
|
||||
|
||||
wxSplitterWindow(wxWindow* parent, wxWindowID id, int x, const wxPoint& point = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style=wxSP_3D, const wxString& name = "splitterWindow")
|
||||
|
||||
Constructor for creating the window.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = The parent of the splitter window.
|
||||
|
||||
id = The window identifier.
|
||||
|
||||
pos = The window position.
|
||||
|
||||
size = The window size.
|
||||
|
||||
style = The window style. See wxSplitterWindow.
|
||||
|
||||
name = The window name.
|
||||
"""
|
41
utils/wxPython/demo/wxStaticBitmap.py
Normal file
@@ -0,0 +1,41 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
import string
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
class TestPanel(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
self.log = log
|
||||
self.count = 0
|
||||
|
||||
wxStaticText(self, -1, "This is a wxStaticBitmap.", wxPoint(45, 15))
|
||||
|
||||
bmp = wxBitmap('bitmaps/test2.bmp', wxBITMAP_TYPE_BMP)
|
||||
wxStaticBitmap(self, -1, bmp, wxPoint(80, 50),
|
||||
wxSize(bmp.GetWidth(), bmp.GetHeight()))
|
||||
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestPanel(nb, log)
|
||||
return win
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
73
utils/wxPython/demo/wxStaticText.py
Normal file
@@ -0,0 +1,73 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestPanel(wxPanel):
|
||||
def __init__(self, parent):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
|
||||
wxStaticText(self, -1, "This is an example of static text",
|
||||
wxPoint(20, 10))
|
||||
|
||||
wxStaticText(self, -1, "using the wxStaticText Control.",
|
||||
wxPoint(20, 30))
|
||||
|
||||
wxStaticText(self, -1, "Is this yellow?",
|
||||
wxPoint(20, 70)).SetBackgroundColour(wxNamedColour('Yellow'))
|
||||
|
||||
str = "This is a different font."
|
||||
text = wxStaticText(self, -1, str, wxPoint(20, 100))
|
||||
font = wxFont(20, wxSWISS, wxNORMAL, wxNORMAL, false, "Arial")
|
||||
w, h, d, e = self.GetFullTextExtent(str, font)
|
||||
text.SetFont(font)
|
||||
text.SetSize(wxSize(w, h))
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
panel = TestPanel(nb)
|
||||
return panel
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = '''\
|
||||
A static text control displays one or more lines of read-only text.
|
||||
|
||||
wxStaticText()
|
||||
-------------------------
|
||||
|
||||
Default constructor.
|
||||
|
||||
wxStaticText(wxWindow* parent, wxWindowID id, const wxString& label = "", const wxPoint& pos, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = "staticText")
|
||||
|
||||
Constructor, creating and showing a text control.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Parent window. Should not be NULL.
|
||||
|
||||
id = Control identifier. A value of -1 denotes a default value.
|
||||
|
||||
label = Text label.
|
||||
|
||||
pos = Window position.
|
||||
|
||||
size = Window size.
|
||||
|
||||
style = Window style. See wxStaticText.
|
||||
|
||||
name = Window name.
|
||||
'''
|
||||
|
||||
#---------------------------------------------------------------------------
|
114
utils/wxPython/demo/wxStatusBar.py
Normal file
@@ -0,0 +1,114 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
import time
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class CustomStatusBar(wxStatusBar):
|
||||
def __init__(self, parent, log):
|
||||
wxStatusBar.__init__(self, parent, -1)
|
||||
self.SetFieldsCount(3)
|
||||
self.log = log
|
||||
|
||||
self.SetStatusText("A Custom StatusBar...", 0)
|
||||
|
||||
self.cb = wxCheckBox(self, 1001, "toggle clock")
|
||||
EVT_CHECKBOX(self, 1001, self.OnToggleClock)
|
||||
self.cb.SetValue(true)
|
||||
|
||||
# figure out how tall to make it.
|
||||
dc = wxClientDC(self)
|
||||
dc.SetFont(self.GetFont())
|
||||
(w,h) = dc.GetTextExtent('X')
|
||||
h = int(h * 1.8)
|
||||
self.SetSize(wxSize(100, h))
|
||||
|
||||
# start our timer
|
||||
self.timer = wxPyTimer(self.Notify)
|
||||
self.timer.Start(1000)
|
||||
self.Notify()
|
||||
|
||||
|
||||
# Time-out handler
|
||||
def Notify(self):
|
||||
t = time.localtime(time.time())
|
||||
st = time.strftime("%d-%b-%Y %I:%M:%S", t)
|
||||
self.SetStatusText(st, 2)
|
||||
self.log.WriteText("tick...\n")
|
||||
|
||||
# the checkbox was clicked
|
||||
def OnToggleClock(self, event):
|
||||
if self.cb.GetValue():
|
||||
self.timer.Start(1000)
|
||||
self.Notify()
|
||||
else:
|
||||
self.timer.Stop()
|
||||
|
||||
|
||||
# reposition the checkbox
|
||||
def OnSize(self, event):
|
||||
rect = self.GetFieldRect(1)
|
||||
self.cb.SetPosition(wxPoint(rect.x+2, rect.y+2))
|
||||
self.cb.SetSize(wxSize(rect.width-4, rect.height-4))
|
||||
|
||||
|
||||
|
||||
class TestCustomStatusBar(wxFrame):
|
||||
def __init__(self, parent, log):
|
||||
wxFrame.__init__(self, parent, -1, 'Test Custom StatusBar',
|
||||
wxPoint(0,0), wxSize(500, 300))
|
||||
wxWindow(self, -1).SetBackgroundColour(wxNamedColour("WHITE"))
|
||||
|
||||
self.sb = CustomStatusBar(self, log)
|
||||
self.SetStatusBar(self.sb)
|
||||
|
||||
def OnCloseWindow(self, event):
|
||||
self.sb.timer.Stop()
|
||||
del self.sb.timer
|
||||
self.Destroy()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestCustomStatusBar(frame, log)
|
||||
frame.otherWin = win
|
||||
win.Show(true)
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
A status bar is a narrow window that can be placed along the bottom of a frame to give small amounts of status information. It can contain one or more fields, one or more of which can be variable length according to the size of the window.
|
||||
|
||||
wxStatusBar()
|
||||
----------------------------
|
||||
|
||||
Default constructor.
|
||||
|
||||
wxStatusBar(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = "statusBar")
|
||||
|
||||
Constructor, creating the window.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = The window parent, usually a frame.
|
||||
|
||||
id = The window identifier. It may take a value of -1 to indicate a default value.
|
||||
|
||||
pos = The window position. A value of (-1, -1) indicates a default position, chosen by either the windowing system or wxWindows, depending on platform.
|
||||
|
||||
size = The window size. A value of (-1, -1) indicates a default size, chosen by either the windowing system or wxWindows, depending on platform.
|
||||
|
||||
style = The window style. See wxStatusBar.
|
||||
|
||||
name = The name of the window. This parameter is used to associate a name with the item, allowing the application user to set Motif resource values for individual windows.
|
||||
"""
|
40
utils/wxPython/demo/wxTextCtrl.py
Normal file
@@ -0,0 +1,40 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestPanel(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
self.log = log
|
||||
|
||||
wxStaticText(self, -1, "wxTextCtrl", wxPoint(5, 25), wxSize(75, 20))
|
||||
wxTextCtrl(self, 10, "", wxPoint(80, 25), wxSize(150, 20))
|
||||
EVT_TEXT(self, 10, self.EvtText)
|
||||
|
||||
wxStaticText(self, -1, "Passsword", wxPoint(5, 50), wxSize(75, 20))
|
||||
wxTextCtrl(self, 20, "", wxPoint(80, 50), wxSize(150, 20), wxTE_PASSWORD)
|
||||
EVT_TEXT(self, 20, self.EvtText)
|
||||
|
||||
wxStaticText(self, -1, "Multi-line", wxPoint(5, 75), wxSize(75, 20))
|
||||
wxTextCtrl(self, 30, "", wxPoint(80, 75), wxSize(200, 150), wxTE_MULTILINE)
|
||||
EVT_TEXT(self, 30, self.EvtText)
|
||||
|
||||
def EvtText(self, event):
|
||||
self.log.WriteText('EvtText: %s\n' % event.GetString())
|
||||
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestPanel(nb, log)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
"""
|
50
utils/wxPython/demo/wxTextEntryDialog.py
Normal file
@@ -0,0 +1,50 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
dlg = wxTextEntryDialog(frame, 'What is your favorite programming language?',
|
||||
'Duh??', 'Python')
|
||||
dlg.SetValue("Python is the best!") #### this doesn't work?
|
||||
if dlg.ShowModal() == wxID_OK:
|
||||
log.WriteText('You entered: %s\n' % dlg.GetValue())
|
||||
dlg.Destroy()
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
This class represents a dialog that requests a one-line text string from the user. It is implemented as a generic wxWindows dialog.
|
||||
|
||||
wxTextEntryDialog()
|
||||
----------------------------------
|
||||
|
||||
wxTextEntryDialog(wxWindow* parent, const wxString& message, const wxString& caption = "Please enter text", const wxString& defaultValue = "", long style = wxOK | wxCANCEL | wxCENTRE, const wxPoint& pos = wxDefaultPosition)
|
||||
|
||||
Constructor. Use wxTextEntryDialog::ShowModal to show the dialog.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Parent window.
|
||||
|
||||
message = Message to show on the dialog.
|
||||
|
||||
defaultValue = The default value, which may be the empty string.
|
||||
|
||||
style = A dialog style, specifying the buttons (wxOK, wxCANCEL) and an optional wxCENTRE style.
|
||||
|
||||
pos = Dialog position.
|
||||
"""
|
67
utils/wxPython/demo/wxTimer.py
Normal file
@@ -0,0 +1,67 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
import time
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestTimer(wxTimer):
|
||||
def __init__(self, log = None):
|
||||
wxTimer.__init__(self)
|
||||
self.log = log
|
||||
|
||||
def Notify(self):
|
||||
wxBell()
|
||||
if self.log:
|
||||
self.log.WriteText('beep!\n')
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
_timer = TestTimer()
|
||||
|
||||
|
||||
class TestTimerWin(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
_timer.log = log
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
|
||||
wxStaticText(self, -1, "This is a timer example",
|
||||
wxPoint(15, 30))
|
||||
|
||||
wxButton(self, 11101, ' Start ', wxPoint(15, 75), wxDefaultSize)
|
||||
wxButton(self, 11102, ' Stop ', wxPoint(115, 75), wxDefaultSize)
|
||||
EVT_BUTTON(self, 11101, self.OnStart)
|
||||
EVT_BUTTON(self, 11102, self.OnStop)
|
||||
|
||||
def OnStart(self, event):
|
||||
_timer.Start(1000)
|
||||
|
||||
def OnStop(self, event):
|
||||
_timer.Stop()
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestTimerWin(nb, log)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
The wxTimer class allows you to execute code at specified intervals. To use it, derive a new class and override the Notify member to perform the required action. Start with Start, stop with Stop, it's as simple as that.
|
||||
|
||||
wxTimer()
|
||||
------------------
|
||||
|
||||
Constructor.
|
||||
"""
|
125
utils/wxPython/demo/wxToolBar.py
Normal file
@@ -0,0 +1,125 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestToolBar(wxFrame):
|
||||
def __init__(self, parent, log):
|
||||
wxFrame.__init__(self, parent, -1, 'Test ToolBar',
|
||||
wxPoint(0,0), wxSize(500, 300))
|
||||
self.log = log
|
||||
|
||||
wxWindow(self, -1).SetBackgroundColour(wxNamedColour("WHITE"))
|
||||
|
||||
tb = self.CreateToolBar(wxTB_HORIZONTAL|wxNO_BORDER)
|
||||
#tb = wxToolBar(self, -1, wxDefaultPosition, wxDefaultSize,
|
||||
# wxTB_HORIZONTAL | wxNO_BORDER | wxTB_FLAT)
|
||||
#self.SetToolBar(tb)
|
||||
|
||||
self.CreateStatusBar()
|
||||
|
||||
tb.AddTool(10, wxNoRefBitmap('bitmaps/new.bmp', wxBITMAP_TYPE_BMP),
|
||||
wxNullBitmap, false, -1, -1, "New", "Long help for 'New'")
|
||||
EVT_TOOL(self, 10, self.OnToolClick)
|
||||
EVT_TOOL_RCLICKED(self, 10, self.OnToolRClick)
|
||||
|
||||
tb.AddTool(20, wxNoRefBitmap('bitmaps/open.bmp', wxBITMAP_TYPE_BMP),
|
||||
wxNullBitmap, false, -1, -1, "Open")
|
||||
EVT_TOOL(self, 20, self.OnToolClick)
|
||||
EVT_TOOL_RCLICKED(self, 20, self.OnToolRClick)
|
||||
|
||||
tb.AddSeparator()
|
||||
tb.AddTool(30, wxNoRefBitmap('bitmaps/copy.bmp', wxBITMAP_TYPE_BMP),
|
||||
wxNullBitmap, false, -1, -1, "Copy")
|
||||
EVT_TOOL(self, 30, self.OnToolClick)
|
||||
EVT_TOOL_RCLICKED(self, 30, self.OnToolRClick)
|
||||
|
||||
tb.AddTool(40, wxNoRefBitmap('bitmaps/paste.bmp', wxBITMAP_TYPE_BMP),
|
||||
wxNullBitmap, false, -1, -1, "Paste")
|
||||
EVT_TOOL(self, 40, self.OnToolClick)
|
||||
EVT_TOOL_RCLICKED(self, 40, self.OnToolRClick)
|
||||
|
||||
tb.AddSeparator()
|
||||
|
||||
tb.AddTool(50, wxNoRefBitmap('bitmaps/tog1.bmp', wxBITMAP_TYPE_BMP),
|
||||
wxNullBitmap, true, -1, -1, "Toggle this")
|
||||
EVT_TOOL(self, 50, self.OnToolClick)
|
||||
EVT_TOOL_RCLICKED(self, 50, self.OnToolRClick)
|
||||
|
||||
tb.AddTool(60, wxNoRefBitmap('bitmaps/tog1.bmp', wxBITMAP_TYPE_BMP),
|
||||
wxNoRefBitmap('bitmaps/tog2.bmp', wxBITMAP_TYPE_BMP),
|
||||
true, -1, -1, "Toggle with 2 bitmaps")
|
||||
EVT_TOOL(self, 60, self.OnToolClick)
|
||||
EVT_TOOL_RCLICKED(self, 60, self.OnToolRClick)
|
||||
|
||||
tb.Realize()
|
||||
|
||||
|
||||
def OnCloseWindow(self, event):
|
||||
self.Destroy()
|
||||
|
||||
def OnToolClick(self, event):
|
||||
self.log.WriteText("tool %s clicked\n" % event.GetId())
|
||||
|
||||
def OnToolRClick(self, event):
|
||||
self.log.WriteText("tool %s right-clicked\n" % event.GetId())
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestToolBar(frame, log)
|
||||
frame.otherWin = win
|
||||
win.Show(true)
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
The name wxToolBar is defined to be a synonym for one of the following classes:
|
||||
|
||||
wxToolBar95 The native Windows 95 toolbar. Used on Windows 95, NT 4 and above.
|
||||
|
||||
wxToolBarMSW A Windows implementation. Used on 16-bit Windows.
|
||||
|
||||
wxToolBarGTK The GTK toolbar.
|
||||
|
||||
wxToolBarSimple A simple implementation, with scrolling. Used on platforms with no native toolbar control, or where scrolling is required.
|
||||
|
||||
wxToolBar()
|
||||
-----------------------
|
||||
|
||||
Default constructor.
|
||||
|
||||
wxToolBar(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTB_HORIZONTAL | wxNO_BORDER, const wxString& name = wxPanelNameStr)
|
||||
|
||||
Constructs a toolbar.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Pointer to a parent window.
|
||||
|
||||
id = Window identifier. If -1, will automatically create an identifier.
|
||||
|
||||
pos = Window position. wxDefaultPosition is (-1, -1) which indicates that wxWindows should generate a default position for the window. If using the wxWindow class directly, supply an actual position.
|
||||
|
||||
size = Window size. wxDefaultSize is (-1, -1) which indicates that wxWindows should generate a default size for the window.
|
||||
|
||||
style = Window style. See wxToolBar for details.
|
||||
|
||||
name = Window name.
|
||||
"""
|
147
utils/wxPython/demo/wxTreeCtrl.py
Normal file
@@ -0,0 +1,147 @@
|
||||
|
||||
from wxPython.wx import *
|
||||
|
||||
import string
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
class TestTreeCtrlPanel(wxPanel):
|
||||
def __init__(self, parent, log):
|
||||
wxPanel.__init__(self, parent, -1)
|
||||
|
||||
self.log = log
|
||||
tID = NewId()
|
||||
|
||||
self.tree = wxTreeCtrl(self, tID, wxDefaultPosition, wxDefaultSize,
|
||||
wxTR_HAS_BUTTONS | wxTR_EDIT_LABELS)
|
||||
|
||||
self.root = self.tree.AddRoot("The Root Item")
|
||||
for x in range(15):
|
||||
child = self.tree.AppendItem(self.root, "Item %d" % x)
|
||||
for y in range(5):
|
||||
last = self.tree.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)))
|
||||
for z in range(5):
|
||||
self.tree.AppendItem(last, "item %d-%s-%d" % (x, chr(ord("a")+y), z))
|
||||
|
||||
self.tree.Expand(self.root)
|
||||
EVT_TREE_ITEM_EXPANDED (self, tID, self.OnItemExpanded)
|
||||
EVT_TREE_ITEM_COLLAPSED (self, tID, self.OnItemCollapsed)
|
||||
EVT_TREE_SEL_CHANGED (self, tID, self.OnSelChanged)
|
||||
EVT_TREE_BEGIN_LABEL_EDIT(self, tID, self.OnBeginEdit)
|
||||
EVT_TREE_END_LABEL_EDIT (self, tID, self.OnEndEdit)
|
||||
|
||||
EVT_LEFT_DCLICK(self.tree, self.OnLeftDClick)
|
||||
EVT_RIGHT_DOWN(self.tree, self.OnRightClick)
|
||||
EVT_RIGHT_UP(self.tree, self.OnRightUp)
|
||||
|
||||
def OnRightClick(self, event):
|
||||
(x,y) = event.Position();
|
||||
item = self.tree.HitTest(wxPoint(x,y))
|
||||
self.log.WriteText("OnRightClick: %s\n" % self.tree.GetItemText(item))
|
||||
self.tree.SelectItem(item)
|
||||
|
||||
def OnRightUp(self, event):
|
||||
(x,y) = event.Position();
|
||||
item = self.tree.HitTest(wxPoint(x,y))
|
||||
self.log.WriteText("OnRightUp: %s (manually starting label edit)\n"
|
||||
% self.tree.GetItemText(item))
|
||||
self.tree.EditLabel(item)
|
||||
|
||||
|
||||
|
||||
def OnBeginEdit(self, event):
|
||||
self.log.WriteText("OnBeginEdit\n")
|
||||
# show how to prevent edit...
|
||||
if self.tree.GetItemText(event.GetItem()) == "The Root Item":
|
||||
wxBell()
|
||||
self.log.WriteText("You can't edit this one...\n")
|
||||
event.Veto()
|
||||
|
||||
def OnEndEdit(self, event):
|
||||
self.log.WriteText("OnEndEdit\n")
|
||||
# show how to reject edit, we'll not allow any digits
|
||||
for x in event.GetLabel():
|
||||
if x in string.digits:
|
||||
self.log.WriteText("You can't enter digits...\n")
|
||||
event.Veto()
|
||||
return
|
||||
|
||||
|
||||
|
||||
def OnLeftDClick(self, event):
|
||||
(x,y) = event.Position();
|
||||
item = self.tree.HitTest(wxPoint(x,y))
|
||||
self.log.WriteText("OnLeftDClick: %s\n" % self.tree.GetItemText(item))
|
||||
|
||||
|
||||
def OnSize(self, event):
|
||||
w,h = self.GetClientSizeTuple()
|
||||
self.tree.SetDimensions(0, 0, w, h)
|
||||
|
||||
|
||||
def OnItemExpanded(self, event):
|
||||
item = event.GetItem()
|
||||
self.log.WriteText("OnItemExpanded: %s\n" % self.tree.GetItemText(item))
|
||||
|
||||
def OnItemCollapsed(self, event):
|
||||
item = event.GetItem()
|
||||
self.log.WriteText("OnItemCollapsed: %s\n" % self.tree.GetItemText(item))
|
||||
|
||||
def OnSelChanged(self, event):
|
||||
self.item = event.GetItem()
|
||||
self.log.WriteText("OnSelChanged: %s\n" % self.tree.GetItemText(self.item))
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
def runTest(frame, nb, log):
|
||||
win = TestTreeCtrlPanel(nb, log)
|
||||
return win
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
overview = """\
|
||||
A tree control presents information as a hierarchy, with items that may be expanded to show further items. Items in a tree control are referenced by wxTreeItemId handles.
|
||||
|
||||
wxTreeCtrl()
|
||||
-------------------------
|
||||
|
||||
Default constructor.
|
||||
|
||||
wxTreeCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTR_HAS_BUTTONS, const wxValidator& validator = wxDefaultValidator, const wxString& name = "listCtrl")
|
||||
|
||||
Constructor, creating and showing a tree control.
|
||||
|
||||
Parameters
|
||||
-------------------
|
||||
|
||||
parent = Parent window. Must not be NULL.
|
||||
|
||||
id = Window identifier. A value of -1 indicates a default value.
|
||||
|
||||
pos = Window position.
|
||||
|
||||
size = Window size. If the default size (-1, -1) is specified then the window is sized appropriately.
|
||||
|
||||
style = Window style. See wxTreeCtrl.
|
||||
|
||||
validator = Window validator.
|
||||
|
||||
name = Window name.
|
||||
"""
|
7
utils/wxPython/distrib/.cvsignore
Normal file
@@ -0,0 +1,7 @@
|
||||
*.gz
|
||||
*.rpm
|
||||
*.zip
|
||||
build.pyc
|
||||
filelist
|
||||
wxPython.spec
|
||||
wxp2.wse
|
5
utils/wxPython/distrib/.rpmrc
Normal file
@@ -0,0 +1,5 @@
|
||||
sourcedir : .
|
||||
builddir : .
|
||||
rpmdir : .
|
||||
srcrpmdir : .
|
||||
|
767
utils/wxPython/distrib/build.py
Executable file
@@ -0,0 +1,767 @@
|
||||
#!/usr/bin/env python
|
||||
#----------------------------------------------------------------------------
|
||||
# Name: build.py
|
||||
# Purpose: This script is used to build wxPython. It reads a build
|
||||
# configuration file in the requested project directory and
|
||||
# based on the contents of the file can build Makefiles for
|
||||
# unix or win32, and can execute make with various options
|
||||
# potentially automating the entire build/install/clean process
|
||||
# from a single command.
|
||||
#
|
||||
# Author: Robin Dunn
|
||||
#
|
||||
# Created: 18-Aug-1999
|
||||
# RCS-ID: $Id$
|
||||
# Copyright: (c) 1999 by Total Control Software
|
||||
# Licence: wxWindows license
|
||||
#----------------------------------------------------------------------------
|
||||
"""
|
||||
build.py
|
||||
|
||||
This script is used to build wxPython. It reads a build configuration
|
||||
file in the requested project directory and based on the contents of
|
||||
the file can build Makefiles for unix or win32, and can execute make
|
||||
with various options potentially automating the entire
|
||||
build/install/clean process from a single command.
|
||||
|
||||
The default action is to build the Makefile and exit.
|
||||
|
||||
Options
|
||||
-C dir CD to dir before doing anything
|
||||
-B file Use file as the build configuration (default ./build.cfg)
|
||||
-M file Use file as the name of the makefile to create
|
||||
(default Makefile)
|
||||
|
||||
-b Build the module (runs make)
|
||||
-i Install the module (runs make install)
|
||||
-c Cleanup (runs make clean)
|
||||
-u Uninstall (runs make uninstall)
|
||||
|
||||
-h Show help and exit
|
||||
|
||||
|
||||
Configuration Files
|
||||
|
||||
The build configuration file lists targets, source files and options
|
||||
for the the build process. The contents of the build.cfg are used to
|
||||
dynamically generate the Makefile.
|
||||
|
||||
To prevent you from getting screwed when the default build.cfg is
|
||||
updated, you can override the values in build.cfg by putting your
|
||||
custom definitions in a file named build.local. You can also place a
|
||||
build.local file in the parent directory, or even in the grandparent
|
||||
directory for project-wide overrides. Finally, command-line arguments
|
||||
of the form NAME=VALUE can also be used to override simple configuration
|
||||
values. The order of evaluation is:
|
||||
|
||||
0. comman-line flags (-M, -b, etc.)
|
||||
1. ./build.cfg
|
||||
2. ../../build.local (if present)
|
||||
3. ../build.local (if present)
|
||||
4. ./build.local (if present)
|
||||
5. command-line NAME=VALUEs
|
||||
|
||||
The config files are actually just Python files that get exec'ed in a
|
||||
separate namespace which is then used later as a configuration object.
|
||||
This keeps the build script simple in that it doesn't have to parse
|
||||
anything, and the config files can be much more than just names and
|
||||
values as pretty much any python code can be executed. The global
|
||||
variables set in the config namespace are what are used later as
|
||||
configuation values.
|
||||
|
||||
|
||||
Configuration Options
|
||||
|
||||
The following variables can be set in the config files. Only a few are
|
||||
required, the rest will either have suitable defaults or will be
|
||||
calculated from your current Python runtime environment.
|
||||
|
||||
MODULE The name of the extension module to produce
|
||||
SWIGFILES A list of files that should be run through SWIG
|
||||
SWIGFLAGS Flags for SWIG
|
||||
SOURCES Other C/C++ sources that should be part of the module
|
||||
PYFILES Other Python files that should be installed with the module
|
||||
CFLAGS Flags to be used by the compiler
|
||||
LFLAGS Flags to be used at the link step
|
||||
LIBS Libraries to be linked with
|
||||
|
||||
OTHERCFLAGS Extra flags to append to CFLAGS
|
||||
OTHERLFLAGS Extra flags to append to LFLAGS
|
||||
OTHERSWIGFLAGS Extra flags to append to SWIGFLAGS
|
||||
OTHERLIBS Other libraries to be linked with, in addition to LIBS
|
||||
OTHERTARGETS Other targets to be placed on the default rule line
|
||||
OTHERINSTALLTARGETS
|
||||
Other targets to be placed on the install rule line
|
||||
OTHERRULES This text is placed at the end of the makefile and
|
||||
will typically be used for adding rules and such
|
||||
DEFAULTRULE Text to be used for the default rule in the makefile
|
||||
|
||||
TARGETDIR Destination for the install step
|
||||
|
||||
MAKE The make program to use
|
||||
MAKEFILE The name of the makefile
|
||||
|
||||
runBuild Setting this to 1 is eqivalent to the -b flag
|
||||
runInstall Setting this to 1 is eqivalent to the -i flag
|
||||
runClean Setting this to 1 is eqivalent to the -c flag
|
||||
runUninstall Setting this to 1 is eqivalent to the -u flag
|
||||
|
||||
PYVERSION Version number of Python used in pathnames
|
||||
PYPREFIX The root of the Python install
|
||||
EXECPREFIX The root of the Python install for binary files
|
||||
PYTHONLIB The Python link library
|
||||
|
||||
"""
|
||||
|
||||
import sys, os, string, getopt
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# This is really the wxPython version number, and will be placed in the
|
||||
# Makefiles for use with the distribution related targets.
|
||||
|
||||
__version__ = '2.1b3'
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
def main(args):
|
||||
try:
|
||||
opts, args = getopt.getopt(args[1:], 'C:B:M:bicu')
|
||||
except getopt.error:
|
||||
usage()
|
||||
sys.exit(1)
|
||||
|
||||
if not os.environ.has_key('WXWIN'):
|
||||
print "WARNING: WXWIN is not set in the environment. WXDIR may not\n"\
|
||||
" be set properly in the makefile, you will have to \n"\
|
||||
" set the environment variable or override in build.local."
|
||||
|
||||
bldCfg = 'build.cfg'
|
||||
bldCfgLocal = 'build.local'
|
||||
MAKEFILE = 'Makefile'
|
||||
runBuild = 0
|
||||
runInstall = 0
|
||||
runClean = 0
|
||||
runUninstall = 0
|
||||
|
||||
for flag, value in opts:
|
||||
if flag == '-C': os.chdir(value)
|
||||
elif flag == '-B': bldCfgFile = value
|
||||
elif flag == '-M': makefile = value
|
||||
elif flag == '-b': runBuild = 1
|
||||
elif flag == '-c': runClean = 1
|
||||
elif flag == '-i': runInstall = 1
|
||||
elif flag == '-u': runUninstall = 1
|
||||
|
||||
elif flag == '-h': usage(); sys.exit(1)
|
||||
else: usage(); sys.exit(1)
|
||||
|
||||
config = BuildConfig(bldCfg = bldCfg,
|
||||
bldCfgLocal = bldCfgLocal,
|
||||
MAKEFILE = MAKEFILE,
|
||||
runBuild = runBuild,
|
||||
runInstall = runInstall,
|
||||
runClean = runClean,
|
||||
runUninstall = runUninstall)
|
||||
|
||||
if config.readConfigFiles(args):
|
||||
config.doFixups()
|
||||
config.makeMakefile()
|
||||
err = 0
|
||||
|
||||
if config.runBuild:
|
||||
cmd = "%s -f %s" % (config.MAKE, config.MAKEFILE)
|
||||
print "Running:", cmd
|
||||
err = os.system(cmd)
|
||||
|
||||
if not err and config.runInstall:
|
||||
cmd = "%s -f %s install" % (config.MAKE, config.MAKEFILE)
|
||||
print "Running:", cmd
|
||||
err = os.system(cmd)
|
||||
|
||||
|
||||
if not err and config.runClean:
|
||||
cmd = "%s -f %s clean" % (config.MAKE, config.MAKEFILE)
|
||||
print "Running:", cmd
|
||||
err = os.system(cmd)
|
||||
|
||||
if not err and config.runUninstall:
|
||||
cmd = "%s -f %s uninstall" % (config.MAKE, config.MAKEFILE)
|
||||
print "Running:", cmd
|
||||
err = os.system(cmd)
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
def usage():
|
||||
print __doc__
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
def swapslash(st):
|
||||
if sys.platform != 'win32':
|
||||
st = string.join(string.split(st, '\\'), '/')
|
||||
return st
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
def splitlines(st):
|
||||
return string.join(string.split(string.strip(st), ' '), ' \\\n\t')
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
class BuildConfig:
|
||||
def __init__(self, **kw):
|
||||
self.__dict__.update(kw)
|
||||
self.setDefaults()
|
||||
|
||||
#------------------------------------------------------------
|
||||
def setDefaults(self):
|
||||
self.VERSION = __version__
|
||||
self.MODULE = ''
|
||||
self.SWIGFILES = []
|
||||
self.SWIGFLAGS = '-c++ -shadow -python -keyword -dnone -I$(WXPSRCDIR)'
|
||||
self.SOURCES = []
|
||||
self.PYFILES = []
|
||||
self.LFLAGS = ''
|
||||
self.OTHERCFLAGS = ''
|
||||
self.OTHERLFLAGS = ''
|
||||
self.OTHERSWIGFLAGS = ''
|
||||
self.OTHERLIBS = ''
|
||||
self.OTHERTARGETS = ''
|
||||
self.OTHERINSTALLTARGETS = ''
|
||||
self.OTHERUNINSTALLTARGETS = ''
|
||||
self.OTHERRULES = ''
|
||||
self.DEFAULTRULE = 'default: $(GENCODEDIR) $(TARGET)'
|
||||
self.PYVERSION = sys.version[:3]
|
||||
self.PYPREFIX = sys.prefix
|
||||
self.EXECPREFIX = sys.exec_prefix
|
||||
self.WXDIR = '$(WXWIN)'
|
||||
self.FINAL = '0'
|
||||
self.WXP_USE_THREAD = '1'
|
||||
self.WXUSINGDLL = '1'
|
||||
self.OTHERDEP = ''
|
||||
self.WXPSRCDIR = '$(WXDIR)/utils/wxPython/src'
|
||||
|
||||
|
||||
if sys.platform == 'win32':
|
||||
self.MAKE = 'nmake'
|
||||
self.PYTHONLIB = '$(PYPREFIX)\\libs\\python15.lib'
|
||||
self.TARGETDIR = '$(PYPREFIX)\\wxPython'
|
||||
self.LIBS = '$(PYTHONLIB) $(WXPSRCDIR)\wxc.lib'
|
||||
self.GENCODEDIR = 'msw'
|
||||
self.SWIGTOOLKITFLAG = '-D__WXMSW__'
|
||||
self.OBJEXT = '.obj'
|
||||
self.TARGET = '$(MODULE).pyd'
|
||||
self.CFLAGS = '-I$(PYPREFIX)\include -I$(WXPSRCDIR) -I. /Fp$(MODULE).pch /YXhelpers.h -DSWIG_GLOBAL -DHAVE_CONFIG_H $(THREAD) '
|
||||
self.LFLAGS = '$(DEBUGLFLAGS) /DLL /subsystem:windows,3.50 /machine:I386 /nologo'
|
||||
self.RESFILE = ''
|
||||
self.RESRULE = ''
|
||||
self.OVERRIDEFLAGS = '/GX-'
|
||||
self.RMCMD = '-erase '
|
||||
self.WXPSRCDIR = os.path.normpath(self.WXPSRCDIR)
|
||||
|
||||
|
||||
else:
|
||||
self.MAKE = 'make'
|
||||
self.PYLIB = '$(EXECPREFIX)/lib/python$(PYVERSION)'
|
||||
self.LIBPL = '$(PYLIB)/config'
|
||||
self.PYTHONLIB = '$(LIBPL)/libpython$(PYVERSION).a'
|
||||
self.TARGETDIR = '$(EXECPREFIX)/lib/python$(PYVERSION)/site-packages/wxPython'
|
||||
self.TARGET = '$(MODULE)module$(SO)'
|
||||
self.OBJEXT = '.o'
|
||||
self.HELPERLIB = 'wxPyHelpers'
|
||||
self.HELPERLIBDIR = '/usr/local/lib'
|
||||
self.CFLAGS = '-DSWIG_GLOBAL -DHAVE_CONFIG_H $(THREAD) -I. '\
|
||||
'`wx-config --cflags` -I$(PYINCLUDE) -I$(EXECINCLUDE) '\
|
||||
'-I$(WXPSRCDIR)'
|
||||
self.LFLAGS = '-L$(WXPSRCDIR) `wx-config --libs`'
|
||||
self.LIBS = '-l$(HELPERLIB)'
|
||||
self.RMCMD = '-rm -f '
|
||||
|
||||
# **** What to do when I start supporting Motif, etc.???
|
||||
self.GENCODEDIR = 'gtk'
|
||||
self.SWIGTOOLKITFLAG = '-D__WXGTK__'
|
||||
|
||||
# Extract a few things from Python's Makefile...
|
||||
try:
|
||||
filename = os.path.join(self.EXECPREFIX,
|
||||
'lib/python'+self.PYVERSION,
|
||||
'config/Makefile')
|
||||
mfText = string.split(open(filename, 'r').read(), '\n')
|
||||
except IOError:
|
||||
raise SystemExit, "Python development files not found"
|
||||
|
||||
self.CCC = self.findMFValue(mfText, 'CCC')
|
||||
self.CC = self.findMFValue(mfText, 'CC')
|
||||
self.OPT = self.findMFValue(mfText, 'OPT')
|
||||
self.SO = self.findMFValue(mfText, 'SO')
|
||||
self.LDSHARED = self.findMFValue(mfText, 'LDSHARED')
|
||||
self.CCSHARED = self.findMFValue(mfText, 'CCSHARED')
|
||||
#self.LINKFORSHARED = self.findMFValue(mfText, 'LINKFORSHARED')
|
||||
#self. = self.findMFValue(mfText, '')
|
||||
#self. = self.findMFValue(mfText, '')
|
||||
|
||||
|
||||
# The majority of cases will require LDSHARED to be
|
||||
# modified to use the C++ driver instead of the C driver
|
||||
# for linking. We'll try to do it here and if we goof up
|
||||
# then the user can correct it in their build.local file.
|
||||
self.LDSHARED = string.join(['$(CCC)'] +
|
||||
string.split(self.LDSHARED, ' ')[1:],
|
||||
' ')
|
||||
|
||||
|
||||
#------------------------------------------------------------
|
||||
def doFixups(self):
|
||||
# This is called after the config files have been evaluated
|
||||
# so we can do some sanity checking...
|
||||
if sys.platform != 'win32':
|
||||
if not self.CCC:
|
||||
print "Warning: C++ compiler not specified (CCC). Assuming c++"
|
||||
self.CCC = 'c++'
|
||||
if not self.CC:
|
||||
print "Warning: C compiler not specified (CC). Assuming cc"
|
||||
self.CC = 'cc'
|
||||
|
||||
#------------------------------------------------------------
|
||||
def findMFValue(self, mfText, st):
|
||||
# Find line begining with st= and return the value
|
||||
# Regex would probably be to cooler way to do this, but
|
||||
# I think this is the most understandable.
|
||||
for line in mfText:
|
||||
if string.find(line, st+'=') == 0:
|
||||
st = string.strip(line[len(st)+1:])
|
||||
return st
|
||||
return None
|
||||
|
||||
#------------------------------------------------------------
|
||||
def makeMakefile(self):
|
||||
|
||||
# make a list of object file names
|
||||
objects = ""
|
||||
for name in self.SWIGFILES:
|
||||
objects = objects + os.path.splitext(name)[0] + self.OBJEXT + ' '
|
||||
for name in self.SOURCES:
|
||||
obj = os.path.basename(name)
|
||||
objects = objects + os.path.splitext(obj)[0] + self.OBJEXT + ' '
|
||||
self.OBJECTS = splitlines(objects)
|
||||
|
||||
|
||||
# now build the text for the dependencies
|
||||
depends = ""
|
||||
for name in self.SWIGFILES:
|
||||
text = '$(GENCODEDIR)/%s.cpp $(GENCODEDIR)/%s.py : %s.i\n' \
|
||||
'$(TARGETDIR)\\%s.py : $(GENCODEDIR)\\%s.py\n' % \
|
||||
tuple([os.path.splitext(name)[0]] * 5)
|
||||
depends = depends + text
|
||||
for name in self.PYFILES:
|
||||
text = '$(TARGETDIR)\\%s.py : %s.py\n' % \
|
||||
tuple([os.path.splitext(name)[0]] * 2)
|
||||
depends = depends + text
|
||||
self.DEPENDS = swapslash(depends)
|
||||
|
||||
|
||||
# and the list of .py files
|
||||
pymodules = ""
|
||||
for name in self.SWIGFILES:
|
||||
pymodules = pymodules + '$(TARGETDIR)\\%s.py ' % os.path.splitext(name)[0]
|
||||
for name in self.PYFILES:
|
||||
pymodules = pymodules + '$(TARGETDIR)\\%s.py ' % os.path.splitext(name)[0]
|
||||
self.PYMODULES = splitlines(swapslash(pymodules))
|
||||
|
||||
|
||||
# now make a list of the python files that would need uninstalled
|
||||
pycleanup = ""
|
||||
for name in self.SWIGFILES:
|
||||
pycleanup = pycleanup + self.makeCleanupList(name)
|
||||
for name in self.PYFILES:
|
||||
pycleanup = pycleanup + self.makeCleanupList(name)
|
||||
self.PYCLEANUP = swapslash(pycleanup)
|
||||
|
||||
|
||||
# finally, build the makefile
|
||||
if sys.platform == 'win32':
|
||||
if self.RESFILE:
|
||||
self.RESFILE = '$(MODULE).res'
|
||||
self.RESRULE = '$(MODULE).res : $(MODULE).rc $(WXDIR)\\include\\wx\\msw\\wx.rc\n\t'\
|
||||
'$(rc) -r /i$(WXDIR)\\include -fo$@ $(MODULE).rc'
|
||||
text = win32Template % self.__dict__
|
||||
else:
|
||||
text = unixTemplate % self.__dict__
|
||||
f = open(self.MAKEFILE, 'w')
|
||||
f.write(text)
|
||||
f.close()
|
||||
|
||||
print "Makefile created: ", self.MAKEFILE
|
||||
|
||||
|
||||
|
||||
#------------------------------------------------------------
|
||||
def makeCleanupList(self, name):
|
||||
st = ""
|
||||
st = st + '\t%s$(TARGETDIR)\\%s.py\n' % (self.RMCMD, os.path.splitext(name)[0])
|
||||
st = st + '\t%s$(TARGETDIR)\\%s.pyc\n' % (self.RMCMD, os.path.splitext(name)[0])
|
||||
st = st + '\t%s$(TARGETDIR)\\%s.pyo\n' % (self.RMCMD, os.path.splitext(name)[0])
|
||||
return st
|
||||
|
||||
|
||||
#------------------------------------------------------------
|
||||
def readConfigFiles(self, args):
|
||||
return self.processFile(self.bldCfg, 1) and \
|
||||
self.processFile(os.path.join('../..', self.bldCfgLocal)) and \
|
||||
self.processFile(os.path.join('..', self.bldCfgLocal)) and \
|
||||
self.processFile(os.path.join('.', self.bldCfgLocal)) and \
|
||||
self.processArgs(args)
|
||||
|
||||
#------------------------------------------------------------
|
||||
def processFile(self, filename, required=0):
|
||||
try:
|
||||
text = open(filename, 'r').read()
|
||||
except IOError:
|
||||
if required:
|
||||
print "Unable to open %s" % filename
|
||||
return 0
|
||||
else:
|
||||
return 1
|
||||
|
||||
try:
|
||||
exec(text, self.__dict__)
|
||||
except:
|
||||
print "Error evaluating %s" % filename
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
#------------------------------------------------------------
|
||||
def processArgs(self, args):
|
||||
try:
|
||||
for st in args:
|
||||
pair = string.split(st, '=')
|
||||
name = pair[0]
|
||||
value = pair[1]
|
||||
self.__dict__[name] = value
|
||||
except:
|
||||
print "Error parsing command-line: %s" % st
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
#------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
win32Template = '''
|
||||
#----------------------------------------------------------------------
|
||||
# This makefile was autogenerated from build.py. Your changes will be
|
||||
# lost if the generator is run again. You have been warned.
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
WXDIR = %(WXDIR)s
|
||||
VERSION = %(VERSION)s
|
||||
MODULE = %(MODULE)s
|
||||
SWIGFLAGS = %(SWIGFLAGS)s %(SWIGTOOLKITFLAG)s %(OTHERSWIGFLAGS)s
|
||||
CFLAGS = %(CFLAGS)s
|
||||
LFLAGS = %(LFLAGS)s
|
||||
PYVERSION = %(PYVERSION)s
|
||||
PYPREFIX = %(PYPREFIX)s
|
||||
EXECPREFIX = %(EXECPREFIX)s
|
||||
PYTHONLIB = %(PYTHONLIB)s
|
||||
FINAL = %(FINAL)s
|
||||
WXP_USE_THREAD = %(WXP_USE_THREAD)s
|
||||
WXUSINGDLL = %(WXUSINGDLL)s
|
||||
GENCODEDIR = %(GENCODEDIR)s
|
||||
RESFILE = %(RESFILE)s
|
||||
WXPSRCDIR = %(WXPSRCDIR)s
|
||||
|
||||
|
||||
TARGETDIR = %(TARGETDIR)s
|
||||
|
||||
OBJECTS = %(OBJECTS)s
|
||||
PYMODULES = %(PYMODULES)s
|
||||
TARGET = %(TARGET)s
|
||||
|
||||
|
||||
|
||||
|
||||
!if "$(FINAL)" == "0"
|
||||
DEBUGLFLAGS = /DEBUG /INCREMENTAL:YES
|
||||
!else
|
||||
DEBUGLFLAGS = /INCREMENTAL:NO
|
||||
!endif
|
||||
!if "$(WXP_USE_THREAD)" == "1"
|
||||
THREAD=-DWXP_USE_THREAD=1
|
||||
!endif
|
||||
|
||||
|
||||
|
||||
|
||||
NOPCH=1
|
||||
OVERRIDEFLAGS=%(OVERRIDEFLAGS)s
|
||||
EXTRAFLAGS = $(CFLAGS) %(OTHERCFLAGS)s
|
||||
|
||||
LFLAGS = %(LFLAGS)s %(OTHERLFLAGS)s
|
||||
EXTRALIBS = %(LIBS)s %(OTHERLIBS)s
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
!include $(WXDIR)\\src\\makevc.env
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
%(DEFAULTRULE)s %(OTHERTARGETS)s
|
||||
|
||||
|
||||
|
||||
install: $(TARGETDIR) $(TARGETDIR)\\$(TARGET) pycfiles %(OTHERINSTALLTARGETS)s
|
||||
|
||||
clean:
|
||||
-erase *.obj
|
||||
-erase *.exe
|
||||
-erase *.res
|
||||
-erase *.map
|
||||
-erase *.sbr
|
||||
-erase *.pdb
|
||||
-erase *.pch
|
||||
-erase $(MODULE).exp
|
||||
-erase $(MODULE).lib
|
||||
-erase $(MODULE).ilk
|
||||
-erase $(TARGET)
|
||||
|
||||
|
||||
uninstall: %(OTHERUNINSTALLTARGETS)s
|
||||
-erase $(TARGETDIR)\\$(TARGET)
|
||||
%(PYCLEANUP)s
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# implicit rule for compiling .cpp and .c files
|
||||
{}.cpp{}.obj:
|
||||
$(cc) @<<
|
||||
$(CPPFLAGS) /c /Tp $<
|
||||
<<
|
||||
|
||||
{$(GENCODEDIR)}.cpp{}.obj:
|
||||
$(cc) @<<
|
||||
$(CPPFLAGS) /c /Tp $<
|
||||
<<
|
||||
|
||||
{}.c{}.obj:
|
||||
$(cc) @<<
|
||||
$(CPPFLAGS) /c $<
|
||||
<<
|
||||
|
||||
.SUFFIXES : .i .py
|
||||
|
||||
# Implicit rules to run SWIG
|
||||
{}.i{$(GENCODEDIR)}.cpp:
|
||||
swig $(SWIGFLAGS) -c -o $@ $<
|
||||
|
||||
{}.i{$(GENCODEDIR)}.py:
|
||||
swig $(SWIGFLAGS) -c -o $(GENCODEDIR)\\tmp_wrap.cpp $<
|
||||
-erase $(GENCODEDIR)\\tmp_wrap.cpp
|
||||
|
||||
|
||||
{$(GENCODEDIR)}.py{$(TARGETDIR)}.py:
|
||||
copy $< $@
|
||||
|
||||
{}.py{$(TARGETDIR)}.py:
|
||||
copy $< $@
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
$(TARGET) : $(DUMMYOBJ) $(WXLIB) $(OBJECTS) $(RESFILE)
|
||||
$(link) @<<
|
||||
/out:$@
|
||||
$(LFLAGS) /def:$(MODULE).def /implib:./$(MODULE).lib
|
||||
$(DUMMYOBJ) $(OBJECTS) $(RESFILE)
|
||||
$(LIBS)
|
||||
<<
|
||||
|
||||
|
||||
%(RESRULE)s
|
||||
|
||||
|
||||
$(TARGETDIR)\\$(TARGET) : $(TARGET)
|
||||
copy $(TARGET) $@
|
||||
|
||||
|
||||
pycfiles : $(PYMODULES)
|
||||
$(EXECPREFIX)\\python $(PYPREFIX)\\Lib\\compileall.py -l $(TARGETDIR)
|
||||
$(EXECPREFIX)\\python -O $(PYPREFIX)\Lib\\compileall.py -l $(TARGETDIR)
|
||||
|
||||
|
||||
$(TARGETDIR) :
|
||||
mkdir $(TARGETDIR)
|
||||
|
||||
$(GENCODEDIR):
|
||||
mkdir $(GENCODEDIR)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
%(DEPENDS)s
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
showflags:
|
||||
@echo CPPFLAGS:
|
||||
@echo $(CPPFLAGS)
|
||||
@echo LFLAGS:
|
||||
@echo $(LFLAGS)
|
||||
|
||||
|
||||
|
||||
%(OTHERRULES)s
|
||||
'''
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
unixTemplate = '''
|
||||
#----------------------------------------------------------------------
|
||||
# This makefile was autogenerated from build.py. Your changes will be
|
||||
# lost if the generator is run again. You have been warned.
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
WXDIR = %(WXDIR)s
|
||||
VERSION = %(VERSION)s
|
||||
MODULE = %(MODULE)s
|
||||
SWIGFLAGS = %(SWIGFLAGS)s %(SWIGTOOLKITFLAG)s %(OTHERSWIGFLAGS)s
|
||||
CFLAGS = %(CFLAGS)s $(OPT) %(OTHERCFLAGS)s
|
||||
LFLAGS = %(LFLAGS)s %(OTHERLFLAGS)s
|
||||
LIBS = %(LIBS)s %(OTHERLIBS)s
|
||||
PYVERSION = %(PYVERSION)s
|
||||
PYPREFIX = %(PYPREFIX)s
|
||||
EXECPREFIX = %(EXECPREFIX)s
|
||||
PYINCLUDE = $(PYPREFIX)/include/python$(PYVERSION)
|
||||
EXECINCLUDE = $(EXECPREFIX)/include/python$(PYVERSION)
|
||||
PYLIB = %(PYLIB)s
|
||||
LIBPL = %(LIBPL)s
|
||||
PYTHONLIB = %(PYTHONLIB)s
|
||||
FINAL = %(FINAL)s
|
||||
WXP_USE_THREAD = %(WXP_USE_THREAD)s
|
||||
GENCODEDIR = %(GENCODEDIR)s
|
||||
WXPSRCDIR = %(WXPSRCDIR)s
|
||||
HELPERLIB = %(HELPERLIB)s
|
||||
HELPERLIBDIR = %(HELPERLIBDIR)s
|
||||
|
||||
TARGETDIR = %(TARGETDIR)s
|
||||
|
||||
|
||||
CCC = %(CCC)s
|
||||
CC = %(CC)s
|
||||
OPT = %(OPT)s
|
||||
SO = %(SO)s
|
||||
LDSHARED = %(LDSHARED)s
|
||||
CCSHARED = %(CCSHARED)s
|
||||
|
||||
|
||||
OBJECTS = %(OBJECTS)s
|
||||
PYMODULES = %(PYMODULES)s
|
||||
TARGET = %(TARGET)s
|
||||
|
||||
|
||||
ifeq ($(WXP_USE_THREAD), 1)
|
||||
THREAD=-DWXP_USE_THREAD
|
||||
endif
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
%(DEFAULTRULE)s %(OTHERTARGETS)s
|
||||
|
||||
install: $(TARGETDIR) $(TARGETDIR)/$(TARGET) pycfiles %(OTHERINSTALLTARGETS)s
|
||||
|
||||
clean:
|
||||
-rm -f *.o *$(SO) *~
|
||||
-rm -f $(TARGET)
|
||||
|
||||
uninstall: %(OTHERUNINSTALLTARGETS)s
|
||||
-rm -f $(TARGETDIR)/$(TARGET)
|
||||
%(PYCLEANUP)s
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
%%.o : %%.cpp
|
||||
$(CCC) $(CCSHARED) $(CFLAGS) $(OTHERCFLAGS) -c $<
|
||||
|
||||
%%.o : $(GENCODEDIR)/%%.cpp
|
||||
$(CCC) $(CCSHARED) $(CFLAGS) $(OTHERCFLAGS) -c $<
|
||||
|
||||
%%.o : %%.c
|
||||
$(CC) $(CCSHARED) $(CFLAGS) $(OTHERCFLAGS) -c $<
|
||||
|
||||
%%.o : $(GENCODEDIR)/%%.c
|
||||
$(CC) $(CCSHARED) $(CFLAGS) $(OTHERCFLAGS) -c $<
|
||||
|
||||
$(GENCODEDIR)/%%.cpp : %%.i
|
||||
swig $(SWIGFLAGS) -c -o $@ $<
|
||||
|
||||
$(GENCODEDIR)/%%.py : %%.i
|
||||
swig $(SWIGFLAGS) -c -o $(GENCODEDIR)/tmp_wrap.cpp $<
|
||||
rm $(GENCODEDIR)/tmp_wrap.cpp
|
||||
|
||||
$(TARGETDIR)/%% : %%
|
||||
cp -f $< $@
|
||||
|
||||
$(TARGETDIR)/%% : $(GENCODEDIR)/%%
|
||||
cp -f $< $@
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
%(DEPENDS)s
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
$(TARGET) : $(OBJECTS)
|
||||
$(LDSHARED) $(OBJECTS) $(LFLAGS) $(LIBS) $(OTHERLIBS) -o $(TARGET)
|
||||
|
||||
|
||||
|
||||
pycfiles : $(PYMODULES)
|
||||
$(EXECPREFIX)/bin/python $(PYLIB)/compileall.py -l $(TARGETDIR)
|
||||
$(EXECPREFIX)/bin/python -O $(PYLIB)/compileall.py -l $(TARGETDIR)
|
||||
|
||||
|
||||
$(TARGETDIR) :
|
||||
mkdir $(TARGETDIR)
|
||||
|
||||
$(GENCODEDIR):
|
||||
mkdir $(GENCODEDIR)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
%(OTHERRULES)s
|
||||
|
||||
|
||||
|
||||
'''
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
if __name__ == '__main__':
|
||||
main(sys.argv)
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
32
utils/wxPython/distrib/makerpm
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z $1 ]; then
|
||||
echo "Please specify a version number on the command line."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f wxPython.spec.in ]; then
|
||||
echo "Please run this script from the directory containing the wxPython.spec.in file."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
|
||||
strip /usr/lib/python1.5/site-packages/wxPython/*.so
|
||||
strip /usr/lib/libwxPyHelpers.so
|
||||
|
||||
cat wxPython.spec.in | sed s/__VERSION__/$1/g > wxPython.spec
|
||||
|
||||
mkdir /usr/doc/wxPython-$1
|
||||
cp ../README.txt /usr/doc/wxPython-$1
|
||||
cp ../../../docs/preamble.txt /usr/doc/wxPython-$1
|
||||
cp ../../../docs/licence.txt /usr/doc/wxPython-$1
|
||||
cp ../../../docs/licendoc.txt /usr/doc/wxPython-$1
|
||||
cp ../../../docs/lgpl.txt /usr/doc/wxPython-$1
|
||||
cp ../../../docs/gpl.txt /usr/doc/wxPython-$1
|
||||
|
||||
rpm -bb wxPython.spec
|
||||
|
||||
mv /usr/src/redhat/RPMS/*/wxPython*.rpm .
|
||||
|
||||
rm -r /usr/doc/wxPython-$1
|
36
utils/wxPython/distrib/maketgz
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/bin/bash
|
||||
#----------------------------------------------------------------------
|
||||
# Make a source distribution as a tar.gz file. This script should be
|
||||
# run from the directory that holds the wxPython dir (../..) and be
|
||||
# given a version number as an parameter. The best way to do this is
|
||||
# run "make dist" in the wxPython/src/ directory.
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
if [ -z $1 ]; then
|
||||
echo "Please specify a version number on the command line."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d wxPython ]; then
|
||||
echo "Please run this script from the directory containing the wxPython sources."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
rm -f wxPython/distrib/filelist
|
||||
for x in `cat wxPython/distrib/wxPython.rsp`; do
|
||||
ls $x >> wxPython/distrib/filelist
|
||||
done
|
||||
|
||||
|
||||
tar cf wxPython/distrib/dist-temp.tar -T wxPython/distrib/filelist
|
||||
cd wxPython/distrib
|
||||
tar xf dist-temp.tar
|
||||
rm dist-temp.tar
|
||||
mv wxPython wxPython-$1
|
||||
|
||||
tar cvf wxPython-$1.tar wxPython-$1
|
||||
gzip wxPython-$1.tar
|
||||
|
||||
rm -rf wxPython-$1
|
||||
|
10
utils/wxPython/distrib/makexferzip
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd ~/wx/utils/wxPython
|
||||
|
||||
find . -name "*.py" > filelist
|
||||
find . -name "*.i" >> filelist
|
||||
find . -name "*.h" >> filelist
|
||||
find . -name "*.cpp" >> filelist
|
||||
|
||||
cat filelist | zip -r -u -@ xfer.zip
|
9
utils/wxPython/distrib/makexferzip.bat
Executable file
@@ -0,0 +1,9 @@
|
||||
|
||||
|
||||
cd %WXWIN%\utils\wxPython
|
||||
find . -name "*.py" > filelist
|
||||
find . -name "*.i" >> filelist
|
||||
find . -name "*.h" >> filelist
|
||||
find . -name "*.cpp" >> filelist
|
||||
|
||||
cat filelist | zip -r -u -@ xfer.zip
|
BIN
utils/wxPython/distrib/wxPython.bmp
Normal file
After Width: | Height: | Size: 128 KiB |
102
utils/wxPython/distrib/wxPython.rsp
Normal file
@@ -0,0 +1,102 @@
|
||||
wxPython/*.txt
|
||||
|
||||
wxPython/demo/*.py
|
||||
wxPython/demo/bitmaps/*.bmp
|
||||
wxPython/demo/bitmaps/*.ico
|
||||
wxPython/demo/bitmaps/*.gif
|
||||
wxPython/demo/bitmaps/*.png
|
||||
wxPython/demo/bitmaps/*.jpg
|
||||
wxPython/demo/README.txt
|
||||
wxPython/demo/*.xml
|
||||
|
||||
wxPython/distrib/build.py
|
||||
|
||||
wxPython/lib/*.py
|
||||
wxPython/lib/*.txt
|
||||
wxPython/lib/sizers/*.py
|
||||
wxPython/lib/sizers/*.txt
|
||||
|
||||
|
||||
wxPython/src/build.cfg
|
||||
wxPython/src/*.i
|
||||
wxPython/src/*.py
|
||||
wxPython/src/*.cpp
|
||||
wxPython/src/*.c
|
||||
wxPython/src/*.h
|
||||
wxPython/src/*.ico
|
||||
wxPython/src/*.def
|
||||
wxPython/src/*.rc
|
||||
|
||||
wxPython/src/msw/*.cpp
|
||||
wxPython/src/msw/*.h
|
||||
wxPython/src/msw/*.py
|
||||
|
||||
wxPython/src/gtk/*.cpp
|
||||
wxPython/src/gtk/*.h
|
||||
wxPython/src/gtk/*.py
|
||||
|
||||
wxpython/src/motif/*.cpp
|
||||
wxPython/src/motif/*.h
|
||||
wxPython/src/motif/*.py
|
||||
|
||||
|
||||
wxPython/modules/html/build.cfg
|
||||
wxPython/modules/html/*.i
|
||||
wxPython/modules/html/*.py
|
||||
wxPython/modules/html/*.cpp
|
||||
wxPython/modules/html/*.c
|
||||
wxPython/modules/html/*.h
|
||||
wxPython/modules/html/*.def
|
||||
wxPython/modules/html/*.rc
|
||||
wxPython/modules/html/msw/*.cpp
|
||||
wxPython/modules/html/msw/*.h
|
||||
wxPython/modules/html/msw/*.py
|
||||
wxPython/modules/html/gtk/*.cpp
|
||||
wxPython/modules/html/gtk/*.h
|
||||
wxPython/modules/html/gtk/*.py
|
||||
|
||||
wxPython/modules/glcanvas/build.cfg
|
||||
wxPython/modules/glcanvas/*.i
|
||||
wxPython/modules/glcanvas/*.py
|
||||
wxPython/modules/glcanvas/*.cpp
|
||||
wxPython/modules/glcanvas/*.c
|
||||
wxPython/modules/glcanvas/*.h
|
||||
wxPython/modules/glcanvas/*.def
|
||||
wxPython/modules/glcanvas/*.rc
|
||||
wxPython/modules/glcanvas/msw/*.cpp
|
||||
wxPython/modules/glcanvas/msw/*.h
|
||||
wxPython/modules/glcanvas/msw/*.py
|
||||
wxPython/modules/glcanvas/gtk/*.cpp
|
||||
wxPython/modules/glcanvas/gtk/*.h
|
||||
wxPython/modules/glcanvas/gtk/*.py
|
||||
|
||||
wxPython/modules/utils/build.cfg
|
||||
wxPython/modules/utils/*.i
|
||||
wxPython/modules/utils/*.py
|
||||
wxPython/modules/utils/*.cpp
|
||||
wxPython/modules/utils/*.c
|
||||
wxPython/modules/utils/*.h
|
||||
wxPython/modules/utils/*.def
|
||||
wxPython/modules/utils/*.rc
|
||||
wxPython/modules/utils/msw/*.cpp
|
||||
wxPython/modules/utils/msw/*.h
|
||||
wxPython/modules/utils/msw/*.py
|
||||
wxPython/modules/utils/gtk/*.cpp
|
||||
wxPython/modules/utils/gtk/*.h
|
||||
wxPython/modules/utils/gtk/*.py
|
||||
|
||||
wxPython/modules/ogl/build.cfg
|
||||
wxPython/modules/ogl/*.i
|
||||
wxPython/modules/ogl/*.py
|
||||
wxPython/modules/ogl/*.cpp
|
||||
wxPython/modules/ogl/*.c
|
||||
wxPython/modules/ogl/*.h
|
||||
wxPython/modules/ogl/*.def
|
||||
wxPython/modules/ogl/*.rc
|
||||
wxPython/modules/ogl/msw/*.cpp
|
||||
wxPython/modules/ogl/msw/*.h
|
||||
wxPython/modules/ogl/msw/*.py
|
||||
wxPython/modules/ogl/gtk/*.cpp
|
||||
wxPython/modules/ogl/gtk/*.h
|
||||
wxPython/modules/ogl/gtk/*.py
|
||||
|
53
utils/wxPython/distrib/wxPython.spec.in
Normal file
@@ -0,0 +1,53 @@
|
||||
Summary: Cross platform GUI toolkit for use with the Python language.
|
||||
Name: wxPython
|
||||
Version: __VERSION__
|
||||
Release: 1
|
||||
Copyright: wxWindows
|
||||
Group: Development/Languages/Python
|
||||
Source: http://alldunn.com/wxPython/wxPython-__VERSION__.tar.gz
|
||||
Packager: Robin Dunn <robin@alldunn.com>
|
||||
Vendor: Total Control Software
|
||||
Requires: python >= 1.5.1
|
||||
Prefix: /usr/lib/python1.5/site-packages
|
||||
|
||||
%description
|
||||
|
||||
This Python package consists of an extension module that wraps around the
|
||||
wxWindows C++ class library and provides a cross platform GUI toolkit for
|
||||
use with Python. Currently supported platforms are Win32 and Unix/GTK/X.
|
||||
|
||||
Python is an interpreted, interactive, object-oriented programming language.
|
||||
Python combines remarkable power with very clear syntax. It has modules,
|
||||
classes, exceptions, very high level dynamic data types, and dynamic typing.
|
||||
There are interfaces to many system calls and libraries, and new built-in
|
||||
modules are easily written in C or C++. Python is also usable as an
|
||||
extension language for applications that need a programmable interface.
|
||||
|
||||
#%prep
|
||||
#%setup
|
||||
#cd wxPython-__VERSION__
|
||||
#make -f Makefile.pre.in boot
|
||||
#
|
||||
#%build
|
||||
#make
|
||||
#
|
||||
#
|
||||
#%install
|
||||
#make install
|
||||
|
||||
%post
|
||||
/sbin/ldconfig
|
||||
|
||||
%postun
|
||||
/sbin/ldconfig
|
||||
|
||||
%files
|
||||
%doc /usr/doc/wxPython-__VERSION__
|
||||
/usr/lib/libwxPyHelpers.so
|
||||
/usr/lib/python1.5/site-packages/wxPython
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|