added more files (unchanged) from wxUniv branch
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10674 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		
							
								
								
									
										89
									
								
								include/wx/mgl/app.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								include/wx/mgl/app.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        app.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_APP_H__
 | 
			
		||||
#define __WX_APP_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "app.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/frame.h"
 | 
			
		||||
#include "wx/icon.h"
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// classes
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class wxApp;
 | 
			
		||||
class wxLog;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxApp
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxApp: public wxAppBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxApp() {}
 | 
			
		||||
    ~wxApp() {}
 | 
			
		||||
 | 
			
		||||
    /* override for altering the way wxGTK intializes the GUI
 | 
			
		||||
     * (palette/visual/colorcube). under wxMSW, OnInitGui() does nothing by
 | 
			
		||||
     * default. when overriding this method, the code in it is likely to be
 | 
			
		||||
     * platform dependent, otherwise use OnInit(). */
 | 
			
		||||
    virtual bool OnInitGui() {return 0;}
 | 
			
		||||
 | 
			
		||||
    // override base class (pure) virtuals
 | 
			
		||||
    virtual int MainLoop() {return 0;}
 | 
			
		||||
    virtual void ExitMainLoop() {}
 | 
			
		||||
    virtual bool Initialized() {return 0;}
 | 
			
		||||
    virtual bool Pending() {return 0;}
 | 
			
		||||
    virtual void Dispatch() {}
 | 
			
		||||
 | 
			
		||||
    virtual wxIcon GetStdIcon(int which) const {return wxNullIcon;}
 | 
			
		||||
 | 
			
		||||
    // implementation only from now on
 | 
			
		||||
    void OnIdle( wxIdleEvent &event ) {}
 | 
			
		||||
    bool SendIdleEvents() {return 0;}
 | 
			
		||||
    bool SendIdleEvents( wxWindow* win ) {return 0;}
 | 
			
		||||
 | 
			
		||||
    static bool Initialize() {return 0;}
 | 
			
		||||
    static bool InitialzeVisual() {return 0;}
 | 
			
		||||
    static void CleanUp() {}
 | 
			
		||||
 | 
			
		||||
    bool ProcessIdle() {return 0;}
 | 
			
		||||
    void DeletePendingObjects() {}
 | 
			
		||||
 | 
			
		||||
    // This can be used to suppress the generation of Idle events.
 | 
			
		||||
    void SuppressIdleEvents(bool arg = TRUE) { m_suppressIdleEvents = arg; }
 | 
			
		||||
    bool GetSuppressIdleEvents() const { return m_suppressIdleEvents; }
 | 
			
		||||
 | 
			
		||||
#if 0 //FIXME MGL
 | 
			
		||||
    bool            m_initialized;
 | 
			
		||||
 | 
			
		||||
    gint            m_idleTag;
 | 
			
		||||
#if wxUSE_THREADS
 | 
			
		||||
    gint            m_wakeUpTimerTag;
 | 
			
		||||
#endif
 | 
			
		||||
    unsigned char  *m_colorCube;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    /// Set to TRUE while we are in wxYield().
 | 
			
		||||
    bool m_suppressIdleEvents;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxApp)
 | 
			
		||||
    DECLARE_EVENT_TABLE()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int WXDLLEXPORT wxEntry( int argc, char *argv[] );
 | 
			
		||||
 | 
			
		||||
#endif // __WX_APP_H__
 | 
			
		||||
							
								
								
									
										139
									
								
								include/wx/mgl/bitmap.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								include/wx/mgl/bitmap.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,139 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        bitmap.h
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_BITMAP_H__
 | 
			
		||||
#define __WX_BITMAP_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/object.h"
 | 
			
		||||
#include "wx/string.h"
 | 
			
		||||
#include "wx/palette.h"
 | 
			
		||||
#include "wx/gdiobj.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// classes
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxMask;
 | 
			
		||||
class WXDLLEXPORT wxBitmap;
 | 
			
		||||
class WXDLLEXPORT wxImage;
 | 
			
		||||
class WXDLLEXPORT wxDC;
 | 
			
		||||
class WXDLLEXPORT wxMemoryDC;
 | 
			
		||||
 | 
			
		||||
class MGLDevCtx;
 | 
			
		||||
struct bitmap_t;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxMask
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxMask: public wxObject
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxMask();
 | 
			
		||||
    wxMask(const wxBitmap& bitmap, const wxColour& colour);
 | 
			
		||||
    wxMask(const wxBitmap& bitmap, int paletteIndex);
 | 
			
		||||
    wxMask(const wxBitmap& bitmap);
 | 
			
		||||
    ~wxMask();
 | 
			
		||||
 | 
			
		||||
    bool Create(const wxBitmap& bitmap, const wxColour& colour);
 | 
			
		||||
    bool Create(const wxBitmap& bitmap, int paletteIndex);
 | 
			
		||||
    bool Create(const wxBitmap& bitmap);
 | 
			
		||||
 | 
			
		||||
    // implementation
 | 
			
		||||
    wxBitmap *m_bitmap;
 | 
			
		||||
 | 
			
		||||
    wxBitmap *GetBitmap() const { return m_bitmap; }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxMask)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxBitmap
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxBitmapHandler : public wxBitmapHandlerBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxBitmapHandler() : wxBitmapHandlerBase() {}
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxBitmapHandler)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxBitmap: public wxBitmapBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxBitmap();
 | 
			
		||||
    wxBitmap(int width, int height, int depth = -1);
 | 
			
		||||
    wxBitmap(const char bits[], int width, int height, int depth = 1);
 | 
			
		||||
    wxBitmap(const char **bits) { CreateFromXpm(bits); }
 | 
			
		||||
    wxBitmap(char **bits) { CreateFromXpm((const char **)bits); }
 | 
			
		||||
    wxBitmap(const wxBitmap& bmp);
 | 
			
		||||
    wxBitmap(const wxString &filename, wxBitmapType type = wxBITMAP_TYPE_RESOURCE);
 | 
			
		||||
    wxBitmap(const wxImage& image, int depth = -1);
 | 
			
		||||
    ~wxBitmap();
 | 
			
		||||
    wxBitmap& operator = (const wxBitmap& bmp);
 | 
			
		||||
    bool operator == (const wxBitmap& bmp) const;
 | 
			
		||||
    bool operator != (const wxBitmap& bmp) const;
 | 
			
		||||
    bool Ok() const;
 | 
			
		||||
 | 
			
		||||
    bool Create(int width, int height, int depth = -1);
 | 
			
		||||
 | 
			
		||||
    virtual int GetHeight() const;
 | 
			
		||||
    virtual int GetWidth() const;
 | 
			
		||||
    virtual int GetDepth() const;
 | 
			
		||||
 | 
			
		||||
    virtual wxImage ConvertToImage() const;
 | 
			
		||||
 | 
			
		||||
    virtual wxMask *GetMask() const;
 | 
			
		||||
    virtual void SetMask(wxMask *mask);
 | 
			
		||||
 | 
			
		||||
    virtual wxBitmap GetSubBitmap(const wxRect& rect) const;
 | 
			
		||||
 | 
			
		||||
    virtual bool SaveFile(const wxString &name, wxBitmapType type, const wxPalette *palette = (wxPalette *) NULL) const;
 | 
			
		||||
    virtual bool LoadFile(const wxString &name, wxBitmapType type = wxBITMAP_TYPE_RESOURCE);
 | 
			
		||||
 | 
			
		||||
    virtual wxPalette *GetPalette() const;
 | 
			
		||||
    virtual void SetPalette(const wxPalette& palette);
 | 
			
		||||
 | 
			
		||||
    // copies the contents and mask of the given (colour) icon to the bitmap
 | 
			
		||||
    virtual bool CopyFromIcon(const wxIcon& icon);
 | 
			
		||||
 | 
			
		||||
    static void InitStandardHandlers();
 | 
			
		||||
 | 
			
		||||
    // implementation:
 | 
			
		||||
    virtual void SetHeight(int height);
 | 
			
		||||
    virtual void SetWidth(int width);
 | 
			
		||||
    virtual void SetDepth(int depth);
 | 
			
		||||
 | 
			
		||||
    // get underlying native representation:
 | 
			
		||||
    bitmap_t *GetMGLbitmap_t() const;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    bool CreateFromXpm(const char **bits);
 | 
			
		||||
 | 
			
		||||
    // creates temporary DC for access to bitmap's data:
 | 
			
		||||
    MGLDevCtx *CreateTmpDC() const;
 | 
			
		||||
    // sets fg & bg colours for 1bit bitmaps:
 | 
			
		||||
    void SetMonoPalette(const wxColour& fg, const wxColour& bg);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxBitmap)
 | 
			
		||||
 | 
			
		||||
    friend class wxDC;
 | 
			
		||||
    friend class wxMemoryDC;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // __WX_BITMAP_H__
 | 
			
		||||
							
								
								
									
										68
									
								
								include/wx/mgl/brush.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								include/wx/mgl/brush.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        brush.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_BRUSH_H__
 | 
			
		||||
#define __WX_BRUSH_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "brush.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/object.h"
 | 
			
		||||
#include "wx/string.h"
 | 
			
		||||
#include "wx/gdiobj.h"
 | 
			
		||||
#include "wx/bitmap.h"
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// classes
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxBitmap;
 | 
			
		||||
class WXDLLEXPORT wxBrush;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxBrush
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxBrush: public wxGDIObject
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxBrush();
 | 
			
		||||
    wxBrush(const wxColour &colour, int style);
 | 
			
		||||
    wxBrush(const wxBitmap &stippleBitmap);
 | 
			
		||||
    wxBrush(const wxBrush &brush);
 | 
			
		||||
    ~wxBrush();
 | 
			
		||||
    wxBrush& operator = (const wxBrush& brush);
 | 
			
		||||
    bool operator == (const wxBrush& brush) const;
 | 
			
		||||
    bool operator != (const wxBrush& brush) const;
 | 
			
		||||
    bool Ok() const;
 | 
			
		||||
 | 
			
		||||
    int GetStyle() const;
 | 
			
		||||
    wxColour &GetColour() const;
 | 
			
		||||
    wxBitmap *GetStipple() const;
 | 
			
		||||
 | 
			
		||||
    void SetColour(const wxColour& col);
 | 
			
		||||
    void SetColour(unsigned char r, unsigned char g, unsigned char b);
 | 
			
		||||
    void SetStyle(int style);
 | 
			
		||||
    void SetStipple(const wxBitmap& stipple);
 | 
			
		||||
    
 | 
			
		||||
    // implementation:
 | 
			
		||||
 | 
			
		||||
    void Unshare();
 | 
			
		||||
    
 | 
			
		||||
    void* GetMaskPattern() const;
 | 
			
		||||
    void* GetPixPattern() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxBrush)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // __WX_BRUSH_H__
 | 
			
		||||
							
								
								
									
										88
									
								
								include/wx/mgl/clipbrd.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								include/wx/mgl/clipbrd.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        clipboard.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_CLIPBOARD_H__
 | 
			
		||||
#define __WX_CLIPBOARD_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "clipbrd.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if wxUSE_CLIPBOARD
 | 
			
		||||
 | 
			
		||||
#include "wx/object.h"
 | 
			
		||||
#include "wx/list.h"
 | 
			
		||||
#include "wx/dataobj.h"
 | 
			
		||||
#include "wx/control.h"
 | 
			
		||||
#include "wx/module.h"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxClipboard
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxClipboard : public wxClipboardBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxClipboard() {}
 | 
			
		||||
    ~wxClipboard() {}
 | 
			
		||||
 | 
			
		||||
    // open the clipboard before SetData() and GetData()
 | 
			
		||||
    virtual bool Open() {}
 | 
			
		||||
 | 
			
		||||
    // close the clipboard after SetData() and GetData()
 | 
			
		||||
    virtual void Close() {}
 | 
			
		||||
 | 
			
		||||
    // query whether the clipboard is opened
 | 
			
		||||
    virtual bool IsOpened() const {}
 | 
			
		||||
 | 
			
		||||
    // set the clipboard data. all other formats will be deleted.
 | 
			
		||||
    virtual bool SetData( wxDataObject *data ) {}
 | 
			
		||||
 | 
			
		||||
    // add to the clipboard data.
 | 
			
		||||
    virtual bool AddData( wxDataObject *data ) {}
 | 
			
		||||
 | 
			
		||||
    // ask if data in correct format is available
 | 
			
		||||
    virtual bool IsSupported( const wxDataFormat& format ) {}
 | 
			
		||||
 | 
			
		||||
    // fill data with data on the clipboard (if available)
 | 
			
		||||
    virtual bool GetData( wxDataObject& data ) {}
 | 
			
		||||
 | 
			
		||||
    // clears wxTheClipboard and the system's clipboard if possible
 | 
			
		||||
    virtual void Clear() {}
 | 
			
		||||
 | 
			
		||||
    // If primary == TRUE, use primary selection in all further ops,
 | 
			
		||||
    // primary == FALSE resets it.
 | 
			
		||||
    virtual void UsePrimarySelection(bool primary = TRUE)
 | 
			
		||||
        { m_usePrimary = primary; }
 | 
			
		||||
    
 | 
			
		||||
    // implementation from now on
 | 
			
		||||
    bool              m_open;
 | 
			
		||||
    bool              m_ownsClipboard;
 | 
			
		||||
    bool              m_ownsPrimarySelection;
 | 
			
		||||
    wxDataObject     *m_data;
 | 
			
		||||
 | 
			
		||||
    GtkWidget        *m_clipboardWidget;  /* for getting and offering data */
 | 
			
		||||
    GtkWidget        *m_targetsWidget;    /* for getting list of supported formats */
 | 
			
		||||
    bool              m_waiting;          /* querying data or formats is asynchronous */
 | 
			
		||||
 | 
			
		||||
    bool              m_formatSupported;
 | 
			
		||||
    GdkAtom           m_targetRequested;
 | 
			
		||||
    bool              m_usePrimary;
 | 
			
		||||
    wxDataObject     *m_receivedData;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxClipboard)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
   // wxUSE_CLIPBOARD
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
    // __WX_CLIPBOARD_H__
 | 
			
		||||
							
								
								
									
										90
									
								
								include/wx/mgl/colour.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								include/wx/mgl/colour.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,90 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        colour.h
 | 
			
		||||
// Purpose:     wxColour class
 | 
			
		||||
// Author:      Julian Smart
 | 
			
		||||
// Modified by:
 | 
			
		||||
// Created:     01/02/97
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) Julian Smart
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifndef _WX_COLOUR_H_
 | 
			
		||||
#define _WX_COLOUR_H_
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "colour.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "wx/object.h"
 | 
			
		||||
 | 
			
		||||
// Colour
 | 
			
		||||
class WXDLLEXPORT wxColour: public wxObject
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    // ctors
 | 
			
		||||
      // default
 | 
			
		||||
    wxColour();
 | 
			
		||||
      // from RGB
 | 
			
		||||
    wxColour(unsigned char red, unsigned char green, unsigned char blue);
 | 
			
		||||
    wxColour(unsigned long colRGB) { Set(colRGB); }
 | 
			
		||||
 | 
			
		||||
      // implicit conversion from the colour name
 | 
			
		||||
    wxColour(const wxString &colourName) { InitFromName(colourName); }
 | 
			
		||||
    wxColour(const char *colourName) { InitFromName(colourName); }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      // copy ctors and assignment operators
 | 
			
		||||
    wxColour(const wxColour& col);
 | 
			
		||||
    wxColour& operator = (const wxColour& col);
 | 
			
		||||
 | 
			
		||||
      // dtor
 | 
			
		||||
    ~wxColour();
 | 
			
		||||
 | 
			
		||||
    // Set() functions
 | 
			
		||||
    void Set(unsigned char red, unsigned char green, unsigned char blue);
 | 
			
		||||
    void Set(unsigned long colRGB)
 | 
			
		||||
    {
 | 
			
		||||
      // we don't need to know sizeof(long) here because we assume that the three
 | 
			
		||||
      // least significant bytes contain the R, G and B values
 | 
			
		||||
      Set((unsigned char)colRGB,
 | 
			
		||||
          (unsigned char)(colRGB >> 8),
 | 
			
		||||
          (unsigned char)(colRGB >> 16));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // accessors
 | 
			
		||||
    bool Ok() const { return m_isInit; }
 | 
			
		||||
 | 
			
		||||
    // Let's remove this inelegant function
 | 
			
		||||
#if WXWIN_COMPATIBILITY
 | 
			
		||||
    void Get(unsigned char *r, unsigned char *g, unsigned char *b) const;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    unsigned char Red() const { return m_red; }
 | 
			
		||||
    unsigned char Green() const { return m_green; }
 | 
			
		||||
    unsigned char Blue() const { return m_blue; }
 | 
			
		||||
 | 
			
		||||
    // comparison
 | 
			
		||||
    bool operator == (const wxColour& colour) const
 | 
			
		||||
    {
 | 
			
		||||
      return (m_red == colour.m_red &&
 | 
			
		||||
              m_green == colour.m_green &&
 | 
			
		||||
              m_blue == colour.m_blue &&
 | 
			
		||||
              m_isInit == colour.m_isInit);
 | 
			
		||||
    }
 | 
			
		||||
    bool operator != (const wxColour& colour) const { return !(*this == colour); }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    bool m_isInit;
 | 
			
		||||
    unsigned char m_red;
 | 
			
		||||
    unsigned char m_blue;
 | 
			
		||||
    unsigned char m_green;
 | 
			
		||||
 | 
			
		||||
    // helper func
 | 
			
		||||
    void InitFromName(const wxString& colourName);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxColour)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
        // _WX_COLOUR_H_
 | 
			
		||||
							
								
								
									
										54
									
								
								include/wx/mgl/cursor.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								include/wx/mgl/cursor.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        cursor.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_CURSOR_H__
 | 
			
		||||
#define __WX_CURSOR_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "cursor.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/object.h"
 | 
			
		||||
#include "wx/gdicmn.h"
 | 
			
		||||
 | 
			
		||||
class MGLCursor;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxCursor
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxCursor: public wxObject
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
    wxCursor();
 | 
			
		||||
    wxCursor(int cursorId);
 | 
			
		||||
    wxCursor(const wxCursor &cursor);
 | 
			
		||||
    wxCursor(const char bits[], int width, int  height,
 | 
			
		||||
              int hotSpotX=-1, int hotSpotY=-1,
 | 
			
		||||
              const char maskBits[]=0, wxColour *fg=0, wxColour *bg=0);
 | 
			
		||||
    wxCursor(const wxString& name,
 | 
			
		||||
             long flags = wxBITMAP_TYPE_CUR_RESOURCE,
 | 
			
		||||
             int hotSpotX = 0, int hotSpotY = 0);
 | 
			
		||||
    ~wxCursor();
 | 
			
		||||
    wxCursor& operator = ( const wxCursor& cursor );
 | 
			
		||||
    bool operator == (const wxCursor& cursor) const;
 | 
			
		||||
    bool operator != (const wxCursor& cursor) const;
 | 
			
		||||
    bool Ok() const;
 | 
			
		||||
 | 
			
		||||
    // implementation
 | 
			
		||||
    MGLCursor *GetMGLCursor() const;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxCursor)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // __WX_CURSOR_H__
 | 
			
		||||
							
								
								
									
										279
									
								
								include/wx/mgl/dc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										279
									
								
								include/wx/mgl/dc.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,279 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        dc.h
 | 
			
		||||
// Purpose:     wxDC class
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Created:     2001/03/09
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifndef _WX_DC_H_
 | 
			
		||||
#define _WX_DC_H_
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
    #pragma interface "dc.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/dc.h"
 | 
			
		||||
#include "wx/region.h"
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// classes
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxDC;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// constants
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#define MM_TEXT         0
 | 
			
		||||
#define MM_ISOTROPIC    1
 | 
			
		||||
#define MM_ANISOTROPIC  2
 | 
			
		||||
#define MM_LOMETRIC     3
 | 
			
		||||
#define MM_HIMETRIC     4
 | 
			
		||||
#define MM_TWIPS        5
 | 
			
		||||
#define MM_POINTS       6
 | 
			
		||||
#define MM_METRIC       7
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxDC
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// MGL fwd declarations:
 | 
			
		||||
class MGLDevCtx;
 | 
			
		||||
struct font_t;
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxDC : public wxDCBase
 | 
			
		||||
{
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxDC)
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    wxDC();
 | 
			
		||||
    ~wxDC();
 | 
			
		||||
 | 
			
		||||
    // implement base class pure virtuals
 | 
			
		||||
    // ----------------------------------
 | 
			
		||||
 | 
			
		||||
    virtual void Clear();
 | 
			
		||||
 | 
			
		||||
    virtual bool StartDoc(const wxString& message);
 | 
			
		||||
    virtual void EndDoc();
 | 
			
		||||
 | 
			
		||||
    virtual void StartPage();
 | 
			
		||||
    virtual void EndPage();
 | 
			
		||||
 | 
			
		||||
    virtual void SetFont(const wxFont& font);
 | 
			
		||||
    virtual void SetPen(const wxPen& pen);
 | 
			
		||||
    virtual void SetBrush(const wxBrush& brush);
 | 
			
		||||
    virtual void SetBackground(const wxBrush& brush);
 | 
			
		||||
    virtual void SetBackgroundMode(int mode);
 | 
			
		||||
    virtual void SetPalette(const wxPalette& palette);
 | 
			
		||||
 | 
			
		||||
    virtual void DestroyClippingRegion();
 | 
			
		||||
 | 
			
		||||
    virtual wxCoord GetCharHeight() const;
 | 
			
		||||
    virtual wxCoord GetCharWidth() const;
 | 
			
		||||
    virtual void DoGetTextExtent(const wxString& string,
 | 
			
		||||
                                 wxCoord *x, wxCoord *y,
 | 
			
		||||
                                 wxCoord *descent = NULL,
 | 
			
		||||
                                 wxCoord *externalLeading = NULL,
 | 
			
		||||
                                 wxFont *theFont = NULL) const;
 | 
			
		||||
 | 
			
		||||
    virtual bool CanDrawBitmap() const;
 | 
			
		||||
    virtual bool CanGetTextExtent() const;
 | 
			
		||||
    virtual int GetDepth() const;
 | 
			
		||||
    virtual wxSize GetPPI() const;
 | 
			
		||||
 | 
			
		||||
    virtual void SetMapMode(int mode);
 | 
			
		||||
    virtual void SetUserScale(double x, double y);
 | 
			
		||||
    virtual void SetLogicalScale(double x, double y);
 | 
			
		||||
    virtual void SetLogicalOrigin(wxCoord x, wxCoord y);
 | 
			
		||||
    virtual void SetDeviceOrigin(wxCoord x, wxCoord y);
 | 
			
		||||
    virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp);
 | 
			
		||||
    virtual void SetLogicalFunction(int function);
 | 
			
		||||
 | 
			
		||||
    // implementation from now on
 | 
			
		||||
    // --------------------------
 | 
			
		||||
    
 | 
			
		||||
    virtual void ComputeScaleAndOrigin();
 | 
			
		||||
 | 
			
		||||
    wxCoord XDEV2LOG(wxCoord x) const
 | 
			
		||||
    {
 | 
			
		||||
        wxCoord new_x = x - m_deviceOriginX;
 | 
			
		||||
        if (new_x > 0)
 | 
			
		||||
            return (wxCoord)((double)(new_x) / m_scaleX + 0.5) * m_signX + m_logicalOriginX;
 | 
			
		||||
        else
 | 
			
		||||
            return (wxCoord)((double)(new_x) / m_scaleX - 0.5) * m_signX + m_logicalOriginX;
 | 
			
		||||
    }
 | 
			
		||||
    wxCoord XDEV2LOGREL(wxCoord x) const
 | 
			
		||||
    {
 | 
			
		||||
        if (x > 0)
 | 
			
		||||
            return (wxCoord)((double)(x) / m_scaleX + 0.5);
 | 
			
		||||
        else
 | 
			
		||||
            return (wxCoord)((double)(x) / m_scaleX - 0.5);
 | 
			
		||||
    }
 | 
			
		||||
    wxCoord YDEV2LOG(wxCoord y) const
 | 
			
		||||
    {
 | 
			
		||||
        wxCoord new_y = y - m_deviceOriginY;
 | 
			
		||||
        if (new_y > 0)
 | 
			
		||||
            return (wxCoord)((double)(new_y) / m_scaleY + 0.5) * m_signY + m_logicalOriginY;
 | 
			
		||||
        else
 | 
			
		||||
            return (wxCoord)((double)(new_y) / m_scaleY - 0.5) * m_signY + m_logicalOriginY;
 | 
			
		||||
    }
 | 
			
		||||
    wxCoord YDEV2LOGREL(wxCoord y) const
 | 
			
		||||
    {
 | 
			
		||||
        if (y > 0)
 | 
			
		||||
            return (wxCoord)((double)(y) / m_scaleY + 0.5);
 | 
			
		||||
        else
 | 
			
		||||
            return (wxCoord)((double)(y) / m_scaleY - 0.5);
 | 
			
		||||
    }
 | 
			
		||||
    wxCoord XLOG2DEV(wxCoord x) const
 | 
			
		||||
    {
 | 
			
		||||
        wxCoord new_x = x - m_logicalOriginX;
 | 
			
		||||
        if (new_x > 0)
 | 
			
		||||
            return (wxCoord)((double)(new_x) * m_scaleX + 0.5) * m_signX + m_deviceOriginX;
 | 
			
		||||
        else
 | 
			
		||||
            return (wxCoord)((double)(new_x) * m_scaleX - 0.5) * m_signX + m_deviceOriginX;
 | 
			
		||||
    }
 | 
			
		||||
    wxCoord XLOG2DEVREL(wxCoord x) const
 | 
			
		||||
    {
 | 
			
		||||
        if (x > 0)
 | 
			
		||||
            return (wxCoord)((double)(x) * m_scaleX + 0.5);
 | 
			
		||||
        else
 | 
			
		||||
            return (wxCoord)((double)(x) * m_scaleX - 0.5);
 | 
			
		||||
    }
 | 
			
		||||
    wxCoord YLOG2DEV(wxCoord y) const
 | 
			
		||||
    {
 | 
			
		||||
        wxCoord new_y = y - m_logicalOriginY;
 | 
			
		||||
        if (new_y > 0)
 | 
			
		||||
            return (wxCoord)((double)(new_y) * m_scaleY + 0.5) * m_signY + m_deviceOriginY;
 | 
			
		||||
        else
 | 
			
		||||
            return (wxCoord)((double)(new_y) * m_scaleY - 0.5) * m_signY + m_deviceOriginY;
 | 
			
		||||
    }
 | 
			
		||||
    wxCoord YLOG2DEVREL(wxCoord y) const
 | 
			
		||||
    {
 | 
			
		||||
        if (y > 0)
 | 
			
		||||
            return (wxCoord)((double)(y) * m_scaleY + 0.5);
 | 
			
		||||
        else
 | 
			
		||||
            return (wxCoord)((double)(y) * m_scaleY - 0.5);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    MGLDevCtx *GetMGLDC() const { return m_MGLDC; }
 | 
			
		||||
    void SetMGLDC(MGLDevCtx *mgldc, bool OwnsMGLDC = FALSE);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    virtual void DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
 | 
			
		||||
                             int style = wxFLOOD_SURFACE);
 | 
			
		||||
 | 
			
		||||
    virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const;
 | 
			
		||||
 | 
			
		||||
    virtual void DoDrawPoint(wxCoord x, wxCoord y);
 | 
			
		||||
    virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2);
 | 
			
		||||
 | 
			
		||||
    virtual void DoDrawArc(wxCoord x1, wxCoord y1,
 | 
			
		||||
                           wxCoord x2, wxCoord y2,
 | 
			
		||||
                           wxCoord xc, wxCoord yc);
 | 
			
		||||
    virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
 | 
			
		||||
                                   double sa, double ea);
 | 
			
		||||
 | 
			
		||||
    virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
 | 
			
		||||
    virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y,
 | 
			
		||||
                                        wxCoord width, wxCoord height,
 | 
			
		||||
                                        double radius);
 | 
			
		||||
    virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
 | 
			
		||||
 | 
			
		||||
    virtual void DoCrossHair(wxCoord x, wxCoord y);
 | 
			
		||||
 | 
			
		||||
    virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y);
 | 
			
		||||
    virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y,
 | 
			
		||||
                              bool useMask = FALSE);
 | 
			
		||||
 | 
			
		||||
    virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y);
 | 
			
		||||
    virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y,
 | 
			
		||||
                                   double angle);
 | 
			
		||||
 | 
			
		||||
    virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
 | 
			
		||||
                        wxDC *source, wxCoord xsrc, wxCoord ysrc,
 | 
			
		||||
                        int rop = wxCOPY, bool useMask = FALSE);
 | 
			
		||||
 | 
			
		||||
    // this is gnarly - we can't even call this function DoSetClippingRegion()
 | 
			
		||||
    // because of virtual function hiding
 | 
			
		||||
    virtual void DoSetClippingRegionAsRegion(const wxRegion& region);
 | 
			
		||||
    virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
 | 
			
		||||
                                     wxCoord width, wxCoord height);
 | 
			
		||||
    virtual void DoGetClippingRegion(wxCoord *x, wxCoord *y,
 | 
			
		||||
                                     wxCoord *width, wxCoord *height)
 | 
			
		||||
    {
 | 
			
		||||
        GetClippingBox(x, y, width, height);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual void DoGetSize(int *width, int *height) const;
 | 
			
		||||
    virtual void DoGetSizeMM(int* width, int* height) const;
 | 
			
		||||
 | 
			
		||||
    virtual void DoDrawLines(int n, wxPoint points[],
 | 
			
		||||
                             wxCoord xoffset, wxCoord yoffset);
 | 
			
		||||
    virtual void DoDrawPolygon(int n, wxPoint points[],
 | 
			
		||||
                               wxCoord xoffset, wxCoord yoffset,
 | 
			
		||||
                               int fillStyle = wxODDEVEN_RULE);
 | 
			
		||||
 | 
			
		||||
    // implementation from now on:
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // setup newly attached MGLDevCtx for wxDC's use
 | 
			
		||||
    // (does things like setting RGB blending mode for antialiased texts):
 | 
			
		||||
    void InitializeMGLDC();
 | 
			
		||||
 | 
			
		||||
    // common part of DoDrawText() and DoDrawRotatedText()
 | 
			
		||||
    void DrawAnyText(const wxString& text, wxCoord x, wxCoord y);
 | 
			
		||||
    
 | 
			
		||||
    // MGL uses pens as both wxPens and wxBrushes, so we have to
 | 
			
		||||
    // switch them as needed:
 | 
			
		||||
    void SelectPen();
 | 
			
		||||
    void SelectBrush();
 | 
			
		||||
    void SelectMGLStipplePen(int style);
 | 
			
		||||
    void SelectMGLFatPen(int style, int flag);
 | 
			
		||||
    
 | 
			
		||||
    // Select m_font into m_MGLDC:
 | 
			
		||||
    bool SelectMGLFont();
 | 
			
		||||
    
 | 
			
		||||
    // Convert wxWin logical function to MGL rop:
 | 
			
		||||
    int LogicalFunctionToMGLRop(int logFunc) const;
 | 
			
		||||
    
 | 
			
		||||
    // Unified implementation of DrawIcon, DrawBitmap and Blit:
 | 
			
		||||
    void DoDrawSubBitmap(const wxBitmap &bmp, 
 | 
			
		||||
                         wxCoord x, wxCoord y, wxCoord w, wxCoord h,
 | 
			
		||||
                         wxCoord destx, wxCoord desty, int rop, bool useMask);
 | 
			
		||||
 | 
			
		||||
    // MGL DC class we use:
 | 
			
		||||
    MGLDevCtx        *m_MGLDC;
 | 
			
		||||
    bool              m_OwnsMGLDC:1;
 | 
			
		||||
   
 | 
			
		||||
    // helper variables for SelectXXXX():
 | 
			
		||||
    bool              m_penSelected;
 | 
			
		||||
    bool              m_brushSelected;
 | 
			
		||||
    bool              m_downloadedPatterns[2];
 | 
			
		||||
 | 
			
		||||
    // MGL does not render lines with width>1 with endings centered 
 | 
			
		||||
    // at given coords but with top left corner of the pen at them,
 | 
			
		||||
    // these offsets are used to correct it. They are computed by
 | 
			
		||||
    // SelectPen.
 | 
			
		||||
    int               m_penOfsX, m_penOfsY;
 | 
			
		||||
 | 
			
		||||
    double            m_mm_to_pix_x, m_mm_to_pix_y;
 | 
			
		||||
    
 | 
			
		||||
    wxPalette         m_oldPalette;
 | 
			
		||||
    
 | 
			
		||||
    wxRegion          m_currentClippingRegion;
 | 
			
		||||
 | 
			
		||||
    // wxDC::Blit handles memoryDCs as special cases :(
 | 
			
		||||
    bool              m_isMemDC;
 | 
			
		||||
    
 | 
			
		||||
    font_t            *m_mglFont;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
    // _WX_DC_H_
 | 
			
		||||
							
								
								
									
										71
									
								
								include/wx/mgl/dcclient.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								include/wx/mgl/dcclient.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        dcclient.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_DCCLIENT_H__
 | 
			
		||||
#define __WX_DCCLIENT_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "dcclient.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/dc.h"
 | 
			
		||||
#include "wx/window.h"
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// classes
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxWindowDC;
 | 
			
		||||
class WXDLLEXPORT wxPaintDC;
 | 
			
		||||
class WXDLLEXPORT wxClientDC;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxWindowDC
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
//FIXME_MGL
 | 
			
		||||
class WXDLLEXPORT wxWindowDC : public wxDC
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxWindowDC() {}
 | 
			
		||||
    wxWindowDC( wxWindow *win ) {}
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxWindowDC)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxClientDC
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxClientDC : public wxWindowDC
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxClientDC() {}
 | 
			
		||||
    wxClientDC( wxWindow *win ) {}
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxClientDC)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxPaintDC
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxPaintDC : public wxClientDC
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxPaintDC() { }
 | 
			
		||||
    wxPaintDC( wxWindow *win ) {}
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxPaintDC)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // __WX_DCCLIENT_H__
 | 
			
		||||
							
								
								
									
										59
									
								
								include/wx/mgl/dcmemory.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								include/wx/mgl/dcmemory.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        dcmemory.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_DCMEMORY_H__
 | 
			
		||||
#define __WX_DCMEMORY_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "dcmemory.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/dcclient.h"
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// classes
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxMemoryDC;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxMemoryDC
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxMemoryDC : public wxDC
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxMemoryDC();
 | 
			
		||||
    wxMemoryDC(wxDC *dc); // Create compatible DC
 | 
			
		||||
    ~wxMemoryDC();
 | 
			
		||||
    virtual void SelectObject(const wxBitmap& bitmap);
 | 
			
		||||
 | 
			
		||||
    // these get reimplemented for mono-bitmaps to behave
 | 
			
		||||
    // more like their Win32 couterparts. They now interpret
 | 
			
		||||
    // wxWHITE, wxWHITE_BRUSH and wxWHITE_PEN as drawing 0
 | 
			
		||||
    // and everything else as drawing 1.
 | 
			
		||||
    virtual void SetPen(const wxPen &pen);
 | 
			
		||||
    virtual void SetBrush(const wxBrush &brush);
 | 
			
		||||
    virtual void SetTextForeground(const wxColour &col);
 | 
			
		||||
    virtual void SetTextBackground(const wxColour &col);
 | 
			
		||||
 | 
			
		||||
    // implementation
 | 
			
		||||
    wxBitmap  m_selected;
 | 
			
		||||
    
 | 
			
		||||
    wxBitmap GetSelectedObject() const { return m_selected; }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxMemoryDC)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
    // __WX_DCMEMORY_H__
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										47
									
								
								include/wx/mgl/dcscreen.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								include/wx/mgl/dcscreen.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        dcscreen.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_DCSCREEN_H__
 | 
			
		||||
#define __WX_DCSCREEN_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "dcscreen.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/dcclient.h"
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// classes
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxScreenDC;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxScreenDC
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
//FIXME_MGL
 | 
			
		||||
class WXDLLEXPORT wxScreenDC: public wxPaintDC
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxScreenDC() {}
 | 
			
		||||
    ~wxScreenDC() {}
 | 
			
		||||
 | 
			
		||||
    static bool StartDrawingOnTop( wxWindow *window ) {}
 | 
			
		||||
    static bool StartDrawingOnTop( wxRect *rect = (wxRect *) NULL ) {}
 | 
			
		||||
    static bool EndDrawingOnTop() {}
 | 
			
		||||
  
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxScreenDC)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    // __WX_DCSCREEN_H__
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										120
									
								
								include/wx/mgl/dialog.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								include/wx/mgl/dialog.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,120 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        dialog.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Robert Roebling
 | 
			
		||||
// Created:
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 1998 Robert Roebling
 | 
			
		||||
// Licence:           wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifndef __GTKDIALOGH__
 | 
			
		||||
#define __GTKDIALOGH__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "dialog.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/panel.h"
 | 
			
		||||
#include "wx/icon.h"
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// classes
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class wxDialog;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// global data
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
//FIXME_MGL - belongs to wXUniv
 | 
			
		||||
 | 
			
		||||
extern const wxChar *wxDialogNameStr;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxDialog
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class wxDialog: public wxDialogBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxDialog() { Init(); }
 | 
			
		||||
    wxDialog( wxWindow *parent, wxWindowID id,
 | 
			
		||||
            const wxString &title,
 | 
			
		||||
            const wxPoint &pos = wxDefaultPosition,
 | 
			
		||||
            const wxSize &size = wxDefaultSize,
 | 
			
		||||
            long style = wxDEFAULT_DIALOG_STYLE,
 | 
			
		||||
            const wxString &name = wxDialogNameStr ) {}
 | 
			
		||||
    bool Create( wxWindow *parent, wxWindowID id,
 | 
			
		||||
            const wxString &title,
 | 
			
		||||
            const wxPoint &pos = wxDefaultPosition,
 | 
			
		||||
            const wxSize &size = wxDefaultSize,
 | 
			
		||||
            long style = wxDEFAULT_DIALOG_STYLE,
 | 
			
		||||
            const wxString &name = wxDialogNameStr ) {}
 | 
			
		||||
    ~wxDialog() {}
 | 
			
		||||
 | 
			
		||||
    void SetTitle(const wxString& title){}
 | 
			
		||||
    wxString GetTitle() const {}
 | 
			
		||||
 | 
			
		||||
    void OnApply( wxCommandEvent &event ) {}
 | 
			
		||||
    void OnCancel( wxCommandEvent &event ) {}
 | 
			
		||||
    void OnOK( wxCommandEvent &event ) {}
 | 
			
		||||
    void OnPaint( wxPaintEvent& event ) {}
 | 
			
		||||
    void OnSize( wxSizeEvent &event ) {}
 | 
			
		||||
    void OnCloseWindow( wxCloseEvent& event ) {}
 | 
			
		||||
    /*
 | 
			
		||||
       void OnCharHook( wxKeyEvent& event );
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    bool Destroy() {}
 | 
			
		||||
 | 
			
		||||
    virtual bool Show( bool show ) {}
 | 
			
		||||
    virtual int ShowModal() {}
 | 
			
		||||
    virtual void EndModal( int retCode ) {}
 | 
			
		||||
    virtual bool IsModal() const {}
 | 
			
		||||
    void SetModal( bool modal ) {}
 | 
			
		||||
 | 
			
		||||
    virtual void InitDialog(void) {}
 | 
			
		||||
 | 
			
		||||
    virtual void SetIcon( const wxIcon &icon ) {}
 | 
			
		||||
    virtual void Iconize( bool WXUNUSED(iconize)) { }
 | 
			
		||||
    virtual bool IsIconized() const { return FALSE; }
 | 
			
		||||
    bool Iconized() const { return IsIconized(); }
 | 
			
		||||
    virtual void Maximize() { }
 | 
			
		||||
    virtual void Restore() { }
 | 
			
		||||
 | 
			
		||||
    virtual bool IsTopLevel() const { return TRUE; }
 | 
			
		||||
    
 | 
			
		||||
    // implementation
 | 
			
		||||
    // --------------
 | 
			
		||||
 | 
			
		||||
    // move the window to the specified location and resize it: this is called
 | 
			
		||||
    // from both DoSetSize() and DoSetClientSize()
 | 
			
		||||
    virtual void DoMoveWindow(int x, int y, int width, int height)  {}
 | 
			
		||||
    
 | 
			
		||||
    virtual void GtkOnSize( int x, int y, int width, int height ) {}
 | 
			
		||||
    virtual void OnInternalIdle() {}
 | 
			
		||||
 | 
			
		||||
    bool       m_modalShowing;
 | 
			
		||||
    wxString   m_title;
 | 
			
		||||
    wxIcon     m_icon;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // common part of all ctors
 | 
			
		||||
    void Init() {}
 | 
			
		||||
 | 
			
		||||
    // common part of Destroy() and ~wxDialog
 | 
			
		||||
    void CleanUp() {}
 | 
			
		||||
 | 
			
		||||
    virtual void DoSetSize(int x, int y,
 | 
			
		||||
                           int width, int height,
 | 
			
		||||
                           int sizeFlags = wxSIZE_AUTO) {}
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
//    DECLARE_EVENT_TABLE() FIXME_MGL
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxDialog)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // __GTKDIALOGH__
 | 
			
		||||
							
								
								
									
										107
									
								
								include/wx/mgl/font.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								include/wx/mgl/font.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,107 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        font.h
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001, Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_FONT_H__
 | 
			
		||||
#define __WX_FONT_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
    #pragma interface "font.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/hash.h"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// classes
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxDC;
 | 
			
		||||
class WXDLLEXPORT wxPaintDC;
 | 
			
		||||
class WXDLLEXPORT wxWindow;
 | 
			
		||||
class WXDLLEXPORT wxFont;
 | 
			
		||||
 | 
			
		||||
struct font_t;
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxFont
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxFont : public wxFontBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    // ctors and such
 | 
			
		||||
    wxFont() { Init(); }
 | 
			
		||||
    wxFont(const wxFont& font) { Init(); Ref(font); }
 | 
			
		||||
 | 
			
		||||
    wxFont(const wxNativeFontInfo& info)
 | 
			
		||||
    {
 | 
			
		||||
        Init();
 | 
			
		||||
 | 
			
		||||
        (void)Create(info);  
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    wxFont(int size,
 | 
			
		||||
           int family,
 | 
			
		||||
           int style,
 | 
			
		||||
           int weight,
 | 
			
		||||
           bool underlined = FALSE,
 | 
			
		||||
           const wxString& face = wxEmptyString,
 | 
			
		||||
           wxFontEncoding encoding = wxFONTENCODING_DEFAULT)
 | 
			
		||||
    {
 | 
			
		||||
        Init();
 | 
			
		||||
 | 
			
		||||
        (void)Create(size, family, style, weight, underlined, face, encoding);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool Create(int size,
 | 
			
		||||
                int family,
 | 
			
		||||
                int style,
 | 
			
		||||
                int weight,
 | 
			
		||||
                bool underlined = FALSE,
 | 
			
		||||
                const wxString& face = wxEmptyString,
 | 
			
		||||
                wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
 | 
			
		||||
 | 
			
		||||
    bool Create(const wxNativeFontInfo& fontinfo);
 | 
			
		||||
 | 
			
		||||
    ~wxFont();
 | 
			
		||||
 | 
			
		||||
    // assignment
 | 
			
		||||
    wxFont& operator=(const wxFont& font);
 | 
			
		||||
 | 
			
		||||
    // implement base class pure virtuals
 | 
			
		||||
    virtual int GetPointSize() const;
 | 
			
		||||
    virtual int GetFamily() const;
 | 
			
		||||
    virtual int GetStyle() const;
 | 
			
		||||
    virtual int GetWeight() const;
 | 
			
		||||
    virtual wxString GetFaceName() const;
 | 
			
		||||
    virtual bool GetUnderlined() const;
 | 
			
		||||
    virtual wxFontEncoding GetEncoding() const;
 | 
			
		||||
 | 
			
		||||
    virtual void SetPointSize(int pointSize);
 | 
			
		||||
    virtual void SetFamily(int family);
 | 
			
		||||
    virtual void SetStyle(int style);
 | 
			
		||||
    virtual void SetWeight(int weight);
 | 
			
		||||
    virtual void SetFaceName(const wxString& faceName);
 | 
			
		||||
    virtual void SetUnderlined(bool underlined);
 | 
			
		||||
    virtual void SetEncoding(wxFontEncoding encoding);
 | 
			
		||||
 | 
			
		||||
    // implementation from now on
 | 
			
		||||
    void Unshare();
 | 
			
		||||
 | 
			
		||||
    struct font_t *GetMGLfont_t(float scale, bool antialiased);
 | 
			
		||||
 | 
			
		||||
    // no data :-)
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // common part of all ctors
 | 
			
		||||
    void Init();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxFont)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // __WX_FONT_H__
 | 
			
		||||
							
								
								
									
										126
									
								
								include/wx/mgl/fontutil.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								include/wx/mgl/fontutil.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,126 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        wx/nix/fontutil.h
 | 
			
		||||
// Purpose:     font-related helper functions for MGL
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Created:     2001/05/01
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) 2001, Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows license
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifndef _WX_MGL_FONTUTIL_H_
 | 
			
		||||
#define _WX_MGL_FONTUTIL_H_
 | 
			
		||||
 | 
			
		||||
#ifdef __WXMGL__
 | 
			
		||||
 | 
			
		||||
#include "wx/list.h"
 | 
			
		||||
 | 
			
		||||
struct font_info_t;
 | 
			
		||||
struct font_lib_t;
 | 
			
		||||
struct font_t;
 | 
			
		||||
 | 
			
		||||
class wxMGLFontInstance;
 | 
			
		||||
class wxMGLFontInstanceList;
 | 
			
		||||
class wxMGLFontLibrary;
 | 
			
		||||
class wxMGLFontFamily;
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    wxFONTFACE_REGULAR     = 0,
 | 
			
		||||
    wxFONTFACE_ITALIC      = 1,
 | 
			
		||||
    wxFONTFACE_BOLD        = 2, // = (regular | bold)
 | 
			
		||||
    wxFONTFACE_BOLD_ITALIC = 3, // = (italic | bold)
 | 
			
		||||
    
 | 
			
		||||
    wxFONTFACE_MAX
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// structure representing particular loaded font instance:
 | 
			
		||||
class wxMGLFontInstance
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxMGLFontInstance(wxMGLFontLibrary *fontLib, float pt, bool slant, bool aa);
 | 
			
		||||
    ~wxMGLFontInstance();
 | 
			
		||||
 | 
			
		||||
    struct font_t *GetMGLfont_t() const { return m_font; }
 | 
			
		||||
 | 
			
		||||
    float GetPt() const { return m_pt; }
 | 
			
		||||
    bool GetSlant() const { return m_slant; }
 | 
			
		||||
    bool GetAA() const { return m_aa; }
 | 
			
		||||
    
 | 
			
		||||
private:
 | 
			
		||||
    wxMGLFontLibrary *m_fontLib;
 | 
			
		||||
    font_t *m_font;
 | 
			
		||||
    float m_pt;
 | 
			
		||||
    bool m_slant;
 | 
			
		||||
    bool m_aa;    
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// structure representing loaded font library:
 | 
			
		||||
class wxMGLFontLibrary
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxMGLFontLibrary(const wxString& filename, int type);
 | 
			
		||||
    ~wxMGLFontLibrary();
 | 
			
		||||
    
 | 
			
		||||
    wxMGLFontInstance *GetFontInstance(wxFont *font, float scale, bool aa);
 | 
			
		||||
    
 | 
			
		||||
    void IncRef();
 | 
			
		||||
    void DecRef();
 | 
			
		||||
    
 | 
			
		||||
    struct font_lib_t *GetMGLfont_lib_t() const { return m_fontLib; }
 | 
			
		||||
    
 | 
			
		||||
private:
 | 
			
		||||
    font_lib_t *m_fontLib;
 | 
			
		||||
    int m_type;
 | 
			
		||||
    wxString m_fileName;
 | 
			
		||||
    size_t m_refs;
 | 
			
		||||
    wxMGLFontInstanceList *m_instances;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// structure representing native MGL font family
 | 
			
		||||
class wxMGLFontFamily : public wxObject
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxMGLFontFamily(const font_info_t *info);
 | 
			
		||||
    virtual ~wxMGLFontFamily();
 | 
			
		||||
 | 
			
		||||
    wxString GetName() const { return m_name; }
 | 
			
		||||
    const font_info_t *GetInfo() const { return m_fontInfo; }
 | 
			
		||||
 | 
			
		||||
    bool HasFace(int type) const;
 | 
			
		||||
    wxMGLFontLibrary *GetLibrary(int type) const 
 | 
			
		||||
            { return m_fontLibs[type]; }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    wxString m_name;
 | 
			
		||||
    const font_info_t *m_fontInfo;
 | 
			
		||||
    wxMGLFontLibrary *m_fontLibs[wxFONTFACE_MAX];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
WX_DECLARE_LIST(wxMGLFontFamily, wxMGLFontFamilyList);
 | 
			
		||||
 | 
			
		||||
class wxFontsManager
 | 
			
		||||
{
 | 
			
		||||
    public:
 | 
			
		||||
        wxFontsManager();
 | 
			
		||||
        ~wxFontsManager();
 | 
			
		||||
    
 | 
			
		||||
        void AddFamily(const font_info_t *info);
 | 
			
		||||
        
 | 
			
		||||
        // return info about font with given name:
 | 
			
		||||
        wxMGLFontFamily *GetFamily(const wxString& name) const;
 | 
			
		||||
        // return list of all families
 | 
			
		||||
        wxMGLFontFamilyList *GetFamilyList() { return m_list; }
 | 
			
		||||
 | 
			
		||||
        wxMGLFontLibrary *GetFontLibrary(wxFont *font);
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        wxHashTable *m_hash;
 | 
			
		||||
        wxMGLFontFamilyList *m_list;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern wxFontsManager *wxTheFontsManager;
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif // _WX_MGL_FONTUTIL_H_
 | 
			
		||||
							
								
								
									
										132
									
								
								include/wx/mgl/frame.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								include/wx/mgl/frame.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,132 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        wx/gtk/frame.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __MGL_FRAME_H__
 | 
			
		||||
#define __MGL_FRAME_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
    #pragma interface "frame.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// classes
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxMDIChildFrame;
 | 
			
		||||
class WXDLLEXPORT wxMDIClientWindow;
 | 
			
		||||
class WXDLLEXPORT wxMenu;
 | 
			
		||||
class WXDLLEXPORT wxMenuBar;
 | 
			
		||||
class WXDLLEXPORT wxToolBar;
 | 
			
		||||
class WXDLLEXPORT wxStatusBar;
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxFrame;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxFrame
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
//FIXME_MGL
 | 
			
		||||
class WXDLLEXPORT wxFrame : public wxFrameBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    // construction
 | 
			
		||||
    wxFrame() { Init(); }
 | 
			
		||||
    wxFrame(wxWindow *parent,
 | 
			
		||||
            wxWindowID id,
 | 
			
		||||
            const wxString& title,
 | 
			
		||||
            const wxPoint& pos = wxDefaultPosition,
 | 
			
		||||
            const wxSize& size = wxDefaultSize,
 | 
			
		||||
            long style = wxDEFAULT_FRAME_STYLE,
 | 
			
		||||
            const wxString& name = wxFrameNameStr)
 | 
			
		||||
    {
 | 
			
		||||
        Init();
 | 
			
		||||
 | 
			
		||||
        Create(parent, id, title, pos, size, style, name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bool Create(wxWindow *parent,
 | 
			
		||||
                wxWindowID id,
 | 
			
		||||
                const wxString& title,
 | 
			
		||||
                const wxPoint& pos = wxDefaultPosition,
 | 
			
		||||
                const wxSize& size = wxDefaultSize,
 | 
			
		||||
                long style = wxDEFAULT_FRAME_STYLE,
 | 
			
		||||
                const wxString& name = wxFrameNameStr) {}
 | 
			
		||||
 | 
			
		||||
    virtual ~wxFrame() {}
 | 
			
		||||
 | 
			
		||||
    // implement base class pure virtuals
 | 
			
		||||
    virtual void Maximize(bool maximize = TRUE) {}
 | 
			
		||||
    virtual bool IsMaximized() const {}
 | 
			
		||||
    virtual void Iconize(bool iconize = TRUE) {}
 | 
			
		||||
    virtual bool IsIconized() const {}
 | 
			
		||||
    virtual void SetIcon(const wxIcon& icon) {}
 | 
			
		||||
    virtual void MakeModal(bool modal = TRUE) {}
 | 
			
		||||
    virtual void Restore() {}
 | 
			
		||||
 | 
			
		||||
#if wxUSE_MENUS
 | 
			
		||||
    virtual void SetMenuBar( wxMenuBar *menuBar ) {}
 | 
			
		||||
#endif // wxUSE_MENUS
 | 
			
		||||
 | 
			
		||||
#if wxUSE_STATUSBAR
 | 
			
		||||
    virtual void PositionStatusBar() {}
 | 
			
		||||
 | 
			
		||||
    virtual wxStatusBar* CreateStatusBar(int number = 1,
 | 
			
		||||
                                         long style = wxST_SIZEGRIP,
 | 
			
		||||
                                         wxWindowID id = 0,
 | 
			
		||||
                                         const wxString& name = wxStatusLineNameStr) {}
 | 
			
		||||
#endif // wxUSE_STATUSBAR
 | 
			
		||||
 | 
			
		||||
#if wxUSE_TOOLBAR
 | 
			
		||||
    virtual wxToolBar* CreateToolBar(long style = wxNO_BORDER | wxTB_HORIZONTAL | wxTB_FLAT,
 | 
			
		||||
                                     wxWindowID id = -1,
 | 
			
		||||
                                     const wxString& name = wxToolBarNameStr) {}
 | 
			
		||||
    void SetToolBar(wxToolBar *toolbar) {}
 | 
			
		||||
#endif // wxUSE_TOOLBAR
 | 
			
		||||
 | 
			
		||||
    virtual bool Show(bool show = TRUE) {}
 | 
			
		||||
 | 
			
		||||
    virtual void SetTitle( const wxString &title ) {}
 | 
			
		||||
    virtual wxString GetTitle() const { return m_title; }
 | 
			
		||||
 | 
			
		||||
    // implementation from now on
 | 
			
		||||
    // --------------------------
 | 
			
		||||
 | 
			
		||||
    // move the window to the specified location and resize it: this is called
 | 
			
		||||
    // from both DoSetSize() and DoSetClientSize() 
 | 
			
		||||
    virtual void DoMoveWindow(int x, int y, int width, int height) {}
 | 
			
		||||
    
 | 
			
		||||
    // GTK callbacks
 | 
			
		||||
    virtual void GtkOnSize( int x, int y, int width, int height ) {}
 | 
			
		||||
    virtual void OnInternalIdle() {}
 | 
			
		||||
 | 
			
		||||
    wxString      m_title;
 | 
			
		||||
    int           m_miniEdge,
 | 
			
		||||
                  m_miniTitle;
 | 
			
		||||
    bool          m_menuBarDetached;
 | 
			
		||||
    bool          m_toolBarDetached;
 | 
			
		||||
    bool          m_insertInClientArea;  /* not from within OnCreateXXX */
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // common part of all ctors
 | 
			
		||||
    void Init() {}
 | 
			
		||||
 | 
			
		||||
    // override wxWindow methods to take into account tool/menu/statusbars
 | 
			
		||||
    virtual void DoSetSize(int x, int y,
 | 
			
		||||
                           int width, int height,
 | 
			
		||||
                           int sizeFlags = wxSIZE_AUTO) {}
 | 
			
		||||
 | 
			
		||||
    virtual void DoSetClientSize(int width, int height) {}
 | 
			
		||||
    virtual void DoGetClientSize( int *width, int *height ) const {}
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxFrame)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // __WX_FRAME_H__
 | 
			
		||||
							
								
								
									
										55
									
								
								include/wx/mgl/gdiobj.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								include/wx/mgl/gdiobj.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        wx/msw/gdiobj.h
 | 
			
		||||
// Purpose:     wxGDIObject class: base class for other GDI classes
 | 
			
		||||
// Author:      Julian Smart
 | 
			
		||||
// Modified by:
 | 
			
		||||
// Created:     01/02/97
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) Julian Smart
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifndef _WX_GDIOBJ_H_
 | 
			
		||||
#define _WX_GDIOBJ_H_
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
    #pragma interface "gdiobj.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/object.h"  // base class
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxGDIRefData is the base class for wxXXXData structures which contain the
 | 
			
		||||
// real data for the GDI object and are shared among all wxWin objects sharing
 | 
			
		||||
// the same native GDI object
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxGDIRefData : public wxObjectRefData
 | 
			
		||||
{
 | 
			
		||||
    // this class is intentionally left blank
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxGDIObject
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxGDIObject : public wxObject
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxGDIObject() {}
 | 
			
		||||
 | 
			
		||||
    virtual bool GetVisible() { return m_visible; }
 | 
			
		||||
    virtual void SetVisible( bool visible ) { m_visible = visible; }
 | 
			
		||||
 | 
			
		||||
    bool IsNull() const { return (m_refData == 0); }
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    bool m_visible; /* can a pointer to this object be safely taken?
 | 
			
		||||
                     * - only if created within FindOrCreate... */
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxGDIObject)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
    // _WX_GDIOBJ_H_
 | 
			
		||||
							
								
								
									
										60
									
								
								include/wx/mgl/icon.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								include/wx/mgl/icon.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        icon.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_ICON_H__
 | 
			
		||||
#define __WX_ICON_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "icon.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/object.h"
 | 
			
		||||
#include "wx/bitmap.h"
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// classes
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxIcon;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxIcon
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxIcon: public wxBitmap
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxIcon() : wxBitmap() {}
 | 
			
		||||
    wxIcon(const wxIcon& icon);
 | 
			
		||||
    wxIcon(const char **bits, int width=-1, int height=-1);
 | 
			
		||||
    wxIcon(char **bits, int width=-1, int height=-1);
 | 
			
		||||
 | 
			
		||||
    // For compatibility with wxMSW where desired size is sometimes required to
 | 
			
		||||
    // distinguish between multiple icons in a resource.
 | 
			
		||||
    wxIcon(const wxString& filename, wxBitmapType type = wxBITMAP_TYPE_ICO_RESOURCE,
 | 
			
		||||
           int WXUNUSED(desiredWidth)=-1, int WXUNUSED(desiredHeight)=-1 ) :
 | 
			
		||||
           wxBitmap(filename, type) {}
 | 
			
		||||
    
 | 
			
		||||
    wxIcon& operator = (const wxIcon& icon);
 | 
			
		||||
    inline bool operator == (const wxIcon& icon) { return m_refData == icon.m_refData; }
 | 
			
		||||
    inline bool operator != (const wxIcon& icon) { return m_refData != icon.m_refData; }
 | 
			
		||||
 | 
			
		||||
    // create from bitmap (which should have a mask unless it's monochrome):
 | 
			
		||||
    // there shouldn't be any implicit bitmap -> icon conversion (i.e. no
 | 
			
		||||
    // ctors, assignment operators...), but it's ok to have such function
 | 
			
		||||
    void CopyFromBitmap(const wxBitmap& bmp);
 | 
			
		||||
  
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxIcon)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // __WX_ICON_H__
 | 
			
		||||
							
								
								
									
										64
									
								
								include/wx/mgl/palette.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								include/wx/mgl/palette.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        palette.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Created:     2001/03/11
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_PALETTE_H__
 | 
			
		||||
#define __WX_PALETTE_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "palette.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/object.h"
 | 
			
		||||
#include "wx/gdiobj.h"
 | 
			
		||||
#include "wx/gdicmn.h"
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// classes
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxPalette;
 | 
			
		||||
struct palette_t;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxPalette
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxPalette: public wxGDIObject
 | 
			
		||||
{
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxPalette)
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    wxPalette();
 | 
			
		||||
    wxPalette(int n, const unsigned char *red, const unsigned char *green, const unsigned char *blue);
 | 
			
		||||
    wxPalette(const wxPalette& palette);
 | 
			
		||||
    ~wxPalette();
 | 
			
		||||
    wxPalette& operator = (const wxPalette& palette);
 | 
			
		||||
    bool operator == (const wxPalette& palette) const;
 | 
			
		||||
    bool operator != (const wxPalette& palette) const;
 | 
			
		||||
    bool Ok() const;
 | 
			
		||||
 | 
			
		||||
    bool Create(int n, const unsigned char *red, const unsigned char *green, const unsigned char *blue);
 | 
			
		||||
    int GetPixel(const unsigned char red, const unsigned char green, const unsigned char blue) const;
 | 
			
		||||
    bool GetRGB(int pixel, unsigned char *red, unsigned char *green, unsigned char *blue) const;
 | 
			
		||||
 | 
			
		||||
    // implementation
 | 
			
		||||
    int GetColoursCount() const;   
 | 
			
		||||
    // FIXME_MGL -- make this method standard part of wx API
 | 
			
		||||
    // FIXME_MGL -- create wxXXXBase classes for all GDI stuff (Vadim wants that)
 | 
			
		||||
    
 | 
			
		||||
    palette_t *GetMGLpalette_t() const;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define wxColorMap wxPalette
 | 
			
		||||
#define wxColourMap wxPalette
 | 
			
		||||
 | 
			
		||||
#endif // __WX_PALETTE_H__
 | 
			
		||||
							
								
								
									
										77
									
								
								include/wx/mgl/pen.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								include/wx/mgl/pen.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,77 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        pen.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_PEN_H__
 | 
			
		||||
#define __WX_PEN_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "pen.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/object.h"
 | 
			
		||||
#include "wx/string.h"
 | 
			
		||||
#include "wx/gdiobj.h"
 | 
			
		||||
#include "wx/gdicmn.h"
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// classes
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxBitmap;
 | 
			
		||||
class WXDLLEXPORT wxPen;
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxPen
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxPen: public wxGDIObject
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxPen();
 | 
			
		||||
    wxPen(const wxColour &colour, int width, int style);
 | 
			
		||||
    wxPen(const wxBitmap& stipple, int width);
 | 
			
		||||
    wxPen(const wxPen& pen);
 | 
			
		||||
    ~wxPen();
 | 
			
		||||
    wxPen& operator = (const wxPen& pen);
 | 
			
		||||
    bool operator == (const wxPen& pen) const;
 | 
			
		||||
    bool operator != (const wxPen& pen) const;
 | 
			
		||||
 | 
			
		||||
    void SetColour(const wxColour &colour);
 | 
			
		||||
    void SetColour(int red, int green, int blue);
 | 
			
		||||
    void SetCap(int capStyle);
 | 
			
		||||
    void SetJoin(int joinStyle);
 | 
			
		||||
    void SetStyle(int style);
 | 
			
		||||
    void SetWidth(int width);
 | 
			
		||||
    void SetDashes(int number_of_dashes, const wxDash *dash);
 | 
			
		||||
    void SetStipple(const wxBitmap& stipple);
 | 
			
		||||
    
 | 
			
		||||
    wxColour &GetColour() const;
 | 
			
		||||
    int GetCap() const;
 | 
			
		||||
    int GetJoin() const;
 | 
			
		||||
    int GetStyle() const;
 | 
			
		||||
    int GetWidth() const;
 | 
			
		||||
    int GetDashes(wxDash **ptr) const;
 | 
			
		||||
    int GetDashCount() const;
 | 
			
		||||
    wxDash* GetDash() const;
 | 
			
		||||
    wxBitmap *GetStipple() const;
 | 
			
		||||
    
 | 
			
		||||
    bool Ok() const;
 | 
			
		||||
 | 
			
		||||
    void Unshare();
 | 
			
		||||
    
 | 
			
		||||
    // implementation:
 | 
			
		||||
    void* GetPixPattern() const;
 | 
			
		||||
 | 
			
		||||
private:    
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxPen)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // __WX_PEN_H__
 | 
			
		||||
							
								
								
									
										51
									
								
								include/wx/mgl/private.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								include/wx/mgl/private.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        private.h
 | 
			
		||||
// Purpose:     Private declarations: as this header is only included by
 | 
			
		||||
//              wxWindows itself, it may contain identifiers which don't start
 | 
			
		||||
//              with "wx".
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Created:     2001/04/07
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifndef _WX_PRIVATE_H_
 | 
			
		||||
#define _WX_PRIVATE_H_
 | 
			
		||||
 | 
			
		||||
#include <mgraph.hpp>
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxBitmap;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ---------------------------------------------------------------------------
 | 
			
		||||
// private variables
 | 
			
		||||
// ---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
extern MGLDevCtx *g_displayDC;
 | 
			
		||||
 | 
			
		||||
// ---------------------------------------------------------------------------
 | 
			
		||||
// helper functions
 | 
			
		||||
// ---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// This function converts wxBitmap into pixpattern24_t representation
 | 
			
		||||
// (used by wxBrush and wxPen)
 | 
			
		||||
 | 
			
		||||
extern void wxBitmapToPixPattern(const wxBitmap& bitmap, 
 | 
			
		||||
                                 pixpattern24_t *pix, pattern_t *mask);
 | 
			
		||||
                       
 | 
			
		||||
 | 
			
		||||
// Sets current DC and restores previous one upon destruction:
 | 
			
		||||
class wxCurrentDCSwitcher
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxCurrentDCSwitcher(MGLDevCtx *dc)
 | 
			
		||||
            { m_old = dc->makeCurrent(); }
 | 
			
		||||
    ~wxCurrentDCSwitcher()
 | 
			
		||||
            { MGL_makeCurrentDC(m_old); }
 | 
			
		||||
    MGLDC *m_old;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif // _WX_PRIVATE_H_
 | 
			
		||||
							
								
								
									
										142
									
								
								include/wx/mgl/region.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								include/wx/mgl/region.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,142 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        region.h
 | 
			
		||||
// Purpose:     wxRegion class
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Created:     2001/03/12
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifndef _WX_REGION_H_
 | 
			
		||||
#define _WX_REGION_H_
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "region.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/list.h"
 | 
			
		||||
#include "wx/gdiobj.h"
 | 
			
		||||
#include "wx/gdicmn.h"
 | 
			
		||||
#include "wx/list.h"
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxRect;
 | 
			
		||||
class WXDLLEXPORT wxPoint;
 | 
			
		||||
class MGLRegion;
 | 
			
		||||
 | 
			
		||||
enum wxRegionContain 
 | 
			
		||||
{
 | 
			
		||||
    wxOutRegion = 0, 
 | 
			
		||||
    wxPartRegion = 1, 
 | 
			
		||||
    wxInRegion = 2
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxRegion : public wxGDIObject 
 | 
			
		||||
{
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxRegion);
 | 
			
		||||
    friend class WXDLLEXPORT wxRegionIterator;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    wxRegion(wxCoord x, wxCoord y, wxCoord w, wxCoord h);
 | 
			
		||||
    wxRegion(const wxPoint& topLeft, const wxPoint& bottomRight);
 | 
			
		||||
    wxRegion(const wxRect& rect);
 | 
			
		||||
    wxRegion(const MGLRegion& region);
 | 
			
		||||
 | 
			
		||||
    wxRegion();
 | 
			
		||||
    ~wxRegion();
 | 
			
		||||
 | 
			
		||||
    //# Copying
 | 
			
		||||
    inline wxRegion(const wxRegion& r)
 | 
			
		||||
        { Ref(r); }
 | 
			
		||||
    inline wxRegion& operator = (const wxRegion& r)
 | 
			
		||||
        { Ref(r); return (*this); }
 | 
			
		||||
 | 
			
		||||
    //# Modify region
 | 
			
		||||
    // Clear current region
 | 
			
		||||
    void Clear(void);
 | 
			
		||||
 | 
			
		||||
    // Union rectangle or region with this.
 | 
			
		||||
    bool Union(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
 | 
			
		||||
    bool Union(const wxRect& rect) { return Union(rect.x, rect.y, rect.width, rect.height); }
 | 
			
		||||
    bool Union(const wxRegion& region);
 | 
			
		||||
 | 
			
		||||
    // Intersect rectangle or region with this.
 | 
			
		||||
    bool Intersect(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
 | 
			
		||||
    bool Intersect(const wxRect& rect) { return Intersect(rect.x, rect.y, rect.width, rect.height); }
 | 
			
		||||
    bool Intersect(const wxRegion& region);
 | 
			
		||||
 | 
			
		||||
    // Subtract rectangle or region from this:
 | 
			
		||||
    // Combines the parts of 'this' that are not part of the second region.
 | 
			
		||||
    bool Subtract(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
 | 
			
		||||
    bool Subtract(const wxRect& rect) { return Subtract(rect.x, rect.y, rect.width, rect.height); }
 | 
			
		||||
    bool Subtract(const wxRegion& region);
 | 
			
		||||
 | 
			
		||||
    // XOR: the union of two combined regions except for any overlapping areas.
 | 
			
		||||
    bool Xor(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
 | 
			
		||||
    bool Xor(const wxRect& rect) { return Xor(rect.x, rect.y, rect.width, rect.height); }
 | 
			
		||||
    bool Xor(const wxRegion& region);
 | 
			
		||||
 | 
			
		||||
    //# Information on region
 | 
			
		||||
    // Outer bounds of region
 | 
			
		||||
    void GetBox(wxCoord& x, wxCoord& y, wxCoord&w, wxCoord &h) const;
 | 
			
		||||
    wxRect GetBox(void) const ;
 | 
			
		||||
 | 
			
		||||
    // Is region empty?
 | 
			
		||||
    bool Empty(void) const;
 | 
			
		||||
    inline bool IsEmpty(void) const { return Empty(); }
 | 
			
		||||
 | 
			
		||||
    //# Tests
 | 
			
		||||
    // Does the region contain the point (x,y)?
 | 
			
		||||
    wxRegionContain Contains(wxCoord x, wxCoord y) const;
 | 
			
		||||
    // Does the region contain the point pt?
 | 
			
		||||
    wxRegionContain Contains(const wxPoint& pt) const;
 | 
			
		||||
    // Does the region contain the rectangle (x, y, w, h)?
 | 
			
		||||
    wxRegionContain Contains(wxCoord x, wxCoord y, wxCoord w, wxCoord h) const;
 | 
			
		||||
    // Does the region contain the rectangle rect?
 | 
			
		||||
    wxRegionContain Contains(const wxRect& rect) const;
 | 
			
		||||
    
 | 
			
		||||
    // implementation from now on:
 | 
			
		||||
    const MGLRegion& GetMGLRegion() const;
 | 
			
		||||
    
 | 
			
		||||
private:
 | 
			
		||||
    void Unshare();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
WX_DECLARE_EXPORTED_LIST(wxRect, wxRegionRectList);
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxRegionIterator : public wxObject 
 | 
			
		||||
{
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxRegionIterator);
 | 
			
		||||
public:
 | 
			
		||||
    wxRegionIterator(void);
 | 
			
		||||
    wxRegionIterator(const wxRegion& region);
 | 
			
		||||
    ~wxRegionIterator(void);
 | 
			
		||||
 | 
			
		||||
    void Reset(void) { m_currentNode = NULL; }
 | 
			
		||||
    void Reset(const wxRegion& region);
 | 
			
		||||
 | 
			
		||||
#ifndef __SALFORDC__
 | 
			
		||||
    operator bool (void) const { return (m_currentNode != NULL); }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    bool HaveRects(void) const { return (m_currentNode != NULL); }
 | 
			
		||||
 | 
			
		||||
    void operator ++ (void);
 | 
			
		||||
    void operator ++ (int);
 | 
			
		||||
 | 
			
		||||
    wxCoord GetX(void) const;
 | 
			
		||||
    wxCoord GetY(void) const;
 | 
			
		||||
    wxCoord GetW(void) const;
 | 
			
		||||
    wxCoord GetWidth(void) const { return GetW(); }
 | 
			
		||||
    wxCoord GetH(void) const;
 | 
			
		||||
    wxCoord GetHeight(void) const { return GetH(); }
 | 
			
		||||
    wxRect GetRect() const { return wxRect(GetX(), GetY(), GetWidth(), GetHeight()); }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    wxRegionRectList         m_rects;
 | 
			
		||||
    wxRegionRectList::Node  *m_currentNode;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
    // _WX_REGION_H_
 | 
			
		||||
							
								
								
									
										43
									
								
								include/wx/mgl/settings.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								include/wx/mgl/settings.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        settings.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Robert Roebling
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 1998 Robert Roebling
 | 
			
		||||
// Licence:   	wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifndef __GTKSETTINGSH__
 | 
			
		||||
#define __GTKSETTINGSH__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma interface "settings.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/gdicmn.h"
 | 
			
		||||
#include "wx/pen.h"
 | 
			
		||||
#include "wx/font.h"
 | 
			
		||||
 | 
			
		||||
// FIXME_MGL - probably belongs to wxUniversal
 | 
			
		||||
 | 
			
		||||
class wxSystemSettings: public wxObject
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    inline wxSystemSettings() {}
 | 
			
		||||
 | 
			
		||||
    inline static void Init() {}
 | 
			
		||||
    static void Done() {}
 | 
			
		||||
 | 
			
		||||
    // Get a system colour
 | 
			
		||||
    static wxColour    GetSystemColour(int index) {}
 | 
			
		||||
 | 
			
		||||
    // Get a system font
 | 
			
		||||
    static wxFont      GetSystemFont(int index) {}
 | 
			
		||||
 | 
			
		||||
    // Get a system metric, e.g. scrollbar size
 | 
			
		||||
    static int         GetSystemMetric(int index) {}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
    // __GTKSETTINGSH__
 | 
			
		||||
							
								
								
									
										45
									
								
								include/wx/mgl/timer.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								include/wx/mgl/timer.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        timer.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_TIMER_H__
 | 
			
		||||
#define __WX_TIMER_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
    #pragma interface "timer.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxTimer
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
//FIXME_MGL
 | 
			
		||||
class WXDLLEXPORT wxTimer : public wxTimerBase
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxTimer() { Init(); }
 | 
			
		||||
    wxTimer(wxEvtHandler *owner, int id = -1) : wxTimerBase(owner, id)
 | 
			
		||||
        { Init(); }
 | 
			
		||||
    ~wxTimer() {}
 | 
			
		||||
 | 
			
		||||
    virtual bool Start( int millisecs = -1, bool oneShot = FALSE ) {}
 | 
			
		||||
    virtual void Stop() {}
 | 
			
		||||
 | 
			
		||||
    virtual bool IsRunning() const { return m_tag != -1; }
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    void Init() {}
 | 
			
		||||
 | 
			
		||||
    int  m_tag;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_ABSTRACT_CLASS(wxTimer)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // __GTKTIMERH__
 | 
			
		||||
							
								
								
									
										127
									
								
								include/wx/mgl/window.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								include/wx/mgl/window.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,127 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        window.h
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef __WX_WINDOW_H__
 | 
			
		||||
#define __WX_WINDOW_H__
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
    #pragma interface "window.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxWindow
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxWindowMGL : public wxWindowBase
 | 
			
		||||
{
 | 
			
		||||
    DECLARE_DYNAMIC_CLASS(wxWindowMGL)
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    // creating the window
 | 
			
		||||
    // -------------------
 | 
			
		||||
    wxWindowMGL() {}
 | 
			
		||||
    wxWindowMGL(wxWindow *parent,
 | 
			
		||||
                wxWindowID id,
 | 
			
		||||
                const wxPoint& pos = wxDefaultPosition,
 | 
			
		||||
                const wxSize& size = wxDefaultSize,
 | 
			
		||||
                long style = 0,
 | 
			
		||||
                const wxString& name = wxPanelNameStr) {}
 | 
			
		||||
    bool Create(wxWindow *parent,
 | 
			
		||||
                wxWindowID id,
 | 
			
		||||
                const wxPoint& pos = wxDefaultPosition,
 | 
			
		||||
                const wxSize& size = wxDefaultSize,
 | 
			
		||||
                long style = 0,
 | 
			
		||||
                const wxString& name = wxPanelNameStr) {}
 | 
			
		||||
    virtual ~wxWindowMGL() {}
 | 
			
		||||
 | 
			
		||||
    // implement base class (pure) virtual methods
 | 
			
		||||
    // -------------------------------------------
 | 
			
		||||
    virtual bool Destroy() {return TRUE;}
 | 
			
		||||
 | 
			
		||||
    virtual void Raise() {}
 | 
			
		||||
    virtual void Lower() {}
 | 
			
		||||
 | 
			
		||||
    virtual bool Show( bool show = TRUE )  {return TRUE;}
 | 
			
		||||
    virtual bool Enable( bool enable = TRUE )  {return TRUE;}
 | 
			
		||||
 | 
			
		||||
    virtual bool IsRetained() const  {return TRUE;}
 | 
			
		||||
 | 
			
		||||
    virtual void SetFocus() {}
 | 
			
		||||
    virtual bool AcceptsFocus() const  {return TRUE;}
 | 
			
		||||
 | 
			
		||||
    virtual bool Reparent( wxWindowBase *newParent )  {return TRUE;}
 | 
			
		||||
 | 
			
		||||
    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 SetBackgroundColour( const wxColour &colour )  {return TRUE;}
 | 
			
		||||
    virtual bool SetForegroundColour( const wxColour &colour ) {return TRUE;}
 | 
			
		||||
    virtual bool SetCursor( const wxCursor &cursor )  {return TRUE;}
 | 
			
		||||
    virtual bool SetFont( const wxFont &font )  {return TRUE;}
 | 
			
		||||
 | 
			
		||||
    virtual int GetCharHeight() const {return 0;}
 | 
			
		||||
    virtual int GetCharWidth() const {return 0;}
 | 
			
		||||
    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 )  {return TRUE;}
 | 
			
		||||
 | 
			
		||||
    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  {return 0;}
 | 
			
		||||
    virtual int GetScrollThumb( int orient ) const  {return 0;}
 | 
			
		||||
    virtual int GetScrollRange( int orient ) const  {return 0;}
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
    virtual WXWidget GetHandle() const { return NULL; }
 | 
			
		||||
 | 
			
		||||
    /* For compatibility across platforms (not in event table) */
 | 
			
		||||
    void OnIdle(wxIdleEvent& WXUNUSED(event)) {};
 | 
			
		||||
 | 
			
		||||
    // 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) {}
 | 
			
		||||
    virtual void DoMoveWindow(int x, int y, int width, int height) {}
 | 
			
		||||
 | 
			
		||||
#if wxUSE_TOOLTIPS
 | 
			
		||||
    virtual void DoSetToolTip( wxToolTip *tip ) {}
 | 
			
		||||
#endif // wxUSE_TOOLTIPS
 | 
			
		||||
 | 
			
		||||
    // common part of all ctors (can't be virtual because called from ctor)
 | 
			
		||||
    void Init() {}
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_NO_COPY_CLASS(wxWindowMGL);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // ___WX_WINDOW_H__
 | 
			
		||||
							
								
								
									
										31
									
								
								samples/widgets/Makefile.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								samples/widgets/Makefile.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
#
 | 
			
		||||
# File:		makefile.unx
 | 
			
		||||
# Author:	Julian Smart
 | 
			
		||||
# Created:	1998
 | 
			
		||||
# Updated:	
 | 
			
		||||
# Copyright:	(c) 1998 Julian Smart
 | 
			
		||||
#
 | 
			
		||||
# "%W% %G%"
 | 
			
		||||
#
 | 
			
		||||
# Makefile for minimal example (UNIX).
 | 
			
		||||
 | 
			
		||||
top_srcdir = @top_srcdir@/..
 | 
			
		||||
top_builddir = ../..
 | 
			
		||||
program_dir = samples/widgets
 | 
			
		||||
 | 
			
		||||
PROGRAM=widgets
 | 
			
		||||
 | 
			
		||||
OBJECTS=button.o \
 | 
			
		||||
        combobox.o \
 | 
			
		||||
        gauge.o \
 | 
			
		||||
        listbox.o \
 | 
			
		||||
        notebook.o \
 | 
			
		||||
        radiobox.o \
 | 
			
		||||
        slider.o \
 | 
			
		||||
        spinbtn.o \
 | 
			
		||||
        static.o \
 | 
			
		||||
        textctrl.o \
 | 
			
		||||
        widgets.o
 | 
			
		||||
 | 
			
		||||
include ../../src/makeprog.env
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										371
									
								
								samples/widgets/button.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										371
									
								
								samples/widgets/button.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,371 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Program:     wxWindows Widgets Sample
 | 
			
		||||
// Name:        button.cpp
 | 
			
		||||
// Purpose:     Part of the widgets sample showing wxButton
 | 
			
		||||
// Author:      Vadim Zeitlin
 | 
			
		||||
// Created:     10.04.01
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vadim Zeitlin
 | 
			
		||||
// License:     wxWindows license
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// for compilers that support precompilation, includes "wx/wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// for all others, include the necessary headers
 | 
			
		||||
#ifndef WX_PRECOMP
 | 
			
		||||
    #include "wx/log.h"
 | 
			
		||||
 | 
			
		||||
    #include "wx/button.h"
 | 
			
		||||
    #include "wx/checkbox.h"
 | 
			
		||||
    #include "wx/radiobox.h"
 | 
			
		||||
    #include "wx/statbox.h"
 | 
			
		||||
    #include "wx/textctrl.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/sizer.h"
 | 
			
		||||
 | 
			
		||||
#include "widgets.h"
 | 
			
		||||
 | 
			
		||||
#include "icons/button.xpm"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// constants
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// control ids
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    ButtonPage_Reset = 100,
 | 
			
		||||
    ButtonPage_ChangeLabel,
 | 
			
		||||
    ButtonPage_Button
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// radio boxes
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    ButtonHAlign_Left,
 | 
			
		||||
    ButtonHAlign_Centre,
 | 
			
		||||
    ButtonHAlign_Right
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    ButtonVAlign_Top,
 | 
			
		||||
    ButtonVAlign_Centre,
 | 
			
		||||
    ButtonVAlign_Bottom
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// ButtonWidgetsPage
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class ButtonWidgetsPage : public WidgetsPage
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    ButtonWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
 | 
			
		||||
    virtual ~ButtonWidgetsPage();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // event handlers
 | 
			
		||||
    void OnCheckOrRadioBox(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnButton(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonReset(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonChangeLabel(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    // reset the wxButton parameters
 | 
			
		||||
    void Reset();
 | 
			
		||||
 | 
			
		||||
    // (re)create the wxButton
 | 
			
		||||
    void CreateButton();
 | 
			
		||||
 | 
			
		||||
    // the controls
 | 
			
		||||
    // ------------
 | 
			
		||||
 | 
			
		||||
    // the check/radio boxes for styles
 | 
			
		||||
    wxCheckBox *m_chkImage,
 | 
			
		||||
               *m_chkFit,
 | 
			
		||||
               *m_chkDefault;
 | 
			
		||||
 | 
			
		||||
    wxRadioBox *m_radioHAlign,
 | 
			
		||||
               *m_radioVAlign;
 | 
			
		||||
 | 
			
		||||
    // the gauge itself and the sizer it is in
 | 
			
		||||
    wxButton *m_button;
 | 
			
		||||
    wxSizer *m_sizerButton;
 | 
			
		||||
 | 
			
		||||
    // the text entries for command parameters
 | 
			
		||||
    wxTextCtrl *m_textLabel;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_EVENT_TABLE();
 | 
			
		||||
    DECLARE_WIDGETS_PAGE(ButtonWidgetsPage);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event tables
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
BEGIN_EVENT_TABLE(ButtonWidgetsPage, WidgetsPage)
 | 
			
		||||
    EVT_BUTTON(ButtonPage_Button, ButtonWidgetsPage::OnButton)
 | 
			
		||||
 | 
			
		||||
    EVT_BUTTON(ButtonPage_Reset, ButtonWidgetsPage::OnButtonReset)
 | 
			
		||||
    EVT_BUTTON(ButtonPage_ChangeLabel, ButtonWidgetsPage::OnButtonChangeLabel)
 | 
			
		||||
 | 
			
		||||
    EVT_CHECKBOX(-1, ButtonWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
    EVT_RADIOBOX(-1, ButtonWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
END_EVENT_TABLE()
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_WIDGETS_PAGE(ButtonWidgetsPage, _T("Button"));
 | 
			
		||||
 | 
			
		||||
ButtonWidgetsPage::ButtonWidgetsPage(wxNotebook *notebook,
 | 
			
		||||
                                       wxImageList *imaglist)
 | 
			
		||||
                  : WidgetsPage(notebook)
 | 
			
		||||
{
 | 
			
		||||
    imaglist->Add(wxBitmap(button_xpm));
 | 
			
		||||
 | 
			
		||||
    // init everything
 | 
			
		||||
    m_chkImage =
 | 
			
		||||
    m_chkFit =
 | 
			
		||||
    m_chkDefault = (wxCheckBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_radioHAlign =
 | 
			
		||||
    m_radioVAlign = (wxRadioBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_textLabel = (wxTextCtrl *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_button = (wxButton *)NULL;
 | 
			
		||||
    m_sizerButton = (wxSizer *)NULL;
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
 | 
			
		||||
    // left pane
 | 
			
		||||
    wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set style"));
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    m_chkImage = CreateCheckBoxAndAddToSizer(sizerLeft, _T("With &image"));
 | 
			
		||||
    m_chkFit = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Fit exactly"));
 | 
			
		||||
    m_chkDefault = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Default"));
 | 
			
		||||
 | 
			
		||||
#ifndef __WXUNIVERSAL__
 | 
			
		||||
    // only wxUniv currently supoprts buttons with images
 | 
			
		||||
    m_chkImage->Disable();
 | 
			
		||||
#endif // !wxUniv
 | 
			
		||||
 | 
			
		||||
    sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
 | 
			
		||||
 | 
			
		||||
    // should be in sync with enums Button[HV]Align!
 | 
			
		||||
    static const wxString halign[] =
 | 
			
		||||
    {
 | 
			
		||||
        _T("left"),
 | 
			
		||||
        _T("centre"),
 | 
			
		||||
        _T("right"),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const wxString valign[] =
 | 
			
		||||
    {
 | 
			
		||||
        _T("top"),
 | 
			
		||||
        _T("centre"),
 | 
			
		||||
        _T("bottom"),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    m_radioHAlign = new wxRadioBox(this, -1, _T("&Horz alignment"),
 | 
			
		||||
                                   wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                   WXSIZEOF(halign), halign);
 | 
			
		||||
    m_radioVAlign = new wxRadioBox(this, -1, _T("&Vert alignment"),
 | 
			
		||||
                                   wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                   WXSIZEOF(valign), valign);
 | 
			
		||||
 | 
			
		||||
    sizerLeft->Add(m_radioHAlign, 0, wxGROW | wxALL, 5);
 | 
			
		||||
    sizerLeft->Add(m_radioVAlign, 0, wxGROW | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
 | 
			
		||||
 | 
			
		||||
    wxButton *btn = new wxButton(this, ButtonPage_Reset, _T("&Reset"));
 | 
			
		||||
    sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
 | 
			
		||||
 | 
			
		||||
    // middle pane
 | 
			
		||||
    wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Operations"));
 | 
			
		||||
    wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerRow = CreateSizerWithTextAndButton(ButtonPage_ChangeLabel,
 | 
			
		||||
                                                     _T("Change label"),
 | 
			
		||||
                                                     -1,
 | 
			
		||||
                                                     &m_textLabel);
 | 
			
		||||
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    // right pane
 | 
			
		||||
    wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    m_button = new wxButton(this, ButtonPage_Button, _T("&Press me!"));
 | 
			
		||||
    sizerRight->Add(0, 0, 1, wxCENTRE);
 | 
			
		||||
    sizerRight->Add(m_button, 1, wxCENTRE);
 | 
			
		||||
    sizerRight->Add(0, 0, 1, wxCENTRE);
 | 
			
		||||
    sizerRight->SetMinSize(250, 0);
 | 
			
		||||
    m_sizerButton = sizerRight; // save it to modify it later
 | 
			
		||||
 | 
			
		||||
    // the 3 panes panes compose the window
 | 
			
		||||
    sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
 | 
			
		||||
    sizerTop->Add(sizerMiddle, 1, wxGROW | wxALL, 10);
 | 
			
		||||
    sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
 | 
			
		||||
 | 
			
		||||
    // final initializations
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    SetAutoLayout(TRUE);
 | 
			
		||||
    SetSizer(sizerTop);
 | 
			
		||||
 | 
			
		||||
    sizerTop->Fit(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ButtonWidgetsPage::~ButtonWidgetsPage()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// operations
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void ButtonWidgetsPage::Reset()
 | 
			
		||||
{
 | 
			
		||||
    m_chkFit->SetValue(TRUE);
 | 
			
		||||
    m_chkImage->SetValue(FALSE);
 | 
			
		||||
    m_chkDefault->SetValue(FALSE);
 | 
			
		||||
 | 
			
		||||
    m_radioHAlign->SetSelection(ButtonHAlign_Centre);
 | 
			
		||||
    m_radioVAlign->SetSelection(ButtonVAlign_Centre);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ButtonWidgetsPage::CreateButton()
 | 
			
		||||
{
 | 
			
		||||
    wxString label;
 | 
			
		||||
    if ( m_button )
 | 
			
		||||
    {
 | 
			
		||||
        label = m_button->GetLabel();
 | 
			
		||||
 | 
			
		||||
        size_t count = m_sizerButton->GetChildren().GetCount();
 | 
			
		||||
        for ( size_t n = 0; n < count; n++ )
 | 
			
		||||
        {
 | 
			
		||||
            m_sizerButton->Remove(0);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        delete m_button;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        label = _T("&Press me!");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    int flags = 0;
 | 
			
		||||
    switch ( m_radioHAlign->GetSelection() )
 | 
			
		||||
    {
 | 
			
		||||
        case ButtonHAlign_Left:
 | 
			
		||||
            flags |= wxALIGN_LEFT;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
            wxFAIL_MSG(_T("unexpected radiobox selection"));
 | 
			
		||||
            // fall through
 | 
			
		||||
 | 
			
		||||
        case ButtonHAlign_Centre:
 | 
			
		||||
            flags |= wxALIGN_CENTRE_HORIZONTAL;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case ButtonHAlign_Right:
 | 
			
		||||
            flags |= wxALIGN_RIGHT;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch ( m_radioVAlign->GetSelection() )
 | 
			
		||||
    {
 | 
			
		||||
        case ButtonVAlign_Top:
 | 
			
		||||
            flags |= wxALIGN_TOP;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
            wxFAIL_MSG(_T("unexpected radiobox selection"));
 | 
			
		||||
            // fall through
 | 
			
		||||
 | 
			
		||||
        case ButtonVAlign_Centre:
 | 
			
		||||
            flags |= wxALIGN_CENTRE_VERTICAL;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case ButtonVAlign_Bottom:
 | 
			
		||||
            flags |= wxALIGN_BOTTOM;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_button = new wxButton(this, ButtonPage_Button, label,
 | 
			
		||||
                            wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                            flags);
 | 
			
		||||
 | 
			
		||||
#ifdef __WXUNIVERSAL__
 | 
			
		||||
    if ( m_chkImage->GetValue() )
 | 
			
		||||
    {
 | 
			
		||||
        m_button->SetImageLabel(wxTheApp->GetStdIcon(wxICON_INFORMATION));
 | 
			
		||||
    }
 | 
			
		||||
#endif // wxUniv
 | 
			
		||||
 | 
			
		||||
    if ( m_chkDefault->GetValue() )
 | 
			
		||||
    {
 | 
			
		||||
        m_button->SetDefault();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ( m_chkFit->GetValue() )
 | 
			
		||||
    {
 | 
			
		||||
        m_sizerButton->Add(0, 0, 1, wxCENTRE);
 | 
			
		||||
        m_sizerButton->Add(m_button, 1, wxCENTRE);
 | 
			
		||||
        m_sizerButton->Add(0, 0, 1, wxCENTRE);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        m_sizerButton->Add(m_button, 1, wxGROW | wxALL, 5);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_sizerButton->Layout();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event handlers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void ButtonWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    CreateButton();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ButtonWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    CreateButton();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ButtonWidgetsPage::OnButtonChangeLabel(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    m_button->SetLabel(m_textLabel->GetValue());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ButtonWidgetsPage::OnButton(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    wxLogMessage(_T("Test button clicked."));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										494
									
								
								samples/widgets/combobox.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										494
									
								
								samples/widgets/combobox.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,494 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Program:     wxWindows Widgets Sample
 | 
			
		||||
// Name:        combobox.cpp
 | 
			
		||||
// Purpose:     Part of the widgets sample showing wxComboBox
 | 
			
		||||
// Author:      Vadim Zeitlin
 | 
			
		||||
// Created:     27.03.01
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vadim Zeitlin
 | 
			
		||||
// License:     wxWindows license
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// for compilers that support precompilation, includes "wx/wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// for all others, include the necessary headers
 | 
			
		||||
#ifndef WX_PRECOMP
 | 
			
		||||
    #include "wx/log.h"
 | 
			
		||||
 | 
			
		||||
    #include "wx/button.h"
 | 
			
		||||
    #include "wx/checkbox.h"
 | 
			
		||||
    #include "wx/combobox.h"
 | 
			
		||||
    #include "wx/radiobox.h"
 | 
			
		||||
    #include "wx/statbox.h"
 | 
			
		||||
    #include "wx/textctrl.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/sizer.h"
 | 
			
		||||
 | 
			
		||||
#include "widgets.h"
 | 
			
		||||
 | 
			
		||||
#include "icons/combobox.xpm"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// constants
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// control ids
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    ComboPage_Reset = 100,
 | 
			
		||||
    ComboPage_CurText,
 | 
			
		||||
    ComboPage_Add,
 | 
			
		||||
    ComboPage_AddText,
 | 
			
		||||
    ComboPage_AddSeveral,
 | 
			
		||||
    ComboPage_AddMany,
 | 
			
		||||
    ComboPage_Clear,
 | 
			
		||||
    ComboPage_Change,
 | 
			
		||||
    ComboPage_ChangeText,
 | 
			
		||||
    ComboPage_Delete,
 | 
			
		||||
    ComboPage_DeleteText,
 | 
			
		||||
    ComboPage_DeleteSel,
 | 
			
		||||
    ComboPage_Combo
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// kinds of comboboxes
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    ComboKind_Default,
 | 
			
		||||
    ComboKind_Simple,
 | 
			
		||||
    ComboKind_DropDown
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// ComboboxWidgetsPage
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class ComboboxWidgetsPage : public WidgetsPage
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    ComboboxWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // event handlers
 | 
			
		||||
    void OnButtonReset(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonChange(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonDelete(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonDeleteSel(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonClear(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonAdd(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonAddSeveral(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonAddMany(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnComboBox(wxCommandEvent& event);
 | 
			
		||||
    void OnComboText(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnCheckOrRadioBox(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUICurText(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIAddSeveral(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIClearButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIDeleteButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIDeleteSelButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIResetButton(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    // reset the combobox parameters
 | 
			
		||||
    void Reset();
 | 
			
		||||
 | 
			
		||||
    // (re)create the combobox
 | 
			
		||||
    void CreateCombo();
 | 
			
		||||
 | 
			
		||||
    // the controls
 | 
			
		||||
    // ------------
 | 
			
		||||
 | 
			
		||||
    // the sel mode radiobox
 | 
			
		||||
    wxRadioBox *m_radioKind;
 | 
			
		||||
 | 
			
		||||
    // the checkboxes for styles
 | 
			
		||||
    wxCheckBox *m_chkSort,
 | 
			
		||||
               *m_chkReadonly;
 | 
			
		||||
 | 
			
		||||
    // the combobox itself and the sizer it is in
 | 
			
		||||
    wxComboBox *m_combobox;
 | 
			
		||||
    wxSizer *m_sizerCombo;
 | 
			
		||||
 | 
			
		||||
    // the text entries for "Add/change string" and "Delete" buttons
 | 
			
		||||
    wxTextCtrl *m_textAdd,
 | 
			
		||||
               *m_textChange,
 | 
			
		||||
               *m_textDelete;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_EVENT_TABLE();
 | 
			
		||||
    DECLARE_WIDGETS_PAGE(ComboboxWidgetsPage);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event tables
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
BEGIN_EVENT_TABLE(ComboboxWidgetsPage, WidgetsPage)
 | 
			
		||||
    EVT_BUTTON(ComboPage_Reset, ComboboxWidgetsPage::OnButtonReset)
 | 
			
		||||
    EVT_BUTTON(ComboPage_Change, ComboboxWidgetsPage::OnButtonChange)
 | 
			
		||||
    EVT_BUTTON(ComboPage_Delete, ComboboxWidgetsPage::OnButtonDelete)
 | 
			
		||||
    EVT_BUTTON(ComboPage_DeleteSel, ComboboxWidgetsPage::OnButtonDeleteSel)
 | 
			
		||||
    EVT_BUTTON(ComboPage_Clear, ComboboxWidgetsPage::OnButtonClear)
 | 
			
		||||
    EVT_BUTTON(ComboPage_Add, ComboboxWidgetsPage::OnButtonAdd)
 | 
			
		||||
    EVT_BUTTON(ComboPage_AddSeveral, ComboboxWidgetsPage::OnButtonAddSeveral)
 | 
			
		||||
    EVT_BUTTON(ComboPage_AddMany, ComboboxWidgetsPage::OnButtonAddMany)
 | 
			
		||||
 | 
			
		||||
    EVT_TEXT_ENTER(ComboPage_AddText, ComboboxWidgetsPage::OnButtonAdd)
 | 
			
		||||
    EVT_TEXT_ENTER(ComboPage_DeleteText, ComboboxWidgetsPage::OnButtonDelete)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(ComboPage_CurText, ComboboxWidgetsPage::OnUpdateUICurText)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(ComboPage_Reset, ComboboxWidgetsPage::OnUpdateUIResetButton)
 | 
			
		||||
    EVT_UPDATE_UI(ComboPage_AddSeveral, ComboboxWidgetsPage::OnUpdateUIAddSeveral)
 | 
			
		||||
    EVT_UPDATE_UI(ComboPage_Clear, ComboboxWidgetsPage::OnUpdateUIClearButton)
 | 
			
		||||
    EVT_UPDATE_UI(ComboPage_DeleteText, ComboboxWidgetsPage::OnUpdateUIClearButton)
 | 
			
		||||
    EVT_UPDATE_UI(ComboPage_Delete, ComboboxWidgetsPage::OnUpdateUIDeleteButton)
 | 
			
		||||
    EVT_UPDATE_UI(ComboPage_Change, ComboboxWidgetsPage::OnUpdateUIDeleteSelButton)
 | 
			
		||||
    EVT_UPDATE_UI(ComboPage_ChangeText, ComboboxWidgetsPage::OnUpdateUIDeleteSelButton)
 | 
			
		||||
    EVT_UPDATE_UI(ComboPage_DeleteSel, ComboboxWidgetsPage::OnUpdateUIDeleteSelButton)
 | 
			
		||||
 | 
			
		||||
    EVT_COMBOBOX(ComboPage_Combo, ComboboxWidgetsPage::OnComboBox)
 | 
			
		||||
    EVT_TEXT(ComboPage_Combo, ComboboxWidgetsPage::OnComboText)
 | 
			
		||||
 | 
			
		||||
    EVT_CHECKBOX(-1, ComboboxWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
    EVT_RADIOBOX(-1, ComboboxWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
END_EVENT_TABLE()
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_WIDGETS_PAGE(ComboboxWidgetsPage, _T("Combobox"));
 | 
			
		||||
 | 
			
		||||
ComboboxWidgetsPage::ComboboxWidgetsPage(wxNotebook *notebook,
 | 
			
		||||
                                       wxImageList *imaglist)
 | 
			
		||||
                  : WidgetsPage(notebook)
 | 
			
		||||
{
 | 
			
		||||
    imaglist->Add(wxBitmap(combobox_xpm));
 | 
			
		||||
 | 
			
		||||
    // init everything
 | 
			
		||||
    m_chkSort =
 | 
			
		||||
    m_chkReadonly = (wxCheckBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_combobox = (wxComboBox *)NULL;
 | 
			
		||||
    m_sizerCombo = (wxSizer *)NULL;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
       What we create here is a frame having 3 panes: style pane is the
 | 
			
		||||
       leftmost one, in the middle the pane with buttons allowing to perform
 | 
			
		||||
       miscellaneous combobox operations and the pane containing the combobox
 | 
			
		||||
       itself to the right
 | 
			
		||||
    */
 | 
			
		||||
    wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
 | 
			
		||||
    // left pane
 | 
			
		||||
    wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set style"));
 | 
			
		||||
 | 
			
		||||
    // should be in sync with ComboKind_XXX values
 | 
			
		||||
    static const wxString kinds[] =
 | 
			
		||||
    {
 | 
			
		||||
        _T("default"),
 | 
			
		||||
        _T("simple"),
 | 
			
		||||
        _T("drop down"),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    m_radioKind = new wxRadioBox(this, -1, _T("Combobox &kind:"),
 | 
			
		||||
                                 wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                 WXSIZEOF(kinds), kinds,
 | 
			
		||||
                                 1, wxRA_SPECIFY_COLS);
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    m_chkSort = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Sort items"));
 | 
			
		||||
    m_chkReadonly = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Read only"));
 | 
			
		||||
 | 
			
		||||
    sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
 | 
			
		||||
    sizerLeft->Add(m_radioKind, 0, wxGROW | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    wxButton *btn = new wxButton(this, ComboPage_Reset, _T("&Reset"));
 | 
			
		||||
    sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
 | 
			
		||||
 | 
			
		||||
    // middle pane
 | 
			
		||||
    wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Change combobox contents"));
 | 
			
		||||
    wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerRow;
 | 
			
		||||
 | 
			
		||||
    wxTextCtrl *text;
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndLabel(_T("Current selection"),
 | 
			
		||||
                                           ComboPage_CurText,
 | 
			
		||||
                                           &text);
 | 
			
		||||
    text->SetEditable(FALSE);
 | 
			
		||||
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(ComboPage_Add,
 | 
			
		||||
                                            _T("&Add this string"),
 | 
			
		||||
                                            ComboPage_AddText,
 | 
			
		||||
                                            &m_textAdd);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, ComboPage_AddSeveral, _T("&Insert a few strings"));
 | 
			
		||||
    sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, ComboPage_AddMany, _T("Add &many strings"));
 | 
			
		||||
    sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(ComboPage_Change,
 | 
			
		||||
                                            _T("C&hange current"),
 | 
			
		||||
                                            ComboPage_ChangeText,
 | 
			
		||||
                                            &m_textChange);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(ComboPage_Delete,
 | 
			
		||||
                                            _T("&Delete this item"),
 | 
			
		||||
                                            ComboPage_DeleteText,
 | 
			
		||||
                                            &m_textDelete);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, ComboPage_DeleteSel, _T("Delete &selection"));
 | 
			
		||||
    sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, ComboPage_Clear, _T("&Clear"));
 | 
			
		||||
    sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    // right pane
 | 
			
		||||
    wxSizer *sizerRight = new wxBoxSizer(wxVERTICAL);
 | 
			
		||||
    m_combobox = new wxComboBox(this, ComboPage_Combo, _T(""),
 | 
			
		||||
                                wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                0, NULL,
 | 
			
		||||
                                0);
 | 
			
		||||
    sizerRight->Add(m_combobox, 1, wxGROW | wxALL, 5);
 | 
			
		||||
    sizerRight->SetMinSize(250, 0);
 | 
			
		||||
    m_sizerCombo = sizerRight; // save it to modify it later
 | 
			
		||||
 | 
			
		||||
    // the 3 panes panes compose the window
 | 
			
		||||
    sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
 | 
			
		||||
    sizerTop->Add(sizerMiddle, 1, wxGROW | wxALL, 10);
 | 
			
		||||
    sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
 | 
			
		||||
 | 
			
		||||
    // final initializations
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    SetAutoLayout(TRUE);
 | 
			
		||||
    SetSizer(sizerTop);
 | 
			
		||||
 | 
			
		||||
    sizerTop->Fit(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// operations
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::Reset()
 | 
			
		||||
{
 | 
			
		||||
    m_chkSort->SetValue(FALSE);
 | 
			
		||||
    m_chkReadonly->SetValue(FALSE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::CreateCombo()
 | 
			
		||||
{
 | 
			
		||||
    int flags = 0;
 | 
			
		||||
 | 
			
		||||
    if ( m_chkSort->GetValue() )
 | 
			
		||||
        flags |= wxCB_SORT;
 | 
			
		||||
    if ( m_chkReadonly->GetValue() )
 | 
			
		||||
        flags |= wxCB_READONLY;
 | 
			
		||||
 | 
			
		||||
    switch ( m_radioKind->GetSelection() )
 | 
			
		||||
    {
 | 
			
		||||
        default:
 | 
			
		||||
            wxFAIL_MSG( _T("unknown combo kind") );
 | 
			
		||||
            // fall through
 | 
			
		||||
 | 
			
		||||
        case ComboKind_Default:
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case ComboKind_Simple:
 | 
			
		||||
            flags |= wxCB_SIMPLE;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case ComboKind_DropDown:
 | 
			
		||||
            flags = wxCB_DROPDOWN;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    wxArrayString items;
 | 
			
		||||
    if ( m_combobox )
 | 
			
		||||
    {
 | 
			
		||||
        int count = m_combobox->GetCount();
 | 
			
		||||
        for ( int n = 0; n < count; n++ )
 | 
			
		||||
        {
 | 
			
		||||
            items.Add(m_combobox->GetString(n));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        m_sizerCombo->Remove(m_combobox);
 | 
			
		||||
        delete m_combobox;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_combobox = new wxComboBox(this, ComboPage_Combo, _T(""),
 | 
			
		||||
                                wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                0, NULL,
 | 
			
		||||
                                flags);
 | 
			
		||||
 | 
			
		||||
    size_t count = items.GetCount();
 | 
			
		||||
    for ( size_t n = 0; n < count; n++ )
 | 
			
		||||
    {
 | 
			
		||||
        m_combobox->Append(items[n]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_sizerCombo->Add(m_combobox, 1, wxGROW | wxALL, 5);
 | 
			
		||||
    m_sizerCombo->Layout();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event handlers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    CreateCombo();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnButtonChange(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    int sel = m_combobox->GetSelection();
 | 
			
		||||
    if ( sel != -1 )
 | 
			
		||||
    {
 | 
			
		||||
#ifndef __WXGTK__
 | 
			
		||||
        m_combobox->SetString(sel, m_textChange->GetValue());
 | 
			
		||||
#else
 | 
			
		||||
        wxLogMessage(_T("Not implemented in wxGTK"));
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnButtonDelete(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    unsigned long n;
 | 
			
		||||
    if ( !m_textDelete->GetValue().ToULong(&n) ||
 | 
			
		||||
            (n >= (unsigned)m_combobox->GetCount()) )
 | 
			
		||||
    {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_combobox->Delete(n);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnButtonDeleteSel(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    int sel = m_combobox->GetSelection();
 | 
			
		||||
    if ( sel != -1 )
 | 
			
		||||
    {
 | 
			
		||||
        m_combobox->Delete(sel);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnButtonClear(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    m_combobox->Clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnButtonAdd(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    static size_t s_item = 0;
 | 
			
		||||
 | 
			
		||||
    wxString s = m_textAdd->GetValue();
 | 
			
		||||
    if ( !m_textAdd->IsModified() )
 | 
			
		||||
    {
 | 
			
		||||
        // update the default string
 | 
			
		||||
        m_textAdd->SetValue(wxString::Format(_T("test item %u"), ++s_item));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_combobox->Append(s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnButtonAddMany(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    // "many" means 1000 here
 | 
			
		||||
    for ( size_t n = 0; n < 1000; n++ )
 | 
			
		||||
    {
 | 
			
		||||
        m_combobox->Append(wxString::Format(_T("item #%u"), n));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnButtonAddSeveral(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    m_combobox->Append(_T("First"));
 | 
			
		||||
    m_combobox->Append(_T("another one"));
 | 
			
		||||
    m_combobox->Append(_T("and the last (very very very very very very very very very very long) one"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnUpdateUICurText(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.SetText( wxString::Format(_T("%d"), m_combobox->GetSelection()) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( m_chkSort->GetValue() || m_chkReadonly->GetValue() );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnUpdateUIDeleteButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    unsigned long n;
 | 
			
		||||
    event.Enable(m_textDelete->GetValue().ToULong(&n) &&
 | 
			
		||||
                    (n < (unsigned)m_combobox->GetCount()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnUpdateUIDeleteSelButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable(m_combobox->GetSelection() != -1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnUpdateUIClearButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable(m_combobox->GetCount() != 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnUpdateUIAddSeveral(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable(!(m_combobox->GetWindowStyle() & wxCB_SORT));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnComboText(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    wxString s = event.GetString();
 | 
			
		||||
 | 
			
		||||
    wxASSERT_MSG( s == m_combobox->GetValue(),
 | 
			
		||||
                  _T("event and combobox values should be the same") );
 | 
			
		||||
 | 
			
		||||
    wxLogMessage(_T("Combobox text changed (now '%s')"), s.c_str());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnComboBox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    int sel = event.GetInt();
 | 
			
		||||
    m_textDelete->SetValue(wxString::Format(_T("%ld"), sel));
 | 
			
		||||
 | 
			
		||||
    wxLogMessage(_T("Combobox item %d selected"), sel);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ComboboxWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    CreateCombo();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										402
									
								
								samples/widgets/gauge.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										402
									
								
								samples/widgets/gauge.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,402 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Program:     wxWindows Widgets Sample
 | 
			
		||||
// Name:        gauge.cpp
 | 
			
		||||
// Purpose:     Part of the widgets sample showing wxGauge
 | 
			
		||||
// Author:      Vadim Zeitlin
 | 
			
		||||
// Created:     27.03.01
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vadim Zeitlin
 | 
			
		||||
// License:     wxWindows license
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// for compilers that support precompilation, includes "wx/wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// for all others, include the necessary headers
 | 
			
		||||
#ifndef WX_PRECOMP
 | 
			
		||||
    #include "wx/log.h"
 | 
			
		||||
    #include "wx/timer.h"
 | 
			
		||||
 | 
			
		||||
    #include "wx/button.h"
 | 
			
		||||
    #include "wx/checkbox.h"
 | 
			
		||||
    #include "wx/combobox.h"
 | 
			
		||||
    #include "wx/gauge.h"
 | 
			
		||||
    #include "wx/radiobox.h"
 | 
			
		||||
    #include "wx/statbox.h"
 | 
			
		||||
    #include "wx/textctrl.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/sizer.h"
 | 
			
		||||
 | 
			
		||||
#include "widgets.h"
 | 
			
		||||
 | 
			
		||||
#include "icons/gauge.xpm"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// constants
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// control ids
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    GaugePage_Reset = 100,
 | 
			
		||||
    GaugePage_Progress,
 | 
			
		||||
    GaugePage_Clear,
 | 
			
		||||
    GaugePage_SetValue,
 | 
			
		||||
    GaugePage_SetRange,
 | 
			
		||||
    GaugePage_CurValueText,
 | 
			
		||||
    GaugePage_ValueText,
 | 
			
		||||
    GaugePage_RangeText,
 | 
			
		||||
    GaugePage_Timer,
 | 
			
		||||
    GaugePage_Gauge
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// GaugeWidgetsPage
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class GaugeWidgetsPage : public WidgetsPage
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    GaugeWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
 | 
			
		||||
    virtual ~GaugeWidgetsPage();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // event handlers
 | 
			
		||||
    void OnButtonReset(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonProgress(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonClear(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonSetValue(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonSetRange(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnCheckOrRadioBox(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIValueButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIRangeButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIResetButton(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUICurValueText(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnProgressTimer(wxTimerEvent& event);
 | 
			
		||||
 | 
			
		||||
    // reset the gauge parameters
 | 
			
		||||
    void Reset();
 | 
			
		||||
 | 
			
		||||
    // (re)create the gauge
 | 
			
		||||
    void CreateGauge();
 | 
			
		||||
 | 
			
		||||
    // stop the progress timer
 | 
			
		||||
    void StopTimer();
 | 
			
		||||
 | 
			
		||||
    // the gauge range
 | 
			
		||||
    unsigned long m_range;
 | 
			
		||||
 | 
			
		||||
    // the controls
 | 
			
		||||
    // ------------
 | 
			
		||||
 | 
			
		||||
    // the checkboxes for styles
 | 
			
		||||
    wxCheckBox *m_chkVert,
 | 
			
		||||
               *m_chkSmooth;
 | 
			
		||||
 | 
			
		||||
    // the gauge itself and the sizer it is in
 | 
			
		||||
    wxGauge *m_gauge;
 | 
			
		||||
    wxSizer *m_sizerGauge;
 | 
			
		||||
 | 
			
		||||
    // the text entries for set value/range
 | 
			
		||||
    wxTextCtrl *m_textValue,
 | 
			
		||||
               *m_textRange;
 | 
			
		||||
 | 
			
		||||
    // the timer for simulating gauge progress
 | 
			
		||||
    wxTimer *m_timer;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_EVENT_TABLE();
 | 
			
		||||
    DECLARE_WIDGETS_PAGE(GaugeWidgetsPage);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event tables
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
BEGIN_EVENT_TABLE(GaugeWidgetsPage, WidgetsPage)
 | 
			
		||||
    EVT_BUTTON(GaugePage_Reset, GaugeWidgetsPage::OnButtonReset)
 | 
			
		||||
    EVT_BUTTON(GaugePage_Progress, GaugeWidgetsPage::OnButtonProgress)
 | 
			
		||||
    EVT_BUTTON(GaugePage_Clear, GaugeWidgetsPage::OnButtonClear)
 | 
			
		||||
    EVT_BUTTON(GaugePage_SetValue, GaugeWidgetsPage::OnButtonSetValue)
 | 
			
		||||
    EVT_BUTTON(GaugePage_SetRange, GaugeWidgetsPage::OnButtonSetRange)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(GaugePage_SetValue, GaugeWidgetsPage::OnUpdateUIValueButton)
 | 
			
		||||
    EVT_UPDATE_UI(GaugePage_SetRange, GaugeWidgetsPage::OnUpdateUIRangeButton)
 | 
			
		||||
    EVT_UPDATE_UI(GaugePage_Reset, GaugeWidgetsPage::OnUpdateUIResetButton)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(GaugePage_CurValueText, GaugeWidgetsPage::OnUpdateUICurValueText)
 | 
			
		||||
 | 
			
		||||
    EVT_CHECKBOX(-1, GaugeWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
    EVT_RADIOBOX(-1, GaugeWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
 | 
			
		||||
    EVT_TIMER(GaugePage_Timer, GaugeWidgetsPage::OnProgressTimer)
 | 
			
		||||
END_EVENT_TABLE()
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_WIDGETS_PAGE(GaugeWidgetsPage, _T("Gauge"));
 | 
			
		||||
 | 
			
		||||
GaugeWidgetsPage::GaugeWidgetsPage(wxNotebook *notebook,
 | 
			
		||||
                                       wxImageList *imaglist)
 | 
			
		||||
                  : WidgetsPage(notebook)
 | 
			
		||||
{
 | 
			
		||||
    imaglist->Add(wxBitmap(gauge_xpm));
 | 
			
		||||
 | 
			
		||||
    // init everything
 | 
			
		||||
    m_range = 100;
 | 
			
		||||
 | 
			
		||||
    m_timer = (wxTimer *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_chkVert =
 | 
			
		||||
    m_chkSmooth = (wxCheckBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_gauge = (wxGauge *)NULL;
 | 
			
		||||
    m_sizerGauge = (wxSizer *)NULL;
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
 | 
			
		||||
    // left pane
 | 
			
		||||
    wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set style"));
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    m_chkVert = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Vertical"));
 | 
			
		||||
    m_chkSmooth = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Smooth"));
 | 
			
		||||
 | 
			
		||||
    sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
 | 
			
		||||
 | 
			
		||||
    wxButton *btn = new wxButton(this, GaugePage_Reset, _T("&Reset"));
 | 
			
		||||
    sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
 | 
			
		||||
 | 
			
		||||
    // middle pane
 | 
			
		||||
    wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Change gauge value"));
 | 
			
		||||
    wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    wxTextCtrl *text;
 | 
			
		||||
    wxSizer *sizerRow = CreateSizerWithTextAndLabel(_T("Current value"),
 | 
			
		||||
                                                    GaugePage_CurValueText,
 | 
			
		||||
                                                    &text);
 | 
			
		||||
    text->SetEditable(FALSE);
 | 
			
		||||
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(GaugePage_SetValue,
 | 
			
		||||
                                            _T("Set &value"),
 | 
			
		||||
                                            GaugePage_ValueText,
 | 
			
		||||
                                            &m_textValue);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(GaugePage_SetRange,
 | 
			
		||||
                                            _T("Set &range"),
 | 
			
		||||
                                            GaugePage_RangeText,
 | 
			
		||||
                                            &m_textRange);
 | 
			
		||||
    m_textRange->SetValue(wxString::Format(_T("%lu"), m_range));
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, GaugePage_Progress, _T("Simulate &progress"));
 | 
			
		||||
    sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, GaugePage_Clear, _T("&Clear"));
 | 
			
		||||
    sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    // right pane
 | 
			
		||||
    wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    m_gauge = new wxGauge(this, GaugePage_Gauge, m_range);
 | 
			
		||||
    sizerRight->Add(m_gauge, 1, wxCENTRE | wxALL, 5);
 | 
			
		||||
    sizerRight->SetMinSize(250, 0);
 | 
			
		||||
    m_sizerGauge = sizerRight; // save it to modify it later
 | 
			
		||||
 | 
			
		||||
    // the 3 panes panes compose the window
 | 
			
		||||
    sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
 | 
			
		||||
    sizerTop->Add(sizerMiddle, 1, wxGROW | wxALL, 10);
 | 
			
		||||
    sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
 | 
			
		||||
 | 
			
		||||
    // final initializations
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    SetAutoLayout(TRUE);
 | 
			
		||||
    SetSizer(sizerTop);
 | 
			
		||||
 | 
			
		||||
    sizerTop->Fit(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
GaugeWidgetsPage::~GaugeWidgetsPage()
 | 
			
		||||
{
 | 
			
		||||
    delete m_timer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// operations
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::Reset()
 | 
			
		||||
{
 | 
			
		||||
    m_chkVert->SetValue(FALSE);
 | 
			
		||||
    m_chkSmooth->SetValue(FALSE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::CreateGauge()
 | 
			
		||||
{
 | 
			
		||||
    int flags = 0;
 | 
			
		||||
 | 
			
		||||
    if ( m_chkVert->GetValue() )
 | 
			
		||||
        flags |= wxGA_VERTICAL;
 | 
			
		||||
    else
 | 
			
		||||
        flags |= wxGA_HORIZONTAL;
 | 
			
		||||
 | 
			
		||||
    if ( m_chkSmooth->GetValue() )
 | 
			
		||||
        flags |= wxGA_SMOOTH;
 | 
			
		||||
 | 
			
		||||
    int val = 0;
 | 
			
		||||
    if ( m_gauge )
 | 
			
		||||
    {
 | 
			
		||||
        val = m_gauge->GetValue();
 | 
			
		||||
 | 
			
		||||
        m_sizerGauge->Remove(m_gauge);
 | 
			
		||||
        delete m_gauge;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_gauge = new wxGauge(this, GaugePage_Gauge, m_range,
 | 
			
		||||
                          wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                          flags);
 | 
			
		||||
    m_gauge->SetValue(val);
 | 
			
		||||
 | 
			
		||||
    if ( flags & wxGA_VERTICAL )
 | 
			
		||||
        m_sizerGauge->Add(m_gauge, 0, wxGROW | wxALL, 5);
 | 
			
		||||
    else
 | 
			
		||||
        m_sizerGauge->Add(m_gauge, 1, wxCENTRE | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    m_sizerGauge->Layout();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event handlers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    CreateGauge();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::OnButtonProgress(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    if ( !m_timer )
 | 
			
		||||
    {
 | 
			
		||||
        static const int INTERVAL = 300;
 | 
			
		||||
 | 
			
		||||
        wxLogMessage(_T("Launched progress timer (interval = %d ms)"), INTERVAL);
 | 
			
		||||
 | 
			
		||||
        m_timer = new wxTimer(this, GaugePage_Timer);
 | 
			
		||||
        m_timer->Start(INTERVAL);
 | 
			
		||||
 | 
			
		||||
        wxButton *btn = (wxButton *)event.GetEventObject();
 | 
			
		||||
        btn->SetLabel(_T("&Stop timer"));
 | 
			
		||||
    }
 | 
			
		||||
    else // stop the running timer
 | 
			
		||||
    {
 | 
			
		||||
        StopTimer();
 | 
			
		||||
 | 
			
		||||
        wxLogMessage(_T("Stopped the timer."));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::OnButtonClear(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    m_gauge->SetValue(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::OnButtonSetRange(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    unsigned long val;
 | 
			
		||||
    if ( !m_textRange->GetValue().ToULong(&val) )
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    m_gauge->SetRange(val);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::OnButtonSetValue(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    unsigned long val;
 | 
			
		||||
    if ( !m_textValue->GetValue().ToULong(&val) )
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    m_gauge->SetValue(val);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::OnUpdateUIValueButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    unsigned long val;
 | 
			
		||||
    event.Enable( m_textValue->GetValue().ToULong(&val) && (val <= m_range) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::OnUpdateUIRangeButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    unsigned long val;
 | 
			
		||||
    event.Enable( m_textRange->GetValue().ToULong(&val) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( m_chkVert->GetValue() || m_chkSmooth->GetValue() );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    CreateGauge();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::OnProgressTimer(wxTimerEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    int val = m_gauge->GetValue();
 | 
			
		||||
    if ( (unsigned)val < m_range )
 | 
			
		||||
    {
 | 
			
		||||
        m_gauge->SetValue(val + 1);
 | 
			
		||||
    }
 | 
			
		||||
    else // reached the end
 | 
			
		||||
    {
 | 
			
		||||
        StopTimer();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::OnUpdateUICurValueText(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.SetText( wxString::Format(_T("%d"), m_gauge->GetValue()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GaugeWidgetsPage::StopTimer()
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_RET( m_timer, _T("shouldn't be called") );
 | 
			
		||||
 | 
			
		||||
    m_timer->Stop();
 | 
			
		||||
    delete m_timer;
 | 
			
		||||
    m_timer = NULL;
 | 
			
		||||
 | 
			
		||||
    wxButton *btn = (wxButton *)FindWindow(GaugePage_Progress);
 | 
			
		||||
    wxCHECK_RET( btn, _T("no progress button?") );
 | 
			
		||||
 | 
			
		||||
    btn->SetLabel(_T("Simulate &progress"));
 | 
			
		||||
 | 
			
		||||
    wxLogMessage(_T("Progress finished."));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								samples/widgets/icons/.cvsignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								samples/widgets/icons/.cvsignore
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
*.bmp
 | 
			
		||||
							
								
								
									
										37
									
								
								samples/widgets/icons/bmpbtn.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								samples/widgets/icons/bmpbtn.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *magick[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"16 15 16 1",
 | 
			
		||||
"  c Gray0",
 | 
			
		||||
". c #808000",
 | 
			
		||||
"X c #000080",
 | 
			
		||||
"o c #808080",
 | 
			
		||||
"O c #000000",
 | 
			
		||||
"+ c #808000",
 | 
			
		||||
"@ c #000080",
 | 
			
		||||
"# c #808080",
 | 
			
		||||
"$ c #c0c0c0",
 | 
			
		||||
"% c Red",
 | 
			
		||||
"& c Green",
 | 
			
		||||
"* c Yellow",
 | 
			
		||||
"= c Blue",
 | 
			
		||||
"- c Magenta",
 | 
			
		||||
"; c Cyan",
 | 
			
		||||
": c Gray100",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"                ",
 | 
			
		||||
" $$$$$$$$$$$$$$ ",
 | 
			
		||||
" $$$# #$$$#  #$ ",
 | 
			
		||||
" $$$ $ $$$ $$ $ ",
 | 
			
		||||
" $#  $ $$$ $$ $ ",
 | 
			
		||||
" $ $ $   $#  #$ ",
 | 
			
		||||
" $ $ $  $ $$$$$ ",
 | 
			
		||||
" $# $$  $ $$$$$ ",
 | 
			
		||||
"     $ $        ",
 | 
			
		||||
" $$$ $$ $$$$$$$ ",
 | 
			
		||||
" $$$ $ $$  $  $ ",
 | 
			
		||||
" $$$ $ $ $$ $$$ ",
 | 
			
		||||
" $$    $    $$$ ",
 | 
			
		||||
" $    $$$$$$$$$ ",
 | 
			
		||||
"                "
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								samples/widgets/icons/button.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/widgets/icons/button.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *button_xpm[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"32 32 16 1",
 | 
			
		||||
"  c Gray0",
 | 
			
		||||
". c #808000",
 | 
			
		||||
"X c #000080",
 | 
			
		||||
"o c #808080",
 | 
			
		||||
"O c #000000",
 | 
			
		||||
"+ c #808000",
 | 
			
		||||
"@ c #000080",
 | 
			
		||||
"# c #c0c0c0",
 | 
			
		||||
"$ c #808080",
 | 
			
		||||
"% c Red",
 | 
			
		||||
"& c Green",
 | 
			
		||||
"* c Yellow",
 | 
			
		||||
"= c Blue",
 | 
			
		||||
"- c Magenta",
 | 
			
		||||
"; c Cyan",
 | 
			
		||||
": c Gray100",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"#####                      #####",
 | 
			
		||||
"#### :::::::::::::::::::::: ####",
 | 
			
		||||
"### :::::::::::::::::::::::$ ###",
 | 
			
		||||
"## ::######################$$ ##",
 | 
			
		||||
"## ::######################$$ ##",
 | 
			
		||||
"## ::######################$$ ##",
 | 
			
		||||
"## ::######################$$ ##",
 | 
			
		||||
"## ::######################$$ ##",
 | 
			
		||||
"## ::######################$$ ##",
 | 
			
		||||
"## ::######################$$ ##",
 | 
			
		||||
"## ::######################$$ ##",
 | 
			
		||||
"## ::######################$$ ##",
 | 
			
		||||
"## ::######################$$ ##",
 | 
			
		||||
"## ::######################$$ ##",
 | 
			
		||||
"## ::######################$$ ##",
 | 
			
		||||
"## ::######################$$ ##",
 | 
			
		||||
"### $$$$$$$$$$$$$$$$$$$$$$$$ ###",
 | 
			
		||||
"#### $$$$$$$$$$$$$$$$$$$$$$ ####",
 | 
			
		||||
"#####                      #####",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								samples/widgets/icons/checkbox.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/widgets/icons/checkbox.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *checkbox_xpm[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"32 32 16 1",
 | 
			
		||||
"  c Gray0",
 | 
			
		||||
". c #808000",
 | 
			
		||||
"X c #000080",
 | 
			
		||||
"o c #808080",
 | 
			
		||||
"O c #000000",
 | 
			
		||||
"+ c #808000",
 | 
			
		||||
"@ c #000080",
 | 
			
		||||
"# c #c0c0c0",
 | 
			
		||||
"$ c #808080",
 | 
			
		||||
"% c Red",
 | 
			
		||||
"& c Green",
 | 
			
		||||
"* c Yellow",
 | 
			
		||||
"= c Blue",
 | 
			
		||||
"- c Magenta",
 | 
			
		||||
"; c Cyan",
 | 
			
		||||
": c Gray100",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"#####$$$$$$$$$$$$$$$$$$$$$$#####",
 | 
			
		||||
"####$                     #:####",
 | 
			
		||||
"####$ ::::::::::::::::::::#:####",
 | 
			
		||||
"####$ ::::::::::::::::::::#:####",
 | 
			
		||||
"####$ ::::::::::::::::::::#:####",
 | 
			
		||||
"####$ :::  ::::::::::  :::#:####",
 | 
			
		||||
"####$ :::   ::::::::   :::#:####",
 | 
			
		||||
"####$ ::::   ::::::   ::::#:####",
 | 
			
		||||
"####$ :::::   ::::   :::::#:####",
 | 
			
		||||
"####$ ::::::   ::   ::::::#:####",
 | 
			
		||||
"####$ :::::::      :::::::#:####",
 | 
			
		||||
"####$ ::::::::    ::::::::#:####",
 | 
			
		||||
"####$ ::::::::    ::::::::#:####",
 | 
			
		||||
"####$ :::::::      :::::::#:####",
 | 
			
		||||
"####$ ::::::   ::   ::::::#:####",
 | 
			
		||||
"####$ :::::   ::::   :::::#:####",
 | 
			
		||||
"####$ ::::   ::::::   ::::#:####",
 | 
			
		||||
"####$ :::   ::::::::   :::#:####",
 | 
			
		||||
"####$ :::  ::::::::::  :::#:####",
 | 
			
		||||
"####$ ::::::::::::::::::::#:####",
 | 
			
		||||
"####$ ::::::::::::::::::::#:####",
 | 
			
		||||
"####$ ::::::::::::::::::::#:####",
 | 
			
		||||
"####$ #####################:####",
 | 
			
		||||
"#####::::::::::::::::::::::#####",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								samples/widgets/icons/combobox.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/widgets/icons/combobox.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *combobox_xpm[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"32 32 16 1",
 | 
			
		||||
"  c Gray0",
 | 
			
		||||
". c #808000",
 | 
			
		||||
"X c #000080",
 | 
			
		||||
"o c #808080",
 | 
			
		||||
"O c #000000",
 | 
			
		||||
"+ c #808000",
 | 
			
		||||
"@ c #000080",
 | 
			
		||||
"# c #c0c0c0",
 | 
			
		||||
"$ c #808080",
 | 
			
		||||
"% c Red",
 | 
			
		||||
"& c Green",
 | 
			
		||||
"* c Yellow",
 | 
			
		||||
"= c Blue",
 | 
			
		||||
"- c Magenta",
 | 
			
		||||
"; c Cyan",
 | 
			
		||||
": c Gray100",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"##                            ##",
 | 
			
		||||
"## ################           ##",
 | 
			
		||||
"## ################   #####   ##",
 | 
			
		||||
"## ################    ###    ##",
 | 
			
		||||
"## ################     #     ##",
 | 
			
		||||
"## ################           ##",
 | 
			
		||||
"##                            ##",
 | 
			
		||||
"#### ############## ######### ##",
 | 
			
		||||
"#### ############## ######### ##",
 | 
			
		||||
"#### ############## #### #### ##",
 | 
			
		||||
"#### ############## ###   ### ##",
 | 
			
		||||
"#### ##       ##### ##     ## ##",
 | 
			
		||||
"#### ############## ######### ##",
 | 
			
		||||
"#### ##        #### ######### ##",
 | 
			
		||||
"#### ############## ######### ##",
 | 
			
		||||
"#### ##         ###           ##",
 | 
			
		||||
"#### ############## ######### ##",
 | 
			
		||||
"#### ##        #### ######### ##",
 | 
			
		||||
"#### ############## ######### ##",
 | 
			
		||||
"#### ##       ##### ##     ## ##",
 | 
			
		||||
"#### ############## ###   ### ##",
 | 
			
		||||
"#### ##        #### #### #### ##",
 | 
			
		||||
"#### ############## ######### ##",
 | 
			
		||||
"#### ############## ######### ##",
 | 
			
		||||
"#### ############## ######### ##",
 | 
			
		||||
"####                          ##",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								samples/widgets/icons/gauge.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/widgets/icons/gauge.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *gauge_xpm[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"32 32 16 1",
 | 
			
		||||
"  c Gray0",
 | 
			
		||||
". c #808000",
 | 
			
		||||
"X c #000080",
 | 
			
		||||
"o c #808080",
 | 
			
		||||
"O c #000000",
 | 
			
		||||
"+ c #808000",
 | 
			
		||||
"@ c #000080",
 | 
			
		||||
"# c #c0c0c0",
 | 
			
		||||
"$ c #808080",
 | 
			
		||||
"% c Red",
 | 
			
		||||
"& c Green",
 | 
			
		||||
"* c Yellow",
 | 
			
		||||
"= c Blue",
 | 
			
		||||
"- c Magenta",
 | 
			
		||||
"; c Cyan",
 | 
			
		||||
": c Gray100",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"##                            ##",
 | 
			
		||||
"## $$$$$$$$$$$$$$$$$::::::::: ##",
 | 
			
		||||
"## $$$$$$$$$$$$$$$$$::::::::: ##",
 | 
			
		||||
"## $$$$$$$$$$$$$$$$$::::::::: ##",
 | 
			
		||||
"## $$$$ $$$$$ $$$$$ :::: :::: ##",
 | 
			
		||||
"## $$$$ $$$$$ $$$$$ :::: :::: ##",
 | 
			
		||||
"## $$$$ $$$$$ $$$$$ :::: :::: ##",
 | 
			
		||||
"## $$$$ $$$$$ $$$$$ :::: :::: ##",
 | 
			
		||||
"## $$$$ $$$$$ $$$$$ :::: :::: ##",
 | 
			
		||||
"## $$$$ $$$$$ $$$$$ :::: :::: ##",
 | 
			
		||||
"## $$$$ $$$$$ $$$$$ :::: :::: ##",
 | 
			
		||||
"## $$$$ $$$$$ $$$$$ :::: :::: ##",
 | 
			
		||||
"## $$$$$$$$$$$$$$$$$::::::::: ##",
 | 
			
		||||
"## $$$$$$$$$$$$$$$$$::::::::: ##",
 | 
			
		||||
"## $$$$$$$$$$$$$$$$$::::::::: ##",
 | 
			
		||||
"##                            ##",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								samples/widgets/icons/listbox.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/widgets/icons/listbox.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *listbox_xpm[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"32 32 16 1",
 | 
			
		||||
"  c Gray0",
 | 
			
		||||
". c #808000",
 | 
			
		||||
"X c #000080",
 | 
			
		||||
"o c #808080",
 | 
			
		||||
"O c #000000",
 | 
			
		||||
"+ c #808000",
 | 
			
		||||
"@ c #000080",
 | 
			
		||||
"# c #c0c0c0",
 | 
			
		||||
"$ c #808080",
 | 
			
		||||
"% c Red",
 | 
			
		||||
"& c Green",
 | 
			
		||||
"* c Yellow",
 | 
			
		||||
"= c Blue",
 | 
			
		||||
"- c Magenta",
 | 
			
		||||
"; c Cyan",
 | 
			
		||||
": c Gray100",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"###                          ###",
 | 
			
		||||
"### ############## ######### ###",
 | 
			
		||||
"### ############## ######### ###",
 | 
			
		||||
"### ############## #### #### ###",
 | 
			
		||||
"### ############## ###   ### ###",
 | 
			
		||||
"### ##       ##### ##     ## ###",
 | 
			
		||||
"### ############## ######### ###",
 | 
			
		||||
"### ##        #### ######### ###",
 | 
			
		||||
"### ############## ######### ###",
 | 
			
		||||
"### ##         ###           ###",
 | 
			
		||||
"### ############## ######### ###",
 | 
			
		||||
"### ##        #### ######### ###",
 | 
			
		||||
"### ############## ######### ###",
 | 
			
		||||
"### ##       ##### ##     ## ###",
 | 
			
		||||
"### ############## ###   ### ###",
 | 
			
		||||
"### ##        #### #### #### ###",
 | 
			
		||||
"### ############## ######### ###",
 | 
			
		||||
"### ############## ######### ###",
 | 
			
		||||
"### ############## ######### ###",
 | 
			
		||||
"###                          ###",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								samples/widgets/icons/notebook.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/widgets/icons/notebook.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *notebook_xpm[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"32 32 16 1",
 | 
			
		||||
"  c Gray0",
 | 
			
		||||
". c #808000",
 | 
			
		||||
"X c #000080",
 | 
			
		||||
"o c #808080",
 | 
			
		||||
"O c #000000",
 | 
			
		||||
"+ c #808000",
 | 
			
		||||
"@ c #000080",
 | 
			
		||||
"# c #c0c0c0",
 | 
			
		||||
"$ c #808080",
 | 
			
		||||
"% c Red",
 | 
			
		||||
"& c Green",
 | 
			
		||||
"* c Yellow",
 | 
			
		||||
"= c Blue",
 | 
			
		||||
"- c Magenta",
 | 
			
		||||
"; c Cyan",
 | 
			
		||||
": c Gray100",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"###        #        #        ###",
 | 
			
		||||
"## :::::::$ :::::::$ :::::::$ ##",
 | 
			
		||||
"## :######$ :######$ :######$ ##",
 | 
			
		||||
"## :######$ :######$ :######$ ##",
 | 
			
		||||
"## :######$                   ##",
 | 
			
		||||
"## :########################$ ##",
 | 
			
		||||
"## :########################$ ##",
 | 
			
		||||
"## :########################$ ##",
 | 
			
		||||
"## :########################$ ##",
 | 
			
		||||
"## :########################$ ##",
 | 
			
		||||
"## :########################$ ##",
 | 
			
		||||
"## :########################$ ##",
 | 
			
		||||
"## :########################$ ##",
 | 
			
		||||
"## :########################$ ##",
 | 
			
		||||
"## :########################$ ##",
 | 
			
		||||
"## :########################$ ##",
 | 
			
		||||
"## :########################$ ##",
 | 
			
		||||
"## :########################$ ##",
 | 
			
		||||
"## $$$$$$$$$$$$$$$$$$$$$$$$$$ ##",
 | 
			
		||||
"##                            ##",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								samples/widgets/icons/radiobox.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/widgets/icons/radiobox.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *radio_xpm[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"32 32 16 1",
 | 
			
		||||
"  c Gray0",
 | 
			
		||||
". c #808000",
 | 
			
		||||
"X c #000080",
 | 
			
		||||
"o c #808080",
 | 
			
		||||
"O c #000000",
 | 
			
		||||
"+ c #808000",
 | 
			
		||||
"@ c #000080",
 | 
			
		||||
"# c #c0c0c0",
 | 
			
		||||
"$ c #808080",
 | 
			
		||||
"% c Red",
 | 
			
		||||
"& c Green",
 | 
			
		||||
"* c Yellow",
 | 
			
		||||
"= c Blue",
 | 
			
		||||
"- c Magenta",
 | 
			
		||||
"; c Cyan",
 | 
			
		||||
": c Gray100",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"###########$$$$$$$$$#:##########",
 | 
			
		||||
"#########$$$       $$#:#########",
 | 
			
		||||
"########$$  $::::::  $::########",
 | 
			
		||||
"#######$$ :::::::::::#$::#######",
 | 
			
		||||
"######$$ :::::::::::::#$::######",
 | 
			
		||||
"#####$$ :::::::::::::::#$::#####",
 | 
			
		||||
"####$$ ::::::#####::::::#$:#####",
 | 
			
		||||
"####$ $:::::$     $#:::::$#:####",
 | 
			
		||||
"###$$ :::::$       $#::::$#:####",
 | 
			
		||||
"###$ :::::$         $:::::$:####",
 | 
			
		||||
"###$ :::::           #::::$:####",
 | 
			
		||||
"###$ :::::           #::::$:####",
 | 
			
		||||
"###$ :::::           #::::$:####",
 | 
			
		||||
"###$ :::::           #::::$:####",
 | 
			
		||||
"###$ :::::           #::::$:####",
 | 
			
		||||
"###$ :::::$         $:::::$:####",
 | 
			
		||||
"###$$ :::::$       $#::::$#:####",
 | 
			
		||||
"####$ ::::::$     $#:::::$#:####",
 | 
			
		||||
"####$$#::::::#####::::::$#:#####",
 | 
			
		||||
"####:$$#:::::::::::::::$#:######",
 | 
			
		||||
"#####:$$$:::::::::::::$#:#######",
 | 
			
		||||
"######:$$$:::::::::::$#:########",
 | 
			
		||||
"#######::$$$::::::$$$::#########",
 | 
			
		||||
"#########:$$$$$$$$$::###########",
 | 
			
		||||
"###########::::::::#############",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								samples/widgets/icons/scrolbar.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/widgets/icons/scrolbar.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *magick[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"32 32 16 1",
 | 
			
		||||
"  c Gray0",
 | 
			
		||||
". c #808000",
 | 
			
		||||
"X c #000080",
 | 
			
		||||
"o c #808080",
 | 
			
		||||
"O c #000000",
 | 
			
		||||
"+ c #808000",
 | 
			
		||||
"@ c #000080",
 | 
			
		||||
"# c #c0c0c0",
 | 
			
		||||
"$ c #808080",
 | 
			
		||||
"% c Red",
 | 
			
		||||
"& c Green",
 | 
			
		||||
"* c Yellow",
 | 
			
		||||
"= c Blue",
 | 
			
		||||
"- c Magenta",
 | 
			
		||||
"; c Cyan",
 | 
			
		||||
": c Gray100",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"##                           ###",
 | 
			
		||||
"## ############ ############ ###",
 | 
			
		||||
"## ############ ############ ###",
 | 
			
		||||
"## ############ ############ ###",
 | 
			
		||||
"## ####### #### #### ####### ###",
 | 
			
		||||
"## ######  #### ####  ###### ###",
 | 
			
		||||
"## #####   #### ####   ##### ###",
 | 
			
		||||
"## ####    #### ####    #### ###",
 | 
			
		||||
"## ###     #### ####     ### ###",
 | 
			
		||||
"## ####    #### ####    #### ###",
 | 
			
		||||
"## #####   #### ####   ##### ###",
 | 
			
		||||
"## ######  #### ####  ###### ###",
 | 
			
		||||
"## ####### #### #### ####### ###",
 | 
			
		||||
"## ############ ############ ###",
 | 
			
		||||
"## ############ ############ ###",
 | 
			
		||||
"## ############ ############ ###",
 | 
			
		||||
"##                           ###",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								samples/widgets/icons/slider.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/widgets/icons/slider.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *slider_xpm[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"32 32 16 1",
 | 
			
		||||
"  c Gray0",
 | 
			
		||||
". c #808000",
 | 
			
		||||
"X c #000080",
 | 
			
		||||
"o c #808080",
 | 
			
		||||
"O c #000000",
 | 
			
		||||
"+ c #808000",
 | 
			
		||||
"@ c #000080",
 | 
			
		||||
"# c #c0c0c0",
 | 
			
		||||
"$ c #808080",
 | 
			
		||||
"% c Red",
 | 
			
		||||
"& c Green",
 | 
			
		||||
"* c Yellow",
 | 
			
		||||
"= c Blue",
 | 
			
		||||
"- c Magenta",
 | 
			
		||||
"; c Cyan",
 | 
			
		||||
": c Gray100",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"#######      ###################",
 | 
			
		||||
"###### :::::$ ##################",
 | 
			
		||||
"###### :####$ ##################",
 | 
			
		||||
"###### :####$ ##################",
 | 
			
		||||
"###### :####$ ##################",
 | 
			
		||||
"###### :####$ ##################",
 | 
			
		||||
"###### :####$ ##################",
 | 
			
		||||
"##     :####$                 ##",
 | 
			
		||||
"## $$$ :####$ $$$$$$$$$$$$$$$ ##",
 | 
			
		||||
"## ### :####$ ############### ##",
 | 
			
		||||
"## ### :####$ ############### ##",
 | 
			
		||||
"## ### :####$ ############### ##",
 | 
			
		||||
"###### :####$ ##################",
 | 
			
		||||
"###### :####$ ##################",
 | 
			
		||||
"###### :$$$$$ ##################",
 | 
			
		||||
"#######      ###################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										40
									
								
								samples/widgets/icons/spinbtn.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								samples/widgets/icons/spinbtn.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *spinbtn_xpm[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"32 32 2 1",
 | 
			
		||||
"$ c None",
 | 
			
		||||
"  c Black",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
 | 
			
		||||
"$$                          $$$$",
 | 
			
		||||
"$$                          $$$$",
 | 
			
		||||
"$$  $$$$$$$$$$  $$$$$$$$$$  $$$$",
 | 
			
		||||
"$$  $$$$$$$$$$  $$$$$$$$$$  $$$$",
 | 
			
		||||
"$$  $$$$$$  $$  $$  $$$$$$  $$$$",
 | 
			
		||||
"$$  $$$$$$  $$  $$  $$$$$$  $$$$",
 | 
			
		||||
"$$  $$$$    $$  $$    $$$$  $$$$",
 | 
			
		||||
"$$  $$$$    $$  $$    $$$$  $$$$",
 | 
			
		||||
"$$  $$      $$  $$      $$  $$$$",
 | 
			
		||||
"$$  $$      $$  $$      $$  $$$$",
 | 
			
		||||
"$$  $$$$    $$  $$    $$$$  $$$$",
 | 
			
		||||
"$$  $$$$    $$  $$    $$$$  $$$$",
 | 
			
		||||
"$$  $$$$$$  $$  $$  $$$$$$  $$$$",
 | 
			
		||||
"$$  $$$$$$  $$  $$  $$$$$$  $$$$",
 | 
			
		||||
"$$  $$$$$$$$$$  $$$$$$$$$$  $$$$",
 | 
			
		||||
"$$  $$$$$$$$$$  $$$$$$$$$$  $$$$",
 | 
			
		||||
"$$                          $$$$",
 | 
			
		||||
"$$                          $$$$",
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$",
 | 
			
		||||
"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								samples/widgets/icons/statbox.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/widgets/icons/statbox.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *statbox_xpm[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"32 32 16 1",
 | 
			
		||||
"  c Gray0",
 | 
			
		||||
". c #808000",
 | 
			
		||||
"X c #000080",
 | 
			
		||||
"o c #808080",
 | 
			
		||||
"O c #000000",
 | 
			
		||||
"+ c #808000",
 | 
			
		||||
"@ c #000080",
 | 
			
		||||
"# c #c0c0c0",
 | 
			
		||||
"$ c #808080",
 | 
			
		||||
"% c Red",
 | 
			
		||||
"& c Green",
 | 
			
		||||
"* c Yellow",
 | 
			
		||||
"= c Blue",
 | 
			
		||||
"- c Magenta",
 | 
			
		||||
"; c Cyan",
 | 
			
		||||
": c Gray100",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"######## ### # ### #    ########",
 | 
			
		||||
"######## ### # ### #### ########",
 | 
			
		||||
"######### # ### # #### #########",
 | 
			
		||||
"##    #### ##### #### ####    ##",
 | 
			
		||||
"## ###### # #### ### ######## ##",
 | 
			
		||||
"## ##### ### ### ### ######## ##",
 | 
			
		||||
"## ##### ### ### ###    ##### ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"## ########################## ##",
 | 
			
		||||
"##                            ##",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								samples/widgets/icons/stattext.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/widgets/icons/stattext.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *stattext_xpm[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"32 32 16 1",
 | 
			
		||||
"  c Gray0",
 | 
			
		||||
". c #808000",
 | 
			
		||||
"X c #000080",
 | 
			
		||||
"o c #808080",
 | 
			
		||||
"O c #000000",
 | 
			
		||||
"+ c #808000",
 | 
			
		||||
"@ c #000080",
 | 
			
		||||
"# c #c0c0c0",
 | 
			
		||||
"$ c #808080",
 | 
			
		||||
"% c Red",
 | 
			
		||||
"& c Green",
 | 
			
		||||
"* c Yellow",
 | 
			
		||||
"= c Blue",
 | 
			
		||||
"- c Magenta",
 | 
			
		||||
"; c Cyan",
 | 
			
		||||
": c Gray100",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"############### ################",
 | 
			
		||||
"##############  ################",
 | 
			
		||||
"#############   ################",
 | 
			
		||||
"############    ################",
 | 
			
		||||
"###########$    ################",
 | 
			
		||||
"##########$ #   ################",
 | 
			
		||||
"########## ##   ########   #   #",
 | 
			
		||||
"#########  ##   ######   #    ##",
 | 
			
		||||
"########$ ###   ######  ###   ##",
 | 
			
		||||
"#######$ ####   #####  ####   ##",
 | 
			
		||||
"####### #####   ####   ###    ##",
 | 
			
		||||
"######$         ####   ###   ###",
 | 
			
		||||
"#####$ ######   ###   ####   ###",
 | 
			
		||||
"####$ #######   ###   ###    ###",
 | 
			
		||||
"#### ########   ###   ###   ####",
 | 
			
		||||
"###  ########   ###   ##    ####",
 | 
			
		||||
"##  #########    ##     #     ##",
 | 
			
		||||
"#     #####        #   ##    ###",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										54
									
								
								samples/widgets/icons/text.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/widgets/icons/text.xpm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
/* XPM */
 | 
			
		||||
static char *text_xpm[] = {
 | 
			
		||||
/* columns rows colors chars-per-pixel */
 | 
			
		||||
"32 32 16 1",
 | 
			
		||||
"  c Gray0",
 | 
			
		||||
". c #808000",
 | 
			
		||||
"X c #000080",
 | 
			
		||||
"o c #808080",
 | 
			
		||||
"O c #000000",
 | 
			
		||||
"+ c #808000",
 | 
			
		||||
"@ c #000080",
 | 
			
		||||
"# c #c0c0c0",
 | 
			
		||||
"$ c #808080",
 | 
			
		||||
"% c Red",
 | 
			
		||||
"& c Green",
 | 
			
		||||
"* c Yellow",
 | 
			
		||||
"= c Blue",
 | 
			
		||||
"- c Magenta",
 | 
			
		||||
"; c Cyan",
 | 
			
		||||
": c Gray100",
 | 
			
		||||
/* pixels */
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"############################ ###",
 | 
			
		||||
"############################ ###",
 | 
			
		||||
"###############   ########## ###",
 | 
			
		||||
"###############   ########## ###",
 | 
			
		||||
"###############   ########## ###",
 | 
			
		||||
"###############   ########## ###",
 | 
			
		||||
"###############   ########## ###",
 | 
			
		||||
"###############   ########## ###",
 | 
			
		||||
"####        ###         #### ###",
 | 
			
		||||
"###  #####   ##   ####   ### ###",
 | 
			
		||||
"###  #####   ##   ####   ### ###",
 | 
			
		||||
"######       ##   ####   ### ###",
 | 
			
		||||
"####         ##   ####   ### ###",
 | 
			
		||||
"###   ####   ##   ####   ### ###",
 | 
			
		||||
"###   ####   ##   ####   ### ###",
 | 
			
		||||
"###   ####   ##   ####   ### ###",
 | 
			
		||||
"###   ####   ##   ####   ### ###",
 | 
			
		||||
"###   ####   ##   ####   ### ###",
 | 
			
		||||
"###   ####   ##   ####   ### ###",
 | 
			
		||||
"####         ##         #### ###",
 | 
			
		||||
"############################ ###",
 | 
			
		||||
"############################ ###",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################",
 | 
			
		||||
"################################"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										512
									
								
								samples/widgets/listbox.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										512
									
								
								samples/widgets/listbox.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,512 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Program:     wxWindows Widgets Sample
 | 
			
		||||
// Name:        listbox.cpp
 | 
			
		||||
// Purpose:     Part of the widgets sample showing wxListbox
 | 
			
		||||
// Author:      Vadim Zeitlin
 | 
			
		||||
// Created:     27.03.01
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vadim Zeitlin
 | 
			
		||||
// License:     wxWindows license
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// for compilers that support precompilation, includes "wx/wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// for all others, include the necessary headers
 | 
			
		||||
#ifndef WX_PRECOMP
 | 
			
		||||
    #include "wx/log.h"
 | 
			
		||||
 | 
			
		||||
    #include "wx/button.h"
 | 
			
		||||
    #include "wx/checkbox.h"
 | 
			
		||||
    #include "wx/combobox.h"
 | 
			
		||||
    #include "wx/listbox.h"
 | 
			
		||||
    #include "wx/radiobox.h"
 | 
			
		||||
    #include "wx/statbox.h"
 | 
			
		||||
    #include "wx/textctrl.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/sizer.h"
 | 
			
		||||
 | 
			
		||||
#include "wx/checklst.h"
 | 
			
		||||
 | 
			
		||||
#include "widgets.h"
 | 
			
		||||
 | 
			
		||||
#include "icons/listbox.xpm"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// constants
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// control ids
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    ListboxPage_Reset = 100,
 | 
			
		||||
    ListboxPage_Add,
 | 
			
		||||
    ListboxPage_AddText,
 | 
			
		||||
    ListboxPage_AddSeveral,
 | 
			
		||||
    ListboxPage_AddMany,
 | 
			
		||||
    ListboxPage_Clear,
 | 
			
		||||
    ListboxPage_Change,
 | 
			
		||||
    ListboxPage_ChangeText,
 | 
			
		||||
    ListboxPage_Delete,
 | 
			
		||||
    ListboxPage_DeleteText,
 | 
			
		||||
    ListboxPage_DeleteSel,
 | 
			
		||||
    ListboxPage_Listbox
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// ListboxWidgetsPage
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class ListboxWidgetsPage : public WidgetsPage
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    ListboxWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // event handlers
 | 
			
		||||
    void OnButtonReset(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonChange(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonDelete(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonDeleteSel(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonClear(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonAdd(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonAddSeveral(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonAddMany(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnListbox(wxCommandEvent& event);
 | 
			
		||||
    void OnListboxDClick(wxCommandEvent& event);
 | 
			
		||||
    void OnCheckListbox(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnCheckOrRadioBox(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIAddSeveral(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIClearButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIDeleteButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIDeleteSelButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIResetButton(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    // reset the listbox parameters
 | 
			
		||||
    void Reset();
 | 
			
		||||
 | 
			
		||||
    // (re)create the listbox
 | 
			
		||||
    void CreateLbox();
 | 
			
		||||
 | 
			
		||||
    // listbox parameters
 | 
			
		||||
    // ------------------
 | 
			
		||||
 | 
			
		||||
    // the selection mode
 | 
			
		||||
    enum LboxSelection
 | 
			
		||||
    {
 | 
			
		||||
        LboxSel_Single,
 | 
			
		||||
        LboxSel_Extended,
 | 
			
		||||
        LboxSel_Multiple
 | 
			
		||||
    } m_lboxSelMode;
 | 
			
		||||
 | 
			
		||||
    // should it be sorted?
 | 
			
		||||
    bool m_sorted;
 | 
			
		||||
 | 
			
		||||
    // should it have horz scroll/vert scrollbar permanently shown?
 | 
			
		||||
    bool m_horzScroll,
 | 
			
		||||
         m_vertScrollAlways;
 | 
			
		||||
 | 
			
		||||
    // the controls
 | 
			
		||||
    // ------------
 | 
			
		||||
 | 
			
		||||
    // the sel mode radiobox
 | 
			
		||||
    wxRadioBox *m_radioSelMode;
 | 
			
		||||
 | 
			
		||||
    // the checkboxes
 | 
			
		||||
    wxCheckBox *m_chkSort,
 | 
			
		||||
               *m_chkCheck,
 | 
			
		||||
               *m_chkHScroll,
 | 
			
		||||
               *m_chkVScroll;
 | 
			
		||||
 | 
			
		||||
    // the listbox itself and the sizer it is in
 | 
			
		||||
    wxListBox *m_lbox;
 | 
			
		||||
    wxSizer *m_sizerLbox;
 | 
			
		||||
 | 
			
		||||
    // the text entries for "Add/change string" and "Delete" buttons
 | 
			
		||||
    wxTextCtrl *m_textAdd,
 | 
			
		||||
               *m_textChange,
 | 
			
		||||
               *m_textDelete;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_EVENT_TABLE();
 | 
			
		||||
    DECLARE_WIDGETS_PAGE(ListboxWidgetsPage);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event tables
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
BEGIN_EVENT_TABLE(ListboxWidgetsPage, WidgetsPage)
 | 
			
		||||
    EVT_BUTTON(ListboxPage_Reset, ListboxWidgetsPage::OnButtonReset)
 | 
			
		||||
    EVT_BUTTON(ListboxPage_Change, ListboxWidgetsPage::OnButtonChange)
 | 
			
		||||
    EVT_BUTTON(ListboxPage_Delete, ListboxWidgetsPage::OnButtonDelete)
 | 
			
		||||
    EVT_BUTTON(ListboxPage_DeleteSel, ListboxWidgetsPage::OnButtonDeleteSel)
 | 
			
		||||
    EVT_BUTTON(ListboxPage_Clear, ListboxWidgetsPage::OnButtonClear)
 | 
			
		||||
    EVT_BUTTON(ListboxPage_Add, ListboxWidgetsPage::OnButtonAdd)
 | 
			
		||||
    EVT_BUTTON(ListboxPage_AddSeveral, ListboxWidgetsPage::OnButtonAddSeveral)
 | 
			
		||||
    EVT_BUTTON(ListboxPage_AddMany, ListboxWidgetsPage::OnButtonAddMany)
 | 
			
		||||
 | 
			
		||||
    EVT_TEXT_ENTER(ListboxPage_AddText, ListboxWidgetsPage::OnButtonAdd)
 | 
			
		||||
    EVT_TEXT_ENTER(ListboxPage_DeleteText, ListboxWidgetsPage::OnButtonDelete)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(ListboxPage_Reset, ListboxWidgetsPage::OnUpdateUIResetButton)
 | 
			
		||||
    EVT_UPDATE_UI(ListboxPage_AddSeveral, ListboxWidgetsPage::OnUpdateUIAddSeveral)
 | 
			
		||||
    EVT_UPDATE_UI(ListboxPage_Clear, ListboxWidgetsPage::OnUpdateUIClearButton)
 | 
			
		||||
    EVT_UPDATE_UI(ListboxPage_DeleteText, ListboxWidgetsPage::OnUpdateUIClearButton)
 | 
			
		||||
    EVT_UPDATE_UI(ListboxPage_Delete, ListboxWidgetsPage::OnUpdateUIDeleteButton)
 | 
			
		||||
    EVT_UPDATE_UI(ListboxPage_Change, ListboxWidgetsPage::OnUpdateUIDeleteSelButton)
 | 
			
		||||
    EVT_UPDATE_UI(ListboxPage_ChangeText, ListboxWidgetsPage::OnUpdateUIDeleteSelButton)
 | 
			
		||||
    EVT_UPDATE_UI(ListboxPage_DeleteSel, ListboxWidgetsPage::OnUpdateUIDeleteSelButton)
 | 
			
		||||
 | 
			
		||||
    EVT_LISTBOX(ListboxPage_Listbox, ListboxWidgetsPage::OnListbox)
 | 
			
		||||
    EVT_LISTBOX_DCLICK(ListboxPage_Listbox, ListboxWidgetsPage::OnListboxDClick)
 | 
			
		||||
    EVT_CHECKLISTBOX(ListboxPage_Listbox, ListboxWidgetsPage::OnCheckListbox)
 | 
			
		||||
 | 
			
		||||
    EVT_CHECKBOX(-1, ListboxWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
    EVT_RADIOBOX(-1, ListboxWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
END_EVENT_TABLE()
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_WIDGETS_PAGE(ListboxWidgetsPage, _T("Listbox"));
 | 
			
		||||
 | 
			
		||||
ListboxWidgetsPage::ListboxWidgetsPage(wxNotebook *notebook,
 | 
			
		||||
                                       wxImageList *imaglist)
 | 
			
		||||
                  : WidgetsPage(notebook)
 | 
			
		||||
{
 | 
			
		||||
    imaglist->Add(wxBitmap(listbox_xpm));
 | 
			
		||||
 | 
			
		||||
    // init everything
 | 
			
		||||
    m_radioSelMode = (wxRadioBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_chkVScroll =
 | 
			
		||||
    m_chkHScroll =
 | 
			
		||||
    m_chkCheck =
 | 
			
		||||
    m_chkSort = (wxCheckBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_lbox = (wxListBox *)NULL;
 | 
			
		||||
    m_sizerLbox = (wxSizer *)NULL;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
       What we create here is a frame having 3 panes: style pane is the
 | 
			
		||||
       leftmost one, in the middle the pane with buttons allowing to perform
 | 
			
		||||
       miscellaneous listbox operations and the pane containing the listbox
 | 
			
		||||
       itself to the right
 | 
			
		||||
    */
 | 
			
		||||
    wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
 | 
			
		||||
    // left pane
 | 
			
		||||
    wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set listbox parameters"));
 | 
			
		||||
    wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    static const wxString modes[] =
 | 
			
		||||
    {
 | 
			
		||||
        _T("single"),
 | 
			
		||||
        _T("extended"),
 | 
			
		||||
        _T("multiple"),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    m_radioSelMode = new wxRadioBox(this, -1, _T("Selection &mode:"),
 | 
			
		||||
                                    wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                    WXSIZEOF(modes), modes,
 | 
			
		||||
                                    1, wxRA_SPECIFY_COLS);
 | 
			
		||||
 | 
			
		||||
    m_chkVScroll = CreateCheckBoxAndAddToSizer
 | 
			
		||||
                   (
 | 
			
		||||
                    sizerLeft,
 | 
			
		||||
                    _T("Always show &vertical scrollbar")
 | 
			
		||||
                   );
 | 
			
		||||
    m_chkHScroll = CreateCheckBoxAndAddToSizer
 | 
			
		||||
                   (
 | 
			
		||||
                    sizerLeft,
 | 
			
		||||
                    _T("Show &horizontal scrollbar")
 | 
			
		||||
                   );
 | 
			
		||||
    m_chkCheck = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Check list box"));
 | 
			
		||||
    m_chkSort = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Sort items"));
 | 
			
		||||
 | 
			
		||||
    sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
 | 
			
		||||
    sizerLeft->Add(m_radioSelMode, 0, wxGROW | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    wxButton *btn = new wxButton(this, ListboxPage_Reset, _T("&Reset"));
 | 
			
		||||
    sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
 | 
			
		||||
 | 
			
		||||
    // middle pane
 | 
			
		||||
    wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Change listbox contents"));
 | 
			
		||||
    wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerRow = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    btn = new wxButton(this, ListboxPage_Add, _T("&Add this string"));
 | 
			
		||||
    m_textAdd = new wxTextCtrl(this, ListboxPage_AddText, _T("test item 0"));
 | 
			
		||||
    sizerRow->Add(btn, 0, wxRIGHT, 5);
 | 
			
		||||
    sizerRow->Add(m_textAdd, 1, wxLEFT, 5);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, ListboxPage_AddSeveral, _T("&Insert a few strings"));
 | 
			
		||||
    sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, ListboxPage_AddMany, _T("Add &many strings"));
 | 
			
		||||
    sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    btn = new wxButton(this, ListboxPage_Change, _T("C&hange current"));
 | 
			
		||||
    m_textChange = new wxTextCtrl(this, ListboxPage_ChangeText, _T(""));
 | 
			
		||||
    sizerRow->Add(btn, 0, wxRIGHT, 5);
 | 
			
		||||
    sizerRow->Add(m_textChange, 1, wxLEFT, 5);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    btn = new wxButton(this, ListboxPage_Delete, _T("&Delete this item"));
 | 
			
		||||
    m_textDelete = new wxTextCtrl(this, ListboxPage_DeleteText, _T(""));
 | 
			
		||||
    sizerRow->Add(btn, 0, wxRIGHT, 5);
 | 
			
		||||
    sizerRow->Add(m_textDelete, 1, wxLEFT, 5);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, ListboxPage_DeleteSel, _T("Delete &selection"));
 | 
			
		||||
    sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, ListboxPage_Clear, _T("&Clear"));
 | 
			
		||||
    sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    // right pane
 | 
			
		||||
    wxSizer *sizerRight = new wxBoxSizer(wxVERTICAL);
 | 
			
		||||
    m_lbox = new wxListBox(this, ListboxPage_Listbox,
 | 
			
		||||
                           wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                           0, NULL,
 | 
			
		||||
                           wxLB_HSCROLL);
 | 
			
		||||
    sizerRight->Add(m_lbox, 1, wxGROW | wxALL, 5);
 | 
			
		||||
    sizerRight->SetMinSize(250, 0);
 | 
			
		||||
    m_sizerLbox = sizerRight; // save it to modify it later
 | 
			
		||||
 | 
			
		||||
    // the 3 panes panes compose the window
 | 
			
		||||
    sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
 | 
			
		||||
    sizerTop->Add(sizerMiddle, 1, wxGROW | wxALL, 10);
 | 
			
		||||
    sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
 | 
			
		||||
 | 
			
		||||
    // final initializations
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    SetAutoLayout(TRUE);
 | 
			
		||||
    SetSizer(sizerTop);
 | 
			
		||||
 | 
			
		||||
    sizerTop->Fit(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// operations
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::Reset()
 | 
			
		||||
{
 | 
			
		||||
    m_radioSelMode->SetSelection(LboxSel_Single);
 | 
			
		||||
    m_chkSort->SetValue(FALSE);
 | 
			
		||||
    m_chkCheck->SetValue(FALSE);
 | 
			
		||||
    m_chkHScroll->SetValue(TRUE);
 | 
			
		||||
    m_chkVScroll->SetValue(FALSE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::CreateLbox()
 | 
			
		||||
{
 | 
			
		||||
    int flags = 0;
 | 
			
		||||
    switch ( m_radioSelMode->GetSelection() )
 | 
			
		||||
    {
 | 
			
		||||
        default:
 | 
			
		||||
            wxFAIL_MSG( _T("unexpected radio box selection") );
 | 
			
		||||
 | 
			
		||||
        case LboxSel_Single:    flags |= wxLB_SINGLE; break;
 | 
			
		||||
        case LboxSel_Extended:  flags |= wxLB_EXTENDED; break;
 | 
			
		||||
        case LboxSel_Multiple:  flags |= wxLB_MULTIPLE; break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ( m_chkVScroll->GetValue() )
 | 
			
		||||
        flags |= wxLB_ALWAYS_SB;
 | 
			
		||||
    if ( m_chkHScroll->GetValue() )
 | 
			
		||||
        flags |= wxLB_HSCROLL;
 | 
			
		||||
    if ( m_chkSort->GetValue() )
 | 
			
		||||
        flags |= wxLB_SORT;
 | 
			
		||||
 | 
			
		||||
    wxArrayString items;
 | 
			
		||||
    if ( m_lbox )
 | 
			
		||||
    {
 | 
			
		||||
        int count = m_lbox->GetCount();
 | 
			
		||||
        for ( int n = 0; n < count; n++ )
 | 
			
		||||
        {
 | 
			
		||||
            items.Add(m_lbox->GetString(n));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        m_sizerLbox->Remove(m_lbox);
 | 
			
		||||
        delete m_lbox;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ( m_chkCheck->GetValue() )
 | 
			
		||||
    {
 | 
			
		||||
        m_lbox = new wxCheckListBox(this, ListboxPage_Listbox,
 | 
			
		||||
                                    wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                    0, NULL,
 | 
			
		||||
                                    flags);
 | 
			
		||||
    }
 | 
			
		||||
    else // just a listbox
 | 
			
		||||
    {
 | 
			
		||||
        m_lbox = new wxListBox(this, ListboxPage_Listbox,
 | 
			
		||||
                               wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                               0, NULL,
 | 
			
		||||
                               flags);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_lbox->Set(items);
 | 
			
		||||
    m_sizerLbox->Add(m_lbox, 1, wxGROW | wxALL, 5);
 | 
			
		||||
    m_sizerLbox->Layout();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event handlers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    CreateLbox();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnButtonChange(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    wxArrayInt selections;
 | 
			
		||||
    int count = m_lbox->GetSelections(selections);
 | 
			
		||||
    wxString s = m_textChange->GetValue();
 | 
			
		||||
    for ( int n = 0; n < count; n++ )
 | 
			
		||||
    {
 | 
			
		||||
        m_lbox->SetString(selections[n], s);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnButtonDelete(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    unsigned long n;
 | 
			
		||||
    if ( !m_textDelete->GetValue().ToULong(&n) ||
 | 
			
		||||
            (n >= (unsigned)m_lbox->GetCount()) )
 | 
			
		||||
    {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_lbox->Delete(n);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnButtonDeleteSel(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    wxArrayInt selections;
 | 
			
		||||
    int n = m_lbox->GetSelections(selections);
 | 
			
		||||
    while ( n > 0 )
 | 
			
		||||
    {
 | 
			
		||||
        m_lbox->Delete(selections[--n]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnButtonClear(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    m_lbox->Clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnButtonAdd(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    static size_t s_item = 0;
 | 
			
		||||
 | 
			
		||||
    wxString s = m_textAdd->GetValue();
 | 
			
		||||
    if ( !m_textAdd->IsModified() )
 | 
			
		||||
    {
 | 
			
		||||
        // update the default string
 | 
			
		||||
        m_textAdd->SetValue(wxString::Format(_T("test item %u"), ++s_item));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_lbox->Append(s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnButtonAddMany(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    // "many" means 1000 here
 | 
			
		||||
    for ( size_t n = 0; n < 1000; n++ )
 | 
			
		||||
    {
 | 
			
		||||
        m_lbox->Append(wxString::Format(_T("item #%u"), n));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnButtonAddSeveral(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    wxArrayString items;
 | 
			
		||||
    items.Add(_T("First"));
 | 
			
		||||
    items.Add(_T("another one"));
 | 
			
		||||
    items.Add(_T("and the last (very very very very very very very very very very long) one"));
 | 
			
		||||
    m_lbox->InsertItems(items, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( (m_radioSelMode->GetSelection() != LboxSel_Single) ||
 | 
			
		||||
                  m_chkSort->GetValue() ||
 | 
			
		||||
                  !m_chkHScroll->GetValue() ||
 | 
			
		||||
                  m_chkVScroll->GetValue() );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnUpdateUIDeleteButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    unsigned long n;
 | 
			
		||||
    event.Enable(m_textDelete->GetValue().ToULong(&n) &&
 | 
			
		||||
                    (n < (unsigned)m_lbox->GetCount()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnUpdateUIDeleteSelButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    wxArrayInt selections;
 | 
			
		||||
    event.Enable(m_lbox->GetSelections(selections) != 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnUpdateUIClearButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable(m_lbox->GetCount() != 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnUpdateUIAddSeveral(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable(!(m_lbox->GetWindowStyle() & wxLB_SORT));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnListbox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    int sel = event.GetInt();
 | 
			
		||||
    m_textDelete->SetValue(wxString::Format(_T("%ld"), sel));
 | 
			
		||||
 | 
			
		||||
    wxLogMessage(_T("Listbox item %d selected"), sel);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnListboxDClick(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    wxLogMessage(_T("Listbox item %d double clicked"), event.GetInt());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnCheckListbox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    wxLogMessage(_T("Listbox item %d toggled"), event.GetInt());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ListboxWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    CreateLbox();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										543
									
								
								samples/widgets/notebook.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										543
									
								
								samples/widgets/notebook.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,543 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Program:     wxWindows Widgets Sample
 | 
			
		||||
// Name:        notebook.cpp
 | 
			
		||||
// Purpose:     Part of the widgets sample showing wxNotebook
 | 
			
		||||
// Author:      Vadim Zeitlin
 | 
			
		||||
// Created:     06.04.01
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vadim Zeitlin
 | 
			
		||||
// License:     wxWindows license
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// for compilers that support precompilation, includes "wx/wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// for all others, include the necessary headers
 | 
			
		||||
#ifndef WX_PRECOMP
 | 
			
		||||
    #include "wx/app.h"
 | 
			
		||||
    #include "wx/log.h"
 | 
			
		||||
 | 
			
		||||
    #include "wx/button.h"
 | 
			
		||||
    #include "wx/checkbox.h"
 | 
			
		||||
    #include "wx/combobox.h"
 | 
			
		||||
    #include "wx/radiobox.h"
 | 
			
		||||
    #include "wx/statbox.h"
 | 
			
		||||
    #include "wx/textctrl.h"
 | 
			
		||||
 | 
			
		||||
    #include "wx/dynarray.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/sizer.h"
 | 
			
		||||
#include "wx/notebook.h"
 | 
			
		||||
 | 
			
		||||
#include "widgets.h"
 | 
			
		||||
 | 
			
		||||
#include "icons/notebook.xpm"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// constants
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// control ids
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    NotebookPage_Reset = 100,
 | 
			
		||||
    NotebookPage_SelectPage,
 | 
			
		||||
    NotebookPage_AddPage,
 | 
			
		||||
    NotebookPage_InsertPage,
 | 
			
		||||
    NotebookPage_RemovePage,
 | 
			
		||||
    NotebookPage_DeleteAll,
 | 
			
		||||
    NotebookPage_InsertText,
 | 
			
		||||
    NotebookPage_RemoveText,
 | 
			
		||||
    NotebookPage_SelectText,
 | 
			
		||||
    NotebookPage_NumPagesText,
 | 
			
		||||
    NotebookPage_CurSelectText,
 | 
			
		||||
    NotebookPage_Notebook
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// notebook orientations
 | 
			
		||||
enum Orient
 | 
			
		||||
{
 | 
			
		||||
    Orient_Top,
 | 
			
		||||
    Orient_Bottom,
 | 
			
		||||
    Orient_Left,
 | 
			
		||||
    Orient_Right,
 | 
			
		||||
    Orient_Max
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// old versions of wxWindows don't define this style
 | 
			
		||||
#ifndef wxNB_TOP
 | 
			
		||||
    #define wxNB_TOP (0)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// NotebookWidgetsPage
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class NotebookWidgetsPage : public WidgetsPage
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    NotebookWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
 | 
			
		||||
    virtual ~NotebookWidgetsPage();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // event handlers
 | 
			
		||||
    void OnPageChanging(wxNotebookEvent& event);
 | 
			
		||||
    void OnPageChanged(wxNotebookEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnButtonReset(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonDeleteAll(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonSelectPage(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonAddPage(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonInsertPage(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonRemovePage(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnCheckOrRadioBox(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUINumPagesText(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUICurSelectText(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUISelectButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIInsertButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIRemoveButton(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIResetButton(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    // reset the wxNotebook parameters
 | 
			
		||||
    void Reset();
 | 
			
		||||
 | 
			
		||||
    // (re)create the wxNotebook
 | 
			
		||||
    void CreateNotebook();
 | 
			
		||||
 | 
			
		||||
    // create or destroy the image list
 | 
			
		||||
    void CreateImageList();
 | 
			
		||||
 | 
			
		||||
    // create a new page
 | 
			
		||||
    wxWindow *CreateNewPage();
 | 
			
		||||
 | 
			
		||||
    // get the image index for the new page
 | 
			
		||||
    int GetIconIndex() const;
 | 
			
		||||
 | 
			
		||||
    // get the numeric value of text ctrl
 | 
			
		||||
    int GetTextValue(wxTextCtrl *text) const;
 | 
			
		||||
 | 
			
		||||
    // the controls
 | 
			
		||||
    // ------------
 | 
			
		||||
 | 
			
		||||
    // the check/radio boxes for styles
 | 
			
		||||
    wxCheckBox *m_chkImages;
 | 
			
		||||
    wxRadioBox *m_radioOrient;
 | 
			
		||||
 | 
			
		||||
    // the text controls containing input for various commands
 | 
			
		||||
    wxTextCtrl *m_textInsert,
 | 
			
		||||
               *m_textRemove,
 | 
			
		||||
               *m_textSelect;
 | 
			
		||||
 | 
			
		||||
    // the notebook itself and the sizer it is in
 | 
			
		||||
    wxNotebook *m_notebook;
 | 
			
		||||
    wxSizer *m_sizerNotebook;
 | 
			
		||||
 | 
			
		||||
    // thei mage list for our notebook
 | 
			
		||||
    wxImageList *m_imageList;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_EVENT_TABLE();
 | 
			
		||||
    DECLARE_WIDGETS_PAGE(NotebookWidgetsPage);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event tables
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
BEGIN_EVENT_TABLE(NotebookWidgetsPage, WidgetsPage)
 | 
			
		||||
    EVT_BUTTON(NotebookPage_Reset, NotebookWidgetsPage::OnButtonReset)
 | 
			
		||||
    EVT_BUTTON(NotebookPage_SelectPage, NotebookWidgetsPage::OnButtonSelectPage)
 | 
			
		||||
    EVT_BUTTON(NotebookPage_AddPage, NotebookWidgetsPage::OnButtonAddPage)
 | 
			
		||||
    EVT_BUTTON(NotebookPage_InsertPage, NotebookWidgetsPage::OnButtonInsertPage)
 | 
			
		||||
    EVT_BUTTON(NotebookPage_RemovePage, NotebookWidgetsPage::OnButtonRemovePage)
 | 
			
		||||
    EVT_BUTTON(NotebookPage_DeleteAll, NotebookWidgetsPage::OnButtonDeleteAll)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(NotebookPage_NumPagesText, NotebookWidgetsPage::OnUpdateUINumPagesText)
 | 
			
		||||
    EVT_UPDATE_UI(NotebookPage_CurSelectText, NotebookWidgetsPage::OnUpdateUICurSelectText)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(NotebookPage_SelectPage, NotebookWidgetsPage::OnUpdateUISelectButton)
 | 
			
		||||
    EVT_UPDATE_UI(NotebookPage_InsertPage, NotebookWidgetsPage::OnUpdateUIInsertButton)
 | 
			
		||||
    EVT_UPDATE_UI(NotebookPage_RemovePage, NotebookWidgetsPage::OnUpdateUIRemoveButton)
 | 
			
		||||
 | 
			
		||||
    EVT_NOTEBOOK_PAGE_CHANGING(-1, NotebookWidgetsPage::OnPageChanging)
 | 
			
		||||
    EVT_NOTEBOOK_PAGE_CHANGED(-1, NotebookWidgetsPage::OnPageChanged)
 | 
			
		||||
 | 
			
		||||
    EVT_CHECKBOX(-1, NotebookWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
    EVT_RADIOBOX(-1, NotebookWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
END_EVENT_TABLE()
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_WIDGETS_PAGE(NotebookWidgetsPage, _T("Notebook"));
 | 
			
		||||
 | 
			
		||||
NotebookWidgetsPage::NotebookWidgetsPage(wxNotebook *notebook,
 | 
			
		||||
                                         wxImageList *imaglist)
 | 
			
		||||
                  : WidgetsPage(notebook)
 | 
			
		||||
{
 | 
			
		||||
    imaglist->Add(wxBitmap(notebook_xpm));
 | 
			
		||||
 | 
			
		||||
    // init everything
 | 
			
		||||
    m_chkImages = NULL;
 | 
			
		||||
    m_imageList = NULL;
 | 
			
		||||
 | 
			
		||||
    m_notebook = (wxNotebook *)NULL;
 | 
			
		||||
    m_sizerNotebook = (wxSizer *)NULL;
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
 | 
			
		||||
    // left pane
 | 
			
		||||
    wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set style"));
 | 
			
		||||
 | 
			
		||||
    // must be in sync with Orient enum
 | 
			
		||||
    wxString orientations[] =
 | 
			
		||||
    {
 | 
			
		||||
        _T("&top"),
 | 
			
		||||
        _T("&bottom"),
 | 
			
		||||
        _T("&left"),
 | 
			
		||||
        _T("&right"),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    wxASSERT_MSG( WXSIZEOF(orientations) == Orient_Max,
 | 
			
		||||
                  _T("forgot to update something") );
 | 
			
		||||
 | 
			
		||||
    m_chkImages = new wxCheckBox(this, -1, _T("Show &images"));
 | 
			
		||||
    m_radioOrient = new wxRadioBox(this, -1, _T("&Tab orientation"),
 | 
			
		||||
                                   wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                   WXSIZEOF(orientations), orientations,
 | 
			
		||||
                                   1, wxRA_SPECIFY_COLS);
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    sizerLeft->Add(m_chkImages, 0, wxALL, 5);
 | 
			
		||||
    sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
 | 
			
		||||
    sizerLeft->Add(m_radioOrient, 0, wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    wxButton *btn = new wxButton(this, NotebookPage_Reset, _T("&Reset"));
 | 
			
		||||
    sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
 | 
			
		||||
 | 
			
		||||
    // middle pane
 | 
			
		||||
    wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Contents"));
 | 
			
		||||
    wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    wxTextCtrl *text;
 | 
			
		||||
    wxSizer *sizerRow = CreateSizerWithTextAndLabel(_T("Number of pages: "),
 | 
			
		||||
                                                    NotebookPage_NumPagesText,
 | 
			
		||||
                                                    &text);
 | 
			
		||||
    text->SetEditable(FALSE);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndLabel(_T("Current selection: "),
 | 
			
		||||
                                           NotebookPage_CurSelectText,
 | 
			
		||||
                                           &text);
 | 
			
		||||
    text->SetEditable(FALSE);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(NotebookPage_SelectPage,
 | 
			
		||||
                                            _T("&Select page"),
 | 
			
		||||
                                            NotebookPage_SelectText,
 | 
			
		||||
                                            &m_textSelect);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, NotebookPage_AddPage, _T("&Add page"));
 | 
			
		||||
    sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(NotebookPage_InsertPage,
 | 
			
		||||
                                            _T("&Insert page at"),
 | 
			
		||||
                                            NotebookPage_InsertText,
 | 
			
		||||
                                            &m_textInsert);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(NotebookPage_RemovePage,
 | 
			
		||||
                                            _T("&Remove page"),
 | 
			
		||||
                                            NotebookPage_RemoveText,
 | 
			
		||||
                                            &m_textRemove);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, NotebookPage_DeleteAll, _T("&Delete All"));
 | 
			
		||||
    sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    // right pane
 | 
			
		||||
    wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    m_notebook = new wxNotebook(this, NotebookPage_Notebook);
 | 
			
		||||
    sizerRight->Add(m_notebook, 1, wxGROW | wxALL, 5);
 | 
			
		||||
    sizerRight->SetMinSize(250, 0);
 | 
			
		||||
    m_sizerNotebook = sizerRight; // save it to modify it later
 | 
			
		||||
 | 
			
		||||
    // the 3 panes panes compose the window
 | 
			
		||||
    sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
 | 
			
		||||
    sizerTop->Add(sizerMiddle, 0, wxGROW | wxALL, 10);
 | 
			
		||||
    sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
 | 
			
		||||
 | 
			
		||||
    // final initializations
 | 
			
		||||
    Reset();
 | 
			
		||||
    CreateImageList();
 | 
			
		||||
 | 
			
		||||
    SetAutoLayout(TRUE);
 | 
			
		||||
    SetSizer(sizerTop);
 | 
			
		||||
 | 
			
		||||
    sizerTop->Fit(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
NotebookWidgetsPage::~NotebookWidgetsPage()
 | 
			
		||||
{
 | 
			
		||||
    delete m_imageList;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// operations
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::Reset()
 | 
			
		||||
{
 | 
			
		||||
    m_chkImages->SetValue(TRUE);
 | 
			
		||||
    m_radioOrient->SetSelection(Orient_Top);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::CreateImageList()
 | 
			
		||||
{
 | 
			
		||||
    if ( m_chkImages->GetValue() )
 | 
			
		||||
    {
 | 
			
		||||
        if ( !m_imageList )
 | 
			
		||||
        {
 | 
			
		||||
            // create a dummy image list with a few icons
 | 
			
		||||
            m_imageList = new wxImageList(32, 32);
 | 
			
		||||
            m_imageList->Add(wxTheApp->GetStdIcon(wxICON_INFORMATION));
 | 
			
		||||
            m_imageList->Add(wxTheApp->GetStdIcon(wxICON_QUESTION));
 | 
			
		||||
            m_imageList->Add(wxTheApp->GetStdIcon(wxICON_WARNING));
 | 
			
		||||
            m_imageList->Add(wxTheApp->GetStdIcon(wxICON_ERROR));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        m_notebook->SetImageList(m_imageList);
 | 
			
		||||
    }
 | 
			
		||||
    else // no images
 | 
			
		||||
    {
 | 
			
		||||
        if ( m_imageList )
 | 
			
		||||
        {
 | 
			
		||||
            delete m_imageList;
 | 
			
		||||
            m_imageList = NULL;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // because of the bug in wxMSW we can't use SetImageList(NULL) - although
 | 
			
		||||
    // it would be logical if this removed the image list from notebook, under
 | 
			
		||||
    // MSW it crashes instead
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::CreateNotebook()
 | 
			
		||||
{
 | 
			
		||||
    int flags;
 | 
			
		||||
    switch ( m_radioOrient->GetSelection() )
 | 
			
		||||
    {
 | 
			
		||||
        default:
 | 
			
		||||
            wxFAIL_MSG( _T("unknown notebok orientation") );
 | 
			
		||||
            // fall through
 | 
			
		||||
 | 
			
		||||
        case Orient_Top:
 | 
			
		||||
            flags = wxNB_TOP;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case Orient_Bottom:
 | 
			
		||||
            flags = wxNB_BOTTOM;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case Orient_Left:
 | 
			
		||||
            flags = wxNB_LEFT;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case Orient_Right:
 | 
			
		||||
            flags = wxNB_RIGHT;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    wxNotebook *notebook = m_notebook;
 | 
			
		||||
 | 
			
		||||
    m_notebook = new wxNotebook(this, NotebookPage_Notebook,
 | 
			
		||||
                                wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                flags);
 | 
			
		||||
 | 
			
		||||
    CreateImageList();
 | 
			
		||||
 | 
			
		||||
    if ( notebook )
 | 
			
		||||
    {
 | 
			
		||||
        int sel = notebook->GetSelection();
 | 
			
		||||
 | 
			
		||||
        int count = notebook->GetPageCount();
 | 
			
		||||
        for ( int n = 0; n < count; n++ )
 | 
			
		||||
        {
 | 
			
		||||
            wxNotebookPage *page = notebook->GetPage(0);
 | 
			
		||||
            page->Reparent(m_notebook);
 | 
			
		||||
 | 
			
		||||
            m_notebook->AddPage(page, notebook->GetPageText(0), FALSE,
 | 
			
		||||
                                notebook->GetPageImage(0));
 | 
			
		||||
 | 
			
		||||
            notebook->RemovePage(0);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        m_sizerNotebook->Remove(notebook);
 | 
			
		||||
        delete notebook;
 | 
			
		||||
 | 
			
		||||
        // restore selection
 | 
			
		||||
        if ( sel != -1 )
 | 
			
		||||
        {
 | 
			
		||||
            m_notebook->SetSelection(sel);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_sizerNotebook->Add(m_notebook, 1, wxGROW | wxALL, 5);
 | 
			
		||||
    m_sizerNotebook->Layout();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// helpers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
int NotebookWidgetsPage::GetTextValue(wxTextCtrl *text) const
 | 
			
		||||
{
 | 
			
		||||
    long pos;
 | 
			
		||||
    if ( !text->GetValue().ToLong(&pos) )
 | 
			
		||||
        pos = -1;
 | 
			
		||||
 | 
			
		||||
    return (int)pos;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int NotebookWidgetsPage::GetIconIndex() const
 | 
			
		||||
{
 | 
			
		||||
    if ( m_imageList )
 | 
			
		||||
    {
 | 
			
		||||
       int nImages = m_imageList->GetImageCount();
 | 
			
		||||
       if ( nImages > 0 )
 | 
			
		||||
       {
 | 
			
		||||
           return m_notebook->GetPageCount() % nImages;
 | 
			
		||||
       }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxWindow *NotebookWidgetsPage::CreateNewPage()
 | 
			
		||||
{
 | 
			
		||||
    return new wxTextCtrl(m_notebook, -1, _T("I'm a notebook page"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event handlers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    CreateNotebook();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnButtonDeleteAll(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    m_notebook->DeleteAllPages();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnButtonSelectPage(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    int pos = GetTextValue(m_textSelect);
 | 
			
		||||
    wxCHECK_RET( pos >= 0, _T("button should be disabled") );
 | 
			
		||||
 | 
			
		||||
    m_notebook->SetSelection(pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnButtonAddPage(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    m_notebook->AddPage(CreateNewPage(), _T("Added page"), FALSE,
 | 
			
		||||
                        GetIconIndex());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnButtonInsertPage(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    int pos = GetTextValue(m_textInsert);
 | 
			
		||||
    wxCHECK_RET( pos >= 0, _T("button should be disabled") );
 | 
			
		||||
 | 
			
		||||
    m_notebook->InsertPage(pos, CreateNewPage(), _T("Inserted page"), FALSE,
 | 
			
		||||
                           GetIconIndex());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnButtonRemovePage(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    int pos = GetTextValue(m_textRemove);
 | 
			
		||||
    wxCHECK_RET( pos >= 0, _T("button should be disabled") );
 | 
			
		||||
 | 
			
		||||
    m_notebook->DeletePage(pos);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnUpdateUISelectButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( GetTextValue(m_textSelect) >= 0 );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnUpdateUIInsertButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( GetTextValue(m_textInsert) >= 0 );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnUpdateUIRemoveButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( GetTextValue(m_textRemove) >= 0 );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( !m_chkImages->GetValue() ||
 | 
			
		||||
                  m_radioOrient->GetSelection() != wxNB_TOP );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnUpdateUINumPagesText(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.SetText( wxString::Format(_T("%d"), m_notebook->GetPageCount()) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnUpdateUICurSelectText(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.SetText( wxString::Format(_T("%d"), m_notebook->GetSelection()) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    CreateNotebook();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnPageChanging(wxNotebookEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    wxLogMessage(_T("Notebook page changing from %d to %d (currently %d)."),
 | 
			
		||||
                 event.GetOldSelection(),
 | 
			
		||||
                 event.GetSelection(),
 | 
			
		||||
                 m_notebook->GetSelection());
 | 
			
		||||
 | 
			
		||||
    event.Skip();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void NotebookWidgetsPage::OnPageChanged(wxNotebookEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    wxLogMessage(_T("Notebook page changed from %d to %d (currently %d)."),
 | 
			
		||||
                 event.GetOldSelection(),
 | 
			
		||||
                 event.GetSelection(),
 | 
			
		||||
                 m_notebook->GetSelection());
 | 
			
		||||
 | 
			
		||||
    event.Skip();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										455
									
								
								samples/widgets/radiobox.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										455
									
								
								samples/widgets/radiobox.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,455 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Program:     wxWindows Widgets Sample
 | 
			
		||||
// Name:        radiobox.cpp
 | 
			
		||||
// Purpose:     Part of the widgets sample showing wxRadioBox
 | 
			
		||||
// Author:      Vadim Zeitlin
 | 
			
		||||
// Created:     15.04.01
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vadim Zeitlin
 | 
			
		||||
// License:     wxWindows license
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// for compilers that support precompilation, includes "wx/wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// for all others, include the necessary headers
 | 
			
		||||
#ifndef WX_PRECOMP
 | 
			
		||||
    #include "wx/log.h"
 | 
			
		||||
 | 
			
		||||
    #include "wx/button.h"
 | 
			
		||||
    #include "wx/checkbox.h"
 | 
			
		||||
    #include "wx/radiobox.h"
 | 
			
		||||
    #include "wx/statbox.h"
 | 
			
		||||
    #include "wx/textctrl.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/sizer.h"
 | 
			
		||||
 | 
			
		||||
#include "widgets.h"
 | 
			
		||||
 | 
			
		||||
#include "icons/radiobox.xpm"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// constants
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// control ids
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    RadioPage_Reset = 100,
 | 
			
		||||
    RadioPage_Update,
 | 
			
		||||
    RadioPage_Selection,
 | 
			
		||||
    RadioPage_Label,
 | 
			
		||||
    RadioPage_LabelBtn,
 | 
			
		||||
    RadioPage_Radio
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// layout direction radiobox selections
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    RadioDir_Default,
 | 
			
		||||
    RadioDir_LtoR,
 | 
			
		||||
    RadioDir_TtoB
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// default values for the number of radiobox items
 | 
			
		||||
static const size_t DEFAULT_NUM_ENTRIES = 12;
 | 
			
		||||
static const size_t DEFAULT_MAJOR_DIM = 4;
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// RadioWidgetsPage
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class RadioWidgetsPage : public WidgetsPage
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    RadioWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
 | 
			
		||||
    virtual ~RadioWidgetsPage();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // event handlers
 | 
			
		||||
    void OnCheckOrRadioBox(wxCommandEvent& event);
 | 
			
		||||
    void OnRadioBox(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnButtonReset(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonRecreate(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnButtonSelection(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonSetLabel(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIReset(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIUpdate(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUISelection(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    // reset the wxRadioBox parameters
 | 
			
		||||
    void Reset();
 | 
			
		||||
 | 
			
		||||
    // (re)create the wxRadioBox
 | 
			
		||||
    void CreateRadio();
 | 
			
		||||
 | 
			
		||||
    // the controls
 | 
			
		||||
    // ------------
 | 
			
		||||
 | 
			
		||||
    // the check/radio boxes for styles
 | 
			
		||||
    wxCheckBox *m_chkVert;
 | 
			
		||||
    wxRadioBox *m_radioDir;
 | 
			
		||||
 | 
			
		||||
    // the gauge itself and the sizer it is in
 | 
			
		||||
    wxRadioBox *m_radio;
 | 
			
		||||
    wxSizer *m_sizerRadio;
 | 
			
		||||
 | 
			
		||||
    // the text entries for command parameters
 | 
			
		||||
    wxTextCtrl *m_textNumBtns,
 | 
			
		||||
               *m_textMajorDim,
 | 
			
		||||
               *m_textCurSel,
 | 
			
		||||
               *m_textSel,
 | 
			
		||||
               *m_textLabel,
 | 
			
		||||
               *m_textLabelBtns;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_EVENT_TABLE();
 | 
			
		||||
    DECLARE_WIDGETS_PAGE(RadioWidgetsPage);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event tables
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
BEGIN_EVENT_TABLE(RadioWidgetsPage, WidgetsPage)
 | 
			
		||||
    EVT_BUTTON(RadioPage_Reset, RadioWidgetsPage::OnButtonReset)
 | 
			
		||||
 | 
			
		||||
    EVT_BUTTON(RadioPage_Update, RadioWidgetsPage::OnButtonRecreate)
 | 
			
		||||
    EVT_BUTTON(RadioPage_LabelBtn, RadioWidgetsPage::OnButtonRecreate)
 | 
			
		||||
 | 
			
		||||
    EVT_BUTTON(RadioPage_Selection, RadioWidgetsPage::OnButtonSelection)
 | 
			
		||||
    EVT_BUTTON(RadioPage_Label, RadioWidgetsPage::OnButtonSetLabel)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(RadioPage_Update, RadioWidgetsPage::OnUpdateUIUpdate)
 | 
			
		||||
    EVT_UPDATE_UI(RadioPage_Selection, RadioWidgetsPage::OnUpdateUISelection)
 | 
			
		||||
 | 
			
		||||
    EVT_RADIOBOX(RadioPage_Radio, RadioWidgetsPage::OnRadioBox)
 | 
			
		||||
 | 
			
		||||
    EVT_CHECKBOX(-1, RadioWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
    EVT_RADIOBOX(-1, RadioWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
END_EVENT_TABLE()
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_WIDGETS_PAGE(RadioWidgetsPage, _T("Radio"));
 | 
			
		||||
 | 
			
		||||
RadioWidgetsPage::RadioWidgetsPage(wxNotebook *notebook,
 | 
			
		||||
                                       wxImageList *imaglist)
 | 
			
		||||
                  : WidgetsPage(notebook)
 | 
			
		||||
{
 | 
			
		||||
    imaglist->Add(wxBitmap(radio_xpm));
 | 
			
		||||
 | 
			
		||||
    // init everything
 | 
			
		||||
    m_chkVert = (wxCheckBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_textNumBtns =
 | 
			
		||||
    m_textLabelBtns =
 | 
			
		||||
    m_textLabel = (wxTextCtrl *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_radio =
 | 
			
		||||
    m_radioDir = (wxRadioBox *)NULL;
 | 
			
		||||
    m_sizerRadio = (wxSizer *)NULL;
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
 | 
			
		||||
    // left pane
 | 
			
		||||
    wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set style"));
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    m_chkVert = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Vertical layout"));
 | 
			
		||||
 | 
			
		||||
    static const wxString layoutDir[] =
 | 
			
		||||
    {
 | 
			
		||||
        _T("default"),
 | 
			
		||||
        _T("left to right"),
 | 
			
		||||
        _T("top to bottom")
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    m_radioDir = new wxRadioBox(this, -1, _T("Numbering:"),
 | 
			
		||||
                                wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                WXSIZEOF(layoutDir), layoutDir);
 | 
			
		||||
    sizerLeft->Add(m_radioDir, 0, wxGROW | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    // if it's not defined, we can't change the radiobox direction
 | 
			
		||||
#ifndef wxRA_LEFTTORIGHT
 | 
			
		||||
    m_radioDir->Disable();
 | 
			
		||||
#endif // wxRA_LEFTTORIGHT
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerRow;
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndLabel(_T("&Major dimension"),
 | 
			
		||||
                                           -1,
 | 
			
		||||
                                           &m_textMajorDim);
 | 
			
		||||
    sizerLeft->Add(sizerRow, 0, wxGROW | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndLabel(_T("&Number of buttons"),
 | 
			
		||||
                                           -1,
 | 
			
		||||
                                           &m_textNumBtns);
 | 
			
		||||
    sizerLeft->Add(sizerRow, 0, wxGROW | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    wxButton *btn;
 | 
			
		||||
    btn = new wxButton(this, RadioPage_Update, _T("&Update"));
 | 
			
		||||
    sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, RadioPage_Reset, _T("&Reset"));
 | 
			
		||||
    sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
 | 
			
		||||
 | 
			
		||||
    // middle pane
 | 
			
		||||
    wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Change parameters"));
 | 
			
		||||
    wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndLabel(_T("Current selection"),
 | 
			
		||||
                                           -1,
 | 
			
		||||
                                           &m_textCurSel);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(RadioPage_Selection,
 | 
			
		||||
                                            _T("&Change selection"),
 | 
			
		||||
                                           -1,
 | 
			
		||||
                                           &m_textSel);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(RadioPage_Label,
 | 
			
		||||
                                            _T("&Label for box"),
 | 
			
		||||
                                            -1,
 | 
			
		||||
                                            &m_textLabel);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(RadioPage_LabelBtn,
 | 
			
		||||
                                            _T("&Label for buttons"),
 | 
			
		||||
                                            -1,
 | 
			
		||||
                                            &m_textLabelBtns);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    // right pane
 | 
			
		||||
    wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    sizerRight->SetMinSize(250, 0);
 | 
			
		||||
    m_sizerRadio = sizerRight; // save it to modify it later
 | 
			
		||||
 | 
			
		||||
    Reset();
 | 
			
		||||
    CreateRadio();
 | 
			
		||||
 | 
			
		||||
    // the 3 panes panes compose the window
 | 
			
		||||
    sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
 | 
			
		||||
    sizerTop->Add(sizerMiddle, 1, wxGROW | wxALL, 10);
 | 
			
		||||
    sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
 | 
			
		||||
 | 
			
		||||
    // final initializations
 | 
			
		||||
    SetAutoLayout(TRUE);
 | 
			
		||||
    SetSizer(sizerTop);
 | 
			
		||||
 | 
			
		||||
    sizerTop->Fit(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RadioWidgetsPage::~RadioWidgetsPage()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// operations
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void RadioWidgetsPage::Reset()
 | 
			
		||||
{
 | 
			
		||||
    m_textMajorDim->SetValue(wxString::Format(_T("%d"), DEFAULT_MAJOR_DIM));
 | 
			
		||||
    m_textNumBtns->SetValue(wxString::Format(_T("%d"), DEFAULT_NUM_ENTRIES));
 | 
			
		||||
    m_textLabel->SetValue(_T("I'm a radiobox"));
 | 
			
		||||
    m_textLabelBtns->SetValue(_T("item"));
 | 
			
		||||
 | 
			
		||||
    m_chkVert->SetValue(FALSE);
 | 
			
		||||
    m_radioDir->SetSelection(RadioDir_Default);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RadioWidgetsPage::CreateRadio()
 | 
			
		||||
{
 | 
			
		||||
    int sel;
 | 
			
		||||
    if ( m_radio )
 | 
			
		||||
    {
 | 
			
		||||
        sel = m_radio->GetSelection();
 | 
			
		||||
 | 
			
		||||
        m_sizerRadio->Remove(m_radio);
 | 
			
		||||
 | 
			
		||||
        delete m_radio;
 | 
			
		||||
    }
 | 
			
		||||
    else // first time creation, no old selection to preserve
 | 
			
		||||
    {
 | 
			
		||||
        sel = -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    unsigned long count;
 | 
			
		||||
    if ( !m_textNumBtns->GetValue().ToULong(&count) )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogWarning(_T("Should have a valid number for number of items."));
 | 
			
		||||
 | 
			
		||||
        // fall back to default
 | 
			
		||||
        count = DEFAULT_NUM_ENTRIES;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    unsigned long majorDim;
 | 
			
		||||
    if ( !m_textMajorDim->GetValue().ToULong(&majorDim) )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogWarning(_T("Should have a valid major dimension number."));
 | 
			
		||||
 | 
			
		||||
        // fall back to default
 | 
			
		||||
        majorDim = DEFAULT_MAJOR_DIM;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    wxString *items = new wxString[count];
 | 
			
		||||
 | 
			
		||||
    wxString labelBtn = m_textLabelBtns->GetValue();
 | 
			
		||||
    for ( size_t n = 0; n < count; n++ )
 | 
			
		||||
    {
 | 
			
		||||
        items[n] = wxString::Format(_T("%s %u"), labelBtn.c_str(), n + 1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    int flags = m_chkVert->GetValue() ? wxRA_VERTICAL
 | 
			
		||||
                                      : wxRA_HORIZONTAL;
 | 
			
		||||
 | 
			
		||||
#ifdef wxRA_LEFTTORIGHT
 | 
			
		||||
    switch ( m_radioDir->GetSelection() )
 | 
			
		||||
    {
 | 
			
		||||
        default:
 | 
			
		||||
            wxFAIL_MSG( _T("unexpected wxRadioBox layout direction") );
 | 
			
		||||
            // fall through
 | 
			
		||||
 | 
			
		||||
        case RadioDir_Default:
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case RadioDir_LtoR:
 | 
			
		||||
            flags |= wxRA_LEFTTORIGHT;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case RadioDir_TtoB:
 | 
			
		||||
            flags |= wxRA_TOPTOBOTTOM;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
#endif // wxRA_LEFTTORIGHT
 | 
			
		||||
 | 
			
		||||
    m_radio = new wxRadioBox(this, RadioPage_Radio,
 | 
			
		||||
                             m_textLabel->GetValue(),
 | 
			
		||||
                             wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                             count, items,
 | 
			
		||||
                             majorDim,
 | 
			
		||||
                             flags);
 | 
			
		||||
 | 
			
		||||
    delete [] items;
 | 
			
		||||
 | 
			
		||||
    if ( sel >= 0 && (size_t)sel < count )
 | 
			
		||||
    {
 | 
			
		||||
        m_radio->SetSelection(sel);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_sizerRadio->Add(m_radio, 1, wxGROW);
 | 
			
		||||
    m_sizerRadio->Layout();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event handlers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void RadioWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    CreateRadio();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RadioWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    CreateRadio();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RadioWidgetsPage::OnRadioBox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    int sel = m_radio->GetSelection();
 | 
			
		||||
 | 
			
		||||
    wxLogMessage(_T("Radiobox selection changed, now %d"), sel);
 | 
			
		||||
 | 
			
		||||
    wxASSERT_MSG( sel == event.GetSelection(),
 | 
			
		||||
                  _T("selection should be the same in event and radiobox") );
 | 
			
		||||
 | 
			
		||||
    m_textCurSel->SetValue(wxString::Format(_T("%d"), sel));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RadioWidgetsPage::OnButtonRecreate(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    CreateRadio();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RadioWidgetsPage::OnButtonSetLabel(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    m_radio->wxControl::SetLabel(m_textLabel->GetValue());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RadioWidgetsPage::OnButtonSelection(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    unsigned long sel;
 | 
			
		||||
    if ( !m_textSel->GetValue().ToULong(&sel) ||
 | 
			
		||||
            (sel >= (size_t)m_radio->GetCount()) )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogWarning(_T("Invalid number specified as new selection."));
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        m_radio->SetSelection(sel);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RadioWidgetsPage::OnUpdateUIUpdate(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    unsigned long n;
 | 
			
		||||
    event.Enable( m_textNumBtns->GetValue().ToULong(&n) &&
 | 
			
		||||
                  m_textMajorDim->GetValue().ToULong(&n) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RadioWidgetsPage::OnUpdateUISelection(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    unsigned long n;
 | 
			
		||||
    event.Enable( m_textSel->GetValue().ToULong(&n) &&
 | 
			
		||||
                   (n < (size_t)m_radio->GetCount()) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RadioWidgetsPage::OnUpdateUIReset(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    // only enable it if something is not set to default
 | 
			
		||||
    bool enable = m_chkVert->GetValue();
 | 
			
		||||
 | 
			
		||||
    if ( !enable )
 | 
			
		||||
    {
 | 
			
		||||
        unsigned long numEntries;
 | 
			
		||||
 | 
			
		||||
        enable = !m_textNumBtns->GetValue().ToULong(&numEntries) ||
 | 
			
		||||
                    numEntries != DEFAULT_NUM_ENTRIES;
 | 
			
		||||
 | 
			
		||||
        if ( !enable )
 | 
			
		||||
        {
 | 
			
		||||
            unsigned long majorDim;
 | 
			
		||||
 | 
			
		||||
            enable = !m_textMajorDim->GetValue().ToULong(&majorDim) ||
 | 
			
		||||
                        majorDim != DEFAULT_MAJOR_DIM;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    event.Enable(enable);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										470
									
								
								samples/widgets/slider.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										470
									
								
								samples/widgets/slider.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,470 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Program:     wxWindows Widgets Sample
 | 
			
		||||
// Name:        slider.cpp
 | 
			
		||||
// Purpose:     Part of the widgets sample showing wxSlider
 | 
			
		||||
// Author:      Vadim Zeitlin
 | 
			
		||||
// Created:     16.04.01
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vadim Zeitlin
 | 
			
		||||
// License:     wxWindows license
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// for compilers that support precompilation, includes "wx/wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// for all others, include the necessary headers
 | 
			
		||||
#ifndef WX_PRECOMP
 | 
			
		||||
    #include "wx/log.h"
 | 
			
		||||
 | 
			
		||||
    #include "wx/button.h"
 | 
			
		||||
    #include "wx/checkbox.h"
 | 
			
		||||
    #include "wx/radiobox.h"
 | 
			
		||||
    #include "wx/slider.h"
 | 
			
		||||
    #include "wx/statbox.h"
 | 
			
		||||
    #include "wx/textctrl.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/sizer.h"
 | 
			
		||||
 | 
			
		||||
#include "widgets.h"
 | 
			
		||||
 | 
			
		||||
#include "icons/slider.xpm"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// constants
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// control ids
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    SliderPage_Reset = 100,
 | 
			
		||||
    SliderPage_Clear,
 | 
			
		||||
    SliderPage_SetValue,
 | 
			
		||||
    SliderPage_SetMinAndMax,
 | 
			
		||||
    SliderPage_SetTickFreq,
 | 
			
		||||
    SliderPage_CurValueText,
 | 
			
		||||
    SliderPage_ValueText,
 | 
			
		||||
    SliderPage_MinText,
 | 
			
		||||
    SliderPage_MaxText,
 | 
			
		||||
    SliderPage_TickFreqText,
 | 
			
		||||
    SliderPage_OtherSide,
 | 
			
		||||
    SliderPage_Slider
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// SliderWidgetsPage
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class SliderWidgetsPage : public WidgetsPage
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    SliderWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
 | 
			
		||||
    virtual ~SliderWidgetsPage();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // event handlers
 | 
			
		||||
    void OnButtonReset(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonClear(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonSetValue(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonSetMinAndMax(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonSetTickFreq(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnCheckOrRadioBox(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnSlider(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIOtherSide(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIValueButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIMinMaxButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUITickFreq(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIResetButton(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUICurValueText(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    // reset the slider parameters
 | 
			
		||||
    void Reset();
 | 
			
		||||
 | 
			
		||||
    // (re)create the slider
 | 
			
		||||
    void CreateSlider();
 | 
			
		||||
 | 
			
		||||
    // set the tick frequency from the text field value
 | 
			
		||||
    void DoSetTickFreq();
 | 
			
		||||
 | 
			
		||||
    // is this slider value in range?
 | 
			
		||||
    bool IsValidValue(int val) const
 | 
			
		||||
        { return (val >= m_min) && (val <= m_max); }
 | 
			
		||||
 | 
			
		||||
    // the slider range
 | 
			
		||||
    int m_min, m_max;
 | 
			
		||||
 | 
			
		||||
    // the controls
 | 
			
		||||
    // ------------
 | 
			
		||||
 | 
			
		||||
    // the check/radio boxes for styles
 | 
			
		||||
    wxCheckBox *m_chkLabels,
 | 
			
		||||
               *m_chkOtherSide,
 | 
			
		||||
               *m_chkVert,
 | 
			
		||||
               *m_chkTicks;
 | 
			
		||||
 | 
			
		||||
    // the slider itself and the sizer it is in
 | 
			
		||||
    wxSlider *m_slider;
 | 
			
		||||
    wxSizer *m_sizerSlider;
 | 
			
		||||
 | 
			
		||||
    // the text entries for set value/range
 | 
			
		||||
    wxTextCtrl *m_textValue,
 | 
			
		||||
               *m_textMin,
 | 
			
		||||
               *m_textMax,
 | 
			
		||||
               *m_textTickFreq;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_EVENT_TABLE();
 | 
			
		||||
    DECLARE_WIDGETS_PAGE(SliderWidgetsPage);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event tables
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
BEGIN_EVENT_TABLE(SliderWidgetsPage, WidgetsPage)
 | 
			
		||||
    EVT_BUTTON(SliderPage_Reset, SliderWidgetsPage::OnButtonReset)
 | 
			
		||||
    EVT_BUTTON(SliderPage_SetValue, SliderWidgetsPage::OnButtonSetValue)
 | 
			
		||||
    EVT_BUTTON(SliderPage_SetMinAndMax, SliderWidgetsPage::OnButtonSetMinAndMax)
 | 
			
		||||
    EVT_BUTTON(SliderPage_SetTickFreq, SliderWidgetsPage::OnButtonSetTickFreq)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_OtherSide, SliderWidgetsPage::OnUpdateUIOtherSide)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_SetValue, SliderWidgetsPage::OnUpdateUIValueButton)
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_SetMinAndMax, SliderWidgetsPage::OnUpdateUIMinMaxButton)
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_SetTickFreq, SliderWidgetsPage::OnUpdateUITickFreq)
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_TickFreqText, SliderWidgetsPage::OnUpdateUITickFreq)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_Reset, SliderWidgetsPage::OnUpdateUIResetButton)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(SliderPage_CurValueText, SliderWidgetsPage::OnUpdateUICurValueText)
 | 
			
		||||
 | 
			
		||||
    EVT_SLIDER(SliderPage_Slider, SliderWidgetsPage::OnSlider)
 | 
			
		||||
 | 
			
		||||
    EVT_CHECKBOX(-1, SliderWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
    EVT_RADIOBOX(-1, SliderWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
END_EVENT_TABLE()
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_WIDGETS_PAGE(SliderWidgetsPage, _T("Slider"));
 | 
			
		||||
 | 
			
		||||
SliderWidgetsPage::SliderWidgetsPage(wxNotebook *notebook,
 | 
			
		||||
                                       wxImageList *imaglist)
 | 
			
		||||
                  : WidgetsPage(notebook)
 | 
			
		||||
{
 | 
			
		||||
    imaglist->Add(wxBitmap(slider_xpm));
 | 
			
		||||
 | 
			
		||||
    // init everything
 | 
			
		||||
    m_min = 0;
 | 
			
		||||
    m_max = 100;
 | 
			
		||||
 | 
			
		||||
    m_chkVert =
 | 
			
		||||
    m_chkTicks =
 | 
			
		||||
    m_chkLabels =
 | 
			
		||||
    m_chkOtherSide = (wxCheckBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_slider = (wxSlider *)NULL;
 | 
			
		||||
    m_sizerSlider = (wxSizer *)NULL;
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
 | 
			
		||||
    // left pane
 | 
			
		||||
    wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set style"));
 | 
			
		||||
    wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    m_chkVert = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Vertical"));
 | 
			
		||||
    m_chkTicks = CreateCheckBoxAndAddToSizer(sizerLeft, _T("Show &ticks"));
 | 
			
		||||
    m_chkLabels = CreateCheckBoxAndAddToSizer(sizerLeft, _T("Show &labels"));
 | 
			
		||||
    m_chkOtherSide = CreateCheckBoxAndAddToSizer
 | 
			
		||||
                     (
 | 
			
		||||
                        sizerLeft,
 | 
			
		||||
                        _T("On &other side"),
 | 
			
		||||
                        SliderPage_OtherSide
 | 
			
		||||
                     );
 | 
			
		||||
 | 
			
		||||
    sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
 | 
			
		||||
 | 
			
		||||
    wxButton *btn = new wxButton(this, SliderPage_Reset, _T("&Reset"));
 | 
			
		||||
    sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
 | 
			
		||||
 | 
			
		||||
    // middle pane
 | 
			
		||||
    wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Change slider value"));
 | 
			
		||||
    wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    wxTextCtrl *text;
 | 
			
		||||
    wxSizer *sizerRow = CreateSizerWithTextAndLabel(_T("Current value"),
 | 
			
		||||
                                                    SliderPage_CurValueText,
 | 
			
		||||
                                                    &text);
 | 
			
		||||
    text->SetEditable(FALSE);
 | 
			
		||||
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(SliderPage_SetValue,
 | 
			
		||||
                                            _T("Set &value"),
 | 
			
		||||
                                            SliderPage_ValueText,
 | 
			
		||||
                                            &m_textValue);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(SliderPage_SetMinAndMax,
 | 
			
		||||
                                            _T("&Min and max"),
 | 
			
		||||
                                            SliderPage_MinText,
 | 
			
		||||
                                            &m_textMin);
 | 
			
		||||
 | 
			
		||||
    m_textMax = new wxTextCtrl(this, SliderPage_MaxText, _T(""));
 | 
			
		||||
    sizerRow->Add(m_textMax, 1, wxLEFT | wxALIGN_CENTRE_VERTICAL, 5);
 | 
			
		||||
 | 
			
		||||
    m_textMin->SetValue(wxString::Format(_T("%lu"), m_min));
 | 
			
		||||
    m_textMax->SetValue(wxString::Format(_T("%lu"), m_max));
 | 
			
		||||
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(SliderPage_SetTickFreq,
 | 
			
		||||
                                            _T("Tick &frequency"),
 | 
			
		||||
                                            SliderPage_TickFreqText,
 | 
			
		||||
                                            &m_textTickFreq);
 | 
			
		||||
 | 
			
		||||
    m_textTickFreq->SetValue(_T("10"));
 | 
			
		||||
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    // right pane
 | 
			
		||||
    wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    sizerRight->SetMinSize(250, 0);
 | 
			
		||||
    m_sizerSlider = sizerRight; // save it to modify it later
 | 
			
		||||
 | 
			
		||||
    Reset();
 | 
			
		||||
    CreateSlider();
 | 
			
		||||
 | 
			
		||||
    // the 3 panes panes compose the window
 | 
			
		||||
    sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
 | 
			
		||||
    sizerTop->Add(sizerMiddle, 1, wxGROW | wxALL, 10);
 | 
			
		||||
    sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
 | 
			
		||||
 | 
			
		||||
    // final initializations
 | 
			
		||||
    SetAutoLayout(TRUE);
 | 
			
		||||
    SetSizer(sizerTop);
 | 
			
		||||
 | 
			
		||||
    sizerTop->Fit(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SliderWidgetsPage::~SliderWidgetsPage()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// operations
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::Reset()
 | 
			
		||||
{
 | 
			
		||||
    m_chkLabels->SetValue(TRUE);
 | 
			
		||||
    m_chkTicks->SetValue(FALSE);
 | 
			
		||||
    m_chkVert->SetValue(FALSE);
 | 
			
		||||
    m_chkOtherSide->SetValue(FALSE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::CreateSlider()
 | 
			
		||||
{
 | 
			
		||||
    int flags = 0;
 | 
			
		||||
 | 
			
		||||
    bool isVert = m_chkVert->GetValue();
 | 
			
		||||
    if ( isVert )
 | 
			
		||||
        flags |= wxSL_VERTICAL;
 | 
			
		||||
    else
 | 
			
		||||
        flags |= wxSL_HORIZONTAL;
 | 
			
		||||
 | 
			
		||||
    if ( m_chkLabels->GetValue() )
 | 
			
		||||
    {
 | 
			
		||||
        flags |= wxSL_LABELS;
 | 
			
		||||
 | 
			
		||||
        if ( m_chkOtherSide->GetValue() )
 | 
			
		||||
            flags |= isVert ? wxSL_RIGHT : wxSL_BOTTOM;
 | 
			
		||||
        else
 | 
			
		||||
            flags |= isVert ? wxSL_LEFT : wxSL_TOP;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ( m_chkTicks->GetValue() )
 | 
			
		||||
    {
 | 
			
		||||
        flags |= wxSL_AUTOTICKS;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    int val = m_min;
 | 
			
		||||
    if ( m_slider )
 | 
			
		||||
    {
 | 
			
		||||
        int valOld = m_slider->GetValue();
 | 
			
		||||
        if ( !IsValidValue(valOld) )
 | 
			
		||||
        {
 | 
			
		||||
            val = valOld;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        m_sizerSlider->Remove(m_slider);
 | 
			
		||||
 | 
			
		||||
        if ( m_sizerSlider->GetChildren().GetCount() )
 | 
			
		||||
        {
 | 
			
		||||
            // we have 2 spacers, remove them too
 | 
			
		||||
            m_sizerSlider->Remove((int)0);
 | 
			
		||||
            m_sizerSlider->Remove((int)0);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        delete m_slider;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_slider = new wxSlider(this, SliderPage_Slider,
 | 
			
		||||
                            val, m_min, m_max,
 | 
			
		||||
                            wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                            flags);
 | 
			
		||||
 | 
			
		||||
    if ( isVert )
 | 
			
		||||
    {
 | 
			
		||||
        m_sizerSlider->Add(0, 0, 1);
 | 
			
		||||
        m_sizerSlider->Add(m_slider, 0, wxGROW | wxALL, 5);
 | 
			
		||||
        m_sizerSlider->Add(0, 0, 1);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        m_sizerSlider->Add(m_slider, 1, wxCENTRE | wxALL, 5);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ( m_chkTicks->GetValue() )
 | 
			
		||||
    {
 | 
			
		||||
        DoSetTickFreq();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_sizerSlider->Layout();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::DoSetTickFreq()
 | 
			
		||||
{
 | 
			
		||||
    long freq;
 | 
			
		||||
    if ( !m_textTickFreq->GetValue().ToLong(&freq) )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogWarning(_T("Invalid slider tick frequency"));
 | 
			
		||||
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_slider->SetTickFreq(freq, 0 /* unused */);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event handlers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    CreateSlider();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnButtonSetTickFreq(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    DoSetTickFreq();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnButtonSetMinAndMax(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    long minNew,
 | 
			
		||||
         maxNew = 0; // init to suppress compiler warning
 | 
			
		||||
    if ( !m_textMin->GetValue().ToLong(&minNew) ||
 | 
			
		||||
         !m_textMax->GetValue().ToLong(&maxNew) ||
 | 
			
		||||
         minNew >= maxNew )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogWarning(_T("Invalid min/max values for the slider."));
 | 
			
		||||
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_min = minNew;
 | 
			
		||||
    m_max = maxNew;
 | 
			
		||||
 | 
			
		||||
    m_slider->SetRange(minNew, maxNew);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnButtonSetValue(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    long val;
 | 
			
		||||
    if ( !m_textValue->GetValue().ToLong(&val) || !IsValidValue(val) )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogWarning(_T("Invalid slider value."));
 | 
			
		||||
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_slider->SetValue(val);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnUpdateUIValueButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    long val;
 | 
			
		||||
    event.Enable( m_textValue->GetValue().ToLong(&val) && IsValidValue(val) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnUpdateUITickFreq(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    long freq;
 | 
			
		||||
    event.Enable( m_chkTicks->GetValue() &&
 | 
			
		||||
                  m_textTickFreq->GetValue().ToLong(&freq) &&
 | 
			
		||||
                  (freq > 0) && (freq <= m_max - m_min) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnUpdateUIMinMaxButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    long mn, mx;
 | 
			
		||||
    event.Enable( m_textMin->GetValue().ToLong(&mn) &&
 | 
			
		||||
                  m_textMax->GetValue().ToLong(&mx) &&
 | 
			
		||||
                  mn < mx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( m_chkVert->GetValue() ||
 | 
			
		||||
                  !m_chkLabels->GetValue() ||
 | 
			
		||||
                  m_chkOtherSide->GetValue() ||
 | 
			
		||||
                  m_chkTicks->GetValue() );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    CreateSlider();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnUpdateUICurValueText(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.SetText( wxString::Format(_T("%d"), m_slider->GetValue()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnUpdateUIOtherSide(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( m_chkLabels->GetValue() );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SliderWidgetsPage::OnSlider(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    int value = event.GetInt();
 | 
			
		||||
 | 
			
		||||
    wxASSERT_MSG( value == m_slider->GetValue(),
 | 
			
		||||
                  _T("slider value should be the same") );
 | 
			
		||||
 | 
			
		||||
    wxLogMessage(_T("Slider value changed, now %d"), value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										419
									
								
								samples/widgets/spinbtn.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										419
									
								
								samples/widgets/spinbtn.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,419 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Program:     wxWindows Widgets Sample
 | 
			
		||||
// Name:        spinbtn.cpp
 | 
			
		||||
// Purpose:     Part of the widgets sample showing wxSpinButton
 | 
			
		||||
// Author:      Vadim Zeitlin
 | 
			
		||||
// Created:     16.04.01
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vadim Zeitlin
 | 
			
		||||
// License:     wxWindows license
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// for compilers that support precompilation, includes "wx/wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// for all others, include the necessary headers
 | 
			
		||||
#ifndef WX_PRECOMP
 | 
			
		||||
    #include "wx/log.h"
 | 
			
		||||
 | 
			
		||||
    #include "wx/button.h"
 | 
			
		||||
    #include "wx/checkbox.h"
 | 
			
		||||
    #include "wx/radiobox.h"
 | 
			
		||||
    #include "wx/statbox.h"
 | 
			
		||||
    #include "wx/textctrl.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/spinbutt.h"
 | 
			
		||||
#include "wx/spinctrl.h"
 | 
			
		||||
 | 
			
		||||
#include "wx/sizer.h"
 | 
			
		||||
 | 
			
		||||
#include "widgets.h"
 | 
			
		||||
 | 
			
		||||
#include "icons/spinbtn.xpm"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// constants
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// control ids
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    SpinBtnPage_Reset = 100,
 | 
			
		||||
    SpinBtnPage_Clear,
 | 
			
		||||
    SpinBtnPage_SetValue,
 | 
			
		||||
    SpinBtnPage_SetMinAndMax,
 | 
			
		||||
    SpinBtnPage_CurValueText,
 | 
			
		||||
    SpinBtnPage_ValueText,
 | 
			
		||||
    SpinBtnPage_MinText,
 | 
			
		||||
    SpinBtnPage_MaxText,
 | 
			
		||||
    SpinBtnPage_SpinBtn,
 | 
			
		||||
    SpinBtnPage_SpinCtrl
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// SpinBtnWidgetsPage
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class SpinBtnWidgetsPage : public WidgetsPage
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    SpinBtnWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
 | 
			
		||||
    virtual ~SpinBtnWidgetsPage();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // event handlers
 | 
			
		||||
    void OnButtonReset(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonClear(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonSetValue(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonSetMinAndMax(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnCheckOrRadioBox(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnSpinBtn(wxCommandEvent& event);
 | 
			
		||||
    void OnSpinBtnUp(wxCommandEvent& event);
 | 
			
		||||
    void OnSpinBtnDown(wxCommandEvent& event);
 | 
			
		||||
    void OnSpinCtrl(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIValueButton(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIMinMaxButton(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIResetButton(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUICurValueText(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    // reset the spinbtn parameters
 | 
			
		||||
    void Reset();
 | 
			
		||||
 | 
			
		||||
    // (re)create the spinbtn
 | 
			
		||||
    void CreateSpin();
 | 
			
		||||
 | 
			
		||||
    // is this spinbtn value in range?
 | 
			
		||||
    bool IsValidValue(int val) const
 | 
			
		||||
        { return (val >= m_min) && (val <= m_max); }
 | 
			
		||||
 | 
			
		||||
    // the spinbtn range
 | 
			
		||||
    int m_min, m_max;
 | 
			
		||||
 | 
			
		||||
    // the controls
 | 
			
		||||
    // ------------
 | 
			
		||||
 | 
			
		||||
    // the check/radio boxes for styles
 | 
			
		||||
    wxCheckBox *m_chkVert,
 | 
			
		||||
               *m_chkWrap;
 | 
			
		||||
 | 
			
		||||
    // the spinbtn and the spinctrl and the sizer containing them
 | 
			
		||||
    wxSpinButton *m_spinbtn;
 | 
			
		||||
    wxSpinCtrl *m_spinctrl;
 | 
			
		||||
 | 
			
		||||
    wxSizer *m_sizerSpin;
 | 
			
		||||
 | 
			
		||||
    // the text entries for set value/range
 | 
			
		||||
    wxTextCtrl *m_textValue,
 | 
			
		||||
               *m_textMin,
 | 
			
		||||
               *m_textMax;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_EVENT_TABLE();
 | 
			
		||||
    DECLARE_WIDGETS_PAGE(SpinBtnWidgetsPage);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event tables
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
BEGIN_EVENT_TABLE(SpinBtnWidgetsPage, WidgetsPage)
 | 
			
		||||
    EVT_BUTTON(SpinBtnPage_Reset, SpinBtnWidgetsPage::OnButtonReset)
 | 
			
		||||
    EVT_BUTTON(SpinBtnPage_SetValue, SpinBtnWidgetsPage::OnButtonSetValue)
 | 
			
		||||
    EVT_BUTTON(SpinBtnPage_SetMinAndMax, SpinBtnWidgetsPage::OnButtonSetMinAndMax)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(SpinBtnPage_SetValue, SpinBtnWidgetsPage::OnUpdateUIValueButton)
 | 
			
		||||
    EVT_UPDATE_UI(SpinBtnPage_SetMinAndMax, SpinBtnWidgetsPage::OnUpdateUIMinMaxButton)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(SpinBtnPage_Reset, SpinBtnWidgetsPage::OnUpdateUIResetButton)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(SpinBtnPage_CurValueText, SpinBtnWidgetsPage::OnUpdateUICurValueText)
 | 
			
		||||
 | 
			
		||||
    EVT_SPIN(SpinBtnPage_SpinBtn, SpinBtnWidgetsPage::OnSpinBtn)
 | 
			
		||||
    EVT_SPIN_UP(SpinBtnPage_SpinBtn, SpinBtnWidgetsPage::OnSpinBtnUp)
 | 
			
		||||
    EVT_SPIN_DOWN(SpinBtnPage_SpinBtn, SpinBtnWidgetsPage::OnSpinBtnDown)
 | 
			
		||||
    EVT_SPINCTRL(SpinBtnPage_SpinCtrl, SpinBtnWidgetsPage::OnSpinCtrl)
 | 
			
		||||
 | 
			
		||||
    EVT_CHECKBOX(-1, SpinBtnWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
    EVT_RADIOBOX(-1, SpinBtnWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
END_EVENT_TABLE()
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_WIDGETS_PAGE(SpinBtnWidgetsPage, _T("Spin"));
 | 
			
		||||
 | 
			
		||||
SpinBtnWidgetsPage::SpinBtnWidgetsPage(wxNotebook *notebook,
 | 
			
		||||
                                       wxImageList *imaglist)
 | 
			
		||||
                  : WidgetsPage(notebook)
 | 
			
		||||
{
 | 
			
		||||
    imaglist->Add(wxBitmap(spinbtn_xpm));
 | 
			
		||||
 | 
			
		||||
    // init everything
 | 
			
		||||
    m_min = 0;
 | 
			
		||||
    m_max = 10;
 | 
			
		||||
 | 
			
		||||
    m_chkVert =
 | 
			
		||||
    m_chkWrap = (wxCheckBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_spinbtn = (wxSpinButton *)NULL;
 | 
			
		||||
    m_sizerSpin = (wxSizer *)NULL;
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
 | 
			
		||||
    // left pane
 | 
			
		||||
    wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set style"));
 | 
			
		||||
    wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    m_chkVert = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Vertical"));
 | 
			
		||||
    m_chkWrap = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Wrap"));
 | 
			
		||||
 | 
			
		||||
    sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
 | 
			
		||||
 | 
			
		||||
    wxButton *btn = new wxButton(this, SpinBtnPage_Reset, _T("&Reset"));
 | 
			
		||||
    sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
 | 
			
		||||
 | 
			
		||||
    // middle pane
 | 
			
		||||
    wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Change spinbtn value"));
 | 
			
		||||
    wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    wxTextCtrl *text;
 | 
			
		||||
    wxSizer *sizerRow = CreateSizerWithTextAndLabel(_T("Current value"),
 | 
			
		||||
                                                    SpinBtnPage_CurValueText,
 | 
			
		||||
                                                    &text);
 | 
			
		||||
    text->SetEditable(FALSE);
 | 
			
		||||
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(SpinBtnPage_SetValue,
 | 
			
		||||
                                            _T("Set &value"),
 | 
			
		||||
                                            SpinBtnPage_ValueText,
 | 
			
		||||
                                            &m_textValue);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(SpinBtnPage_SetMinAndMax,
 | 
			
		||||
                                            _T("&Min and max"),
 | 
			
		||||
                                            SpinBtnPage_MinText,
 | 
			
		||||
                                            &m_textMin);
 | 
			
		||||
 | 
			
		||||
    m_textMax = new wxTextCtrl(this, SpinBtnPage_MaxText, _T(""));
 | 
			
		||||
    sizerRow->Add(m_textMax, 1, wxLEFT | wxALIGN_CENTRE_VERTICAL, 5);
 | 
			
		||||
 | 
			
		||||
    m_textMin->SetValue(wxString::Format(_T("%lu"), m_min));
 | 
			
		||||
    m_textMax->SetValue(wxString::Format(_T("%lu"), m_max));
 | 
			
		||||
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    // right pane
 | 
			
		||||
    wxSizer *sizerRight = new wxBoxSizer(wxVERTICAL);
 | 
			
		||||
    sizerRight->SetMinSize(250, 0);
 | 
			
		||||
    m_sizerSpin = sizerRight; // save it to modify it later
 | 
			
		||||
 | 
			
		||||
    Reset();
 | 
			
		||||
    CreateSpin();
 | 
			
		||||
 | 
			
		||||
    // the 3 panes panes compose the window
 | 
			
		||||
    sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
 | 
			
		||||
    sizerTop->Add(sizerMiddle, 1, wxGROW | wxALL, 10);
 | 
			
		||||
    sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
 | 
			
		||||
 | 
			
		||||
    // final initializations
 | 
			
		||||
    SetAutoLayout(TRUE);
 | 
			
		||||
    SetSizer(sizerTop);
 | 
			
		||||
 | 
			
		||||
    sizerTop->Fit(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SpinBtnWidgetsPage::~SpinBtnWidgetsPage()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// operations
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::Reset()
 | 
			
		||||
{
 | 
			
		||||
    m_chkVert->SetValue(TRUE);
 | 
			
		||||
    m_chkWrap->SetValue(FALSE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::CreateSpin()
 | 
			
		||||
{
 | 
			
		||||
    int flags = 0;
 | 
			
		||||
 | 
			
		||||
    bool isVert = m_chkVert->GetValue();
 | 
			
		||||
    if ( isVert )
 | 
			
		||||
        flags |= wxSP_VERTICAL;
 | 
			
		||||
    else
 | 
			
		||||
        flags |= wxSP_HORIZONTAL;
 | 
			
		||||
 | 
			
		||||
    if ( m_chkWrap->GetValue() )
 | 
			
		||||
        flags |= wxSP_WRAP;
 | 
			
		||||
 | 
			
		||||
    int val = m_min;
 | 
			
		||||
    if ( m_spinbtn )
 | 
			
		||||
    {
 | 
			
		||||
        int valOld = m_spinbtn->GetValue();
 | 
			
		||||
        if ( !IsValidValue(valOld) )
 | 
			
		||||
        {
 | 
			
		||||
            val = valOld;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        m_sizerSpin->Remove(m_spinbtn);
 | 
			
		||||
        m_sizerSpin->Remove(m_spinctrl);
 | 
			
		||||
 | 
			
		||||
        // there are 3 spacers left
 | 
			
		||||
        m_sizerSpin->Remove((int)0);
 | 
			
		||||
        m_sizerSpin->Remove((int)0);
 | 
			
		||||
        m_sizerSpin->Remove((int)0);
 | 
			
		||||
 | 
			
		||||
        delete m_spinbtn;
 | 
			
		||||
        delete m_spinctrl;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_spinbtn = new wxSpinButton(this, SpinBtnPage_SpinBtn,
 | 
			
		||||
                                 wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                 flags);
 | 
			
		||||
 | 
			
		||||
    m_spinbtn->SetValue(val);
 | 
			
		||||
    m_spinbtn->SetRange(m_min, m_max);
 | 
			
		||||
 | 
			
		||||
    m_spinctrl = new wxSpinCtrl(this, SpinBtnPage_SpinCtrl,
 | 
			
		||||
                                wxString::Format(_T("%d"), val),
 | 
			
		||||
                                wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                flags,
 | 
			
		||||
                                m_min, m_max, val);
 | 
			
		||||
 | 
			
		||||
    m_sizerSpin->Add(0, 0, 1);
 | 
			
		||||
    m_sizerSpin->Add(m_spinbtn, 0, wxALIGN_CENTRE | wxALL, 5);
 | 
			
		||||
    m_sizerSpin->Add(0, 0, 1);
 | 
			
		||||
    m_sizerSpin->Add(m_spinctrl, 0, wxALIGN_CENTRE | wxALL, 5);
 | 
			
		||||
    m_sizerSpin->Add(0, 0, 1);
 | 
			
		||||
 | 
			
		||||
    m_sizerSpin->Layout();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event handlers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    CreateSpin();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::OnButtonSetMinAndMax(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    long minNew,
 | 
			
		||||
         maxNew = 0; // init to suppress compiler warning
 | 
			
		||||
    if ( !m_textMin->GetValue().ToLong(&minNew) ||
 | 
			
		||||
         !m_textMax->GetValue().ToLong(&maxNew) ||
 | 
			
		||||
         minNew >= maxNew )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogWarning(_T("Invalid min/max values for the spinbtn."));
 | 
			
		||||
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_min = minNew;
 | 
			
		||||
    m_max = maxNew;
 | 
			
		||||
 | 
			
		||||
    m_spinbtn->SetRange(minNew, maxNew);
 | 
			
		||||
    m_spinctrl->SetRange(minNew, maxNew);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::OnButtonSetValue(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    long val;
 | 
			
		||||
    if ( !m_textValue->GetValue().ToLong(&val) || !IsValidValue(val) )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogWarning(_T("Invalid spinbtn value."));
 | 
			
		||||
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_spinbtn->SetValue(val);
 | 
			
		||||
    m_spinctrl->SetValue(val);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::OnUpdateUIValueButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    long val;
 | 
			
		||||
    event.Enable( m_textValue->GetValue().ToLong(&val) && IsValidValue(val) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::OnUpdateUIMinMaxButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    long mn, mx;
 | 
			
		||||
    event.Enable( m_textMin->GetValue().ToLong(&mn) &&
 | 
			
		||||
                  m_textMax->GetValue().ToLong(&mx) &&
 | 
			
		||||
                  mn < mx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( !m_chkVert->GetValue() || m_chkWrap->GetValue() );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    CreateSpin();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::OnUpdateUICurValueText(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.SetText( wxString::Format(_T("%d"), m_spinbtn->GetValue()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::OnSpinBtn(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    int value = event.GetInt();
 | 
			
		||||
 | 
			
		||||
    wxASSERT_MSG( value == m_spinbtn->GetValue(),
 | 
			
		||||
                  _T("spinbtn value should be the same") );
 | 
			
		||||
 | 
			
		||||
    wxLogMessage(_T("Spin button value changed, now %d"), value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::OnSpinBtnUp(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    wxLogMessage(_T("Spin button value incremented, will be %d (was %d)"),
 | 
			
		||||
                 event.GetInt(), m_spinbtn->GetValue());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::OnSpinBtnDown(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    wxLogMessage(_T("Spin button value decremented, will be %d (was %d)"),
 | 
			
		||||
                 event.GetInt(), m_spinbtn->GetValue());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SpinBtnWidgetsPage::OnSpinCtrl(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    int value = event.GetInt();
 | 
			
		||||
 | 
			
		||||
    wxASSERT_MSG( value == m_spinctrl->GetValue(),
 | 
			
		||||
                  _T("spinctrl value should be the same") );
 | 
			
		||||
 | 
			
		||||
    wxLogMessage(_T("Spin control value changed, now %d"), value);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										369
									
								
								samples/widgets/static.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										369
									
								
								samples/widgets/static.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,369 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Program:     wxWindows Widgets Sample
 | 
			
		||||
// Name:        static.cpp
 | 
			
		||||
// Purpose:     Part of the widgets sample showing various static controls
 | 
			
		||||
// Author:      Vadim Zeitlin
 | 
			
		||||
// Created:     11.04.01
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vadim Zeitlin
 | 
			
		||||
// License:     wxWindows license
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// for compilers that support precompilation, includes "wx/wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// for all others, include the necessary headers
 | 
			
		||||
#ifndef WX_PRECOMP
 | 
			
		||||
    #include "wx/log.h"
 | 
			
		||||
 | 
			
		||||
    #include "wx/button.h"
 | 
			
		||||
    #include "wx/checkbox.h"
 | 
			
		||||
    #include "wx/radiobox.h"
 | 
			
		||||
    #include "wx/statbox.h"
 | 
			
		||||
    #include "wx/stattext.h"
 | 
			
		||||
    #include "wx/textctrl.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/sizer.h"
 | 
			
		||||
 | 
			
		||||
#include "wx/statline.h"
 | 
			
		||||
 | 
			
		||||
#include "widgets.h"
 | 
			
		||||
 | 
			
		||||
#include "icons/statbox.xpm"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// constants
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// control ids
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    StaticPage_Reset = 100,
 | 
			
		||||
    StaticPage_BoxText,
 | 
			
		||||
    StaticPage_LabelText
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// alignment radiobox values
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    StaticHAlign_Left,
 | 
			
		||||
    StaticHAlign_Centre,
 | 
			
		||||
    StaticHAlign_Right,
 | 
			
		||||
    StaticHAlign_Max
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    StaticVAlign_Top,
 | 
			
		||||
    StaticVAlign_Centre,
 | 
			
		||||
    StaticVAlign_Bottom,
 | 
			
		||||
    StaticVAlign_Max
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// StaticWidgetsPage
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class StaticWidgetsPage : public WidgetsPage
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    StaticWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
 | 
			
		||||
    virtual ~StaticWidgetsPage();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // event handlers
 | 
			
		||||
    void OnCheckOrRadioBox(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnButtonReset(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonBoxText(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonLabelText(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    // reset all parameters
 | 
			
		||||
    void Reset();
 | 
			
		||||
 | 
			
		||||
    // (re)create all controls
 | 
			
		||||
    void CreateStatic();
 | 
			
		||||
 | 
			
		||||
    // the controls
 | 
			
		||||
    // ------------
 | 
			
		||||
 | 
			
		||||
    // the check/radio boxes for styles
 | 
			
		||||
    wxCheckBox *m_chkVert,
 | 
			
		||||
               *m_chkAutoResize;
 | 
			
		||||
 | 
			
		||||
    wxRadioBox *m_radioHAlign,
 | 
			
		||||
               *m_radioVAlign;
 | 
			
		||||
 | 
			
		||||
    // the controls and the sizer containing them
 | 
			
		||||
    wxStaticBoxSizer *m_sizerStatBox;
 | 
			
		||||
    wxStaticText *m_statText;
 | 
			
		||||
    wxStaticLine *m_statLine;
 | 
			
		||||
    wxSizer *m_sizerStatic;
 | 
			
		||||
 | 
			
		||||
    // the text entries for command parameters
 | 
			
		||||
    wxTextCtrl *m_textBox,
 | 
			
		||||
               *m_textLabel;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    DECLARE_EVENT_TABLE();
 | 
			
		||||
    DECLARE_WIDGETS_PAGE(StaticWidgetsPage);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event tables
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
BEGIN_EVENT_TABLE(StaticWidgetsPage, WidgetsPage)
 | 
			
		||||
    EVT_BUTTON(StaticPage_Reset, StaticWidgetsPage::OnButtonReset)
 | 
			
		||||
    EVT_BUTTON(StaticPage_LabelText, StaticWidgetsPage::OnButtonLabelText)
 | 
			
		||||
    EVT_BUTTON(StaticPage_BoxText, StaticWidgetsPage::OnButtonBoxText)
 | 
			
		||||
 | 
			
		||||
    EVT_CHECKBOX(-1, StaticWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
    EVT_RADIOBOX(-1, StaticWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
END_EVENT_TABLE()
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_WIDGETS_PAGE(StaticWidgetsPage, _T("Static"));
 | 
			
		||||
 | 
			
		||||
StaticWidgetsPage::StaticWidgetsPage(wxNotebook *notebook,
 | 
			
		||||
                                       wxImageList *imaglist)
 | 
			
		||||
                  : WidgetsPage(notebook)
 | 
			
		||||
{
 | 
			
		||||
    imaglist->Add(wxBitmap(statbox_xpm));
 | 
			
		||||
 | 
			
		||||
    // init everything
 | 
			
		||||
    m_chkVert =
 | 
			
		||||
    m_chkAutoResize = (wxCheckBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_radioHAlign =
 | 
			
		||||
    m_radioVAlign = (wxRadioBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_statLine = (wxStaticLine *)NULL;
 | 
			
		||||
    m_statText = (wxStaticText *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_sizerStatBox = (wxStaticBoxSizer *)NULL;
 | 
			
		||||
    m_sizerStatic = (wxSizer *)NULL;
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
 | 
			
		||||
    // left pane
 | 
			
		||||
    wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set style"));
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    m_chkVert = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Vertical line"));
 | 
			
		||||
    m_chkAutoResize = CreateCheckBoxAndAddToSizer(sizerLeft, _T("&Fit to text"));
 | 
			
		||||
    sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
 | 
			
		||||
 | 
			
		||||
    static const wxString halign[] =
 | 
			
		||||
    {
 | 
			
		||||
        _T("left"),
 | 
			
		||||
        _T("centre"),
 | 
			
		||||
        _T("right"),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const wxString valign[] =
 | 
			
		||||
    {
 | 
			
		||||
        _T("top"),
 | 
			
		||||
        _T("centre"),
 | 
			
		||||
        _T("bottom"),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    m_radioHAlign = new wxRadioBox(this, -1, _T("&Horz alignment"),
 | 
			
		||||
                                   wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                   WXSIZEOF(halign), halign);
 | 
			
		||||
    m_radioVAlign = new wxRadioBox(this, -1, _T("&Vert alignment"),
 | 
			
		||||
                                   wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                   WXSIZEOF(valign), valign);
 | 
			
		||||
 | 
			
		||||
    sizerLeft->Add(m_radioHAlign, 0, wxGROW | wxALL, 5);
 | 
			
		||||
    sizerLeft->Add(m_radioVAlign, 0, wxGROW | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    wxButton *btn = new wxButton(this, StaticPage_Reset, _T("&Reset"));
 | 
			
		||||
    sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
 | 
			
		||||
 | 
			
		||||
    // middle pane
 | 
			
		||||
    wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Change labels"));
 | 
			
		||||
    wxSizer *sizerMiddle = new wxStaticBoxSizer(box2, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerRow;
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(StaticPage_BoxText,
 | 
			
		||||
                                            _T("Change &box label"),
 | 
			
		||||
                                            -1, &m_textBox);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    sizerRow = CreateSizerWithTextAndButton(StaticPage_LabelText,
 | 
			
		||||
                                            _T("Change &text label"),
 | 
			
		||||
                                            -1, &m_textLabel);
 | 
			
		||||
    sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    m_textBox->SetValue(_T("This is a box"));
 | 
			
		||||
    m_textLabel->SetValue(_T("And this is a label\ninside the box"));
 | 
			
		||||
 | 
			
		||||
    // right pane
 | 
			
		||||
    wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    sizerRight->SetMinSize(250, 0);
 | 
			
		||||
    m_sizerStatic = sizerRight;
 | 
			
		||||
 | 
			
		||||
    CreateStatic();
 | 
			
		||||
 | 
			
		||||
    // the 3 panes panes compose the window
 | 
			
		||||
    sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
 | 
			
		||||
    sizerTop->Add(sizerMiddle, 1, wxGROW | wxALL, 10);
 | 
			
		||||
    sizerTop->Add(sizerRight, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
 | 
			
		||||
 | 
			
		||||
    // final initializations
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    SetAutoLayout(TRUE);
 | 
			
		||||
    SetSizer(sizerTop);
 | 
			
		||||
 | 
			
		||||
    sizerTop->Fit(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
StaticWidgetsPage::~StaticWidgetsPage()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// operations
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void StaticWidgetsPage::Reset()
 | 
			
		||||
{
 | 
			
		||||
    m_chkVert->SetValue(FALSE);
 | 
			
		||||
    m_chkAutoResize->SetValue(TRUE);
 | 
			
		||||
 | 
			
		||||
    m_radioHAlign->SetSelection(StaticHAlign_Left);
 | 
			
		||||
    m_radioVAlign->SetSelection(StaticVAlign_Top);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void StaticWidgetsPage::CreateStatic()
 | 
			
		||||
{
 | 
			
		||||
    bool isVert = m_chkVert->GetValue();
 | 
			
		||||
 | 
			
		||||
    if ( m_sizerStatBox )
 | 
			
		||||
    {
 | 
			
		||||
        m_sizerStatic->Remove(m_sizerStatBox);
 | 
			
		||||
 | 
			
		||||
        // delete m_sizerStatBox; -- deleted by Remove()
 | 
			
		||||
        delete m_statText;
 | 
			
		||||
        delete m_statLine;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    int flagsBox = 0,
 | 
			
		||||
        flagsText = 0;
 | 
			
		||||
 | 
			
		||||
    if ( !m_chkAutoResize->GetValue() )
 | 
			
		||||
    {
 | 
			
		||||
        flagsText |= wxST_NO_AUTORESIZE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    int align = 0;
 | 
			
		||||
    switch ( m_radioHAlign->GetSelection() )
 | 
			
		||||
    {
 | 
			
		||||
        default:
 | 
			
		||||
            wxFAIL_MSG(_T("unexpected radiobox selection"));
 | 
			
		||||
            // fall through
 | 
			
		||||
 | 
			
		||||
        case StaticHAlign_Left:
 | 
			
		||||
            align |= wxALIGN_LEFT;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case StaticHAlign_Centre:
 | 
			
		||||
            align |= wxALIGN_CENTRE_HORIZONTAL;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case StaticHAlign_Right:
 | 
			
		||||
            align |= wxALIGN_RIGHT;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch ( m_radioVAlign->GetSelection() )
 | 
			
		||||
    {
 | 
			
		||||
        default:
 | 
			
		||||
            wxFAIL_MSG(_T("unexpected radiobox selection"));
 | 
			
		||||
            // fall through
 | 
			
		||||
 | 
			
		||||
        case StaticVAlign_Top:
 | 
			
		||||
            align |= wxALIGN_TOP;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case StaticVAlign_Centre:
 | 
			
		||||
            align |= wxALIGN_CENTRE_VERTICAL;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case StaticVAlign_Bottom:
 | 
			
		||||
            align |= wxALIGN_BOTTOM;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    flagsText |= align;
 | 
			
		||||
    flagsBox |= align;
 | 
			
		||||
 | 
			
		||||
    wxStaticBox *box = new wxStaticBox(this, -1, m_textBox->GetValue(),
 | 
			
		||||
                                       wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                       flagsBox);
 | 
			
		||||
    m_sizerStatBox = new wxStaticBoxSizer(box, isVert ? wxHORIZONTAL
 | 
			
		||||
                                                      : wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    m_statText = new wxStaticText(this, -1, m_textLabel->GetValue(),
 | 
			
		||||
                                  wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                  flagsText);
 | 
			
		||||
 | 
			
		||||
    m_statLine = new wxStaticLine(this, -1,
 | 
			
		||||
                                  wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                  isVert ? wxLI_VERTICAL : wxLI_HORIZONTAL);
 | 
			
		||||
 | 
			
		||||
    m_sizerStatBox->Add(m_statText, 1, wxGROW | wxALL, 5);
 | 
			
		||||
    m_sizerStatBox->Add(m_statLine, 0, wxGROW | wxALL, 5);
 | 
			
		||||
    m_sizerStatBox->Add(0, 0, 1);
 | 
			
		||||
 | 
			
		||||
    m_sizerStatic->Add(m_sizerStatBox, 1, wxGROW);
 | 
			
		||||
 | 
			
		||||
    m_sizerStatic->Layout();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event handlers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void StaticWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    CreateStatic();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void StaticWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    CreateStatic();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void StaticWidgetsPage::OnButtonBoxText(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    m_sizerStatBox->GetStaticBox()->SetLabel(m_textBox->GetValue());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void StaticWidgetsPage::OnButtonLabelText(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    m_statText->SetLabel(m_textLabel->GetValue());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										658
									
								
								samples/widgets/textctrl.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										658
									
								
								samples/widgets/textctrl.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,658 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Program:     wxWindows Widgets Sample
 | 
			
		||||
// Name:        textctrl.cpp
 | 
			
		||||
// Purpose:     part of the widgets sample showing wxTextCtrl
 | 
			
		||||
// Author:      Vadim Zeitlin
 | 
			
		||||
// Created:     27.03.01
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vadim Zeitlin
 | 
			
		||||
// License:     wxWindows license
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// for compilers that support precompilation, includes "wx/wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// for all others, include the necessary headers
 | 
			
		||||
#ifndef WX_PRECOMP
 | 
			
		||||
    #include "wx/log.h"
 | 
			
		||||
    #include "wx/timer.h"
 | 
			
		||||
 | 
			
		||||
    #include "wx/button.h"
 | 
			
		||||
    #include "wx/checkbox.h"
 | 
			
		||||
    #include "wx/radiobox.h"
 | 
			
		||||
    #include "wx/statbox.h"
 | 
			
		||||
    #include "wx/stattext.h"
 | 
			
		||||
    #include "wx/textctrl.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/sizer.h"
 | 
			
		||||
 | 
			
		||||
#include "widgets.h"
 | 
			
		||||
 | 
			
		||||
#include "icons/text.xpm"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// constants
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// control ids
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    TextPage_Reset = 100,
 | 
			
		||||
 | 
			
		||||
    TextPage_Set,
 | 
			
		||||
    TextPage_Add,
 | 
			
		||||
    TextPage_Insert,
 | 
			
		||||
    TextPage_Clear,
 | 
			
		||||
    TextPage_Load,
 | 
			
		||||
 | 
			
		||||
    TextPage_Password,
 | 
			
		||||
    TextPage_WrapLines,
 | 
			
		||||
    TextPage_Textctrl
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// textctrl line number radiobox values
 | 
			
		||||
enum TextLines
 | 
			
		||||
{
 | 
			
		||||
    TextLines_Single,
 | 
			
		||||
    TextLines_Multi
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// default values for the controls
 | 
			
		||||
static const struct ControlValues
 | 
			
		||||
{
 | 
			
		||||
    TextLines textLines;
 | 
			
		||||
    bool password;
 | 
			
		||||
    bool wraplines;
 | 
			
		||||
    bool readonly;
 | 
			
		||||
} DEFAULTS =
 | 
			
		||||
{
 | 
			
		||||
    TextLines_Multi,    // multiline
 | 
			
		||||
    FALSE,              // not password
 | 
			
		||||
    TRUE,               // do wrap lines
 | 
			
		||||
    FALSE               // not readonly
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// TextWidgetsPage
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// Define a new frame type: this is going to be our main frame
 | 
			
		||||
class TextWidgetsPage : public WidgetsPage
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    // ctor(s) and dtor
 | 
			
		||||
    TextWidgetsPage(wxNotebook *notebook, wxImageList *imaglist);
 | 
			
		||||
    virtual ~TextWidgetsPage();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // create an info text contorl
 | 
			
		||||
    wxTextCtrl *CreateInfoText();
 | 
			
		||||
 | 
			
		||||
    // create a horz sizer holding a static text and this text control
 | 
			
		||||
    wxSizer *CreateTextWithLabelSizer(const wxString& label,
 | 
			
		||||
                                      wxTextCtrl *text,
 | 
			
		||||
                                      const wxString& label2 = wxEmptyString,
 | 
			
		||||
                                      wxTextCtrl *text2 = NULL);
 | 
			
		||||
 | 
			
		||||
    // event handlers
 | 
			
		||||
    void OnButtonReset(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonClearLog(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnButtonSet(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonAdd(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonInsert(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonClear(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonLoad(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnButtonQuit(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnText(wxCommandEvent& event);
 | 
			
		||||
    void OnTextEnter(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnCheckOrRadioBox(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIClearButton(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIPasswordCheckbox(wxUpdateUIEvent& event);
 | 
			
		||||
    void OnUpdateUIWrapLinesCheckbox(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnUpdateUIResetButton(wxUpdateUIEvent& event);
 | 
			
		||||
 | 
			
		||||
    void OnIdle(wxIdleEvent& event);
 | 
			
		||||
 | 
			
		||||
    // reset the textctrl parameters
 | 
			
		||||
    void Reset();
 | 
			
		||||
 | 
			
		||||
    // (re)create the textctrl
 | 
			
		||||
    void CreateText();
 | 
			
		||||
 | 
			
		||||
    // is the control currently single line?
 | 
			
		||||
    bool IsSingleLine() const
 | 
			
		||||
    {
 | 
			
		||||
        return m_radioTextLines->GetSelection() == TextLines_Single;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // the controls
 | 
			
		||||
    // ------------
 | 
			
		||||
 | 
			
		||||
    // the radiobox to choose between single and multi line
 | 
			
		||||
    wxRadioBox *m_radioTextLines;
 | 
			
		||||
 | 
			
		||||
    // the checkboxes controlling text ctrl styles
 | 
			
		||||
    wxCheckBox *m_chkPassword,
 | 
			
		||||
               *m_chkWrapLines,
 | 
			
		||||
               *m_chkReadonly;
 | 
			
		||||
 | 
			
		||||
    // the textctrl itself and the sizer it is in
 | 
			
		||||
    wxTextCtrl *m_text;
 | 
			
		||||
    wxSizer *m_sizerText;
 | 
			
		||||
 | 
			
		||||
    // the information text zones
 | 
			
		||||
    wxTextCtrl *m_textPosCur,
 | 
			
		||||
               *m_textRowCur,
 | 
			
		||||
               *m_textColCur,
 | 
			
		||||
               *m_textPosLast,
 | 
			
		||||
               *m_textLineLast,
 | 
			
		||||
               *m_textSelFrom,
 | 
			
		||||
               *m_textSelTo;
 | 
			
		||||
 | 
			
		||||
    // and the data to show in them
 | 
			
		||||
    long m_posCur,
 | 
			
		||||
         m_posLast,
 | 
			
		||||
         m_selFrom,
 | 
			
		||||
         m_selTo;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    // any class wishing to process wxWindows events must use this macro
 | 
			
		||||
    DECLARE_EVENT_TABLE();
 | 
			
		||||
 | 
			
		||||
    DECLARE_WIDGETS_PAGE(TextWidgetsPage);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event tables
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
BEGIN_EVENT_TABLE(TextWidgetsPage, WidgetsPage)
 | 
			
		||||
    EVT_IDLE(TextWidgetsPage::OnIdle)
 | 
			
		||||
 | 
			
		||||
    EVT_BUTTON(TextPage_Reset, TextWidgetsPage::OnButtonReset)
 | 
			
		||||
 | 
			
		||||
    EVT_BUTTON(TextPage_Clear, TextWidgetsPage::OnButtonClear)
 | 
			
		||||
    EVT_BUTTON(TextPage_Set, TextWidgetsPage::OnButtonSet)
 | 
			
		||||
    EVT_BUTTON(TextPage_Add, TextWidgetsPage::OnButtonAdd)
 | 
			
		||||
    EVT_BUTTON(TextPage_Insert, TextWidgetsPage::OnButtonInsert)
 | 
			
		||||
    EVT_BUTTON(TextPage_Load, TextWidgetsPage::OnButtonLoad)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(TextPage_Clear, TextWidgetsPage::OnUpdateUIClearButton)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(TextPage_Password, TextWidgetsPage::OnUpdateUIPasswordCheckbox)
 | 
			
		||||
    EVT_UPDATE_UI(TextPage_WrapLines, TextWidgetsPage::OnUpdateUIWrapLinesCheckbox)
 | 
			
		||||
 | 
			
		||||
    EVT_UPDATE_UI(TextPage_Reset, TextWidgetsPage::OnUpdateUIResetButton)
 | 
			
		||||
 | 
			
		||||
    EVT_TEXT(TextPage_Textctrl, TextWidgetsPage::OnText)
 | 
			
		||||
    EVT_TEXT_ENTER(TextPage_Textctrl, TextWidgetsPage::OnTextEnter)
 | 
			
		||||
 | 
			
		||||
    EVT_CHECKBOX(-1, TextWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
    EVT_RADIOBOX(-1, TextWidgetsPage::OnCheckOrRadioBox)
 | 
			
		||||
END_EVENT_TABLE()
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_WIDGETS_PAGE(TextWidgetsPage, _T("Text"));
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// TextWidgetsPage creation
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
TextWidgetsPage::TextWidgetsPage(wxNotebook *notebook, wxImageList *imaglist)
 | 
			
		||||
               : WidgetsPage(notebook)
 | 
			
		||||
{
 | 
			
		||||
    imaglist->Add(wxBitmap(text_xpm));
 | 
			
		||||
 | 
			
		||||
    // init everything
 | 
			
		||||
    m_radioTextLines = (wxRadioBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_chkPassword =
 | 
			
		||||
    m_chkWrapLines =
 | 
			
		||||
    m_chkReadonly = (wxCheckBox *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_text =
 | 
			
		||||
    m_textPosCur =
 | 
			
		||||
    m_textRowCur =
 | 
			
		||||
    m_textColCur =
 | 
			
		||||
    m_textPosLast =
 | 
			
		||||
    m_textLineLast =
 | 
			
		||||
    m_textSelFrom =
 | 
			
		||||
    m_textSelTo = (wxTextCtrl *)NULL;
 | 
			
		||||
    m_sizerText = (wxSizer *)NULL;
 | 
			
		||||
 | 
			
		||||
    m_posCur =
 | 
			
		||||
    m_posLast =
 | 
			
		||||
    m_selFrom =
 | 
			
		||||
    m_selTo = -2; // not -1 which means "no selection"
 | 
			
		||||
 | 
			
		||||
    // left pane
 | 
			
		||||
    static const wxString modes[] =
 | 
			
		||||
    {
 | 
			
		||||
        _T("single line"),
 | 
			
		||||
        _T("multi line"),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    wxStaticBox *box = new wxStaticBox(this, -1, _T("&Set textctrl parameters"));
 | 
			
		||||
    m_radioTextLines = new wxRadioBox(this, -1, _T("&Number of lines:"),
 | 
			
		||||
                                      wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                                      WXSIZEOF(modes), modes,
 | 
			
		||||
                                      1, wxRA_SPECIFY_COLS);
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    sizerLeft->Add(m_radioTextLines, 0, wxGROW | wxALL, 5);
 | 
			
		||||
    sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
 | 
			
		||||
 | 
			
		||||
    m_chkPassword = CreateCheckBoxAndAddToSizer(
 | 
			
		||||
                        sizerLeft, _T("&Password control"), TextPage_Password
 | 
			
		||||
                    );
 | 
			
		||||
    m_chkWrapLines = CreateCheckBoxAndAddToSizer(
 | 
			
		||||
                        sizerLeft, _T("Line &wrap"), TextPage_WrapLines
 | 
			
		||||
                     );
 | 
			
		||||
    m_chkReadonly = CreateCheckBoxAndAddToSizer(
 | 
			
		||||
                        sizerLeft, _T("&Read-only mode")
 | 
			
		||||
                    );
 | 
			
		||||
 | 
			
		||||
    wxButton *btn = new wxButton(this, TextPage_Reset, _T("&Reset"));
 | 
			
		||||
    sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
 | 
			
		||||
 | 
			
		||||
    // middle pane
 | 
			
		||||
    wxStaticBox *box2 = new wxStaticBox(this, -1, _T("&Change contents:"));
 | 
			
		||||
    wxSizer *sizerMiddleUp = new wxStaticBoxSizer(box2, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, TextPage_Set, _T("&Set text value"));
 | 
			
		||||
    sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, TextPage_Add, _T("&Append text"));
 | 
			
		||||
    sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, TextPage_Insert, _T("&Insert text"));
 | 
			
		||||
    sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, TextPage_Load, _T("&Load file"));
 | 
			
		||||
    sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    btn = new wxButton(this, TextPage_Clear, _T("&Clear"));
 | 
			
		||||
    sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5);
 | 
			
		||||
 | 
			
		||||
    wxStaticBox *box4 = new wxStaticBox(this, -1, _T("&Info:"));
 | 
			
		||||
    wxSizer *sizerMiddleDown = new wxStaticBoxSizer(box4, wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    m_textPosCur = CreateInfoText();
 | 
			
		||||
    m_textRowCur = CreateInfoText();
 | 
			
		||||
    m_textColCur = CreateInfoText();
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerRow = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    sizerRow->Add(CreateTextWithLabelSizer
 | 
			
		||||
                  (
 | 
			
		||||
                    _T("Current pos:"),
 | 
			
		||||
                    m_textPosCur
 | 
			
		||||
                  ),
 | 
			
		||||
                  0, wxRIGHT, 5);
 | 
			
		||||
    sizerRow->Add(CreateTextWithLabelSizer
 | 
			
		||||
                  (
 | 
			
		||||
                    _T("Col:"),
 | 
			
		||||
                    m_textColCur
 | 
			
		||||
                  ),
 | 
			
		||||
                  0, wxLEFT | wxRIGHT, 5);
 | 
			
		||||
    sizerRow->Add(CreateTextWithLabelSizer
 | 
			
		||||
                  (
 | 
			
		||||
                    _T("Row:"),
 | 
			
		||||
                    m_textRowCur
 | 
			
		||||
                  ),
 | 
			
		||||
                  0, wxLEFT, 5);
 | 
			
		||||
    sizerMiddleDown->Add(sizerRow, 0, wxALL, 5);
 | 
			
		||||
 | 
			
		||||
    m_textLineLast = CreateInfoText();
 | 
			
		||||
    m_textPosLast = CreateInfoText();
 | 
			
		||||
    sizerMiddleDown->Add
 | 
			
		||||
                     (
 | 
			
		||||
                        CreateTextWithLabelSizer
 | 
			
		||||
                        (
 | 
			
		||||
                          _T("Number of lines:"),
 | 
			
		||||
                          m_textLineLast,
 | 
			
		||||
                          _T("Last position:"),
 | 
			
		||||
                          m_textPosLast
 | 
			
		||||
                        ),
 | 
			
		||||
                        0, wxALL, 5
 | 
			
		||||
                     );
 | 
			
		||||
 | 
			
		||||
    m_textSelFrom = CreateInfoText();
 | 
			
		||||
    m_textSelTo = CreateInfoText();
 | 
			
		||||
    sizerMiddleDown->Add
 | 
			
		||||
                     (
 | 
			
		||||
                        CreateTextWithLabelSizer
 | 
			
		||||
                        (
 | 
			
		||||
                          _T("Selection: from"),
 | 
			
		||||
                          m_textSelFrom,
 | 
			
		||||
                          _T("to"),
 | 
			
		||||
                          m_textSelTo
 | 
			
		||||
                        ),
 | 
			
		||||
                        0, wxALL, 5
 | 
			
		||||
                     );
 | 
			
		||||
    wxSizer *sizerMiddle = new wxBoxSizer(wxVERTICAL);
 | 
			
		||||
    sizerMiddle->Add(sizerMiddleUp, 0, wxGROW);
 | 
			
		||||
    sizerMiddle->Add(sizerMiddleDown, 1, wxGROW | wxTOP, 5);
 | 
			
		||||
 | 
			
		||||
    // right pane
 | 
			
		||||
    wxStaticBox *box3 = new wxStaticBox(this, -1, _T("&Text:"));
 | 
			
		||||
    m_sizerText = new wxStaticBoxSizer(box3, wxHORIZONTAL);
 | 
			
		||||
    Reset();
 | 
			
		||||
    CreateText();
 | 
			
		||||
    m_sizerText->SetMinSize(250, 0);
 | 
			
		||||
 | 
			
		||||
    // the 3 panes panes compose the upper part of the window
 | 
			
		||||
    wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
 | 
			
		||||
    sizerTop->Add(sizerMiddle, 0, wxGROW | wxALL, 10);
 | 
			
		||||
    sizerTop->Add(m_sizerText, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
 | 
			
		||||
 | 
			
		||||
    SetAutoLayout(TRUE);
 | 
			
		||||
    SetSizer(sizerTop);
 | 
			
		||||
 | 
			
		||||
    sizerTop->Fit(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TextWidgetsPage::~TextWidgetsPage()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// creation helpers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
wxTextCtrl *TextWidgetsPage::CreateInfoText()
 | 
			
		||||
{
 | 
			
		||||
    static int s_maxWidth = 0;
 | 
			
		||||
    if ( !s_maxWidth )
 | 
			
		||||
    {
 | 
			
		||||
        // calc it once only
 | 
			
		||||
        GetTextExtent(_T("9999999"), &s_maxWidth, NULL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    wxTextCtrl *text = new wxTextCtrl(this, -1, _T(""),
 | 
			
		||||
                                      wxDefaultPosition,
 | 
			
		||||
                                      wxSize(s_maxWidth, -1),
 | 
			
		||||
                                      wxTE_READONLY);
 | 
			
		||||
    return text;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxSizer *TextWidgetsPage::CreateTextWithLabelSizer(const wxString& label,
 | 
			
		||||
                                                 wxTextCtrl *text,
 | 
			
		||||
                                                 const wxString& label2,
 | 
			
		||||
                                                 wxTextCtrl *text2)
 | 
			
		||||
{
 | 
			
		||||
    wxSizer *sizerRow = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    sizerRow->Add(new wxStaticText(this, -1, label), 0,
 | 
			
		||||
                  wxALIGN_CENTRE_VERTICAL | wxRIGHT, 5);
 | 
			
		||||
    sizerRow->Add(text, 0, wxALIGN_CENTRE_VERTICAL);
 | 
			
		||||
    if ( text2 )
 | 
			
		||||
    {
 | 
			
		||||
        sizerRow->Add(new wxStaticText(this, -1, label2), 0,
 | 
			
		||||
                      wxALIGN_CENTRE_VERTICAL | wxLEFT | wxRIGHT, 5);
 | 
			
		||||
        sizerRow->Add(text2, 0, wxALIGN_CENTRE_VERTICAL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return sizerRow;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// operations
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::Reset()
 | 
			
		||||
{
 | 
			
		||||
    m_radioTextLines->SetSelection(DEFAULTS.textLines);
 | 
			
		||||
    m_chkPassword->SetValue(DEFAULTS.password);
 | 
			
		||||
    m_chkWrapLines->SetValue(DEFAULTS.wraplines);
 | 
			
		||||
    m_chkReadonly->SetValue(DEFAULTS.readonly);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::CreateText()
 | 
			
		||||
{
 | 
			
		||||
    int flags = 0;
 | 
			
		||||
    switch ( m_radioTextLines->GetSelection() )
 | 
			
		||||
    {
 | 
			
		||||
        default:
 | 
			
		||||
            wxFAIL_MSG( _T("unexpected radio box selection") );
 | 
			
		||||
 | 
			
		||||
        case TextLines_Single:
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case TextLines_Multi:
 | 
			
		||||
            flags |= wxTE_MULTILINE;
 | 
			
		||||
            m_chkPassword->SetValue(FALSE);
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ( m_chkPassword->GetValue() )
 | 
			
		||||
        flags |= wxTE_PASSWORD;
 | 
			
		||||
    if ( m_chkReadonly->GetValue() )
 | 
			
		||||
        flags |= wxTE_READONLY;
 | 
			
		||||
    if ( !m_chkWrapLines->GetValue() )
 | 
			
		||||
        flags |= wxHSCROLL;
 | 
			
		||||
 | 
			
		||||
    wxString valueOld;
 | 
			
		||||
    if ( m_text )
 | 
			
		||||
    {
 | 
			
		||||
        valueOld = m_text->GetValue();
 | 
			
		||||
 | 
			
		||||
        m_sizerText->Remove(m_text);
 | 
			
		||||
        delete m_text;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        valueOld = _T("Hello, Universe!");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_text = new wxTextCtrl(this, TextPage_Textctrl,
 | 
			
		||||
                            valueOld,
 | 
			
		||||
                            wxDefaultPosition, wxDefaultSize,
 | 
			
		||||
                            flags);
 | 
			
		||||
    m_sizerText->Add(m_text, 1, wxALL |
 | 
			
		||||
                     (flags & wxTE_MULTILINE ? wxGROW
 | 
			
		||||
                                             : wxALIGN_TOP), 5);
 | 
			
		||||
    m_sizerText->Layout();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event handlers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnIdle(wxIdleEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    // update all info texts
 | 
			
		||||
 | 
			
		||||
    if ( m_textPosCur )
 | 
			
		||||
    {
 | 
			
		||||
        long posCur = m_text->GetInsertionPoint();
 | 
			
		||||
        if ( posCur != m_posCur )
 | 
			
		||||
        {
 | 
			
		||||
            m_textPosCur->Clear();
 | 
			
		||||
            m_textRowCur->Clear();
 | 
			
		||||
            m_textColCur->Clear();
 | 
			
		||||
 | 
			
		||||
            long col, row;
 | 
			
		||||
            m_text->PositionToXY(posCur, &col, &row);
 | 
			
		||||
 | 
			
		||||
            *m_textPosCur << posCur;
 | 
			
		||||
            *m_textRowCur << row;
 | 
			
		||||
            *m_textColCur << col;
 | 
			
		||||
 | 
			
		||||
            m_posCur = posCur;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ( m_textPosLast )
 | 
			
		||||
    {
 | 
			
		||||
        long posLast = m_text->GetLastPosition();
 | 
			
		||||
        if ( posLast != m_posLast )
 | 
			
		||||
        {
 | 
			
		||||
            m_textPosLast->Clear();
 | 
			
		||||
            *m_textPosLast << posLast;
 | 
			
		||||
 | 
			
		||||
            m_posLast = posLast;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ( m_textLineLast )
 | 
			
		||||
    {
 | 
			
		||||
        m_textLineLast->SetValue(
 | 
			
		||||
                wxString::Format(_T("%ld"), m_text->GetNumberOfLines()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ( m_textSelFrom && m_textSelTo )
 | 
			
		||||
    {
 | 
			
		||||
        long selFrom, selTo;
 | 
			
		||||
        m_text->GetSelection(&selFrom, &selTo);
 | 
			
		||||
        if ( selFrom != m_selFrom )
 | 
			
		||||
        {
 | 
			
		||||
            m_textSelFrom->Clear();
 | 
			
		||||
            *m_textSelFrom << selFrom;
 | 
			
		||||
 | 
			
		||||
            m_selFrom = selFrom;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ( selTo != m_selTo )
 | 
			
		||||
        {
 | 
			
		||||
            m_textSelTo->Clear();
 | 
			
		||||
            *m_textSelTo << selTo;
 | 
			
		||||
 | 
			
		||||
            m_selTo = selTo;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    Reset();
 | 
			
		||||
 | 
			
		||||
    CreateText();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnButtonSet(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    m_text->SetValue(_T("Yellow submarine"));
 | 
			
		||||
    m_text->SetFocus();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnButtonAdd(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    m_text->AppendText(_T("here, there and everywhere"));
 | 
			
		||||
    m_text->SetFocus();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnButtonInsert(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    m_text->WriteText(_T("is there anybody going to listen to my story"));
 | 
			
		||||
    m_text->SetFocus();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnButtonClear(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    m_text->Clear();
 | 
			
		||||
    m_text->SetFocus();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnButtonLoad(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    // search for the file in several dirs where it's likely to be
 | 
			
		||||
    wxPathList pathlist;
 | 
			
		||||
    pathlist.Add(_T("."));
 | 
			
		||||
    pathlist.Add(_T(".."));
 | 
			
		||||
    pathlist.Add(_T("../../../samples/widgets"));
 | 
			
		||||
 | 
			
		||||
    wxString filename = pathlist.FindValidPath(_T("textctrl.cpp"));
 | 
			
		||||
    if ( !filename )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogError(_T("File textctrl.cpp not found."));
 | 
			
		||||
    }
 | 
			
		||||
    else // load it
 | 
			
		||||
    {
 | 
			
		||||
        wxStopWatch sw;
 | 
			
		||||
        if ( !m_text->LoadFile(filename) )
 | 
			
		||||
        {
 | 
			
		||||
            // this is not supposed to happen ...
 | 
			
		||||
            wxLogError(_T("Error loading file."));
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            long elapsed = sw.Time();
 | 
			
		||||
            wxLogMessage(_T("Loaded file '%s' in %u.%us"),
 | 
			
		||||
                         filename.c_str(), elapsed / 1000, elapsed % 1000);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnUpdateUIClearButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable(!m_text->GetValue().empty());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnUpdateUIWrapLinesCheckbox(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( !IsSingleLine() );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnUpdateUIPasswordCheckbox(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    // can't put multiline control in password mode
 | 
			
		||||
    event.Enable( IsSingleLine() );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    event.Enable( (m_radioTextLines->GetSelection() != DEFAULTS.textLines) ||
 | 
			
		||||
                  (m_chkReadonly->GetValue() != DEFAULTS.readonly) ||
 | 
			
		||||
                  (m_chkPassword->GetValue() != DEFAULTS.password) ||
 | 
			
		||||
                  (m_chkWrapLines->GetValue() != DEFAULTS.wraplines) );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnText(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    // small hack to suppress the very first message: by then the logging is
 | 
			
		||||
    // not yet redirected and so initial setting of the text value results in
 | 
			
		||||
    // an annoying message box
 | 
			
		||||
    static bool s_firstTime = TRUE;
 | 
			
		||||
    if ( s_firstTime )
 | 
			
		||||
    {
 | 
			
		||||
        s_firstTime = FALSE;
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    wxLogMessage(_T("Text ctrl value changed"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnTextEnter(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    wxLogMessage(_T("Text entered: '%s'"), event.GetString().c_str());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void TextWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    CreateText();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										404
									
								
								samples/widgets/widgets.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										404
									
								
								samples/widgets/widgets.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,404 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Program:     wxWindows Widgets Sample
 | 
			
		||||
// Name:        widgets.cpp
 | 
			
		||||
// Purpose:     Sample showing most of the simple wxWindows widgets
 | 
			
		||||
// Author:      Vadim Zeitlin
 | 
			
		||||
// Created:     27.03.01
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vadim Zeitlin
 | 
			
		||||
// License:     wxWindows license
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// for compilers that support precompilation, includes "wx/wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// for all others, include the necessary headers
 | 
			
		||||
#ifndef WX_PRECOMP
 | 
			
		||||
    #include "wx/app.h"
 | 
			
		||||
    #include "wx/log.h"
 | 
			
		||||
    #include "wx/panel.h"
 | 
			
		||||
    #include "wx/frame.h"
 | 
			
		||||
    #include "wx/button.h"
 | 
			
		||||
    #include "wx/checkbox.h"
 | 
			
		||||
    #include "wx/listbox.h"
 | 
			
		||||
    #include "wx/statbox.h"
 | 
			
		||||
    #include "wx/stattext.h"
 | 
			
		||||
    #include "wx/textctrl.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/notebook.h"
 | 
			
		||||
#include "wx/sizer.h"
 | 
			
		||||
 | 
			
		||||
#include "widgets.h"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// constants
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// control ids
 | 
			
		||||
enum
 | 
			
		||||
{
 | 
			
		||||
    Widgets_ClearLog = 100,
 | 
			
		||||
    Widgets_Quit
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// our classes
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// Define a new application type, each program should derive a class from wxApp
 | 
			
		||||
class WidgetsApp : public wxApp
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    // override base class virtuals
 | 
			
		||||
    // ----------------------------
 | 
			
		||||
 | 
			
		||||
    // this one is called on application startup and is a good place for the app
 | 
			
		||||
    // initialization (doing it here and not in the ctor allows to have an error
 | 
			
		||||
    // return: if OnInit() returns false, the application terminates)
 | 
			
		||||
    virtual bool OnInit();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Define a new frame type: this is going to be our main frame
 | 
			
		||||
class WidgetsFrame : public wxFrame
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    // ctor(s) and dtor
 | 
			
		||||
    WidgetsFrame(const wxString& title);
 | 
			
		||||
    virtual ~WidgetsFrame();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // event handlers
 | 
			
		||||
    void OnButtonClearLog(wxCommandEvent& event);
 | 
			
		||||
    void OnButtonQuit(wxCommandEvent& event);
 | 
			
		||||
 | 
			
		||||
    // initialize the notebook: add all pages to it
 | 
			
		||||
    void InitNotebook();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    // the panel containing everything
 | 
			
		||||
    wxPanel *m_panel;
 | 
			
		||||
 | 
			
		||||
    // the listbox for logging messages
 | 
			
		||||
    wxListBox *m_lboxLog;
 | 
			
		||||
 | 
			
		||||
    // the log target we use to redirect messages to the listbox
 | 
			
		||||
    wxLog *m_logTarget;
 | 
			
		||||
 | 
			
		||||
    // the notebook containing the test pages
 | 
			
		||||
    wxNotebook *m_notebook;
 | 
			
		||||
 | 
			
		||||
    // and the image list for it
 | 
			
		||||
    wxImageList *m_imaglist;
 | 
			
		||||
 | 
			
		||||
    // any class wishing to process wxWindows events must use this macro
 | 
			
		||||
    DECLARE_EVENT_TABLE()
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// A log target which just redirects the messages to a listbox
 | 
			
		||||
class LboxLogger : public wxLog
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    LboxLogger(wxListBox *lbox, wxLog *logOld)
 | 
			
		||||
    {
 | 
			
		||||
        m_lbox = lbox;
 | 
			
		||||
        //m_lbox->Disable(); -- looks ugly under MSW
 | 
			
		||||
        m_logOld = logOld;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual ~LboxLogger()
 | 
			
		||||
    {
 | 
			
		||||
        wxLog::SetActiveTarget(m_logOld);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    // implement sink functions
 | 
			
		||||
    virtual void DoLog(wxLogLevel level, const wxChar *szString, time_t t)
 | 
			
		||||
    {
 | 
			
		||||
        // don't put trace messages into listbox or we can get into infinite
 | 
			
		||||
        // recursion
 | 
			
		||||
        if ( level == wxLOG_Trace )
 | 
			
		||||
        {
 | 
			
		||||
            if ( m_logOld )
 | 
			
		||||
            {
 | 
			
		||||
                // cast is needed to call protected method
 | 
			
		||||
                ((LboxLogger *)m_logOld)->DoLog(level, szString, t);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            wxLog::DoLog(level, szString, t);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    virtual void DoLogString(const wxChar *szString, time_t t)
 | 
			
		||||
    {
 | 
			
		||||
        wxString msg;
 | 
			
		||||
        TimeStamp(&msg);
 | 
			
		||||
        msg += szString;
 | 
			
		||||
 | 
			
		||||
        #ifdef __WXUNIVERSAL__
 | 
			
		||||
            m_lbox->AppendAndEnsureVisible(msg);
 | 
			
		||||
        #else // other ports don't have this method yet
 | 
			
		||||
            m_lbox->Append(msg);
 | 
			
		||||
            m_lbox->SetFirstItem(m_lbox->GetCount() - 1);
 | 
			
		||||
        #endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // the control we use
 | 
			
		||||
    wxListBox *m_lbox;
 | 
			
		||||
 | 
			
		||||
    // the old log target
 | 
			
		||||
    wxLog *m_logOld;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// array of pages
 | 
			
		||||
WX_DEFINE_ARRAY(WidgetsPage *, ArrayWidgetsPage);
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// misc macros
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_APP(WidgetsApp)
 | 
			
		||||
 | 
			
		||||
#ifdef __WXUNIVERSAL__
 | 
			
		||||
    #include "wx/univ/theme.h"
 | 
			
		||||
 | 
			
		||||
    WX_USE_THEME(win32);
 | 
			
		||||
    WX_USE_THEME(gtk);
 | 
			
		||||
#endif // __WXUNIVERSAL__
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// event tables
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
BEGIN_EVENT_TABLE(WidgetsFrame, wxFrame)
 | 
			
		||||
    EVT_BUTTON(Widgets_ClearLog, WidgetsFrame::OnButtonClearLog)
 | 
			
		||||
    EVT_BUTTON(Widgets_Quit, WidgetsFrame::OnButtonQuit)
 | 
			
		||||
END_EVENT_TABLE()
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// app class
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
bool WidgetsApp::OnInit()
 | 
			
		||||
{
 | 
			
		||||
    // the reason for having these ifdef's is that I often run two copies of
 | 
			
		||||
    // this sample side by side and it is useful to see which one is which
 | 
			
		||||
    wxString title =
 | 
			
		||||
#if defined(__WXUNIVERSAL__)
 | 
			
		||||
    _T("wxUniv")
 | 
			
		||||
#elif defined(__WXMSW__)
 | 
			
		||||
    _T("wxMSW")
 | 
			
		||||
#elif defined(__WXGTK__)
 | 
			
		||||
    _T("wxGTK")
 | 
			
		||||
#else
 | 
			
		||||
    _T("wxWindows")
 | 
			
		||||
#endif
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
    wxFrame *frame = new WidgetsFrame(title + _T(" widgets demo"));
 | 
			
		||||
    frame->Show();
 | 
			
		||||
 | 
			
		||||
    //wxLog::AddTraceMask(_T("listbox"));
 | 
			
		||||
    //wxLog::AddTraceMask(_T("scrollbar"));
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// WidgetsFrame construction
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
WidgetsFrame::WidgetsFrame(const wxString& title)
 | 
			
		||||
            : wxFrame(NULL, -1, title, wxPoint(0, 50))
 | 
			
		||||
{
 | 
			
		||||
    // init everything
 | 
			
		||||
    m_lboxLog = (wxListBox *)NULL;
 | 
			
		||||
    m_logTarget = (wxLog *)NULL;
 | 
			
		||||
    m_notebook = (wxNotebook *)NULL;
 | 
			
		||||
    m_imaglist = (wxImageList *)NULL;
 | 
			
		||||
 | 
			
		||||
    // create controls
 | 
			
		||||
    m_panel = new wxPanel(this, -1);
 | 
			
		||||
 | 
			
		||||
    wxSizer *sizerTop = new wxBoxSizer(wxVERTICAL);
 | 
			
		||||
 | 
			
		||||
    // we have 2 panes: notebook which pages demonstrating the controls in the
 | 
			
		||||
    // upper one and the log window with some buttons in the lower
 | 
			
		||||
 | 
			
		||||
    m_notebook = new wxNotebook(m_panel, -1);
 | 
			
		||||
    InitNotebook();
 | 
			
		||||
    wxSizer *sizerUp = new wxNotebookSizer(m_notebook);
 | 
			
		||||
 | 
			
		||||
    // the lower one only has the log listbox and a button to clear it
 | 
			
		||||
    wxSizer *sizerDown = new wxStaticBoxSizer
 | 
			
		||||
                             (
 | 
			
		||||
                               new wxStaticBox(m_panel, -1, _T("&Log window")),
 | 
			
		||||
                               wxVERTICAL
 | 
			
		||||
                             );
 | 
			
		||||
    m_lboxLog = new wxListBox(m_panel, -1);
 | 
			
		||||
    sizerDown->Add(m_lboxLog, 1, wxGROW | wxALL, 5);
 | 
			
		||||
    wxBoxSizer *sizerBtns = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    wxButton *btn = new wxButton(m_panel, Widgets_ClearLog, _T("Clear &log"));
 | 
			
		||||
    sizerBtns->Add(btn);
 | 
			
		||||
    sizerBtns->Add(10, 0); // spacer
 | 
			
		||||
    btn = new wxButton(m_panel, Widgets_Quit, _T("E&xit"));
 | 
			
		||||
    sizerBtns->Add(btn);
 | 
			
		||||
    sizerDown->Add(sizerBtns, 0, wxALL | wxALIGN_RIGHT, 5);
 | 
			
		||||
 | 
			
		||||
    // put everything together
 | 
			
		||||
    sizerTop->Add(sizerUp, 1, wxGROW | (wxALL & ~(wxTOP | wxBOTTOM)), 10);
 | 
			
		||||
    sizerTop->Add(0, 5, 0, wxGROW); // spacer in between
 | 
			
		||||
    sizerTop->Add(sizerDown, 0,  wxGROW | (wxALL & ~wxTOP), 10);
 | 
			
		||||
 | 
			
		||||
    m_panel->SetAutoLayout(TRUE);
 | 
			
		||||
    m_panel->SetSizer(sizerTop);
 | 
			
		||||
 | 
			
		||||
    sizerTop->Fit(this);
 | 
			
		||||
    sizerTop->SetSizeHints(this);
 | 
			
		||||
 | 
			
		||||
    // now that everything is created we can redirect the log messages to the
 | 
			
		||||
    // listbox
 | 
			
		||||
    m_logTarget = new LboxLogger(m_lboxLog, wxLog::GetActiveTarget());
 | 
			
		||||
    wxLog::SetActiveTarget(m_logTarget);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WidgetsFrame::InitNotebook()
 | 
			
		||||
{
 | 
			
		||||
    m_imaglist = new wxImageList(32, 32);
 | 
			
		||||
 | 
			
		||||
    ArrayWidgetsPage pages;
 | 
			
		||||
    wxArrayString labels;
 | 
			
		||||
 | 
			
		||||
    // we need to first create all pages and only then add them to the notebook
 | 
			
		||||
    // as we need the image list first
 | 
			
		||||
    WidgetsPageInfo *info = WidgetsPage::ms_widgetPages;
 | 
			
		||||
    while ( info )
 | 
			
		||||
    {
 | 
			
		||||
        WidgetsPage *page = (*info->GetCtor())(m_notebook, m_imaglist);
 | 
			
		||||
        pages.Add(page);
 | 
			
		||||
 | 
			
		||||
        labels.Add(info->GetLabel());
 | 
			
		||||
 | 
			
		||||
        info = info->GetNext();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_notebook->SetImageList(m_imaglist);
 | 
			
		||||
 | 
			
		||||
    // now do add them
 | 
			
		||||
    size_t count = pages.GetCount();
 | 
			
		||||
    for ( size_t n = 0; n < count; n++ )
 | 
			
		||||
    {
 | 
			
		||||
        m_notebook->AddPage(
 | 
			
		||||
                            pages[n],
 | 
			
		||||
                            labels[n],
 | 
			
		||||
                            FALSE, // don't select
 | 
			
		||||
                            n // image id
 | 
			
		||||
                           );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
WidgetsFrame::~WidgetsFrame()
 | 
			
		||||
{
 | 
			
		||||
    delete m_logTarget;
 | 
			
		||||
    delete m_imaglist;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// WidgetsFrame event handlers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void WidgetsFrame::OnButtonQuit(wxCommandEvent& WXUNUSED(event))
 | 
			
		||||
{
 | 
			
		||||
    Close();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WidgetsFrame::OnButtonClearLog(wxCommandEvent& event)
 | 
			
		||||
{
 | 
			
		||||
    m_lboxLog->Clear();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// WidgetsPageInfo
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
WidgetsPageInfo *WidgetsPage::ms_widgetPages = NULL;
 | 
			
		||||
 | 
			
		||||
WidgetsPageInfo::WidgetsPageInfo(Constructor ctor, const wxChar *label)
 | 
			
		||||
               : m_label(label)
 | 
			
		||||
{
 | 
			
		||||
    m_ctor = ctor;
 | 
			
		||||
 | 
			
		||||
    m_next = WidgetsPage::ms_widgetPages;
 | 
			
		||||
    WidgetsPage::ms_widgetPages = this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// WidgetsPage
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
WidgetsPage::WidgetsPage(wxNotebook *notebook)
 | 
			
		||||
           : wxPanel(notebook, -1)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxSizer *WidgetsPage::CreateSizerWithText(wxControl *control,
 | 
			
		||||
                                          wxWindowID id,
 | 
			
		||||
                                          wxTextCtrl **ppText)
 | 
			
		||||
{
 | 
			
		||||
    wxSizer *sizerRow = new wxBoxSizer(wxHORIZONTAL);
 | 
			
		||||
    wxTextCtrl *text = new wxTextCtrl(this, id, _T(""));
 | 
			
		||||
    sizerRow->Add(control, 0, wxRIGHT | wxALIGN_CENTRE_VERTICAL, 5);
 | 
			
		||||
    sizerRow->Add(text, 1, wxLEFT | wxALIGN_CENTRE_VERTICAL, 5);
 | 
			
		||||
 | 
			
		||||
    if ( ppText )
 | 
			
		||||
        *ppText = text;
 | 
			
		||||
 | 
			
		||||
    return sizerRow;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// create a sizer containing a label and a text ctrl
 | 
			
		||||
wxSizer *WidgetsPage::CreateSizerWithTextAndLabel(const wxString& label,
 | 
			
		||||
                                                  wxWindowID id,
 | 
			
		||||
                                                  wxTextCtrl **ppText)
 | 
			
		||||
{
 | 
			
		||||
    return CreateSizerWithText(new wxStaticText(this, -1, label), id, ppText);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// create a sizer containing a button and a text ctrl
 | 
			
		||||
wxSizer *WidgetsPage::CreateSizerWithTextAndButton(wxWindowID idBtn,
 | 
			
		||||
                                                   const wxString& label,
 | 
			
		||||
                                                   wxWindowID id,
 | 
			
		||||
                                                   wxTextCtrl **ppText)
 | 
			
		||||
{
 | 
			
		||||
    return CreateSizerWithText(new wxButton(this, idBtn, label), id, ppText);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxCheckBox *WidgetsPage::CreateCheckBoxAndAddToSizer(wxSizer *sizer,
 | 
			
		||||
                                                     const wxString& label,
 | 
			
		||||
                                                     wxWindowID id)
 | 
			
		||||
{
 | 
			
		||||
    wxCheckBox *checkbox = new wxCheckBox(this, id, label);
 | 
			
		||||
    sizer->Add(checkbox, 0, wxLEFT | wxRIGHT, 5);
 | 
			
		||||
    sizer->Add(0, 2, 0, wxGROW); // spacer
 | 
			
		||||
 | 
			
		||||
    return checkbox;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										110
									
								
								samples/widgets/widgets.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								samples/widgets/widgets.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,110 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Program:     wxWindows Widgets Sample
 | 
			
		||||
// Name:        widgets.h
 | 
			
		||||
// Purpose:     Common stuff for all widgets project files
 | 
			
		||||
// Author:      Vadim Zeitlin
 | 
			
		||||
// Created:     27.03.01
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vadim Zeitlin
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifndef _WX_SAMPLE_WIDGETS_H_
 | 
			
		||||
#define _WX_SAMPLE_WIDGETS_H_
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxCheckBox;
 | 
			
		||||
class WXDLLEXPORT wxNotebook;
 | 
			
		||||
class WXDLLEXPORT wxSizer;
 | 
			
		||||
class WXDLLEXPORT wxTextCtrl;
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT WidgetsPageInfo;
 | 
			
		||||
 | 
			
		||||
// all source files use wxImageList
 | 
			
		||||
#include "wx/imaglist.h"
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// WidgetsPage: a notebook page demonstrating some widget
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WidgetsPage : public wxPanel
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    WidgetsPage(wxNotebook *notebook);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // several helper functions for page creation
 | 
			
		||||
 | 
			
		||||
    // create a horz sizer containing the given control and the text ctrl
 | 
			
		||||
    // (pointer to which will be saved in the provided variable if not NULL)
 | 
			
		||||
    // with the specified id
 | 
			
		||||
    wxSizer *CreateSizerWithText(wxControl *control,
 | 
			
		||||
                                 wxWindowID id = -1,
 | 
			
		||||
                                 wxTextCtrl **ppText = NULL);
 | 
			
		||||
 | 
			
		||||
    // create a sizer containing a label and a text ctrl
 | 
			
		||||
    wxSizer *CreateSizerWithTextAndLabel(const wxString& label,
 | 
			
		||||
                                         wxWindowID id = -1,
 | 
			
		||||
                                         wxTextCtrl **ppText = NULL);
 | 
			
		||||
 | 
			
		||||
    // create a sizer containing a button and a text ctrl
 | 
			
		||||
    wxSizer *CreateSizerWithTextAndButton(wxWindowID idBtn,
 | 
			
		||||
                                          const wxString& labelBtn,
 | 
			
		||||
                                          wxWindowID id = -1,
 | 
			
		||||
                                          wxTextCtrl **ppText = NULL);
 | 
			
		||||
 | 
			
		||||
    // create a checkbox and add it to the sizer
 | 
			
		||||
    wxCheckBox *CreateCheckBoxAndAddToSizer(wxSizer *sizer,
 | 
			
		||||
                                            const wxString& label,
 | 
			
		||||
                                            wxWindowID id = -1);
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    // the head of the linked list containinginfo about all pages
 | 
			
		||||
    static WidgetsPageInfo *ms_widgetPages;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// dynamic WidgetsPage creation helpers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT WidgetsPageInfo
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    typedef WidgetsPage *(*Constructor)(wxNotebook *notebook,
 | 
			
		||||
                                        wxImageList *imaglist);
 | 
			
		||||
 | 
			
		||||
    // our ctor
 | 
			
		||||
    WidgetsPageInfo(Constructor ctor, const wxChar *label);
 | 
			
		||||
 | 
			
		||||
    // accessors
 | 
			
		||||
    const wxString& GetLabel() const { return m_label; }
 | 
			
		||||
    Constructor GetCtor() const { return m_ctor; }
 | 
			
		||||
    WidgetsPageInfo *GetNext() const { return m_next; }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    // the label of the page
 | 
			
		||||
    wxString m_label;
 | 
			
		||||
 | 
			
		||||
    // the function to create this page
 | 
			
		||||
    Constructor m_ctor;
 | 
			
		||||
 | 
			
		||||
    // next node in the linked list or NULL
 | 
			
		||||
    WidgetsPageInfo *m_next;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// to declare a page, this macro must be used in the class declaration
 | 
			
		||||
#define DECLARE_WIDGETS_PAGE(classname)                                     \
 | 
			
		||||
    private:                                                                \
 | 
			
		||||
        static WidgetsPageInfo ms_info##classname;                          \
 | 
			
		||||
    public:                                                                 \
 | 
			
		||||
        const WidgetsPageInfo *GetPageInfo() const                          \
 | 
			
		||||
            { return &ms_info##classname; }
 | 
			
		||||
 | 
			
		||||
// and this one must be inserted somewhere in the source file
 | 
			
		||||
#define IMPLEMENT_WIDGETS_PAGE(classname, label)                            \
 | 
			
		||||
    WidgetsPage *wxCtorFor##classname(wxNotebook *notebook,                 \
 | 
			
		||||
                                      wxImageList *imaglist)                \
 | 
			
		||||
        { return new classname(notebook, imaglist); }                       \
 | 
			
		||||
    WidgetsPageInfo classname::                                             \
 | 
			
		||||
        ms_info##classname(wxCtorFor##classname, label)
 | 
			
		||||
 | 
			
		||||
#endif // _WX_SAMPLE_WIDGETS_H_
 | 
			
		||||
							
								
								
									
										1
									
								
								samples/widgets/widgets.rc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								samples/widgets/widgets.rc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
#include "wx/msw/wx.rc"
 | 
			
		||||
							
								
								
									
										94
									
								
								src/mgl/app.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								src/mgl/app.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,94 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        app.cpp
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
    #pragma implementation "app.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/app.h"
 | 
			
		||||
#include "wx/settings.h"
 | 
			
		||||
#include "wx/module.h"
 | 
			
		||||
 | 
			
		||||
#include <mgraph.hpp>
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// Global data
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// MGL's display DC:
 | 
			
		||||
MGLDevCtx *g_displayDC = NULL;
 | 
			
		||||
 | 
			
		||||
// ----
 | 
			
		||||
 | 
			
		||||
wxApp *wxTheApp = (wxApp *)  NULL;
 | 
			
		||||
wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NULL;
 | 
			
		||||
 | 
			
		||||
// FIXME_MGL - whole file
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern bool g_isIdle;
 | 
			
		||||
 | 
			
		||||
bool g_mainThreadLocked = FALSE;
 | 
			
		||||
 | 
			
		||||
void wxExit()
 | 
			
		||||
{
 | 
			
		||||
    exit(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxYield
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
bool wxYield()
 | 
			
		||||
{
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxWakeUpIdle
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void wxWakeUpIdle()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxApp
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxApp,wxEvtHandler)
 | 
			
		||||
 | 
			
		||||
BEGIN_EVENT_TABLE(wxApp, wxEvtHandler)
 | 
			
		||||
    EVT_IDLE(wxApp::OnIdle)
 | 
			
		||||
END_EVENT_TABLE()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int wxEntry( int argc, char *argv[] )
 | 
			
		||||
{
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// FIXME_MGL - this is temporary solution, will be removed
 | 
			
		||||
// once I have wxApp up and running
 | 
			
		||||
bool wxMGL_Initialize()
 | 
			
		||||
{
 | 
			
		||||
    wxBuffer = new wxChar[BUFSIZ + 512];
 | 
			
		||||
 | 
			
		||||
    wxClassInfo::InitializeClasses();
 | 
			
		||||
    wxSystemSettings::Init();
 | 
			
		||||
    wxTheColourDatabase = new wxColourDatabase( wxKEY_STRING );
 | 
			
		||||
    wxTheColourDatabase->Initialize();
 | 
			
		||||
    wxInitializeStockLists();
 | 
			
		||||
    wxInitializeStockObjects();
 | 
			
		||||
    wxModule::RegisterModules();
 | 
			
		||||
    if (!wxModule::InitializeModules()) return FALSE;
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										957
									
								
								src/mgl/bitmap.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										957
									
								
								src/mgl/bitmap.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,957 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        bitmap.cpp
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "bitmap.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// For compilers that support precompilation, includes "wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/bitmap.h"
 | 
			
		||||
#include "wx/icon.h"
 | 
			
		||||
#include "wx/filefn.h"
 | 
			
		||||
#include "wx/image.h"
 | 
			
		||||
#include "wx/dcmemory.h"
 | 
			
		||||
#include "wx/utils.h"
 | 
			
		||||
#include "wx/log.h"
 | 
			
		||||
#include "wx/intl.h"
 | 
			
		||||
#include "wx/image.h"
 | 
			
		||||
#include "wx/xpmdecod.h"
 | 
			
		||||
 | 
			
		||||
#include "wx/mgl/private.h"
 | 
			
		||||
 | 
			
		||||
#include <mgraph.hpp>
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// MGL pixel formats:
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
static pixel_format_t gs_pixel_format_15 =
 | 
			
		||||
	{0x1F,0x0A,3, 0x1F,0x05,3, 0x1F,0x00,3, 0x01,0x0F,7}; // 555 15bpp
 | 
			
		||||
    
 | 
			
		||||
static pixel_format_t gs_pixel_format_16 =
 | 
			
		||||
	{0x1F,0x0B,3, 0x3F,0x05,2, 0x1F,0x00,3, 0x00,0x00,0}; // 565 16bpp
 | 
			
		||||
 | 
			
		||||
static pixel_format_t gs_pixel_format_24 =
 | 
			
		||||
	{0xFF,0x10,0, 0xFF,0x08,0, 0xFF,0x00,0, 0x00,0x00,0}; // RGB 24bpp
 | 
			
		||||
 | 
			
		||||
static pixel_format_t gs_pixel_format_32 =
 | 
			
		||||
	{0xFF,0x18,0, 0xFF,0x10,0, 0xFF,0x08,0, 0xFF,0x00,0}; // RGBA 32bpp
 | 
			
		||||
 | 
			
		||||
// FIXME_MGL -- these formats will probably have to go into another place,
 | 
			
		||||
//              where wxApp could use them to initialize g_displayDC
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxMask
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxMask,wxObject)
 | 
			
		||||
 | 
			
		||||
wxMask::wxMask()
 | 
			
		||||
{
 | 
			
		||||
    m_bitmap = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxMask::wxMask(const wxBitmap& bitmap, const wxColour& colour)
 | 
			
		||||
{
 | 
			
		||||
    m_bitmap = NULL;
 | 
			
		||||
    Create(bitmap, colour);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxMask::wxMask(const wxBitmap& bitmap, int paletteIndex)
 | 
			
		||||
{
 | 
			
		||||
    m_bitmap = NULL;
 | 
			
		||||
    Create(bitmap, paletteIndex);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxMask::wxMask(const wxBitmap& bitmap)
 | 
			
		||||
{
 | 
			
		||||
    m_bitmap = NULL;
 | 
			
		||||
    Create(bitmap);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxMask::~wxMask()
 | 
			
		||||
{
 | 
			
		||||
    delete m_bitmap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxMask::Create(const wxBitmap& bitmap, const wxColour& colour)
 | 
			
		||||
{
 | 
			
		||||
    delete m_bitmap;
 | 
			
		||||
    m_bitmap = NULL;
 | 
			
		||||
 | 
			
		||||
    wxImage image = bitmap.ConvertToImage().ConvertToMono(
 | 
			
		||||
                                colour.Red(), colour.Green(), colour.Blue());
 | 
			
		||||
    if ( !image.Ok() ) return FALSE;
 | 
			
		||||
    
 | 
			
		||||
    m_bitmap = new wxBitmap(image, 1);
 | 
			
		||||
 | 
			
		||||
    return m_bitmap->Ok();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxMask::Create(const wxBitmap& bitmap, int paletteIndex)
 | 
			
		||||
{
 | 
			
		||||
    unsigned char r,g,b;
 | 
			
		||||
    wxPalette *pal = bitmap.GetPalette();
 | 
			
		||||
 | 
			
		||||
    wxCHECK_MSG( pal, FALSE, wxT("Cannot create mask from bitmap without palette") );
 | 
			
		||||
    
 | 
			
		||||
    pal->GetRGB(paletteIndex, &r, &g, &b);
 | 
			
		||||
 | 
			
		||||
    return Create(bitmap, wxColour(r, g, b));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxMask::Create(const wxBitmap& bitmap)
 | 
			
		||||
{
 | 
			
		||||
    delete m_bitmap;
 | 
			
		||||
    m_bitmap = NULL;
 | 
			
		||||
 | 
			
		||||
    wxCHECK_MSG( bitmap.Ok(), FALSE, wxT("Invalid bitmap") );
 | 
			
		||||
    wxCHECK_MSG( bitmap.GetDepth() == 1, FALSE, wxT("Cannot create mask from colour bitmap") );
 | 
			
		||||
 | 
			
		||||
    m_bitmap = new wxBitmap(bitmap);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxBitmap
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class wxBitmapRefData: public wxObjectRefData
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxBitmapRefData();
 | 
			
		||||
    ~wxBitmapRefData();
 | 
			
		||||
 | 
			
		||||
    int             m_width;
 | 
			
		||||
    int             m_height;
 | 
			
		||||
    int             m_bpp;
 | 
			
		||||
    wxPalette      *m_palette;
 | 
			
		||||
    wxMask         *m_mask;
 | 
			
		||||
    bitmap_t       *m_bitmap;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
wxBitmapRefData::wxBitmapRefData()
 | 
			
		||||
{
 | 
			
		||||
    m_mask = NULL;
 | 
			
		||||
    m_width = 0;
 | 
			
		||||
    m_height = 0;
 | 
			
		||||
    m_bpp = 0;
 | 
			
		||||
    m_palette = NULL;
 | 
			
		||||
    m_bitmap = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBitmapRefData::~wxBitmapRefData()
 | 
			
		||||
{
 | 
			
		||||
    if ( m_bitmap )
 | 
			
		||||
        MGL_unloadBitmap(m_bitmap);
 | 
			
		||||
    delete m_mask;
 | 
			
		||||
    delete m_palette;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#define M_BMPDATA ((wxBitmapRefData *)m_refData)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_ABSTRACT_CLASS(wxBitmapHandler,wxObject)
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxBitmap,wxBitmapBase)
 | 
			
		||||
 | 
			
		||||
wxBitmap::wxBitmap()
 | 
			
		||||
{
 | 
			
		||||
    if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBitmap::wxBitmap(int width, int height, int depth)
 | 
			
		||||
{
 | 
			
		||||
    Create(width, height, depth);
 | 
			
		||||
 | 
			
		||||
    if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static bitmap_t *MyMGL_createBitmap(int width, int height, 
 | 
			
		||||
                                    int bpp, pixel_format_t *pf)
 | 
			
		||||
{
 | 
			
		||||
    MGLMemoryDC mdc(width, height, bpp, pf);
 | 
			
		||||
    return MGL_getBitmapFromDC(mdc.getDC(), 0, 0, width, height, TRUE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxBitmap::Create(int width, int height, int depth)
 | 
			
		||||
{
 | 
			
		||||
    UnRef();
 | 
			
		||||
 | 
			
		||||
    wxCHECK_MSG( (width > 0) && (height > 0), FALSE, wxT("invalid bitmap size") )
 | 
			
		||||
    
 | 
			
		||||
    pixel_format_t pf_dummy, *pf;
 | 
			
		||||
    int mglDepth = depth;
 | 
			
		||||
 | 
			
		||||
    switch ( depth )
 | 
			
		||||
    {
 | 
			
		||||
        case -1:
 | 
			
		||||
            wxASSERT_MSG( g_displayDC, wxT("MGL display DC not created yet.") );
 | 
			
		||||
 | 
			
		||||
            g_displayDC->getPixelFormat(pf_dummy);
 | 
			
		||||
            mglDepth = g_displayDC->getBitsPerPixel();                
 | 
			
		||||
            pf = &pf_dummy;
 | 
			
		||||
            break;
 | 
			
		||||
        case 1:
 | 
			
		||||
        case 8:
 | 
			
		||||
            pf = NULL;
 | 
			
		||||
            break;
 | 
			
		||||
        case 15:
 | 
			
		||||
            pf = &gs_pixel_format_15;
 | 
			
		||||
            break;
 | 
			
		||||
        case 16:
 | 
			
		||||
            pf = &gs_pixel_format_16;
 | 
			
		||||
            break;
 | 
			
		||||
        case 24:
 | 
			
		||||
            pf = &gs_pixel_format_24;
 | 
			
		||||
            break;
 | 
			
		||||
        case 32:
 | 
			
		||||
            pf = &gs_pixel_format_32;
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            wxASSERT_MSG( 0, wxT("invalid bitmap depth") );
 | 
			
		||||
            return FALSE;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_refData = new wxBitmapRefData();
 | 
			
		||||
    M_BMPDATA->m_mask = (wxMask *) NULL;
 | 
			
		||||
    M_BMPDATA->m_palette = (wxPalette *) NULL;
 | 
			
		||||
    M_BMPDATA->m_width = width;
 | 
			
		||||
    M_BMPDATA->m_height = height;
 | 
			
		||||
    M_BMPDATA->m_bpp = mglDepth;
 | 
			
		||||
 | 
			
		||||
    if ( mglDepth != 1 )
 | 
			
		||||
    {
 | 
			
		||||
        M_BMPDATA->m_bitmap = MyMGL_createBitmap(width, height, mglDepth, pf);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        // MGL does not support mono DCs, so we have to emulate them with
 | 
			
		||||
        // 8bpp ones. We do that by using a special palette with color 0
 | 
			
		||||
        // set to black and all other colors set to white. 
 | 
			
		||||
 | 
			
		||||
        M_BMPDATA->m_bitmap = MyMGL_createBitmap(width, height, 8, pf);
 | 
			
		||||
        SetMonoPalette(wxColour(255, 255, 255), wxColour(0, 0, 0));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return Ok();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxBitmap::CreateFromXpm(const char **bits)
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( bits != NULL, FALSE, wxT("invalid bitmap data") )
 | 
			
		||||
    
 | 
			
		||||
    wxXPMDecoder decoder;
 | 
			
		||||
    wxImage img = decoder.ReadData(bits);
 | 
			
		||||
    wxCHECK_MSG( img.Ok(), FALSE, wxT("invalid bitmap data") )
 | 
			
		||||
    
 | 
			
		||||
    *this = wxBitmap(img);
 | 
			
		||||
    
 | 
			
		||||
    if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBitmap::wxBitmap(const wxImage& image, int depth = -1)
 | 
			
		||||
{
 | 
			
		||||
    long width, height;
 | 
			
		||||
 | 
			
		||||
    wxCHECK_RET( image.Ok(), wxT("invalid image") )
 | 
			
		||||
    
 | 
			
		||||
    width = image.GetWidth();
 | 
			
		||||
    height = image.GetHeight();
 | 
			
		||||
 | 
			
		||||
    if ( !Create(width, height, depth) ) return;
 | 
			
		||||
    
 | 
			
		||||
    MGLMemoryDC idc(width, height, 24, &gs_pixel_format_24,
 | 
			
		||||
                    width * 3, (void*)image.GetData(), NULL);
 | 
			
		||||
    wxASSERT_MSG( idc.isValid(), wxT("cannot create custom MGLDC") );
 | 
			
		||||
 | 
			
		||||
    MGLDevCtx *bdc = CreateTmpDC();
 | 
			
		||||
 | 
			
		||||
    if ( depth <= 8 && image.HasPalette() )
 | 
			
		||||
        SetPalette(image.GetPalette());
 | 
			
		||||
 | 
			
		||||
    bdc->bitBlt(idc, 0, 0, width, height, 0, 0, MGL_REPLACE_MODE);
 | 
			
		||||
    delete bdc;
 | 
			
		||||
                               
 | 
			
		||||
    if ( image.HasMask() )
 | 
			
		||||
    {
 | 
			
		||||
        wxImage mask_image = image.ConvertToMono(image.GetMaskRed(),
 | 
			
		||||
                                                 image.GetMaskGreen(),
 | 
			
		||||
                                                 image.GetMaskBlue());
 | 
			
		||||
        mask_image.SetMask(FALSE);
 | 
			
		||||
        wxBitmap mask_bmp(mask_image, 1);
 | 
			
		||||
        SetMask(new wxMask(mask_bmp));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxImage wxBitmap::ConvertToImage() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), FALSE, wxT("invalid bitmap") );
 | 
			
		||||
 | 
			
		||||
    long width, height;
 | 
			
		||||
    width = GetWidth();
 | 
			
		||||
    height = GetHeight();
 | 
			
		||||
    
 | 
			
		||||
    wxImage image(width, height);
 | 
			
		||||
    wxASSERT_MSG( image.Ok(), wxT("cannot create image") );
 | 
			
		||||
    
 | 
			
		||||
    MGLMemoryDC idc(width, height, 24, &gs_pixel_format_24,
 | 
			
		||||
                    width * 3, (void*)image.GetData(), NULL);
 | 
			
		||||
    wxASSERT_MSG( idc.isValid(), wxT("cannot create custom MGLDC") );
 | 
			
		||||
 | 
			
		||||
    if ( M_BMPDATA->m_palette )
 | 
			
		||||
        image.SetPalette(*(M_BMPDATA->m_palette));
 | 
			
		||||
        
 | 
			
		||||
    if ( GetMask() )
 | 
			
		||||
    {
 | 
			
		||||
        // in consistency with other ports, we convert parts covered
 | 
			
		||||
        // by the mask to <16,16,16> colour and set that colour to image's
 | 
			
		||||
        // mask. We do that by OR-blitting the mask over image with
 | 
			
		||||
        // bg colour set to black and fg colour to <16,16,16>
 | 
			
		||||
 | 
			
		||||
        image.SetMaskColour(16, 16, 16);
 | 
			
		||||
        image.SetMask(TRUE);      
 | 
			
		||||
 | 
			
		||||
        wxDC tmpDC;
 | 
			
		||||
        tmpDC.SetMGLDC(&idc, FALSE);
 | 
			
		||||
        tmpDC.SetBackground(wxBrush(wxColour(16,16,16), wxSOLID));
 | 
			
		||||
        tmpDC.Clear();
 | 
			
		||||
        tmpDC.DrawBitmap(*this, 0, 0, TRUE);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        image.SetMask(FALSE);
 | 
			
		||||
        idc.putBitmap(0, 0, M_BMPDATA->m_bitmap, MGL_REPLACE_MODE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return image;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBitmap::wxBitmap(const wxBitmap& bmp)
 | 
			
		||||
{
 | 
			
		||||
    Ref(bmp);
 | 
			
		||||
 | 
			
		||||
    if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBitmap::wxBitmap(const wxString &filename, wxBitmapType type)
 | 
			
		||||
{
 | 
			
		||||
    LoadFile(filename, type);
 | 
			
		||||
 | 
			
		||||
    if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBitmap::wxBitmap(const char bits[], int width, int height, int depth)
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_RET( depth == 1, wxT("can only create mono bitmap from XBM data") );
 | 
			
		||||
 | 
			
		||||
    if ( !Create(width, height, 1) ) return;
 | 
			
		||||
    MGLDevCtx *bdc = CreateTmpDC();
 | 
			
		||||
    wxCurrentDCSwitcher curDC(bdc);
 | 
			
		||||
    bdc->setColor(1);
 | 
			
		||||
    bdc->setBackColor(0);
 | 
			
		||||
    bdc->clearDevice();
 | 
			
		||||
    bdc->putMonoImage(0, 0, width, (width + 7) / 8, height, (void*)bits);
 | 
			
		||||
    delete bdc;
 | 
			
		||||
 | 
			
		||||
    if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBitmap::~wxBitmap()
 | 
			
		||||
{
 | 
			
		||||
    if ( wxTheBitmapList ) wxTheBitmapList->DeleteObject(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBitmap& wxBitmap::operator = (const wxBitmap& bmp)
 | 
			
		||||
{
 | 
			
		||||
    if ( *this == bmp ) return (*this);
 | 
			
		||||
    Ref(bmp);
 | 
			
		||||
    return *this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxBitmap::operator == (const wxBitmap& bmp) const
 | 
			
		||||
{
 | 
			
		||||
    return (m_refData == bmp.m_refData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxBitmap::operator != (const wxBitmap& bmp) const
 | 
			
		||||
{
 | 
			
		||||
    return (m_refData != bmp.m_refData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxBitmap::Ok() const
 | 
			
		||||
{
 | 
			
		||||
    return (m_refData != NULL && M_BMPDATA->m_bitmap != NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxBitmap::GetHeight() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), -1, wxT("invalid bitmap") );
 | 
			
		||||
 | 
			
		||||
    return M_BMPDATA->m_height;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxBitmap::GetWidth() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), -1, wxT("invalid bitmap") );
 | 
			
		||||
 | 
			
		||||
    return M_BMPDATA->m_width;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxBitmap::GetDepth() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), -1, wxT("invalid bitmap") );
 | 
			
		||||
 | 
			
		||||
    return M_BMPDATA->m_bpp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxMask *wxBitmap::GetMask() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), (wxMask *) NULL, wxT("invalid bitmap") );
 | 
			
		||||
 | 
			
		||||
    return M_BMPDATA->m_mask;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxBitmap::SetMask(wxMask *mask)
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_RET( Ok(), wxT("invalid bitmap") );
 | 
			
		||||
 | 
			
		||||
    delete M_BMPDATA->m_mask;
 | 
			
		||||
    M_BMPDATA->m_mask = mask;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxBitmap::CopyFromIcon(const wxIcon& icon)
 | 
			
		||||
{
 | 
			
		||||
    wxBitmap *bmp = (wxBitmap*)(&icon);
 | 
			
		||||
    *this = *bmp;
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBitmap wxBitmap::GetSubBitmap(const wxRect& rect) const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok() &&
 | 
			
		||||
                 (rect.x >= 0) && (rect.y >= 0) &&
 | 
			
		||||
                 (rect.x+rect.width <= M_BMPDATA->m_width) && (rect.y+rect.height <= M_BMPDATA->m_height),
 | 
			
		||||
                 wxNullBitmap, wxT("invalid bitmap or bitmap region") );
 | 
			
		||||
 | 
			
		||||
    wxBitmap ret( rect.width, rect.height, M_BMPDATA->m_bpp );
 | 
			
		||||
    wxASSERT_MSG( ret.Ok(), wxT("GetSubBitmap error") );
 | 
			
		||||
 | 
			
		||||
    if ( GetPalette() )
 | 
			
		||||
        ret.SetPalette(*GetPalette());
 | 
			
		||||
 | 
			
		||||
    MGLDevCtx *tdc = ret.CreateTmpDC();
 | 
			
		||||
    tdc->putBitmapSection(rect.x, rect.y, 
 | 
			
		||||
                          rect.x + rect.width, rect.y + rect.height,
 | 
			
		||||
                          0, 0, M_BMPDATA->m_bitmap, MGL_REPLACE_MODE);
 | 
			
		||||
    delete tdc;
 | 
			
		||||
 | 
			
		||||
    if ( GetMask() )
 | 
			
		||||
    {
 | 
			
		||||
        wxBitmap submask = GetMask()->GetBitmap()->GetSubBitmap(rect);
 | 
			
		||||
        ret.SetMask(new wxMask(submask));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxBitmap::SetMonoPalette(const wxColour& fg, const wxColour& bg)
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_RET( Ok(), wxT("invalid bitmap") );
 | 
			
		||||
 | 
			
		||||
    palette_t *mono = M_BMPDATA->m_bitmap->pal;
 | 
			
		||||
 | 
			
		||||
    wxCHECK_RET( M_BMPDATA->m_bpp == 1, wxT("bitmap is not 1bpp") );
 | 
			
		||||
    wxCHECK_RET( mono != NULL, wxT("bitmap w/o palette") );
 | 
			
		||||
 | 
			
		||||
    mono[0].red = bg.Red();
 | 
			
		||||
    mono[0].green = bg.Green();
 | 
			
		||||
    mono[0].blue = bg.Blue();
 | 
			
		||||
    mono[0].alpha = 0;
 | 
			
		||||
    for (size_t i = 1; i < 256; i++)
 | 
			
		||||
    {
 | 
			
		||||
        mono[i].red = fg.Red();
 | 
			
		||||
        mono[i].green = fg.Green();
 | 
			
		||||
        mono[i].blue = fg.Blue();
 | 
			
		||||
        mono[i].alpha = 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MGLDevCtx *wxBitmap::CreateTmpDC() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), NULL, wxT("invalid bitmap") );
 | 
			
		||||
 | 
			
		||||
    MGLDevCtx *tdc = new MGLMemoryDC(GetWidth(), GetHeight(),
 | 
			
		||||
                                     M_BMPDATA->m_bitmap->bitsPerPixel,
 | 
			
		||||
                                     M_BMPDATA->m_bitmap->pf,
 | 
			
		||||
                                     M_BMPDATA->m_bitmap->bytesPerLine,
 | 
			
		||||
                                     M_BMPDATA->m_bitmap->surface, 
 | 
			
		||||
                                     NULL);
 | 
			
		||||
    wxCHECK_MSG( tdc->isValid(), NULL, wxT("cannot create temporary MGLDC") );
 | 
			
		||||
 | 
			
		||||
    if ( M_BMPDATA->m_bitmap->pal != NULL )
 | 
			
		||||
    {
 | 
			
		||||
        int cnt;
 | 
			
		||||
        
 | 
			
		||||
        switch (M_BMPDATA->m_bitmap->bitsPerPixel)
 | 
			
		||||
        {
 | 
			
		||||
            case  2: cnt = 2;   break;
 | 
			
		||||
            case  4: cnt = 16;  break;
 | 
			
		||||
            case  8: cnt = 256; break;
 | 
			
		||||
            default:
 | 
			
		||||
                wxFAIL_MSG( wxT("bitmap with this depth cannot have palette") );
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        tdc->setPalette(M_BMPDATA->m_bitmap->pal, cnt, 0);
 | 
			
		||||
        tdc->realizePalette(cnt, 0, FALSE);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return tdc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxBitmap::LoadFile(const wxString &name, wxBitmapType type)
 | 
			
		||||
{
 | 
			
		||||
    UnRef();
 | 
			
		||||
    
 | 
			
		||||
    if ( type == wxBITMAP_TYPE_BMP || type == wxBITMAP_TYPE_PNG || 
 | 
			
		||||
         type == wxBITMAP_TYPE_PCX || type == wxBITMAP_TYPE_JPEG )
 | 
			
		||||
    {
 | 
			
		||||
        // prevent accidental loading of bitmap from $MGL_ROOT:
 | 
			
		||||
        if ( !wxFileExists(name) )
 | 
			
		||||
        {
 | 
			
		||||
            wxLogError(_("File %s does not exist."), name.c_str());
 | 
			
		||||
            return FALSE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
        
 | 
			
		||||
    wxBitmapHandler *handler = FindHandler(type);
 | 
			
		||||
 | 
			
		||||
    if ( handler == NULL ) 
 | 
			
		||||
    {
 | 
			
		||||
        wxImage image;
 | 
			
		||||
        if ( !image.LoadFile(name, type) || !image.Ok() )
 | 
			
		||||
        {
 | 
			
		||||
            wxLogError("no bitmap handler for type %d defined.", type);            
 | 
			
		||||
            return FALSE;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            *this = wxBitmap(image);
 | 
			
		||||
            return TRUE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_refData = new wxBitmapRefData();
 | 
			
		||||
 | 
			
		||||
    return handler->LoadFile(this, name, type, -1, -1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxBitmap::SaveFile(const wxString& filename, wxBitmapType type, const wxPalette *palette) const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), FALSE, wxT("invalid bitmap") );
 | 
			
		||||
 | 
			
		||||
    wxBitmapHandler *handler = FindHandler(type);
 | 
			
		||||
 | 
			
		||||
    if ( handler == NULL ) 
 | 
			
		||||
    {
 | 
			
		||||
        wxImage image = ConvertToImage();
 | 
			
		||||
        if ( palette )
 | 
			
		||||
            image.SetPalette(*palette);
 | 
			
		||||
 | 
			
		||||
        if ( image.Ok() )
 | 
			
		||||
            return image.SaveFile(filename, type);
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            wxLogError("no bitmap handler for type %d defined.", type);
 | 
			
		||||
            return FALSE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return handler->SaveFile(this, filename, type, palette);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxPalette *wxBitmap::GetPalette() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), NULL, wxT("invalid bitmap") );
 | 
			
		||||
 | 
			
		||||
    return M_BMPDATA->m_palette;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxBitmap::SetPalette(const wxPalette& palette)
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_RET( Ok(), wxT("invalid bitmap") );
 | 
			
		||||
    wxCHECK_RET( GetDepth() > 1 && GetDepth() <= 8, wxT("cannot set palette for bitmap of this depth") );
 | 
			
		||||
 | 
			
		||||
    delete M_BMPDATA->m_palette;
 | 
			
		||||
    M_BMPDATA->m_palette = NULL;
 | 
			
		||||
 | 
			
		||||
    if ( !palette.Ok() ) return;
 | 
			
		||||
   
 | 
			
		||||
    M_BMPDATA->m_palette = new wxPalette(palette);
 | 
			
		||||
 | 
			
		||||
    int cnt = palette.GetColoursCount();
 | 
			
		||||
    palette_t *pal = palette.GetMGLpalette_t();
 | 
			
		||||
    memcpy(M_BMPDATA->m_bitmap->pal, pal, cnt * sizeof(palette_t));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxBitmap::SetHeight(int height)
 | 
			
		||||
{
 | 
			
		||||
    if (!m_refData) m_refData = new wxBitmapRefData();
 | 
			
		||||
 | 
			
		||||
    M_BMPDATA->m_height = height;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxBitmap::SetWidth(int width)
 | 
			
		||||
{
 | 
			
		||||
    if (!m_refData) m_refData = new wxBitmapRefData();
 | 
			
		||||
 | 
			
		||||
    M_BMPDATA->m_width = width;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxBitmap::SetDepth(int depth)
 | 
			
		||||
{
 | 
			
		||||
    if (!m_refData) m_refData = new wxBitmapRefData();
 | 
			
		||||
 | 
			
		||||
    M_BMPDATA->m_bpp = depth;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bitmap_t *wxBitmap::GetMGLbitmap_t() const
 | 
			
		||||
{
 | 
			
		||||
    return M_BMPDATA->m_bitmap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxBitmap I/O handlers
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class wxMGLBitmapHandler: public wxBitmapHandler
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxMGLBitmapHandler(wxBitmapType type,
 | 
			
		||||
                       const wxString& extension, const wxString& name);
 | 
			
		||||
 | 
			
		||||
    virtual bool Create(wxBitmap *bitmap, void *data, long flags, 
 | 
			
		||||
                          int width, int height, int depth = 1)
 | 
			
		||||
        { return FALSE; }
 | 
			
		||||
 | 
			
		||||
    virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags,
 | 
			
		||||
                          int desiredWidth, int desiredHeight);
 | 
			
		||||
    virtual bool SaveFile(const wxBitmap *bitmap, const wxString& name, 
 | 
			
		||||
                          int type, const wxPalette *palette = NULL);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
wxMGLBitmapHandler::wxMGLBitmapHandler(wxBitmapType type, 
 | 
			
		||||
                                       const wxString& extension,
 | 
			
		||||
                                       const wxString& name)
 | 
			
		||||
   : wxBitmapHandler()
 | 
			
		||||
{
 | 
			
		||||
    SetType(type);
 | 
			
		||||
    SetName(name);
 | 
			
		||||
    SetExtension(extension);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxMGLBitmapHandler::LoadFile(wxBitmap *bitmap, const wxString& name, 
 | 
			
		||||
                                  long flags, 
 | 
			
		||||
                                  int WXUNUSED(desiredWidth), 
 | 
			
		||||
                                  int WXUNUSED(desiredHeight))
 | 
			
		||||
{
 | 
			
		||||
    int width, height, bpp;
 | 
			
		||||
    pixel_format_t pf;
 | 
			
		||||
    wxString fullname;
 | 
			
		||||
    wxMemoryDC dc;
 | 
			
		||||
    
 | 
			
		||||
    switch (flags)
 | 
			
		||||
    {
 | 
			
		||||
        case wxBITMAP_TYPE_BMP_RESOURCE:
 | 
			
		||||
        case wxBITMAP_TYPE_JPEG_RESOURCE:
 | 
			
		||||
        case wxBITMAP_TYPE_PNG_RESOURCE:
 | 
			
		||||
        case wxBITMAP_TYPE_PCX_RESOURCE:
 | 
			
		||||
            fullname = name + wxT(".bmp");
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            fullname= name;
 | 
			
		||||
            break;
 | 
			
		||||
    }   
 | 
			
		||||
 | 
			
		||||
    switch (flags)
 | 
			
		||||
    {
 | 
			
		||||
        case wxBITMAP_TYPE_BMP:
 | 
			
		||||
        case wxBITMAP_TYPE_BMP_RESOURCE:
 | 
			
		||||
            if ( !MGL_getBitmapSize(fullname.mb_str(), &width, &height, &bpp, &pf) )
 | 
			
		||||
                return FALSE;
 | 
			
		||||
            bitmap->Create(width, height, -1);
 | 
			
		||||
            if ( !bitmap->Ok() ) return FALSE;
 | 
			
		||||
            dc.SelectObject(*bitmap);
 | 
			
		||||
            if ( !dc.GetMGLDC()->loadBitmapIntoDC(fullname.mb_str(), 0, 0, TRUE) )
 | 
			
		||||
                return FALSE;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case wxBITMAP_TYPE_JPEG:
 | 
			
		||||
        case wxBITMAP_TYPE_JPEG_RESOURCE:
 | 
			
		||||
            if ( !MGL_getJPEGSize(fullname.mb_str(), &width, &height, &bpp, &pf) )
 | 
			
		||||
                return FALSE;
 | 
			
		||||
            bitmap->Create(width, height, -1);
 | 
			
		||||
            if ( !bitmap->Ok() ) return FALSE;
 | 
			
		||||
            dc.SelectObject(*bitmap);
 | 
			
		||||
            if ( !dc.GetMGLDC()->loadJPEGIntoDC(fullname.mb_str(), 0, 0, TRUE) )
 | 
			
		||||
                return FALSE;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case wxBITMAP_TYPE_PNG:
 | 
			
		||||
        case wxBITMAP_TYPE_PNG_RESOURCE:
 | 
			
		||||
            if ( !MGL_getPNGSize(fullname.mb_str(), &width, &height, &bpp, &pf) )
 | 
			
		||||
                return FALSE;
 | 
			
		||||
            bitmap->Create(width, height, -1);
 | 
			
		||||
            if ( !bitmap->Ok() ) return FALSE;
 | 
			
		||||
            dc.SelectObject(*bitmap);
 | 
			
		||||
            if ( !dc.GetMGLDC()->loadPNGIntoDC(fullname.mb_str(), 0, 0, TRUE) )
 | 
			
		||||
                return FALSE;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case wxBITMAP_TYPE_PCX:
 | 
			
		||||
        case wxBITMAP_TYPE_PCX_RESOURCE:
 | 
			
		||||
            if ( !MGL_getPCXSize(fullname.mb_str(), &width, &height, &bpp) )
 | 
			
		||||
                return FALSE;
 | 
			
		||||
            bitmap->Create(width, height, -1);
 | 
			
		||||
            if ( !bitmap->Ok() ) return FALSE;
 | 
			
		||||
            dc.SelectObject(*bitmap);
 | 
			
		||||
            if ( !dc.GetMGLDC()->loadPCXIntoDC(fullname.mb_str(), 0, 0, TRUE) )
 | 
			
		||||
                return FALSE;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
            wxFAIL_MSG(wxT("Unsupported image format."));
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxMGLBitmapHandler::SaveFile(const wxBitmap *bitmap, const wxString& name, 
 | 
			
		||||
                                  int type, const wxPalette * WXUNUSED(palette))
 | 
			
		||||
{
 | 
			
		||||
    wxMemoryDC mem;
 | 
			
		||||
    MGLDevCtx *tdc;
 | 
			
		||||
    int w = bitmap->GetWidth(),
 | 
			
		||||
        h = bitmap->GetHeight();
 | 
			
		||||
 | 
			
		||||
    mem.SelectObject(*bitmap);
 | 
			
		||||
    tdc = mem.GetMGLDC();
 | 
			
		||||
 | 
			
		||||
    switch (type)
 | 
			
		||||
    {
 | 
			
		||||
        case wxBITMAP_TYPE_BMP:
 | 
			
		||||
            return tdc->saveBitmapFromDC(name.mb_str(), 0, 0, w, h);
 | 
			
		||||
            break;
 | 
			
		||||
        case wxBITMAP_TYPE_JPEG:
 | 
			
		||||
            return tdc->saveJPEGFromDC(name.mb_str(), 0, 0, w, h, 75);
 | 
			
		||||
            break;
 | 
			
		||||
        case wxBITMAP_TYPE_PNG:
 | 
			
		||||
            return tdc->savePNGFromDC(name.mb_str(), 0, 0, w, h);
 | 
			
		||||
            break;
 | 
			
		||||
        case wxBITMAP_TYPE_PCX:
 | 
			
		||||
            return tdc->savePCXFromDC(name.mb_str(), 0, 0, w, h);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            return FALSE;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// let's handle PNGs in special way because they have alpha channel 
 | 
			
		||||
// which we can access via bitmap_t most easily
 | 
			
		||||
class wxPNGBitmapHandler: public wxMGLBitmapHandler
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxPNGBitmapHandler(wxBitmapType type,
 | 
			
		||||
                       const wxString& extension, const wxString& name)
 | 
			
		||||
        : wxMGLBitmapHandler(type, extension, name) {}
 | 
			
		||||
 | 
			
		||||
    virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags,
 | 
			
		||||
                          int desiredWidth, int desiredHeight);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
bool wxPNGBitmapHandler::LoadFile(wxBitmap *bitmap, const wxString& name, 
 | 
			
		||||
                                  long flags, 
 | 
			
		||||
                                  int desiredWidth, int desiredHeight)
 | 
			
		||||
{
 | 
			
		||||
    int width, height, bpp;
 | 
			
		||||
    pixel_format_t pf;
 | 
			
		||||
    wxString fullname;
 | 
			
		||||
 | 
			
		||||
    if ( flags == wxBITMAP_TYPE_PNG_RESOURCE )
 | 
			
		||||
        fullname = name + wxT(".png");
 | 
			
		||||
    else
 | 
			
		||||
        fullname = name;
 | 
			
		||||
 | 
			
		||||
    if ( !MGL_getPNGSize(fullname.mb_str(), &width, &height, &bpp, &pf) )
 | 
			
		||||
        return FALSE;
 | 
			
		||||
 | 
			
		||||
    if ( bpp != 32 )
 | 
			
		||||
    {
 | 
			
		||||
        // We can load ordinary PNGs faster with 'normal' MGL handler.
 | 
			
		||||
        // Only RGBA PNGs need to be processed in special way because
 | 
			
		||||
        // we have to convert alpha channel to mask
 | 
			
		||||
        return wxMGLBitmapHandler::LoadFile(bitmap, name, flags, 
 | 
			
		||||
                                            desiredWidth, desiredHeight);
 | 
			
		||||
    }
 | 
			
		||||
        
 | 
			
		||||
    bitmap_t *bmp = MGL_loadPNG(fullname.mb_str(), TRUE);
 | 
			
		||||
    
 | 
			
		||||
    if ( bmp == NULL ) return FALSE;
 | 
			
		||||
 | 
			
		||||
    bitmap->Create(bmp->width, bmp->height, -1);
 | 
			
		||||
    if ( !bitmap->Ok() ) return FALSE;
 | 
			
		||||
   
 | 
			
		||||
    // convert bmp to display's depth and write it to *bitmap:
 | 
			
		||||
    wxMemoryDC dc;
 | 
			
		||||
    dc.SelectObject(*bitmap);
 | 
			
		||||
    dc.GetMGLDC()->putBitmap(0, 0, bmp, MGL_REPLACE_MODE);
 | 
			
		||||
    dc.SelectObject(wxNullBitmap);
 | 
			
		||||
    
 | 
			
		||||
    // create mask, if bmp contains alpha channel (ARGB format):
 | 
			
		||||
    if ( bmp->bitsPerPixel == 32 )
 | 
			
		||||
    {
 | 
			
		||||
        int x, y;
 | 
			
		||||
        wxUint32 *s = (wxUint32*)bmp->surface;
 | 
			
		||||
        for (y = 0; y < bmp->height; y++)
 | 
			
		||||
        {
 | 
			
		||||
            s = ((wxUint32*)bmp->surface) + y * bmp->bytesPerLine/4;
 | 
			
		||||
            for (x = 0; x < bmp->width; x++, s ++)
 | 
			
		||||
            {
 | 
			
		||||
                if ( ((((*s) >> bmp->pf->rsvdPos) & bmp->pf->rsvdMask) 
 | 
			
		||||
                        << bmp->pf->rsvdAdjust) < 128 )
 | 
			
		||||
                    *s = 0;
 | 
			
		||||
                else
 | 
			
		||||
                    *s = 0x00FFFFFF; // white
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        wxBitmap mask(bmp->width, bmp->height, 1);
 | 
			
		||||
        dc.SelectObject(mask);
 | 
			
		||||
        dc.GetMGLDC()->putBitmap(0, 0, bmp, MGL_REPLACE_MODE);
 | 
			
		||||
        dc.SelectObject(wxNullBitmap);
 | 
			
		||||
        bitmap->SetMask(new wxMask(mask));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    MGL_unloadBitmap(bmp);
 | 
			
		||||
    
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class wxICOBitmapHandler: public wxBitmapHandler
 | 
			
		||||
{
 | 
			
		||||
    public:
 | 
			
		||||
        wxICOBitmapHandler(wxBitmapType type,
 | 
			
		||||
                           const wxString& extension, const wxString& name);
 | 
			
		||||
        
 | 
			
		||||
        virtual bool Create(wxBitmap *bitmap, void *data, long flags, 
 | 
			
		||||
                              int width, int height, int depth = 1)
 | 
			
		||||
            { return FALSE; }
 | 
			
		||||
    
 | 
			
		||||
        virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags,
 | 
			
		||||
                              int desiredWidth, int desiredHeight);
 | 
			
		||||
        virtual bool SaveFile(const wxBitmap *bitmap, const wxString& name, 
 | 
			
		||||
                              int type, const wxPalette *palette = NULL);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
wxICOBitmapHandler::wxICOBitmapHandler(wxBitmapType type, 
 | 
			
		||||
                                       const wxString& extension,
 | 
			
		||||
                                       const wxString& name)
 | 
			
		||||
   : wxBitmapHandler()
 | 
			
		||||
{
 | 
			
		||||
    SetType(type);
 | 
			
		||||
    SetName(name);
 | 
			
		||||
    SetExtension(extension);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxICOBitmapHandler::LoadFile(wxBitmap *bitmap, const wxString& name, 
 | 
			
		||||
                                  long flags, 
 | 
			
		||||
                                  int WXUNUSED(desiredWidth), 
 | 
			
		||||
                                  int WXUNUSED(desiredHeight))
 | 
			
		||||
{
 | 
			
		||||
    icon_t *icon = NULL;
 | 
			
		||||
    MGLDevCtx *dc;
 | 
			
		||||
 | 
			
		||||
    if ( flags == wxBITMAP_TYPE_ICO_RESOURCE )
 | 
			
		||||
        icon = MGL_loadIcon(wxString(name + wxT(".ico")).mb_str(), TRUE);
 | 
			
		||||
    else   
 | 
			
		||||
        icon = MGL_loadIcon(name.mb_str(), TRUE);
 | 
			
		||||
 | 
			
		||||
    if ( icon == NULL ) return FALSE;
 | 
			
		||||
 | 
			
		||||
    bitmap->Create(icon->xorMask.width, icon->xorMask.height);
 | 
			
		||||
 | 
			
		||||
    wxMemoryDC mem;
 | 
			
		||||
    mem.SelectObject(*bitmap);
 | 
			
		||||
    dc = mem.GetMGLDC();
 | 
			
		||||
    dc->putBitmap(0, 0, &(icon->xorMask), MGL_REPLACE_MODE);
 | 
			
		||||
    mem.SelectObject(wxNullBitmap);
 | 
			
		||||
 | 
			
		||||
    wxBitmap mask(icon->xorMask.width, icon->xorMask.height, 1);
 | 
			
		||||
    mem.SelectObject(mask);
 | 
			
		||||
    dc = mem.GetMGLDC();
 | 
			
		||||
 | 
			
		||||
    wxCurrentDCSwitcher curDC(dc);
 | 
			
		||||
    dc->setColor(0);
 | 
			
		||||
    dc->setBackColor(1);
 | 
			
		||||
    dc->clearDevice();
 | 
			
		||||
    dc->putMonoImage(0, 0, icon->xorMask.width, icon->byteWidth,
 | 
			
		||||
                           icon->xorMask.height, (void*)icon->andMask);
 | 
			
		||||
    
 | 
			
		||||
    bitmap->SetMask(new wxMask(mask));
 | 
			
		||||
 | 
			
		||||
    MGL_unloadIcon(icon);
 | 
			
		||||
    
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxICOBitmapHandler::SaveFile(const wxBitmap *bitmap, const wxString& name, 
 | 
			
		||||
                                  int type, const wxPalette * WXUNUSED(palette))
 | 
			
		||||
{
 | 
			
		||||
    return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*static*/ void wxBitmap::InitStandardHandlers()
 | 
			
		||||
{
 | 
			
		||||
    AddHandler(new wxMGLBitmapHandler(wxBITMAP_TYPE_BMP, wxT("bmp"), wxT("Windows bitmap")));
 | 
			
		||||
    AddHandler(new wxMGLBitmapHandler(wxBITMAP_TYPE_BMP_RESOURCE, wxEmptyString, wxT("Windows bitmap resource")));
 | 
			
		||||
    AddHandler(new wxMGLBitmapHandler(wxBITMAP_TYPE_JPEG, wxT("jpg"), wxT("JPEG image")));
 | 
			
		||||
    AddHandler(new wxMGLBitmapHandler(wxBITMAP_TYPE_JPEG_RESOURCE, wxEmptyString, wxT("JPEG resource")));
 | 
			
		||||
    AddHandler(new wxMGLBitmapHandler(wxBITMAP_TYPE_PCX, wxT("pcx"), wxT("PCX image")));
 | 
			
		||||
    AddHandler(new wxMGLBitmapHandler(wxBITMAP_TYPE_PCX_RESOURCE, wxEmptyString, wxT("PCX resource")));
 | 
			
		||||
 | 
			
		||||
    AddHandler(new wxPNGBitmapHandler(wxBITMAP_TYPE_PNG, wxT("png"), wxT("PNG image")));
 | 
			
		||||
    AddHandler(new wxPNGBitmapHandler(wxBITMAP_TYPE_PNG_RESOURCE, wxEmptyString, wxT("PNG resource")));
 | 
			
		||||
 | 
			
		||||
    AddHandler(new wxICOBitmapHandler(wxBITMAP_TYPE_ICO, wxT("ico"), wxT("Icon resource")));
 | 
			
		||||
    AddHandler(new wxICOBitmapHandler(wxBITMAP_TYPE_ICO_RESOURCE, wxEmptyString, wxT("Icon resource")));
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										289
									
								
								src/mgl/brush.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										289
									
								
								src/mgl/brush.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,289 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        brush.cpp
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:   	wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "brush.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// For compilers that support precompilation, includes "wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/brush.h"
 | 
			
		||||
#include "wx/mgl/private.h"
 | 
			
		||||
#include "wx/mgl/dcmemory.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ---------------------------------------------------------------------------
 | 
			
		||||
// helper functions
 | 
			
		||||
// ---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// This function converts wxBitmap into pixpattern24_t representation
 | 
			
		||||
// (used by wxBrush and wxPen)
 | 
			
		||||
 | 
			
		||||
void wxBitmapToPixPattern(const wxBitmap& bitmap, 
 | 
			
		||||
                          pixpattern24_t *pix, pattern_t *mask)
 | 
			
		||||
{
 | 
			
		||||
    wxMemoryDC mem;
 | 
			
		||||
    MGLDevCtx *dc;
 | 
			
		||||
    int x, y;
 | 
			
		||||
    
 | 
			
		||||
    if ( pix != NULL )
 | 
			
		||||
    {
 | 
			
		||||
        mem.SelectObject(bitmap);
 | 
			
		||||
        dc = mem.GetMGLDC();
 | 
			
		||||
        wxCurrentDCSwitcher curDC(dc);
 | 
			
		||||
        dc->beginPixel();
 | 
			
		||||
        for (y = 0; y < 8; y++)
 | 
			
		||||
            for (x = 0; x < 8; x++)
 | 
			
		||||
                dc->unpackColorFast(dc->getPixelFast(x, y), 
 | 
			
		||||
                                    pix->p[y][x][2],
 | 
			
		||||
                                    pix->p[y][x][1], 
 | 
			
		||||
                                    pix->p[y][x][0]);
 | 
			
		||||
        dc->endPixel();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ( mask && bitmap.GetMask() )
 | 
			
		||||
    {
 | 
			
		||||
        mem.SelectObject(*bitmap.GetMask()->GetBitmap());
 | 
			
		||||
        dc = mem.GetMGLDC();
 | 
			
		||||
        wxCurrentDCSwitcher curDC(dc);
 | 
			
		||||
        dc->beginPixel();
 | 
			
		||||
        for (y = 0; y < 8; y++)
 | 
			
		||||
        {
 | 
			
		||||
            mask->p[y] = 0;
 | 
			
		||||
            for (x = 0; x < 8; x++)
 | 
			
		||||
                if ( dc->getPixelFast(x, y) != 0 )
 | 
			
		||||
                    mask->p[y] |= 1 << (7 - x);
 | 
			
		||||
        }
 | 
			
		||||
        dc->endPixel();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxBrush
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class wxBrushRefData: public wxObjectRefData
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxBrushRefData();
 | 
			
		||||
    wxBrushRefData(const wxBrushRefData& data);
 | 
			
		||||
 | 
			
		||||
    int            m_style;
 | 
			
		||||
    wxColour       m_colour;
 | 
			
		||||
    wxBitmap       m_stipple;
 | 
			
		||||
    pixpattern24_t m_pixPattern;
 | 
			
		||||
    pattern_t      m_maskPattern;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
wxBrushRefData::wxBrushRefData()
 | 
			
		||||
{
 | 
			
		||||
    m_style = 0;
 | 
			
		||||
 | 
			
		||||
    int x, y, c;
 | 
			
		||||
    for (y = 0; y < 8; y++)
 | 
			
		||||
        for (x = 0; x < 8; x++)
 | 
			
		||||
            for (c = 0; c < 3; c++)
 | 
			
		||||
                m_pixPattern.p[y][x][c] = 0;
 | 
			
		||||
    for (y = 0; y < 8; y++)
 | 
			
		||||
        m_maskPattern.p[y] = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBrushRefData::wxBrushRefData(const wxBrushRefData& data)
 | 
			
		||||
{
 | 
			
		||||
    m_style = data.m_style;
 | 
			
		||||
    m_stipple = data.m_stipple;
 | 
			
		||||
    m_colour = data.m_colour;
 | 
			
		||||
 | 
			
		||||
    int x, y, c;
 | 
			
		||||
    for (y = 0; y < 8; y++)
 | 
			
		||||
        for (x = 0; x < 8; x++)
 | 
			
		||||
            for (c = 0; c < 3; c++)
 | 
			
		||||
                m_pixPattern.p[y][x][c] = data.m_pixPattern.p[y][x][c];
 | 
			
		||||
    for (y = 0; y < 8; y++)
 | 
			
		||||
        m_maskPattern.p[y] = data.m_maskPattern.p[y];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#define M_BRUSHDATA ((wxBrushRefData *)m_refData)
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxBrush,wxGDIObject)
 | 
			
		||||
 | 
			
		||||
wxBrush::wxBrush()
 | 
			
		||||
{
 | 
			
		||||
    if (wxTheBrushList) wxTheBrushList->AddBrush(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBrush::wxBrush(const wxColour &colour, int style)
 | 
			
		||||
{
 | 
			
		||||
    m_refData = new wxBrushRefData();
 | 
			
		||||
    M_BRUSHDATA->m_style = style;
 | 
			
		||||
    M_BRUSHDATA->m_colour = colour;
 | 
			
		||||
 | 
			
		||||
    if (wxTheBrushList) wxTheBrushList->AddBrush(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBrush::wxBrush(const wxBitmap &stippleBitmap)
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_RET( stippleBitmap.Ok(), _T("invalid bitmap") );
 | 
			
		||||
    wxCHECK_RET( stippleBitmap.GetWidth() == 8 && stippleBitmap.GetHeight() == 8, 
 | 
			
		||||
                  _T("stipple bitmap must be 8x8") );
 | 
			
		||||
 | 
			
		||||
    m_refData = new wxBrushRefData();
 | 
			
		||||
    M_BRUSHDATA->m_colour = *wxBLACK;
 | 
			
		||||
    
 | 
			
		||||
    M_BRUSHDATA->m_stipple = stippleBitmap;
 | 
			
		||||
    wxBitmapToPixPattern(stippleBitmap, &(M_BRUSHDATA->m_pixPattern), 
 | 
			
		||||
                                        &(M_BRUSHDATA->m_maskPattern));
 | 
			
		||||
 | 
			
		||||
    if (M_BRUSHDATA->m_stipple.GetMask())
 | 
			
		||||
		M_BRUSHDATA->m_style = wxSTIPPLE_MASK_OPAQUE;
 | 
			
		||||
	else
 | 
			
		||||
		M_BRUSHDATA->m_style = wxSTIPPLE;
 | 
			
		||||
 | 
			
		||||
    if (wxTheBrushList) wxTheBrushList->AddBrush(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBrush::wxBrush(const wxBrush &brush)
 | 
			
		||||
{
 | 
			
		||||
    Ref(brush);
 | 
			
		||||
 | 
			
		||||
    if (wxTheBrushList) wxTheBrushList->AddBrush(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBrush::~wxBrush()
 | 
			
		||||
{
 | 
			
		||||
    if (wxTheBrushList) wxTheBrushList->RemoveBrush(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBrush& wxBrush::operator = (const wxBrush& brush)
 | 
			
		||||
{
 | 
			
		||||
    if (*this == brush) return (*this);
 | 
			
		||||
    Ref(brush);
 | 
			
		||||
    return *this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxBrush::operator == (const wxBrush& brush) const
 | 
			
		||||
{
 | 
			
		||||
    return m_refData == brush.m_refData;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxBrush::operator != (const wxBrush& brush) const
 | 
			
		||||
{
 | 
			
		||||
    return m_refData != brush.m_refData;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxBrush::Ok() const
 | 
			
		||||
{
 | 
			
		||||
    return ((m_refData) && M_BRUSHDATA->m_colour.Ok());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxBrush::GetStyle() const
 | 
			
		||||
{
 | 
			
		||||
    if (m_refData == NULL)
 | 
			
		||||
    {
 | 
			
		||||
        wxFAIL_MSG( wxT("invalid brush") );
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return M_BRUSHDATA->m_style;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxColour &wxBrush::GetColour() const
 | 
			
		||||
{
 | 
			
		||||
    if (m_refData == NULL)
 | 
			
		||||
    {
 | 
			
		||||
        wxFAIL_MSG( wxT("invalid brush") );
 | 
			
		||||
        return wxNullColour;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return M_BRUSHDATA->m_colour;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBitmap *wxBrush::GetStipple() const
 | 
			
		||||
{
 | 
			
		||||
    if (m_refData == NULL)
 | 
			
		||||
    {
 | 
			
		||||
        wxFAIL_MSG( wxT("invalid brush") );
 | 
			
		||||
        return &wxNullBitmap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return &M_BRUSHDATA->m_stipple;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* wxBrush::GetMaskPattern() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), NULL, wxT("invalid brush") );
 | 
			
		||||
 | 
			
		||||
    return (void*)&(M_BRUSHDATA->m_maskPattern);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* wxBrush::GetPixPattern() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), NULL, wxT("invalid brush") );
 | 
			
		||||
 | 
			
		||||
    return (void*)&(M_BRUSHDATA->m_pixPattern);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxBrush::SetColour(const wxColour& col)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_BRUSHDATA->m_colour = col;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxBrush::SetColour(unsigned char r, unsigned char g, unsigned char b)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_BRUSHDATA->m_colour.Set(r, g, b);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxBrush::SetStyle( int style )
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_BRUSHDATA->m_style = style;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxBrush::SetStipple(const wxBitmap& stipple)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
 | 
			
		||||
    wxCHECK_RET( stipple.Ok(), _T("invalid bitmap") );
 | 
			
		||||
    wxCHECK_RET( stipple.GetWidth() == 8 && stipple.GetHeight() == 8, 
 | 
			
		||||
                  _T("stipple bitmap must be 8x8") );
 | 
			
		||||
 | 
			
		||||
    M_BRUSHDATA->m_stipple = stipple;
 | 
			
		||||
    wxBitmapToPixPattern(stipple, &(M_BRUSHDATA->m_pixPattern),
 | 
			
		||||
                                  &(M_BRUSHDATA->m_maskPattern));
 | 
			
		||||
 | 
			
		||||
    if (M_BRUSHDATA->m_stipple.GetMask())
 | 
			
		||||
        M_BRUSHDATA->m_style = wxSTIPPLE_MASK_OPAQUE;
 | 
			
		||||
    else
 | 
			
		||||
        M_BRUSHDATA->m_style = wxSTIPPLE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxBrush::Unshare()
 | 
			
		||||
{
 | 
			
		||||
    if (!m_refData)
 | 
			
		||||
    {
 | 
			
		||||
        m_refData = new wxBrushRefData();
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxBrushRefData* ref = new wxBrushRefData(*(wxBrushRefData*)m_refData);
 | 
			
		||||
        UnRef();
 | 
			
		||||
        m_refData = ref;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										23
									
								
								src/mgl/clipbrd.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/mgl/clipbrd.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        gtk/clipbrd.cpp
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Robert Roebling
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 1998 Robert Roebling
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "clipbrd.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/clipbrd.h"
 | 
			
		||||
 | 
			
		||||
#if wxUSE_CLIPBOARD
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxClipboard,wxObject)
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
  // wxUSE_CLIPBOARD
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										100
									
								
								src/mgl/colour.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								src/mgl/colour.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,100 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        colour.cpp
 | 
			
		||||
// Purpose:     wxColour class
 | 
			
		||||
// Author:      Julian Smart
 | 
			
		||||
// Modified by:
 | 
			
		||||
// Created:     01/02/97
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) Julian Smart and Markus Holzem
 | 
			
		||||
// Licence:   	wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "colour.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// For compilers that support precompilation, includes "wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
#pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/gdicmn.h"
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxColour, wxObject)
 | 
			
		||||
 | 
			
		||||
// Colour
 | 
			
		||||
 | 
			
		||||
wxColour::wxColour()
 | 
			
		||||
{
 | 
			
		||||
  m_red = m_blue = m_green = 0;
 | 
			
		||||
  m_isInit = FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxColour::wxColour(unsigned char r, unsigned char g, unsigned char b)
 | 
			
		||||
{
 | 
			
		||||
  m_red = r;
 | 
			
		||||
  m_green = g;
 | 
			
		||||
  m_blue = b;
 | 
			
		||||
  m_isInit = TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxColour::wxColour(const wxColour& col)
 | 
			
		||||
{
 | 
			
		||||
  m_red = col.m_red;
 | 
			
		||||
  m_green = col.m_green;
 | 
			
		||||
  m_blue = col.m_blue;
 | 
			
		||||
  m_isInit = col.m_isInit;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxColour& wxColour::operator =(const wxColour& col)
 | 
			
		||||
{
 | 
			
		||||
  m_red = col.m_red;
 | 
			
		||||
  m_green = col.m_green;
 | 
			
		||||
  m_blue = col.m_blue;
 | 
			
		||||
  m_isInit = col.m_isInit;
 | 
			
		||||
  return *this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxColour::InitFromName(const wxString& col)
 | 
			
		||||
{
 | 
			
		||||
  wxColour *the_colour = wxTheColourDatabase->FindColour (col);
 | 
			
		||||
  if (the_colour)
 | 
			
		||||
    {
 | 
			
		||||
      m_red = the_colour->Red();
 | 
			
		||||
      m_green = the_colour->Green();
 | 
			
		||||
      m_blue = the_colour->Blue();
 | 
			
		||||
      m_isInit = TRUE;
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      m_red = 0;
 | 
			
		||||
      m_green = 0;
 | 
			
		||||
      m_blue = 0;
 | 
			
		||||
      m_isInit = FALSE;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxColour::~wxColour()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxColour::Set(unsigned char r, unsigned char g, unsigned char b)
 | 
			
		||||
{
 | 
			
		||||
  m_red = r;
 | 
			
		||||
  m_green = g;
 | 
			
		||||
  m_blue = b;
 | 
			
		||||
  m_isInit = TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Obsolete
 | 
			
		||||
#if WXWIN_COMPATIBILITY
 | 
			
		||||
void wxColour::Get(unsigned char *r, unsigned char *g, unsigned char *b) const
 | 
			
		||||
{
 | 
			
		||||
  *r = m_red;
 | 
			
		||||
  *g = m_green;
 | 
			
		||||
  *b = m_blue;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										256
									
								
								src/mgl/cursor.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										256
									
								
								src/mgl/cursor.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,256 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        cursor.cpp
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "cursor.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// For compilers that support precompilation, includes "wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/cursor.h"
 | 
			
		||||
#include "wx/utils.h"
 | 
			
		||||
#include "wx/log.h"
 | 
			
		||||
#include "wx/intl.h"
 | 
			
		||||
 | 
			
		||||
#include <mgraph.hpp>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxCursor
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class wxCursorRefData: public wxObjectRefData
 | 
			
		||||
{
 | 
			
		||||
  public:
 | 
			
		||||
 | 
			
		||||
    wxCursorRefData();
 | 
			
		||||
    ~wxCursorRefData();
 | 
			
		||||
 | 
			
		||||
    MGLCursor *m_cursor;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
wxCursorRefData::wxCursorRefData()
 | 
			
		||||
{
 | 
			
		||||
    m_cursor = (MGLCursor*) NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxCursorRefData::~wxCursorRefData()
 | 
			
		||||
{
 | 
			
		||||
    delete m_cursor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#define M_CURSORDATA ((wxCursorRefData *)m_refData)
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxCursor,wxObject)
 | 
			
		||||
 | 
			
		||||
wxCursor::wxCursor()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxCursor::wxCursor(int cursorId)
 | 
			
		||||
{
 | 
			
		||||
    const char *cursorname = NULL;
 | 
			
		||||
    m_refData = new wxCursorRefData();
 | 
			
		||||
 | 
			
		||||
    switch (cursorId)
 | 
			
		||||
    {
 | 
			
		||||
        case wxCURSOR_ARROW:           cursorname = "arrow.cur"; break;
 | 
			
		||||
        case wxCURSOR_BULLSEYE:        cursorname = "bullseye.cur"; break;
 | 
			
		||||
        case wxCURSOR_CHAR:            cursorname = "char.cur"; break;
 | 
			
		||||
        case wxCURSOR_CROSS:           cursorname = "cross.cur"; break;
 | 
			
		||||
        case wxCURSOR_HAND:            cursorname = "hand.cur"; break;
 | 
			
		||||
        case wxCURSOR_IBEAM:           cursorname = "ibeam.cur"; break;
 | 
			
		||||
        case wxCURSOR_LEFT_BUTTON:     cursorname = "leftbtn.cur"; break;
 | 
			
		||||
        case wxCURSOR_MAGNIFIER:       cursorname = "magnif1.cur"; break;
 | 
			
		||||
        case wxCURSOR_MIDDLE_BUTTON:   cursorname = "midbtn.cur"; break;
 | 
			
		||||
        case wxCURSOR_NO_ENTRY:        cursorname = "noentry.cur"; break;
 | 
			
		||||
        case wxCURSOR_PAINT_BRUSH:     cursorname = "pbrush.cur"; break;
 | 
			
		||||
        case wxCURSOR_PENCIL:          cursorname = "pencil.cur"; break;
 | 
			
		||||
        case wxCURSOR_POINT_LEFT:      cursorname = "pntleft.cur"; break;
 | 
			
		||||
        case wxCURSOR_POINT_RIGHT:     cursorname = "pntright.cur"; break;
 | 
			
		||||
        case wxCURSOR_QUESTION_ARROW:  cursorname = "query.cur"; break;
 | 
			
		||||
        case wxCURSOR_RIGHT_BUTTON:    cursorname = "rightbtn.cur"; break;
 | 
			
		||||
        case wxCURSOR_SIZENESW:        cursorname = "sizenesw.cur"; break;
 | 
			
		||||
        case wxCURSOR_SIZENS:          cursorname = "sizens.cur"; break;
 | 
			
		||||
        case wxCURSOR_SIZENWSE:        cursorname = "sizenwse.cur"; break;
 | 
			
		||||
        case wxCURSOR_SIZEWE:          cursorname = "sizewe.cur"; break;
 | 
			
		||||
        case wxCURSOR_SIZING:          cursorname = "size.cur"; break;
 | 
			
		||||
        case wxCURSOR_SPRAYCAN:        cursorname = "spraycan.cur"; break;
 | 
			
		||||
        case wxCURSOR_WAIT:            cursorname = "wait.cur"; break;
 | 
			
		||||
        case wxCURSOR_WATCH:           cursorname = "clock.cur"; break;
 | 
			
		||||
        case wxCURSOR_BLANK:           cursorname = "blank.cur"; break;
 | 
			
		||||
 | 
			
		||||
        case wxCURSOR_NONE:
 | 
			
		||||
            // FIXME_MGL - make sure wxWindow uses cursor with
 | 
			
		||||
            //    GetMGLCursor() == NULL correctly, i.e. calls MS_hide()
 | 
			
		||||
            *this = wxNullCursor;
 | 
			
		||||
            return;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
            wxFAIL_MSG(wxT("unsupported cursor type"));
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    M_CURSORDATA->m_cursor = new MGLCursor(cursorname);
 | 
			
		||||
 | 
			
		||||
    // if we cannot load arrow cursor, use MGL's default arrow cursor:
 | 
			
		||||
    if ( !M_CURSORDATA->m_cursor->valid() && cursorId == wxCURSOR_ARROW )
 | 
			
		||||
    {
 | 
			
		||||
        delete M_CURSORDATA->m_cursor;
 | 
			
		||||
        M_CURSORDATA->m_cursor = new MGLCursor(MGL_DEF_CURSOR);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    if ( !M_CURSORDATA->m_cursor->valid() )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogError(_("Couldn't create cursor."));
 | 
			
		||||
        UnRef();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxCursor::wxCursor(const char WXUNUSED(bits)[],
 | 
			
		||||
                   int WXUNUSED(width),
 | 
			
		||||
                   int WXUNUSED(height),
 | 
			
		||||
                   int WXUNUSED(hotSpotX), int WXUNUSED(hotSpotY),
 | 
			
		||||
                   const char WXUNUSED(maskBits)[],
 | 
			
		||||
                   wxColour * WXUNUSED(fg), wxColour * WXUNUSED(bg) )
 | 
			
		||||
{
 | 
			
		||||
    //FIXME_MGL
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxCursor::wxCursor(const wxString& cursor_file,
 | 
			
		||||
                   long flags,
 | 
			
		||||
                   int hotSpotX, int hotSpotY)
 | 
			
		||||
{
 | 
			
		||||
    if ( flags == wxBITMAP_TYPE_CUR || flags == wxBITMAP_TYPE_CUR_RESOURCE )
 | 
			
		||||
    {
 | 
			
		||||
        m_refData = new wxCursorRefData();
 | 
			
		||||
        M_CURSORDATA->m_cursor = new MGLCursor(cursor_file.mb_str());
 | 
			
		||||
        if ( !M_CURSORDATA->m_cursor->valid() )
 | 
			
		||||
        {
 | 
			
		||||
            wxLogError(_("Couldn't create cursor."));
 | 
			
		||||
            UnRef();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxLogError(wxT("Cannot load cursor resource of this type."));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxCursor::wxCursor(const wxCursor &cursor)
 | 
			
		||||
{
 | 
			
		||||
    Ref(cursor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxCursor::~wxCursor()
 | 
			
		||||
{
 | 
			
		||||
    // wxObject unrefs data
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxCursor& wxCursor::operator = (const wxCursor& cursor)
 | 
			
		||||
{
 | 
			
		||||
    if ( *this == cursor )
 | 
			
		||||
        return (*this);
 | 
			
		||||
    Ref(cursor);
 | 
			
		||||
    return *this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxCursor::operator == (const wxCursor& cursor) const
 | 
			
		||||
{
 | 
			
		||||
    return (m_refData == cursor.m_refData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxCursor::operator != (const wxCursor& cursor) const
 | 
			
		||||
{
 | 
			
		||||
    return (m_refData != cursor.m_refData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxCursor::Ok() const
 | 
			
		||||
{
 | 
			
		||||
    return (m_refData != NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
MGLCursor *wxCursor::GetMGLCursor() const
 | 
			
		||||
{
 | 
			
		||||
    return M_CURSORDATA->m_cursor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// Global cursor setting
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void wxSetCursor(const wxCursor& cursor)
 | 
			
		||||
{
 | 
			
		||||
    if ( cursor.Ok() )
 | 
			
		||||
    {
 | 
			
		||||
        //MGL_setGlobalCursor(cursor.GetMGLCursor());
 | 
			
		||||
        // FIXME_MGL -- needs MGL WM first
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// busy cursor routines
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// FIXME_MGL -- do we need this? It may be better to incorporate 
 | 
			
		||||
//              support for it into MGL (a stack of global cursors?)
 | 
			
		||||
static wxCursor  gs_savedCursor;
 | 
			
		||||
static wxCursor  g_globalCursor;
 | 
			
		||||
static int       gs_busyCount = 0;
 | 
			
		||||
 | 
			
		||||
const wxCursor &wxBusyCursor::GetStoredCursor()
 | 
			
		||||
{
 | 
			
		||||
    return gs_savedCursor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const wxCursor wxBusyCursor::GetBusyCursor()
 | 
			
		||||
{
 | 
			
		||||
    return wxCursor(wxCURSOR_WAIT);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxEndBusyCursor()
 | 
			
		||||
{
 | 
			
		||||
    if ( --gs_busyCount > 0 ) return;
 | 
			
		||||
 | 
			
		||||
    wxSetCursor(gs_savedCursor);
 | 
			
		||||
    gs_savedCursor = wxNullCursor;
 | 
			
		||||
    //wxYield(); FIXME_MGL - needed?
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxBeginBusyCursor(wxCursor *WXUNUSED(cursor))
 | 
			
		||||
{
 | 
			
		||||
    if ( gs_busyCount++ > 0 ) return;
 | 
			
		||||
 | 
			
		||||
    wxASSERT_MSG( !gs_savedCursor.Ok(),
 | 
			
		||||
                  wxT("forgot to call wxEndBusyCursor, will leak memory") );
 | 
			
		||||
 | 
			
		||||
    gs_savedCursor = g_globalCursor;
 | 
			
		||||
    wxSetCursor(wxCursor(wxCURSOR_WAIT));
 | 
			
		||||
    //wxYield(); FIXME_MGL - needed?
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxIsBusy()
 | 
			
		||||
{
 | 
			
		||||
    return (gs_busyCount > 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										175
									
								
								src/mgl/data.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								src/mgl/data.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,175 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        data.cpp
 | 
			
		||||
// Purpose:     wxMGL data
 | 
			
		||||
// Author:      Robert Roebling
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 1998 Robert Roebling
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
// #pragma implementation
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/object.h"
 | 
			
		||||
#include "wx/window.h"
 | 
			
		||||
#include "wx/dc.h"
 | 
			
		||||
 | 
			
		||||
#if wxUSE_ACCEL
 | 
			
		||||
#include "wx/accel.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/dcps.h"
 | 
			
		||||
#include "wx/icon.h"
 | 
			
		||||
 | 
			
		||||
#define _MAXPATHLEN 500
 | 
			
		||||
 | 
			
		||||
/* Useful buffer, initialized in wxCommonInit */
 | 
			
		||||
wxChar *wxBuffer = (wxChar *) NULL;
 | 
			
		||||
 | 
			
		||||
/* Windows List */
 | 
			
		||||
wxWindowList wxTopLevelWindows;
 | 
			
		||||
 | 
			
		||||
/* List of windows pending deletion */
 | 
			
		||||
wxList wxPendingDelete;
 | 
			
		||||
 | 
			
		||||
/* Current cursor, in order to hang on to
 | 
			
		||||
 * cursor handle when setting the cursor globally */
 | 
			
		||||
wxCursor g_globalCursor;
 | 
			
		||||
 | 
			
		||||
/* Don't allow event propagation during drag */
 | 
			
		||||
bool g_blockEventsOnDrag = FALSE;
 | 
			
		||||
 | 
			
		||||
/* Don't allow mouse event propagation during scroll */
 | 
			
		||||
bool g_blockEventsOnScroll = FALSE;
 | 
			
		||||
 | 
			
		||||
/* Don't allow window closing if there are open dialogs */
 | 
			
		||||
int g_openDialogs = 0;
 | 
			
		||||
 | 
			
		||||
/* TRUE when the message queue is empty. this gets set to
 | 
			
		||||
   FALSE by all event callbacks before anything else is done */
 | 
			
		||||
bool g_isIdle = FALSE;
 | 
			
		||||
 | 
			
		||||
/* Message Strings for Internationalization */
 | 
			
		||||
char **wx_msg_str = (char**)NULL;
 | 
			
		||||
 | 
			
		||||
/* For printing several pages */
 | 
			
		||||
int wxPageNumber;
 | 
			
		||||
 | 
			
		||||
// Now in prntbase.cpp
 | 
			
		||||
// wxPrintPaperDatabase* wxThePrintPaperDatabase = (wxPrintPaperDatabase *) NULL;
 | 
			
		||||
 | 
			
		||||
/* GDI Object Lists */
 | 
			
		||||
wxBrushList      *wxTheBrushList = (wxBrushList *) NULL;
 | 
			
		||||
wxPenList        *wxThePenList = (wxPenList *) NULL;
 | 
			
		||||
wxFontList       *wxTheFontList = (wxFontList *) NULL;
 | 
			
		||||
wxColourDatabase *wxTheColourDatabase = (wxColourDatabase *) NULL;
 | 
			
		||||
wxBitmapList     *wxTheBitmapList = (wxBitmapList *) NULL;
 | 
			
		||||
 | 
			
		||||
/* X only font names */
 | 
			
		||||
/*
 | 
			
		||||
wxFontNameDirectory *wxTheFontNameDirectory;
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* Stock objects */
 | 
			
		||||
wxFont *wxNORMAL_FONT;
 | 
			
		||||
wxFont *wxSMALL_FONT;
 | 
			
		||||
wxFont *wxITALIC_FONT;
 | 
			
		||||
wxFont *wxSWISS_FONT;
 | 
			
		||||
 | 
			
		||||
wxPen *wxRED_PEN;
 | 
			
		||||
wxPen *wxCYAN_PEN;
 | 
			
		||||
wxPen *wxGREEN_PEN;
 | 
			
		||||
wxPen *wxBLACK_PEN;
 | 
			
		||||
wxPen *wxWHITE_PEN;
 | 
			
		||||
wxPen *wxTRANSPARENT_PEN;
 | 
			
		||||
wxPen *wxBLACK_DASHED_PEN;
 | 
			
		||||
wxPen *wxGREY_PEN;
 | 
			
		||||
wxPen *wxMEDIUM_GREY_PEN;
 | 
			
		||||
wxPen *wxLIGHT_GREY_PEN;
 | 
			
		||||
 | 
			
		||||
wxBrush *wxBLUE_BRUSH;
 | 
			
		||||
wxBrush *wxGREEN_BRUSH;
 | 
			
		||||
wxBrush *wxWHITE_BRUSH;
 | 
			
		||||
wxBrush *wxBLACK_BRUSH;
 | 
			
		||||
wxBrush *wxTRANSPARENT_BRUSH;
 | 
			
		||||
wxBrush *wxCYAN_BRUSH;
 | 
			
		||||
wxBrush *wxRED_BRUSH;
 | 
			
		||||
wxBrush *wxGREY_BRUSH;
 | 
			
		||||
wxBrush *wxMEDIUM_GREY_BRUSH;
 | 
			
		||||
wxBrush *wxLIGHT_GREY_BRUSH;
 | 
			
		||||
 | 
			
		||||
wxColour *wxBLACK;
 | 
			
		||||
wxColour *wxWHITE;
 | 
			
		||||
wxColour *wxGREY;
 | 
			
		||||
wxColour *wxRED;
 | 
			
		||||
wxColour *wxBLUE;
 | 
			
		||||
wxColour *wxGREEN;
 | 
			
		||||
wxColour *wxCYAN;
 | 
			
		||||
wxColour *wxLIGHT_GREY;
 | 
			
		||||
 | 
			
		||||
wxCursor *wxSTANDARD_CURSOR = (wxCursor *) NULL;
 | 
			
		||||
wxCursor *wxHOURGLASS_CURSOR = (wxCursor *) NULL;
 | 
			
		||||
wxCursor *wxCROSS_CURSOR = (wxCursor *) NULL;
 | 
			
		||||
 | 
			
		||||
/* 'Null' objects */
 | 
			
		||||
#if wxUSE_ACCEL
 | 
			
		||||
    wxAcceleratorTable   wxNullAcceleratorTable;
 | 
			
		||||
#endif // wxUSE_ACCEL
 | 
			
		||||
 | 
			
		||||
wxBitmap   wxNullBitmap;
 | 
			
		||||
wxIcon     wxNullIcon;
 | 
			
		||||
wxCursor   wxNullCursor;
 | 
			
		||||
wxPen      wxNullPen;
 | 
			
		||||
wxBrush    wxNullBrush;
 | 
			
		||||
wxFont     wxNullFont;
 | 
			
		||||
wxColour   wxNullColour;
 | 
			
		||||
wxPalette  wxNullPalette;
 | 
			
		||||
 | 
			
		||||
/* Default window names */
 | 
			
		||||
const wxChar *wxControlNameStr = wxT("control");
 | 
			
		||||
const wxChar *wxButtonNameStr = wxT("button");
 | 
			
		||||
const wxChar *wxCanvasNameStr = wxT("canvas");
 | 
			
		||||
const wxChar *wxCheckBoxNameStr = wxT("check");
 | 
			
		||||
const wxChar *wxChoiceNameStr = wxT("choice");
 | 
			
		||||
const wxChar *wxComboBoxNameStr = wxT("comboBox");
 | 
			
		||||
const wxChar *wxDialogNameStr = wxT("dialog");
 | 
			
		||||
const wxChar *wxFrameNameStr = wxT("frame");
 | 
			
		||||
const wxChar *wxGaugeNameStr = wxT("gauge");
 | 
			
		||||
const wxChar *wxStaticBoxNameStr = wxT("groupBox");
 | 
			
		||||
const wxChar *wxListBoxNameStr = wxT("listBox");
 | 
			
		||||
const wxChar *wxStaticTextNameStr = wxT("message");
 | 
			
		||||
const wxChar *wxStaticBitmapNameStr = wxT("message");
 | 
			
		||||
const wxChar *wxMultiTextNameStr = wxT("multitext");
 | 
			
		||||
const wxChar *wxPanelNameStr = wxT("panel");
 | 
			
		||||
const wxChar *wxRadioBoxNameStr = wxT("radioBox");
 | 
			
		||||
const wxChar *wxRadioButtonNameStr = wxT("radioButton");
 | 
			
		||||
const wxChar *wxBitmapRadioButtonNameStr = wxT("radioButton");
 | 
			
		||||
const wxChar *wxScrollBarNameStr = wxT("scrollBar");
 | 
			
		||||
const wxChar *wxSliderNameStr = wxT("slider");
 | 
			
		||||
const wxChar *wxStaticNameStr = wxT("static");
 | 
			
		||||
const wxChar *wxTextCtrlWindowNameStr = wxT("textWindow");
 | 
			
		||||
const wxChar *wxTextCtrlNameStr = wxT("text");
 | 
			
		||||
const wxChar *wxVirtListBoxNameStr = wxT("virtListBox");
 | 
			
		||||
const wxChar *wxButtonBarNameStr = wxT("buttonbar");
 | 
			
		||||
const wxChar *wxEnhDialogNameStr = wxT("Shell");
 | 
			
		||||
const wxChar *wxToolBarNameStr = wxT("toolbar");
 | 
			
		||||
const wxChar *wxStatusLineNameStr = wxT("status_line");
 | 
			
		||||
const wxChar *wxGetTextFromUserPromptStr = wxT("Input Text");
 | 
			
		||||
const wxChar *wxMessageBoxCaptionStr = wxT("Message");
 | 
			
		||||
const wxChar *wxFileSelectorPromptStr = wxT("Select a file");
 | 
			
		||||
const wxChar *wxFileSelectorDefaultWildcardStr = wxT("*");
 | 
			
		||||
const wxChar *wxInternalErrorStr = wxT("wxWindows Internal Error");
 | 
			
		||||
const wxChar *wxFatalErrorStr = wxT("wxWindows Fatal Error");
 | 
			
		||||
const wxChar *wxDirDialogNameStr = wxT("wxDirCtrl");
 | 
			
		||||
const wxChar *wxDirDialogDefaultFolderStr = wxT("/");
 | 
			
		||||
const wxChar *wxTreeCtrlNameStr = wxT("wxTreeCtrl");
 | 
			
		||||
 | 
			
		||||
/* See wx/utils.h */
 | 
			
		||||
const wxChar *wxFloatToStringStr = wxT("%.2f");
 | 
			
		||||
const wxChar *wxDoubleToStringStr = wxT("%.2f");
 | 
			
		||||
 | 
			
		||||
/* Dafaults for wxWindow etc. */
 | 
			
		||||
const wxSize wxDefaultSize(-1, -1);
 | 
			
		||||
const wxPoint wxDefaultPosition(-1, -1);
 | 
			
		||||
							
								
								
									
										1558
									
								
								src/mgl/dc.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1558
									
								
								src/mgl/dc.cpp
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										19
									
								
								src/mgl/dcclient.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/mgl/dcclient.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        gtk/dcclient.cpp
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Robert Roebling
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) 1998 Robert Roebling, Markus Holzem, Chris Breeze
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "dcclient.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/dcclient.h"
 | 
			
		||||
#include "wx/dcmemory.h"
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxWindowDC, wxDC)
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxPaintDC, wxClientDC)
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxClientDC,wxWindowDC)
 | 
			
		||||
							
								
								
									
										119
									
								
								src/mgl/dcmemory.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								src/mgl/dcmemory.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,119 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        dcmemory.cpp
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Robert Roebling, Vaclav Slavik
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) 1998 Robert Roebling, 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "dcmemory.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// For compilers that support precompilation, includes "wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/dcmemory.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxMemoryDC
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxWindowDC)
 | 
			
		||||
 | 
			
		||||
wxMemoryDC::wxMemoryDC() : wxDC()
 | 
			
		||||
{
 | 
			
		||||
    m_isMemDC = TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxMemoryDC::wxMemoryDC(wxDC *WXUNUSED(dc)) : wxDC()
 | 
			
		||||
{
 | 
			
		||||
    m_isMemDC = TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxMemoryDC::~wxMemoryDC()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxMemoryDC::SelectObject(const wxBitmap& bitmap)
 | 
			
		||||
{
 | 
			
		||||
    SetMGLDC(NULL, TRUE);
 | 
			
		||||
    m_selected = bitmap;
 | 
			
		||||
 | 
			
		||||
    if ( bitmap.Ok() )
 | 
			
		||||
        SetMGLDC(m_selected.CreateTmpDC(), TRUE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxMemoryDC::SetPen(const wxPen &pen)
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_RET( Ok(), wxT("invalid dc") );
 | 
			
		||||
 | 
			
		||||
    if ( GetDepth() == 1 && *wxTRANSPARENT_PEN != pen )
 | 
			
		||||
    {
 | 
			
		||||
        if ( *wxWHITE_PEN == pen )
 | 
			
		||||
            wxDC::SetPen(*wxBLACK_PEN);
 | 
			
		||||
        else
 | 
			
		||||
            wxDC::SetPen(*wxWHITE_PEN);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxDC::SetPen(pen);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxMemoryDC::SetBrush(const wxBrush &brush)
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_RET( Ok(), wxT("invalid dc") );
 | 
			
		||||
 | 
			
		||||
    if ( GetDepth() == 1 && *wxTRANSPARENT_BRUSH != brush )
 | 
			
		||||
    {
 | 
			
		||||
        if ( *wxWHITE_BRUSH == brush )
 | 
			
		||||
            wxDC::SetBrush(*wxBLACK_BRUSH);
 | 
			
		||||
        else
 | 
			
		||||
            wxDC::SetBrush(*wxWHITE_BRUSH);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxDC::SetBrush(brush);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxMemoryDC::SetTextForeground(const wxColour &col)
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_RET( Ok(), wxT("invalid dc") );
 | 
			
		||||
 | 
			
		||||
    if ( GetDepth() == 1 )
 | 
			
		||||
    {
 | 
			
		||||
        if ( col == *wxWHITE )
 | 
			
		||||
            wxDC::SetTextForeground(*wxBLACK);
 | 
			
		||||
        else
 | 
			
		||||
            wxDC::SetTextForeground(*wxWHITE);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxDC::SetTextForeground(col);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxMemoryDC::SetTextBackground(const wxColour &col)
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_RET( Ok(), wxT("invalid dc") );
 | 
			
		||||
 | 
			
		||||
    if ( GetDepth() == 1 )
 | 
			
		||||
    {
 | 
			
		||||
        if ( col == *wxWHITE )
 | 
			
		||||
            wxDC::SetTextBackground(*wxBLACK);
 | 
			
		||||
        else
 | 
			
		||||
            wxDC::SetTextBackground(*wxWHITE);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxDC::SetTextBackground(col);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								src/mgl/dcscreen.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/mgl/dcscreen.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        dcscreen.cpp
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Robert Roebling
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 1998 Robert Roebling
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "dcscreen.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/dcscreen.h"
 | 
			
		||||
#include "wx/window.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxScreenDC,wxPaintDC)
 | 
			
		||||
							
								
								
									
										21
									
								
								src/mgl/dialog.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/mgl/dialog.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        dialog.cpp
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Robert Roebling
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 1998 Robert Roebling
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "dialog.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/dialog.h"
 | 
			
		||||
#include "wx/frame.h"
 | 
			
		||||
#include "wx/app.h"
 | 
			
		||||
#include "wx/cursor.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxDialog,wxPanel)
 | 
			
		||||
							
								
								
									
										993
									
								
								src/mgl/files.lst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										993
									
								
								src/mgl/files.lst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,993 @@
 | 
			
		||||
# This file was automatically generated by tmake at 17:30, 2001/04/28
 | 
			
		||||
# DO NOT CHANGE THIS FILE, YOUR CHANGES WILL BE LOST! CHANGE GTK.T!
 | 
			
		||||
ALL_SOURCES = \
 | 
			
		||||
		generic/busyinfo.cpp \
 | 
			
		||||
		generic/calctrl.cpp \
 | 
			
		||||
		generic/caret.cpp \
 | 
			
		||||
		generic/choicdgg.cpp \
 | 
			
		||||
		generic/colrdlgg.cpp \
 | 
			
		||||
		generic/dcpsg.cpp \
 | 
			
		||||
		generic/dirctrlg.cpp \
 | 
			
		||||
		generic/dirdlgg.cpp \
 | 
			
		||||
		generic/dragimgg.cpp \
 | 
			
		||||
		generic/filedlgg.cpp \
 | 
			
		||||
		generic/grid.cpp \
 | 
			
		||||
		generic/gridsel.cpp \
 | 
			
		||||
		generic/helpext.cpp \
 | 
			
		||||
		generic/helphtml.cpp \
 | 
			
		||||
		generic/helpwxht.cpp \
 | 
			
		||||
		generic/imaglist.cpp \
 | 
			
		||||
		generic/laywin.cpp \
 | 
			
		||||
		generic/listctrl.cpp \
 | 
			
		||||
		generic/logg.cpp \
 | 
			
		||||
		generic/msgdlgg.cpp \
 | 
			
		||||
		generic/numdlgg.cpp \
 | 
			
		||||
		generic/panelg.cpp \
 | 
			
		||||
		generic/plot.cpp \
 | 
			
		||||
		generic/printps.cpp \
 | 
			
		||||
		generic/prntdlgg.cpp \
 | 
			
		||||
		generic/progdlgg.cpp \
 | 
			
		||||
		generic/prop.cpp \
 | 
			
		||||
		generic/propform.cpp \
 | 
			
		||||
		generic/proplist.cpp \
 | 
			
		||||
		generic/sashwin.cpp \
 | 
			
		||||
		generic/scrolwin.cpp \
 | 
			
		||||
		generic/splash.cpp \
 | 
			
		||||
		generic/splitter.cpp \
 | 
			
		||||
		generic/statusbr.cpp \
 | 
			
		||||
		generic/tabg.cpp \
 | 
			
		||||
		generic/tbarsmpl.cpp \
 | 
			
		||||
		generic/textdlgg.cpp \
 | 
			
		||||
		generic/tipdlg.cpp \
 | 
			
		||||
		generic/treectlg.cpp \
 | 
			
		||||
		generic/treelay.cpp \
 | 
			
		||||
		generic/wizard.cpp \
 | 
			
		||||
		common/appcmn.cpp \
 | 
			
		||||
		common/choiccmn.cpp \
 | 
			
		||||
		common/clipcmn.cpp \
 | 
			
		||||
		common/cmdline.cpp \
 | 
			
		||||
		common/cmndata.cpp \
 | 
			
		||||
		common/config.cpp \
 | 
			
		||||
		common/ctrlcmn.cpp \
 | 
			
		||||
		common/ctrlsub.cpp \
 | 
			
		||||
		common/datetime.cpp \
 | 
			
		||||
		common/datstrm.cpp \
 | 
			
		||||
		common/db.cpp \
 | 
			
		||||
		common/dbtable.cpp \
 | 
			
		||||
		common/dcbase.cpp \
 | 
			
		||||
		common/dlgcmn.cpp \
 | 
			
		||||
		common/dndcmn.cpp \
 | 
			
		||||
		common/dobjcmn.cpp \
 | 
			
		||||
		common/docmdi.cpp \
 | 
			
		||||
		common/docview.cpp \
 | 
			
		||||
		common/dynarray.cpp \
 | 
			
		||||
		common/dynlib.cpp \
 | 
			
		||||
		common/effects.cpp \
 | 
			
		||||
		common/encconv.cpp \
 | 
			
		||||
		common/event.cpp \
 | 
			
		||||
		common/extended.c \
 | 
			
		||||
		common/ffile.cpp \
 | 
			
		||||
		common/file.cpp \
 | 
			
		||||
		common/fileconf.cpp \
 | 
			
		||||
		common/filefn.cpp \
 | 
			
		||||
		common/filesys.cpp \
 | 
			
		||||
		common/fontcmn.cpp \
 | 
			
		||||
		common/fontmap.cpp \
 | 
			
		||||
		common/framecmn.cpp \
 | 
			
		||||
		common/fs_inet.cpp \
 | 
			
		||||
		common/fs_mem.cpp \
 | 
			
		||||
		common/fs_zip.cpp \
 | 
			
		||||
		common/ftp.cpp \
 | 
			
		||||
		common/gdicmn.cpp \
 | 
			
		||||
		common/geometry.cpp \
 | 
			
		||||
		common/gifdecod.cpp \
 | 
			
		||||
		common/hash.cpp \
 | 
			
		||||
		common/helpbase.cpp \
 | 
			
		||||
		common/http.cpp \
 | 
			
		||||
		common/imagall.cpp \
 | 
			
		||||
		common/imagbmp.cpp \
 | 
			
		||||
		common/image.cpp \
 | 
			
		||||
		common/imaggif.cpp \
 | 
			
		||||
		common/imagjpeg.cpp \
 | 
			
		||||
		common/imagpcx.cpp \
 | 
			
		||||
		common/imagpng.cpp \
 | 
			
		||||
		common/imagpnm.cpp \
 | 
			
		||||
		common/imagtiff.cpp \
 | 
			
		||||
		common/imagxpm.cpp \
 | 
			
		||||
		common/intl.cpp \
 | 
			
		||||
		common/ipcbase.cpp \
 | 
			
		||||
		common/layout.cpp \
 | 
			
		||||
		common/lboxcmn.cpp \
 | 
			
		||||
		common/list.cpp \
 | 
			
		||||
		common/log.cpp \
 | 
			
		||||
		common/longlong.cpp \
 | 
			
		||||
		common/memory.cpp \
 | 
			
		||||
		common/menucmn.cpp \
 | 
			
		||||
		common/mimecmn.cpp \
 | 
			
		||||
		common/module.cpp \
 | 
			
		||||
		common/mstream.cpp \
 | 
			
		||||
		common/object.cpp \
 | 
			
		||||
		common/objstrm.cpp \
 | 
			
		||||
		common/paper.cpp \
 | 
			
		||||
		common/prntbase.cpp \
 | 
			
		||||
		common/process.cpp \
 | 
			
		||||
		common/protocol.cpp \
 | 
			
		||||
		common/quantize.cpp \
 | 
			
		||||
		common/resource.cpp \
 | 
			
		||||
		common/sckaddr.cpp \
 | 
			
		||||
		common/sckfile.cpp \
 | 
			
		||||
		common/sckipc.cpp \
 | 
			
		||||
		common/sckstrm.cpp \
 | 
			
		||||
		common/serbase.cpp \
 | 
			
		||||
		common/sizer.cpp \
 | 
			
		||||
		common/socket.cpp \
 | 
			
		||||
		common/strconv.cpp \
 | 
			
		||||
		common/stream.cpp \
 | 
			
		||||
		common/string.cpp \
 | 
			
		||||
		common/tbarbase.cpp \
 | 
			
		||||
		common/textcmn.cpp \
 | 
			
		||||
		common/textfile.cpp \
 | 
			
		||||
		common/timercmn.cpp \
 | 
			
		||||
		common/tokenzr.cpp \
 | 
			
		||||
		common/treebase.cpp \
 | 
			
		||||
		common/txtstrm.cpp \
 | 
			
		||||
		common/unzip.c \
 | 
			
		||||
		common/url.cpp \
 | 
			
		||||
		common/utilscmn.cpp \
 | 
			
		||||
		common/valgen.cpp \
 | 
			
		||||
		common/validate.cpp \
 | 
			
		||||
		common/valtext.cpp \
 | 
			
		||||
		common/variant.cpp \
 | 
			
		||||
		common/wfstream.cpp \
 | 
			
		||||
		common/wincmn.cpp \
 | 
			
		||||
		common/wxchar.cpp \
 | 
			
		||||
		common/wxexpr.cpp \
 | 
			
		||||
		common/xpmdecod.cpp \
 | 
			
		||||
		common/zipstrm.cpp \
 | 
			
		||||
		common/zstream.cpp \
 | 
			
		||||
		mgl/app.cpp \
 | 
			
		||||
		mgl/bitmap.cpp \
 | 
			
		||||
		mgl/bmpbase.cpp \
 | 
			
		||||
		mgl/brush.cpp \
 | 
			
		||||
		mgl/clipbrd.cpp \
 | 
			
		||||
		mgl/colour.cpp \
 | 
			
		||||
		mgl/cursor.cpp \
 | 
			
		||||
		mgl/data.cpp \
 | 
			
		||||
		mgl/dc.cpp \
 | 
			
		||||
		mgl/dcclient.cpp \
 | 
			
		||||
		mgl/dcmemory.cpp \
 | 
			
		||||
		mgl/dcscreen.cpp \
 | 
			
		||||
		mgl/dialog.cpp \
 | 
			
		||||
		mgl/font.cpp \
 | 
			
		||||
		mgl/frame.cpp \
 | 
			
		||||
		mgl/gdiobj.cpp \
 | 
			
		||||
		mgl/icon.cpp \
 | 
			
		||||
		mgl/palette.cpp \
 | 
			
		||||
		mgl/pen.cpp \
 | 
			
		||||
		mgl/region.cpp \
 | 
			
		||||
		mgl/settings.cpp \
 | 
			
		||||
		mgl/timer.cpp \
 | 
			
		||||
		mgl/utils.cpp \
 | 
			
		||||
		mgl/window.cpp \
 | 
			
		||||
		unix/dialup.cpp \
 | 
			
		||||
		unix/dir.cpp \
 | 
			
		||||
		unix/fontenum.cpp \
 | 
			
		||||
		unix/fontutil.cpp \
 | 
			
		||||
		unix/gsocket.c \
 | 
			
		||||
		unix/mimetype.cpp \
 | 
			
		||||
		unix/threadpsx.cpp \
 | 
			
		||||
		unix/utilsunx.cpp \
 | 
			
		||||
		html/helpctrl.cpp \
 | 
			
		||||
		html/helpdata.cpp \
 | 
			
		||||
		html/helpfrm.cpp \
 | 
			
		||||
		html/htmlcell.cpp \
 | 
			
		||||
		html/htmlfilt.cpp \
 | 
			
		||||
		html/htmlpars.cpp \
 | 
			
		||||
		html/htmltag.cpp \
 | 
			
		||||
		html/htmlwin.cpp \
 | 
			
		||||
		html/htmprint.cpp \
 | 
			
		||||
		html/m_dflist.cpp \
 | 
			
		||||
		html/m_fonts.cpp \
 | 
			
		||||
		html/m_hline.cpp \
 | 
			
		||||
		html/m_image.cpp \
 | 
			
		||||
		html/m_layout.cpp \
 | 
			
		||||
		html/m_links.cpp \
 | 
			
		||||
		html/m_list.cpp \
 | 
			
		||||
		html/m_meta.cpp \
 | 
			
		||||
		html/m_pre.cpp \
 | 
			
		||||
		html/m_tables.cpp \
 | 
			
		||||
		html/winpars.cpp
 | 
			
		||||
 | 
			
		||||
ALL_HEADERS = \
 | 
			
		||||
		accel.h \
 | 
			
		||||
		app.h \
 | 
			
		||||
		arrimpl.cpp \
 | 
			
		||||
		bitmap.h \
 | 
			
		||||
		bmpbuttn.h \
 | 
			
		||||
		brush.h \
 | 
			
		||||
		buffer.h \
 | 
			
		||||
		busyinfo.h \
 | 
			
		||||
		button.h \
 | 
			
		||||
		calctrl.h \
 | 
			
		||||
		caret.h \
 | 
			
		||||
		checkbox.h \
 | 
			
		||||
		checklst.h \
 | 
			
		||||
		choicdlg.h \
 | 
			
		||||
		choice.h \
 | 
			
		||||
		clipbrd.h \
 | 
			
		||||
		cmdline.h \
 | 
			
		||||
		cmndata.h \
 | 
			
		||||
		colordlg.h \
 | 
			
		||||
		colour.h \
 | 
			
		||||
		combobox.h \
 | 
			
		||||
		confbase.h \
 | 
			
		||||
		config.h \
 | 
			
		||||
		control.h \
 | 
			
		||||
		ctrlsub.h \
 | 
			
		||||
		cursor.h \
 | 
			
		||||
		dataobj.h \
 | 
			
		||||
		date.h \
 | 
			
		||||
		datetime.h \
 | 
			
		||||
		datetime.inl \
 | 
			
		||||
		datstrm.h \
 | 
			
		||||
		db.h \
 | 
			
		||||
		dbtable.h \
 | 
			
		||||
		dc.h \
 | 
			
		||||
		dcclient.h \
 | 
			
		||||
		dcmemory.h \
 | 
			
		||||
		dcprint.h \
 | 
			
		||||
		dcps.h \
 | 
			
		||||
		dcscreen.h \
 | 
			
		||||
		dde.h \
 | 
			
		||||
		debug.h \
 | 
			
		||||
		defs.h \
 | 
			
		||||
		dialog.h \
 | 
			
		||||
		dialup.h \
 | 
			
		||||
		dir.h \
 | 
			
		||||
		dirdlg.h \
 | 
			
		||||
		dnd.h \
 | 
			
		||||
		docmdi.h \
 | 
			
		||||
		docview.h \
 | 
			
		||||
		dragimag.h \
 | 
			
		||||
		dynarray.h \
 | 
			
		||||
		dynlib.h \
 | 
			
		||||
		encconv.h \
 | 
			
		||||
		event.h \
 | 
			
		||||
		expr.h \
 | 
			
		||||
		ffile.h \
 | 
			
		||||
		file.h \
 | 
			
		||||
		fileconf.h \
 | 
			
		||||
		filedlg.h \
 | 
			
		||||
		filefn.h \
 | 
			
		||||
		filesys.h \
 | 
			
		||||
		font.h \
 | 
			
		||||
		fontdlg.h \
 | 
			
		||||
		fontenc.h \
 | 
			
		||||
		fontenum.h \
 | 
			
		||||
		fontmap.h \
 | 
			
		||||
		fontutil.h \
 | 
			
		||||
		frame.h \
 | 
			
		||||
		fs_inet.h \
 | 
			
		||||
		fs_mem.h \
 | 
			
		||||
		fs_zip.h \
 | 
			
		||||
		gauge.h \
 | 
			
		||||
		gdicmn.h \
 | 
			
		||||
		gdiobj.h \
 | 
			
		||||
		geometry.h \
 | 
			
		||||
		gifdecod.h \
 | 
			
		||||
		glcanvas.h \
 | 
			
		||||
		grid.h \
 | 
			
		||||
		gsocket.h \
 | 
			
		||||
		hash.h \
 | 
			
		||||
		help.h \
 | 
			
		||||
		helpbase.h \
 | 
			
		||||
		helpchm.h \
 | 
			
		||||
		helphtml.h \
 | 
			
		||||
		helpwin.h \
 | 
			
		||||
		helpxlp.h \
 | 
			
		||||
		icon.h \
 | 
			
		||||
		imagbmp.h \
 | 
			
		||||
		image.h \
 | 
			
		||||
		imaggif.h \
 | 
			
		||||
		imagjpeg.h \
 | 
			
		||||
		imaglist.h \
 | 
			
		||||
		imagpcx.h \
 | 
			
		||||
		imagpng.h \
 | 
			
		||||
		imagpnm.h \
 | 
			
		||||
		imagtiff.h \
 | 
			
		||||
		imagxpm.h \
 | 
			
		||||
		intl.h \
 | 
			
		||||
		ioswrap.h \
 | 
			
		||||
		ipcbase.h \
 | 
			
		||||
		isql.h \
 | 
			
		||||
		isqlext.h \
 | 
			
		||||
		joystick.h \
 | 
			
		||||
		layout.h \
 | 
			
		||||
		laywin.h \
 | 
			
		||||
		list.h \
 | 
			
		||||
		listbox.h \
 | 
			
		||||
		listctrl.h \
 | 
			
		||||
		listimpl.cpp \
 | 
			
		||||
		log.h \
 | 
			
		||||
		longlong.h \
 | 
			
		||||
		matrix.h \
 | 
			
		||||
		mdi.h \
 | 
			
		||||
		memconf.h \
 | 
			
		||||
		memory.h \
 | 
			
		||||
		menu.h \
 | 
			
		||||
		menuitem.h \
 | 
			
		||||
		metafile.h \
 | 
			
		||||
		mimetype.h \
 | 
			
		||||
		minifram.h \
 | 
			
		||||
		module.h \
 | 
			
		||||
		msgdlg.h \
 | 
			
		||||
		mstream.h \
 | 
			
		||||
		notebook.h \
 | 
			
		||||
		object.h \
 | 
			
		||||
		objstrm.h \
 | 
			
		||||
		odbc.h \
 | 
			
		||||
		ownerdrw.h \
 | 
			
		||||
		palette.h \
 | 
			
		||||
		panel.h \
 | 
			
		||||
		paper.h \
 | 
			
		||||
		pen.h \
 | 
			
		||||
		plot.h \
 | 
			
		||||
		print.h \
 | 
			
		||||
		printdlg.h \
 | 
			
		||||
		prntbase.h \
 | 
			
		||||
		process.h \
 | 
			
		||||
		progdlg.h \
 | 
			
		||||
		prop.h \
 | 
			
		||||
		propform.h \
 | 
			
		||||
		proplist.h \
 | 
			
		||||
		radiobox.h \
 | 
			
		||||
		radiobut.h \
 | 
			
		||||
		region.h \
 | 
			
		||||
		resource.h \
 | 
			
		||||
		sashwin.h \
 | 
			
		||||
		sckaddr.h \
 | 
			
		||||
		sckipc.h \
 | 
			
		||||
		sckstrm.h \
 | 
			
		||||
		scrolbar.h \
 | 
			
		||||
		scrolwin.h \
 | 
			
		||||
		serbase.h \
 | 
			
		||||
		settings.h \
 | 
			
		||||
		setup.h \
 | 
			
		||||
		sizer.h \
 | 
			
		||||
		slider.h \
 | 
			
		||||
		socket.h \
 | 
			
		||||
		spinbutt.h \
 | 
			
		||||
		spinctrl.h \
 | 
			
		||||
		splitter.h \
 | 
			
		||||
		statbmp.h \
 | 
			
		||||
		statbox.h \
 | 
			
		||||
		statline.h \
 | 
			
		||||
		stattext.h \
 | 
			
		||||
		statusbr.h \
 | 
			
		||||
		strconv.h \
 | 
			
		||||
		stream.h \
 | 
			
		||||
		string.h \
 | 
			
		||||
		tab.h \
 | 
			
		||||
		tabctrl.h \
 | 
			
		||||
		taskbar.h \
 | 
			
		||||
		tbarbase.h \
 | 
			
		||||
		tbarsmpl.h \
 | 
			
		||||
		textctrl.h \
 | 
			
		||||
		textdlg.h \
 | 
			
		||||
		textfile.h \
 | 
			
		||||
		thread.h \
 | 
			
		||||
		time.h \
 | 
			
		||||
		timer.h \
 | 
			
		||||
		tipdlg.h \
 | 
			
		||||
		tokenzr.h \
 | 
			
		||||
		toolbar.h \
 | 
			
		||||
		tooltip.h \
 | 
			
		||||
		treebase.h \
 | 
			
		||||
		treectrl.h \
 | 
			
		||||
		txtstrm.h \
 | 
			
		||||
		types.h \
 | 
			
		||||
		url.h \
 | 
			
		||||
		utils.h \
 | 
			
		||||
		valgen.h \
 | 
			
		||||
		validate.h \
 | 
			
		||||
		valtext.h \
 | 
			
		||||
		variant.h \
 | 
			
		||||
		version.h \
 | 
			
		||||
		wave.h \
 | 
			
		||||
		wfstream.h \
 | 
			
		||||
		window.h \
 | 
			
		||||
		wizard.h \
 | 
			
		||||
		wx.h \
 | 
			
		||||
		wx_cw.h \
 | 
			
		||||
		wx_cw_cm.h \
 | 
			
		||||
		wx_cw_d.h \
 | 
			
		||||
		wxchar.h \
 | 
			
		||||
		wxexpr.h \
 | 
			
		||||
		wxhtml.h \
 | 
			
		||||
		wxprec.h \
 | 
			
		||||
		xpmdecod.h \
 | 
			
		||||
		xpmhand.h \
 | 
			
		||||
		zipstrm.h \
 | 
			
		||||
		zstream.h \
 | 
			
		||||
		gtk/accel.h \
 | 
			
		||||
		gtk/app.h \
 | 
			
		||||
		gtk/bitmap.h \
 | 
			
		||||
		gtk/bmpbuttn.h \
 | 
			
		||||
		gtk/brush.h \
 | 
			
		||||
		gtk/button.h \
 | 
			
		||||
		gtk/checkbox.h \
 | 
			
		||||
		gtk/checklst.h \
 | 
			
		||||
		gtk/choice.h \
 | 
			
		||||
		gtk/clipbrd.h \
 | 
			
		||||
		gtk/colour.h \
 | 
			
		||||
		gtk/combobox.h \
 | 
			
		||||
		gtk/control.h \
 | 
			
		||||
		gtk/cursor.h \
 | 
			
		||||
		gtk/dataform.h \
 | 
			
		||||
		gtk/dataobj.h \
 | 
			
		||||
		gtk/dataobj2.h \
 | 
			
		||||
		gtk/dc.h \
 | 
			
		||||
		gtk/dcclient.h \
 | 
			
		||||
		gtk/dcmemory.h \
 | 
			
		||||
		gtk/dcscreen.h \
 | 
			
		||||
		gtk/dialog.h \
 | 
			
		||||
		gtk/dnd.h \
 | 
			
		||||
		gtk/filedlg.h \
 | 
			
		||||
		gtk/font.h \
 | 
			
		||||
		gtk/fontdlg.h \
 | 
			
		||||
		gtk/frame.h \
 | 
			
		||||
		gtk/gauge.h \
 | 
			
		||||
		gtk/gdiobj.h \
 | 
			
		||||
		gtk/glcanvas.h \
 | 
			
		||||
		gtk/icon.h \
 | 
			
		||||
		gtk/joystick.h \
 | 
			
		||||
		gtk/listbox.h \
 | 
			
		||||
		gtk/mdi.h \
 | 
			
		||||
		gtk/menu.h \
 | 
			
		||||
		gtk/menuitem.h \
 | 
			
		||||
		gtk/minifram.h \
 | 
			
		||||
		gtk/notebook.h \
 | 
			
		||||
		gtk/palette.h \
 | 
			
		||||
		gtk/pen.h \
 | 
			
		||||
		gtk/radiobox.h \
 | 
			
		||||
		gtk/radiobut.h \
 | 
			
		||||
		gtk/region.h \
 | 
			
		||||
		gtk/scrolbar.h \
 | 
			
		||||
		gtk/settings.h \
 | 
			
		||||
		gtk/slider.h \
 | 
			
		||||
		gtk/spinbutt.h \
 | 
			
		||||
		gtk/spinctrl.h \
 | 
			
		||||
		gtk/statbmp.h \
 | 
			
		||||
		gtk/statbox.h \
 | 
			
		||||
		gtk/statline.h \
 | 
			
		||||
		gtk/stattext.h \
 | 
			
		||||
		gtk/tbargtk.h \
 | 
			
		||||
		gtk/textctrl.h \
 | 
			
		||||
		gtk/timer.h \
 | 
			
		||||
		gtk/tooltip.h \
 | 
			
		||||
		gtk/treectrl.h \
 | 
			
		||||
		gtk/wave.h \
 | 
			
		||||
		gtk/win_gtk.h \
 | 
			
		||||
		gtk/window.h \
 | 
			
		||||
		generic/calctrl.h \
 | 
			
		||||
		generic/caret.h \
 | 
			
		||||
		generic/choicdgg.h \
 | 
			
		||||
		generic/colrdlgg.h \
 | 
			
		||||
		generic/dcpsg.h \
 | 
			
		||||
		generic/dirctrlg.h \
 | 
			
		||||
		generic/dirdlgg.h \
 | 
			
		||||
		generic/dragimgg.h \
 | 
			
		||||
		generic/filedlgg.h \
 | 
			
		||||
		generic/fontdlgg.h \
 | 
			
		||||
		generic/grid.h \
 | 
			
		||||
		generic/gridg.h \
 | 
			
		||||
		generic/helpext.h \
 | 
			
		||||
		generic/helphtml.h \
 | 
			
		||||
		generic/helpwxht.h \
 | 
			
		||||
		generic/helpxlp.h \
 | 
			
		||||
		generic/imaglist.h \
 | 
			
		||||
		generic/laywin.h \
 | 
			
		||||
		generic/listctrl.h \
 | 
			
		||||
		generic/msgdlgg.h \
 | 
			
		||||
		generic/notebook.h \
 | 
			
		||||
		generic/panelg.h \
 | 
			
		||||
		generic/plot.h \
 | 
			
		||||
		generic/printps.h \
 | 
			
		||||
		generic/prntdlgg.h \
 | 
			
		||||
		generic/progdlgg.h \
 | 
			
		||||
		generic/sashwin.h \
 | 
			
		||||
		generic/scrolwin.h \
 | 
			
		||||
		generic/splitter.h \
 | 
			
		||||
		generic/statusbr.h \
 | 
			
		||||
		generic/tabg.h \
 | 
			
		||||
		generic/textdlgg.h \
 | 
			
		||||
		generic/treectlg.h \
 | 
			
		||||
		generic/wizard.h \
 | 
			
		||||
		unix/execute.h \
 | 
			
		||||
		unix/fontutil.h \
 | 
			
		||||
		unix/gsockunx.h \
 | 
			
		||||
		unix/mimetype.h \
 | 
			
		||||
		html/forcelnk.h \
 | 
			
		||||
		html/helpctrl.h \
 | 
			
		||||
		html/helpdata.h \
 | 
			
		||||
		html/helpfrm.h \
 | 
			
		||||
		html/htmlcell.h \
 | 
			
		||||
		html/htmldefs.h \
 | 
			
		||||
		html/htmlfilt.h \
 | 
			
		||||
		html/htmlpars.h \
 | 
			
		||||
		html/htmltag.h \
 | 
			
		||||
		html/htmlwin.h \
 | 
			
		||||
		html/htmprint.h \
 | 
			
		||||
		html/m_templ.h \
 | 
			
		||||
		html/winpars.h \
 | 
			
		||||
		protocol/file.h \
 | 
			
		||||
		protocol/ftp.h \
 | 
			
		||||
		protocol/http.h \
 | 
			
		||||
		protocol/protocol.h
 | 
			
		||||
 | 
			
		||||
COMMONOBJS = \
 | 
			
		||||
		parser.o \
 | 
			
		||||
		appcmn.o \
 | 
			
		||||
		choiccmn.o \
 | 
			
		||||
		clipcmn.o \
 | 
			
		||||
		cmdline.o \
 | 
			
		||||
		cmndata.o \
 | 
			
		||||
		config.o \
 | 
			
		||||
		ctrlcmn.o \
 | 
			
		||||
		ctrlsub.o \
 | 
			
		||||
		datetime.o \
 | 
			
		||||
		datstrm.o \
 | 
			
		||||
		db.o \
 | 
			
		||||
		dbtable.o \
 | 
			
		||||
		dcbase.o \
 | 
			
		||||
		dlgcmn.o \
 | 
			
		||||
		dndcmn.o \
 | 
			
		||||
		dobjcmn.o \
 | 
			
		||||
		docmdi.o \
 | 
			
		||||
		docview.o \
 | 
			
		||||
		dynarray.o \
 | 
			
		||||
		dynlib.o \
 | 
			
		||||
		effects.o \
 | 
			
		||||
		encconv.o \
 | 
			
		||||
		event.o \
 | 
			
		||||
		extended.o \
 | 
			
		||||
		ffile.o \
 | 
			
		||||
		file.o \
 | 
			
		||||
		fileconf.o \
 | 
			
		||||
		filefn.o \
 | 
			
		||||
		filesys.o \
 | 
			
		||||
		fontcmn.o \
 | 
			
		||||
		fontmap.o \
 | 
			
		||||
		framecmn.o \
 | 
			
		||||
		fs_inet.o \
 | 
			
		||||
		fs_mem.o \
 | 
			
		||||
		fs_zip.o \
 | 
			
		||||
		ftp.o \
 | 
			
		||||
		gdicmn.o \
 | 
			
		||||
		geometry.o \
 | 
			
		||||
		gifdecod.o \
 | 
			
		||||
		hash.o \
 | 
			
		||||
		helpbase.o \
 | 
			
		||||
		http.o \
 | 
			
		||||
		imagall.o \
 | 
			
		||||
		imagbmp.o \
 | 
			
		||||
		image.o \
 | 
			
		||||
		imaggif.o \
 | 
			
		||||
		imagjpeg.o \
 | 
			
		||||
		imagpcx.o \
 | 
			
		||||
		imagpng.o \
 | 
			
		||||
		imagpnm.o \
 | 
			
		||||
		imagtiff.o \
 | 
			
		||||
		imagxpm.o \
 | 
			
		||||
		intl.o \
 | 
			
		||||
		ipcbase.o \
 | 
			
		||||
		layout.o \
 | 
			
		||||
		lboxcmn.o \
 | 
			
		||||
		list.o \
 | 
			
		||||
		log.o \
 | 
			
		||||
		longlong.o \
 | 
			
		||||
		memory.o \
 | 
			
		||||
		menucmn.o \
 | 
			
		||||
		mimecmn.o \
 | 
			
		||||
		module.o \
 | 
			
		||||
		mstream.o \
 | 
			
		||||
		object.o \
 | 
			
		||||
		objstrm.o \
 | 
			
		||||
		paper.o \
 | 
			
		||||
		prntbase.o \
 | 
			
		||||
		process.o \
 | 
			
		||||
		protocol.o \
 | 
			
		||||
		quantize.o \
 | 
			
		||||
		resource.o \
 | 
			
		||||
		sckaddr.o \
 | 
			
		||||
		sckfile.o \
 | 
			
		||||
		sckipc.o \
 | 
			
		||||
		sckstrm.o \
 | 
			
		||||
		serbase.o \
 | 
			
		||||
		sizer.o \
 | 
			
		||||
		socket.o \
 | 
			
		||||
		strconv.o \
 | 
			
		||||
		stream.o \
 | 
			
		||||
		string.o \
 | 
			
		||||
		tbarbase.o \
 | 
			
		||||
		textcmn.o \
 | 
			
		||||
		textfile.o \
 | 
			
		||||
		timercmn.o \
 | 
			
		||||
		tokenzr.o \
 | 
			
		||||
		treebase.o \
 | 
			
		||||
		txtstrm.o \
 | 
			
		||||
		unzip.o \
 | 
			
		||||
		url.o \
 | 
			
		||||
		utilscmn.o \
 | 
			
		||||
		valgen.o \
 | 
			
		||||
		validate.o \
 | 
			
		||||
		valtext.o \
 | 
			
		||||
		variant.o \
 | 
			
		||||
		wfstream.o \
 | 
			
		||||
		wincmn.o \
 | 
			
		||||
		wxchar.o \
 | 
			
		||||
		wxexpr.o \
 | 
			
		||||
		xpmdecod.o \
 | 
			
		||||
		zipstrm.o \
 | 
			
		||||
		zstream.o
 | 
			
		||||
 | 
			
		||||
COMMONDEPS = \
 | 
			
		||||
		parser.d \
 | 
			
		||||
		appcmn.d \
 | 
			
		||||
		choiccmn.d \
 | 
			
		||||
		clipcmn.d \
 | 
			
		||||
		cmdline.d \
 | 
			
		||||
		cmndata.d \
 | 
			
		||||
		config.d \
 | 
			
		||||
		ctrlcmn.d \
 | 
			
		||||
		ctrlsub.d \
 | 
			
		||||
		datetime.d \
 | 
			
		||||
		datstrm.d \
 | 
			
		||||
		db.d \
 | 
			
		||||
		dbtable.d \
 | 
			
		||||
		dcbase.d \
 | 
			
		||||
		dlgcmn.d \
 | 
			
		||||
		dndcmn.d \
 | 
			
		||||
		dobjcmn.d \
 | 
			
		||||
		docmdi.d \
 | 
			
		||||
		docview.d \
 | 
			
		||||
		dynarray.d \
 | 
			
		||||
		dynlib.d \
 | 
			
		||||
		effects.d \
 | 
			
		||||
		encconv.d \
 | 
			
		||||
		event.d \
 | 
			
		||||
		extended.d \
 | 
			
		||||
		ffile.d \
 | 
			
		||||
		file.d \
 | 
			
		||||
		fileconf.d \
 | 
			
		||||
		filefn.d \
 | 
			
		||||
		filesys.d \
 | 
			
		||||
		fontcmn.d \
 | 
			
		||||
		fontmap.d \
 | 
			
		||||
		framecmn.d \
 | 
			
		||||
		fs_inet.d \
 | 
			
		||||
		fs_mem.d \
 | 
			
		||||
		fs_zip.d \
 | 
			
		||||
		ftp.d \
 | 
			
		||||
		gdicmn.d \
 | 
			
		||||
		geometry.d \
 | 
			
		||||
		gifdecod.d \
 | 
			
		||||
		hash.d \
 | 
			
		||||
		helpbase.d \
 | 
			
		||||
		http.d \
 | 
			
		||||
		imagall.d \
 | 
			
		||||
		imagbmp.d \
 | 
			
		||||
		image.d \
 | 
			
		||||
		imaggif.d \
 | 
			
		||||
		imagjpeg.d \
 | 
			
		||||
		imagpcx.d \
 | 
			
		||||
		imagpng.d \
 | 
			
		||||
		imagpnm.d \
 | 
			
		||||
		imagtiff.d \
 | 
			
		||||
		imagxpm.d \
 | 
			
		||||
		intl.d \
 | 
			
		||||
		ipcbase.d \
 | 
			
		||||
		layout.d \
 | 
			
		||||
		lboxcmn.d \
 | 
			
		||||
		list.d \
 | 
			
		||||
		log.d \
 | 
			
		||||
		longlong.d \
 | 
			
		||||
		memory.d \
 | 
			
		||||
		menucmn.d \
 | 
			
		||||
		mimecmn.d \
 | 
			
		||||
		module.d \
 | 
			
		||||
		mstream.d \
 | 
			
		||||
		object.d \
 | 
			
		||||
		objstrm.d \
 | 
			
		||||
		paper.d \
 | 
			
		||||
		prntbase.d \
 | 
			
		||||
		process.d \
 | 
			
		||||
		protocol.d \
 | 
			
		||||
		quantize.d \
 | 
			
		||||
		resource.d \
 | 
			
		||||
		sckaddr.d \
 | 
			
		||||
		sckfile.d \
 | 
			
		||||
		sckipc.d \
 | 
			
		||||
		sckstrm.d \
 | 
			
		||||
		serbase.d \
 | 
			
		||||
		sizer.d \
 | 
			
		||||
		socket.d \
 | 
			
		||||
		strconv.d \
 | 
			
		||||
		stream.d \
 | 
			
		||||
		string.d \
 | 
			
		||||
		tbarbase.d \
 | 
			
		||||
		textcmn.d \
 | 
			
		||||
		textfile.d \
 | 
			
		||||
		timercmn.d \
 | 
			
		||||
		tokenzr.d \
 | 
			
		||||
		treebase.d \
 | 
			
		||||
		txtstrm.d \
 | 
			
		||||
		unzip.d \
 | 
			
		||||
		url.d \
 | 
			
		||||
		utilscmn.d \
 | 
			
		||||
		valgen.d \
 | 
			
		||||
		validate.d \
 | 
			
		||||
		valtext.d \
 | 
			
		||||
		variant.d \
 | 
			
		||||
		wfstream.d \
 | 
			
		||||
		wincmn.d \
 | 
			
		||||
		wxchar.d \
 | 
			
		||||
		wxexpr.d \
 | 
			
		||||
		xpmdecod.d \
 | 
			
		||||
		zipstrm.d \
 | 
			
		||||
		zstream.d
 | 
			
		||||
 | 
			
		||||
GENERICOBJS = \
 | 
			
		||||
		busyinfo.o \
 | 
			
		||||
		calctrl.o \
 | 
			
		||||
		caret.o \
 | 
			
		||||
		choicdgg.o \
 | 
			
		||||
		colrdlgg.o \
 | 
			
		||||
		dcpsg.o \
 | 
			
		||||
		dirctrlg.o \
 | 
			
		||||
		dirdlgg.o \
 | 
			
		||||
		dragimgg.o \
 | 
			
		||||
		filedlgg.o \
 | 
			
		||||
		grid.o \
 | 
			
		||||
		gridsel.o \
 | 
			
		||||
		helpext.o \
 | 
			
		||||
		helphtml.o \
 | 
			
		||||
		helpwxht.o \
 | 
			
		||||
		imaglist.o \
 | 
			
		||||
		laywin.o \
 | 
			
		||||
		listctrl.o \
 | 
			
		||||
		logg.o \
 | 
			
		||||
		msgdlgg.o \
 | 
			
		||||
		numdlgg.o \
 | 
			
		||||
		panelg.o \
 | 
			
		||||
		plot.o \
 | 
			
		||||
		printps.o \
 | 
			
		||||
		prntdlgg.o \
 | 
			
		||||
		progdlgg.o \
 | 
			
		||||
		prop.o \
 | 
			
		||||
		propform.o \
 | 
			
		||||
		proplist.o \
 | 
			
		||||
		sashwin.o \
 | 
			
		||||
		scrolwin.o \
 | 
			
		||||
		splash.o \
 | 
			
		||||
		splitter.o \
 | 
			
		||||
		statusbr.o \
 | 
			
		||||
		tabg.o \
 | 
			
		||||
		tbarsmpl.o \
 | 
			
		||||
		textdlgg.o \
 | 
			
		||||
		tipdlg.o \
 | 
			
		||||
		treectlg.o \
 | 
			
		||||
		treelay.o \
 | 
			
		||||
		wizard.o
 | 
			
		||||
 | 
			
		||||
GENERICDEPS = \
 | 
			
		||||
		busyinfo.d \
 | 
			
		||||
		calctrl.d \
 | 
			
		||||
		caret.d \
 | 
			
		||||
		choicdgg.d \
 | 
			
		||||
		colrdlgg.d \
 | 
			
		||||
		dcpsg.d \
 | 
			
		||||
		dirctrlg.d \
 | 
			
		||||
		dirdlgg.d \
 | 
			
		||||
		dragimgg.d \
 | 
			
		||||
		filedlgg.d \
 | 
			
		||||
		grid.d \
 | 
			
		||||
		gridsel.d \
 | 
			
		||||
		helpext.d \
 | 
			
		||||
		helphtml.d \
 | 
			
		||||
		helpwxht.d \
 | 
			
		||||
		imaglist.d \
 | 
			
		||||
		laywin.d \
 | 
			
		||||
		listctrl.d \
 | 
			
		||||
		logg.d \
 | 
			
		||||
		msgdlgg.d \
 | 
			
		||||
		numdlgg.d \
 | 
			
		||||
		panelg.d \
 | 
			
		||||
		plot.d \
 | 
			
		||||
		printps.d \
 | 
			
		||||
		prntdlgg.d \
 | 
			
		||||
		progdlgg.d \
 | 
			
		||||
		prop.d \
 | 
			
		||||
		propform.d \
 | 
			
		||||
		proplist.d \
 | 
			
		||||
		sashwin.d \
 | 
			
		||||
		scrolwin.d \
 | 
			
		||||
		splash.d \
 | 
			
		||||
		splitter.d \
 | 
			
		||||
		statusbr.d \
 | 
			
		||||
		tabg.d \
 | 
			
		||||
		tbarsmpl.d \
 | 
			
		||||
		textdlgg.d \
 | 
			
		||||
		tipdlg.d \
 | 
			
		||||
		treectlg.d \
 | 
			
		||||
		treelay.d \
 | 
			
		||||
		wizard.d
 | 
			
		||||
 | 
			
		||||
GUIOBJS = \
 | 
			
		||||
		app.o \
 | 
			
		||||
		bitmap.o \
 | 
			
		||||
		bmpbase.o \
 | 
			
		||||
		brush.o \
 | 
			
		||||
		clipbrd.o \
 | 
			
		||||
		colour.o \
 | 
			
		||||
		cursor.o \
 | 
			
		||||
		data.o \
 | 
			
		||||
		dc.o \
 | 
			
		||||
		dcclient.o \
 | 
			
		||||
		dcmemory.o \
 | 
			
		||||
		dcscreen.o \
 | 
			
		||||
		dialog.o \
 | 
			
		||||
		font.o \
 | 
			
		||||
		frame.o \
 | 
			
		||||
		gdiobj.o \
 | 
			
		||||
		icon.o \
 | 
			
		||||
		palette.o \
 | 
			
		||||
		pen.o \
 | 
			
		||||
		region.o \
 | 
			
		||||
		settings.o \
 | 
			
		||||
		timer.o \
 | 
			
		||||
		utils.o \
 | 
			
		||||
		window.o
 | 
			
		||||
 | 
			
		||||
GUIDEPS = \
 | 
			
		||||
		app.d \
 | 
			
		||||
		bitmap.d \
 | 
			
		||||
		bmpbase.d \
 | 
			
		||||
		brush.d \
 | 
			
		||||
		clipbrd.d \
 | 
			
		||||
		colour.d \
 | 
			
		||||
		cursor.d \
 | 
			
		||||
		data.d \
 | 
			
		||||
		dc.d \
 | 
			
		||||
		dcclient.d \
 | 
			
		||||
		dcmemory.d \
 | 
			
		||||
		dcscreen.d \
 | 
			
		||||
		dialog.d \
 | 
			
		||||
		font.d \
 | 
			
		||||
		frame.d \
 | 
			
		||||
		gdiobj.d \
 | 
			
		||||
		icon.d \
 | 
			
		||||
		palette.d \
 | 
			
		||||
		pen.d \
 | 
			
		||||
		region.d \
 | 
			
		||||
		settings.d \
 | 
			
		||||
		timer.d \
 | 
			
		||||
		utils.d \
 | 
			
		||||
		window.d
 | 
			
		||||
 | 
			
		||||
GUI_LOWLEVEL_OBJS = \
 | 
			
		||||
		app.o \
 | 
			
		||||
		bitmap.o \
 | 
			
		||||
		bmpbase.o \
 | 
			
		||||
		brush.o \
 | 
			
		||||
		clipbrd.o \
 | 
			
		||||
		colour.o \
 | 
			
		||||
		cursor.o \
 | 
			
		||||
		data.o \
 | 
			
		||||
		dc.o \
 | 
			
		||||
		dcclient.o \
 | 
			
		||||
		dcmemory.o \
 | 
			
		||||
		dcscreen.o \
 | 
			
		||||
		dialog.o \
 | 
			
		||||
		font.o \
 | 
			
		||||
		frame.o \
 | 
			
		||||
		gdiobj.o \
 | 
			
		||||
		icon.o \
 | 
			
		||||
		palette.o \
 | 
			
		||||
		pen.o \
 | 
			
		||||
		region.o \
 | 
			
		||||
		settings.o \
 | 
			
		||||
		timer.o \
 | 
			
		||||
		utils.o \
 | 
			
		||||
		window.o
 | 
			
		||||
 | 
			
		||||
GUI_LOWLEVEL_DEPS = \
 | 
			
		||||
		app.d \
 | 
			
		||||
		bitmap.d \
 | 
			
		||||
		bmpbase.d \
 | 
			
		||||
		brush.d \
 | 
			
		||||
		clipbrd.d \
 | 
			
		||||
		colour.d \
 | 
			
		||||
		cursor.d \
 | 
			
		||||
		data.d \
 | 
			
		||||
		dc.d \
 | 
			
		||||
		dcclient.d \
 | 
			
		||||
		dcmemory.d \
 | 
			
		||||
		dcscreen.d \
 | 
			
		||||
		dialog.d \
 | 
			
		||||
		font.d \
 | 
			
		||||
		frame.d \
 | 
			
		||||
		gdiobj.d \
 | 
			
		||||
		icon.d \
 | 
			
		||||
		palette.d \
 | 
			
		||||
		pen.d \
 | 
			
		||||
		region.d \
 | 
			
		||||
		settings.d \
 | 
			
		||||
		timer.d \
 | 
			
		||||
		utils.d \
 | 
			
		||||
		window.d
 | 
			
		||||
 | 
			
		||||
UNIXOBJS = \
 | 
			
		||||
		dialup.o \
 | 
			
		||||
		dir.o \
 | 
			
		||||
		fontenum.o \
 | 
			
		||||
		fontutil.o \
 | 
			
		||||
		gsocket.o \
 | 
			
		||||
		mimetype.o \
 | 
			
		||||
		threadpsx.o \
 | 
			
		||||
		utilsunx.o
 | 
			
		||||
 | 
			
		||||
UNIXDEPS = \
 | 
			
		||||
		dialup.d \
 | 
			
		||||
		dir.d \
 | 
			
		||||
		fontenum.d \
 | 
			
		||||
		fontutil.d \
 | 
			
		||||
		gsocket.d \
 | 
			
		||||
		mimetype.d \
 | 
			
		||||
		threadpsx.d \
 | 
			
		||||
		utilsunx.d
 | 
			
		||||
 | 
			
		||||
HTMLOBJS = \
 | 
			
		||||
		helpctrl.o \
 | 
			
		||||
		helpdata.o \
 | 
			
		||||
		helpfrm.o \
 | 
			
		||||
		htmlcell.o \
 | 
			
		||||
		htmlfilt.o \
 | 
			
		||||
		htmlpars.o \
 | 
			
		||||
		htmltag.o \
 | 
			
		||||
		htmlwin.o \
 | 
			
		||||
		htmprint.o \
 | 
			
		||||
		m_dflist.o \
 | 
			
		||||
		m_fonts.o \
 | 
			
		||||
		m_hline.o \
 | 
			
		||||
		m_image.o \
 | 
			
		||||
		m_layout.o \
 | 
			
		||||
		m_links.o \
 | 
			
		||||
		m_list.o \
 | 
			
		||||
		m_meta.o \
 | 
			
		||||
		m_pre.o \
 | 
			
		||||
		m_tables.o \
 | 
			
		||||
		winpars.o
 | 
			
		||||
 | 
			
		||||
HTMLDEPS = \
 | 
			
		||||
		helpctrl.d \
 | 
			
		||||
		helpdata.d \
 | 
			
		||||
		helpfrm.d \
 | 
			
		||||
		htmlcell.d \
 | 
			
		||||
		htmlfilt.d \
 | 
			
		||||
		htmlpars.d \
 | 
			
		||||
		htmltag.d \
 | 
			
		||||
		htmlwin.d \
 | 
			
		||||
		htmprint.d \
 | 
			
		||||
		m_dflist.d \
 | 
			
		||||
		m_fonts.d \
 | 
			
		||||
		m_hline.d \
 | 
			
		||||
		m_image.d \
 | 
			
		||||
		m_layout.d \
 | 
			
		||||
		m_links.d \
 | 
			
		||||
		m_list.d \
 | 
			
		||||
		m_meta.d \
 | 
			
		||||
		m_pre.d \
 | 
			
		||||
		m_tables.d \
 | 
			
		||||
		winpars.d
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										324
									
								
								src/mgl/font.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										324
									
								
								src/mgl/font.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,324 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        font.cpp
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001, Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
    #pragma implementation "font.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/font.h"
 | 
			
		||||
#include "wx/fontutil.h"
 | 
			
		||||
#include "wx/cmndata.h"
 | 
			
		||||
#include "wx/utils.h"
 | 
			
		||||
#include "wx/log.h"
 | 
			
		||||
#include "wx/gdicmn.h"
 | 
			
		||||
#include "wx/tokenzr.h"
 | 
			
		||||
#include "wx/settings.h"
 | 
			
		||||
 | 
			
		||||
#include <strings.h>
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxFontRefData
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class wxFontRefData : public wxObjectRefData
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxFontRefData(int size = wxDEFAULT,
 | 
			
		||||
                  int family = wxDEFAULT,
 | 
			
		||||
                  int style = wxDEFAULT,
 | 
			
		||||
                  int weight = wxDEFAULT,
 | 
			
		||||
                  bool underlined = FALSE,
 | 
			
		||||
                  const wxString& faceName = wxEmptyString,
 | 
			
		||||
                  wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
 | 
			
		||||
    wxFontRefData(const wxFontRefData& data);
 | 
			
		||||
    virtual ~wxFontRefData();
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    // common part of all ctors
 | 
			
		||||
    void Init(int pointSize,
 | 
			
		||||
              int family,
 | 
			
		||||
              int style,
 | 
			
		||||
              int weight,
 | 
			
		||||
              bool underlined,
 | 
			
		||||
              const wxString& faceName,
 | 
			
		||||
              wxFontEncoding encoding);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    int              m_pointSize;
 | 
			
		||||
    int              m_family,
 | 
			
		||||
                     m_style,
 | 
			
		||||
                     m_weight;
 | 
			
		||||
    bool             m_underlined;
 | 
			
		||||
    wxString         m_faceName;
 | 
			
		||||
    wxFontEncoding   m_encoding;
 | 
			
		||||
 | 
			
		||||
    wxMGLFontLibrary *m_library;
 | 
			
		||||
    bool              m_valid;
 | 
			
		||||
 | 
			
		||||
    friend class wxFont;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxFontRefData
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void wxFontRefData::Init(int pointSize,
 | 
			
		||||
                         int family,
 | 
			
		||||
                         int style,
 | 
			
		||||
                         int weight,
 | 
			
		||||
                         bool underlined,
 | 
			
		||||
                         const wxString& faceName,
 | 
			
		||||
                         wxFontEncoding encoding)
 | 
			
		||||
{
 | 
			
		||||
    if ( family == wxDEFAULT )
 | 
			
		||||
        m_family = wxSWISS;
 | 
			
		||||
    else
 | 
			
		||||
        m_family = family;
 | 
			
		||||
 | 
			
		||||
    m_faceName = faceName;
 | 
			
		||||
 | 
			
		||||
    if ( style == wxDEFAULT )
 | 
			
		||||
        m_style = wxNORMAL;
 | 
			
		||||
    else
 | 
			
		||||
        m_style = style;
 | 
			
		||||
 | 
			
		||||
    if ( weight == wxDEFAULT )
 | 
			
		||||
        m_weight = wxNORMAL;
 | 
			
		||||
    else
 | 
			
		||||
        m_weight = weight;
 | 
			
		||||
 | 
			
		||||
    if ( pointSize == wxDEFAULT )
 | 
			
		||||
        m_pointSize = 12;
 | 
			
		||||
    else
 | 
			
		||||
        m_pointSize = pointSize;
 | 
			
		||||
 | 
			
		||||
    m_underlined = underlined;
 | 
			
		||||
    m_encoding = encoding;
 | 
			
		||||
 | 
			
		||||
    m_library = NULL;
 | 
			
		||||
    m_valid = FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxFontRefData::wxFontRefData(const wxFontRefData& data)
 | 
			
		||||
{
 | 
			
		||||
    Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
 | 
			
		||||
         data.m_underlined, data.m_faceName, data.m_encoding);
 | 
			
		||||
 | 
			
		||||
    m_library = data.m_library;
 | 
			
		||||
    m_valid = data.m_valid;
 | 
			
		||||
    if ( m_library )
 | 
			
		||||
        m_library->IncRef();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxFontRefData::wxFontRefData(int size, int family, int style,
 | 
			
		||||
                             int weight, bool underlined,
 | 
			
		||||
                             const wxString& faceName,
 | 
			
		||||
                             wxFontEncoding encoding)
 | 
			
		||||
{
 | 
			
		||||
    Init(size, family, style, weight, underlined, faceName, encoding);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxFontRefData::~wxFontRefData()
 | 
			
		||||
{
 | 
			
		||||
    if ( m_library )
 | 
			
		||||
        m_library->DecRef();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxFont
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxFont, wxGDIObject)
 | 
			
		||||
 | 
			
		||||
void wxFont::Init()
 | 
			
		||||
{
 | 
			
		||||
    if (wxTheFontList)
 | 
			
		||||
        wxTheFontList->Append(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxFont::Create(const wxNativeFontInfo& info)
 | 
			
		||||
{
 | 
			
		||||
    return Create(info.pointSize, info.family, info.style, info.weight,
 | 
			
		||||
                  info.underlined, info.faceName, info.encoding);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxFont::Create(int pointSize,
 | 
			
		||||
                    int family,
 | 
			
		||||
                    int style,
 | 
			
		||||
                    int weight,
 | 
			
		||||
                    bool underlined,
 | 
			
		||||
                    const wxString& face,
 | 
			
		||||
                    wxFontEncoding encoding)
 | 
			
		||||
{
 | 
			
		||||
    m_refData = new wxFontRefData(pointSize, family, style, weight,
 | 
			
		||||
                                  underlined, face, encoding);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct font_t *wxFont::GetMGLfont_t(float scale, bool antialiased)
 | 
			
		||||
{
 | 
			
		||||
    if ( !M_FONTDATA->m_valid )
 | 
			
		||||
    {
 | 
			
		||||
        wxMGLFontLibrary *old = M_FONTDATA->m_library;
 | 
			
		||||
        M_FONTDATA->m_library = wxTheFontsManager->GetFontLibrary(this);
 | 
			
		||||
        M_FONTDATA->m_library->IncRef();
 | 
			
		||||
        if ( old )
 | 
			
		||||
            old->DecRef();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    wxMGLFontInstance *instance = 
 | 
			
		||||
        M_FONTDATA->m_library->GetFontInstance(this, scale, antialiased);
 | 
			
		||||
 | 
			
		||||
    return instance->GetMGLfont_t();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxFont::Unshare()
 | 
			
		||||
{
 | 
			
		||||
    if ( !m_refData )
 | 
			
		||||
    {
 | 
			
		||||
        m_refData = new wxFontRefData();
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxFontRefData* ref = new wxFontRefData(*(wxFontRefData*)m_refData);
 | 
			
		||||
        UnRef();
 | 
			
		||||
        m_refData = ref;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxFont::~wxFont()
 | 
			
		||||
{
 | 
			
		||||
    if (wxTheFontList)
 | 
			
		||||
        wxTheFontList->DeleteObject(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// accessors
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
int wxFont::GetPointSize() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
 | 
			
		||||
 | 
			
		||||
    return M_FONTDATA->m_pointSize;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxString wxFont::GetFaceName() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), wxT(""), wxT("invalid font") );
 | 
			
		||||
 | 
			
		||||
    return M_FONTDATA->m_faceName;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxFont::GetFamily() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
 | 
			
		||||
 | 
			
		||||
    return M_FONTDATA->m_family;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxFont::GetStyle() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
 | 
			
		||||
 | 
			
		||||
    return M_FONTDATA->m_style;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxFont::GetWeight() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), 0, wxT("invalid font") );
 | 
			
		||||
 | 
			
		||||
    return M_FONTDATA->m_weight;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxFont::GetUnderlined() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), FALSE, wxT("invalid font") );
 | 
			
		||||
 | 
			
		||||
    return M_FONTDATA->m_underlined;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
wxFontEncoding wxFont::GetEncoding() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), wxFONTENCODING_DEFAULT, wxT("invalid font") );
 | 
			
		||||
 | 
			
		||||
    return M_FONTDATA->m_encoding;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// change font attributes
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void wxFont::SetPointSize(int pointSize)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
 | 
			
		||||
    M_FONTDATA->m_pointSize = pointSize;
 | 
			
		||||
    M_FONTDATA->m_valid = FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxFont::SetFamily(int family)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
 | 
			
		||||
    M_FONTDATA->m_family = family;
 | 
			
		||||
    M_FONTDATA->m_valid = FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxFont::SetStyle(int style)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
 | 
			
		||||
    M_FONTDATA->m_style = style;
 | 
			
		||||
    M_FONTDATA->m_valid = FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxFont::SetWeight(int weight)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
 | 
			
		||||
    M_FONTDATA->m_weight = weight;
 | 
			
		||||
    M_FONTDATA->m_valid = FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxFont::SetFaceName(const wxString& faceName)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
 | 
			
		||||
    M_FONTDATA->m_faceName = faceName;
 | 
			
		||||
    M_FONTDATA->m_valid = FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxFont::SetUnderlined(bool underlined)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
 | 
			
		||||
    M_FONTDATA->m_underlined = underlined;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxFont::SetEncoding(wxFontEncoding encoding)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
 | 
			
		||||
    M_FONTDATA->m_encoding = encoding;
 | 
			
		||||
    M_FONTDATA->m_valid = FALSE;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										141
									
								
								src/mgl/fontenum.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								src/mgl/fontenum.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,141 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        src/unix/fontenum.cpp
 | 
			
		||||
// Purpose:     wxFontEnumerator class for MGL
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
    #pragma implementation "fontenum.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/dynarray.h"
 | 
			
		||||
#include "wx/string.h"
 | 
			
		||||
#include "wx/utils.h"
 | 
			
		||||
 | 
			
		||||
#include "wx/fontenum.h"
 | 
			
		||||
#include "wx/fontutil.h"
 | 
			
		||||
 | 
			
		||||
#include <mgraph.h>
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxFontEnumerator
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding encoding,
 | 
			
		||||
                                          bool fixedWidthOnly)
 | 
			
		||||
{
 | 
			
		||||
    bool found = FALSE;
 | 
			
		||||
    wxMGLFontFamilyList *list = wxTheFontsManager->GetFamilyList();
 | 
			
		||||
    wxMGLFontFamilyList::Node *node;
 | 
			
		||||
    wxMGLFontFamily *f = NULL;
 | 
			
		||||
    wxNativeEncodingInfo info;
 | 
			
		||||
 | 
			
		||||
    if ( encoding != wxFONTENCODING_SYSTEM )
 | 
			
		||||
        wxGetNativeFontEncoding(encoding, &info);
 | 
			
		||||
     
 | 
			
		||||
    for (node = list->GetFirst(); node; node = node->GetNext())
 | 
			
		||||
    {
 | 
			
		||||
        f = node->GetData();
 | 
			
		||||
        info.facename = f->GetName();
 | 
			
		||||
        if ( (!fixedWidthOnly || f->GetInfo()->isFixed) &&
 | 
			
		||||
             (encoding == wxFONTENCODING_SYSTEM || wxTestFontEncoding(info)) )
 | 
			
		||||
        {
 | 
			
		||||
            found = TRUE;
 | 
			
		||||
            if ( !OnFacename(f->GetName()) )
 | 
			
		||||
                return TRUE;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return found;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxFontEnumerator::EnumerateEncodings(const wxString& family)
 | 
			
		||||
{
 | 
			
		||||
    static wxFontEncoding encodings[] = 
 | 
			
		||||
    {
 | 
			
		||||
        wxFONTENCODING_ISO8859_1,
 | 
			
		||||
        wxFONTENCODING_ISO8859_2,
 | 
			
		||||
        wxFONTENCODING_ISO8859_3,
 | 
			
		||||
        wxFONTENCODING_ISO8859_4,
 | 
			
		||||
        wxFONTENCODING_ISO8859_5,
 | 
			
		||||
        wxFONTENCODING_ISO8859_6,
 | 
			
		||||
        wxFONTENCODING_ISO8859_7,
 | 
			
		||||
        wxFONTENCODING_ISO8859_8,
 | 
			
		||||
        wxFONTENCODING_ISO8859_9,
 | 
			
		||||
        wxFONTENCODING_ISO8859_10,
 | 
			
		||||
        //wxFONTENCODING_ISO8859_11,
 | 
			
		||||
        //wxFONTENCODING_ISO8859_12,
 | 
			
		||||
        wxFONTENCODING_ISO8859_13,
 | 
			
		||||
        wxFONTENCODING_ISO8859_14,
 | 
			
		||||
        wxFONTENCODING_ISO8859_15,
 | 
			
		||||
        wxFONTENCODING_CP1250,
 | 
			
		||||
        wxFONTENCODING_CP1251,
 | 
			
		||||
        wxFONTENCODING_CP1252,
 | 
			
		||||
        wxFONTENCODING_CP1253,
 | 
			
		||||
        wxFONTENCODING_CP1254,
 | 
			
		||||
        wxFONTENCODING_CP1255,
 | 
			
		||||
        wxFONTENCODING_CP1256,
 | 
			
		||||
        wxFONTENCODING_CP1257,
 | 
			
		||||
        wxFONTENCODING_KOI8,
 | 
			
		||||
        
 | 
			
		||||
        wxFONTENCODING_SYSTEM
 | 
			
		||||
    };
 | 
			
		||||
    
 | 
			
		||||
    static const char *encodingNames[] = 
 | 
			
		||||
    {
 | 
			
		||||
        "iso88590-1",
 | 
			
		||||
        "iso88590-2",
 | 
			
		||||
        "iso88590-3",
 | 
			
		||||
        "iso88590-4",
 | 
			
		||||
        "iso88590-5",
 | 
			
		||||
        "iso88590-6",
 | 
			
		||||
        "iso88590-7",
 | 
			
		||||
        "iso88590-8",
 | 
			
		||||
        "iso88590-9",
 | 
			
		||||
        "iso88590-10",
 | 
			
		||||
        "iso88590-13",
 | 
			
		||||
        "iso88590-14",
 | 
			
		||||
        "iso88590-15",
 | 
			
		||||
        "windows-1250",
 | 
			
		||||
        "windows-1251",
 | 
			
		||||
        "windows-1252",
 | 
			
		||||
        "windows-1253",
 | 
			
		||||
        "windows-1254",
 | 
			
		||||
        "windows-1255",
 | 
			
		||||
        "windows-1256",
 | 
			
		||||
        "windows-1257",
 | 
			
		||||
        "koi-8",
 | 
			
		||||
        NULL
 | 
			
		||||
    };
 | 
			
		||||
    
 | 
			
		||||
    wxNativeEncodingInfo info;
 | 
			
		||||
    info.facename = family;
 | 
			
		||||
    
 | 
			
		||||
    for (size_t i = 0; encodings[i] != wxFONTENCODING_SYSTEM; i++)
 | 
			
		||||
    {
 | 
			
		||||
        if ( !wxGetNativeFontEncoding(encodings[i], &info) ||
 | 
			
		||||
             !wxTestFontEncoding(info) ) 
 | 
			
		||||
            continue;
 | 
			
		||||
        if ( !OnFontEncoding(family, encodingNames[i]) )
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										456
									
								
								src/mgl/fontutil.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										456
									
								
								src/mgl/fontutil.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,456 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        mgl/fontutil.cpp
 | 
			
		||||
// Purpose:     Font helper functions for MGL
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Created:     2001/04/29
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) 2001, Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows license
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
    #pragma implementation "fontutil.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// For compilers that support precompilation, includes "wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef WX_PRECOMP
 | 
			
		||||
#endif // PCH
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include "wx/fontutil.h"
 | 
			
		||||
#include "wx/fontmap.h"
 | 
			
		||||
#include "wx/tokenzr.h"
 | 
			
		||||
#include "wx/hash.h"
 | 
			
		||||
#include "wx/module.h"
 | 
			
		||||
#include "wx/listimpl.cpp"
 | 
			
		||||
#include "wx/log.h"
 | 
			
		||||
#include "wx/mgl/private.h"
 | 
			
		||||
 | 
			
		||||
#include <mgraph.h>
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// implementation
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxNativeEncodingInfo
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// convert to/from the string representation: format is
 | 
			
		||||
//      encoding[;facename]
 | 
			
		||||
bool wxNativeEncodingInfo::FromString(const wxString& s)
 | 
			
		||||
{
 | 
			
		||||
    wxStringTokenizer tokenizer(s, _T(";"));
 | 
			
		||||
 | 
			
		||||
    wxString encid = tokenizer.GetNextToken();
 | 
			
		||||
    long enc;
 | 
			
		||||
    if ( !encid.ToLong(&enc) )
 | 
			
		||||
        return FALSE;
 | 
			
		||||
    encoding = (wxFontEncoding)enc;
 | 
			
		||||
 | 
			
		||||
    // ok even if empty
 | 
			
		||||
    facename = tokenizer.GetNextToken();
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxString wxNativeEncodingInfo::ToString() const
 | 
			
		||||
{
 | 
			
		||||
    wxString s;
 | 
			
		||||
    s << (long)encoding;
 | 
			
		||||
    if ( !!facename )
 | 
			
		||||
    {
 | 
			
		||||
        s << _T(';') << facename;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// common functions
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
bool wxGetNativeFontEncoding(wxFontEncoding encoding,
 | 
			
		||||
                             wxNativeEncodingInfo *info)
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( info, FALSE, _T("bad pointer in wxGetNativeFontEncoding") );
 | 
			
		||||
 | 
			
		||||
    if ( encoding == wxFONTENCODING_DEFAULT )
 | 
			
		||||
    {
 | 
			
		||||
        encoding = wxFont::GetDefaultEncoding();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch ( encoding )
 | 
			
		||||
    {
 | 
			
		||||
        case wxFONTENCODING_ISO8859_1:
 | 
			
		||||
        case wxFONTENCODING_ISO8859_2:
 | 
			
		||||
        case wxFONTENCODING_ISO8859_3:
 | 
			
		||||
        case wxFONTENCODING_ISO8859_4:
 | 
			
		||||
        case wxFONTENCODING_ISO8859_5:
 | 
			
		||||
        case wxFONTENCODING_ISO8859_6:
 | 
			
		||||
        case wxFONTENCODING_ISO8859_7:
 | 
			
		||||
        case wxFONTENCODING_ISO8859_8:
 | 
			
		||||
        case wxFONTENCODING_ISO8859_9:
 | 
			
		||||
        case wxFONTENCODING_ISO8859_10:
 | 
			
		||||
        case wxFONTENCODING_ISO8859_11:
 | 
			
		||||
        case wxFONTENCODING_ISO8859_13:
 | 
			
		||||
        case wxFONTENCODING_ISO8859_14:
 | 
			
		||||
        case wxFONTENCODING_ISO8859_15:
 | 
			
		||||
            info->mglEncoding = MGL_ENCODING_ISO8859_1 +
 | 
			
		||||
                                (encoding - wxFONTENCODING_ISO8859_1);
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case wxFONTENCODING_KOI8:
 | 
			
		||||
            info->mglEncoding = MGL_ENCODING_KOI8;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case wxFONTENCODING_CP1250:
 | 
			
		||||
        case wxFONTENCODING_CP1251:
 | 
			
		||||
        case wxFONTENCODING_CP1252:
 | 
			
		||||
        case wxFONTENCODING_CP1253:
 | 
			
		||||
        case wxFONTENCODING_CP1254:
 | 
			
		||||
        case wxFONTENCODING_CP1255:
 | 
			
		||||
        case wxFONTENCODING_CP1256:
 | 
			
		||||
        case wxFONTENCODING_CP1257:
 | 
			
		||||
            info->mglEncoding = MGL_ENCODING_CP1250 +
 | 
			
		||||
                                (encoding - wxFONTENCODING_CP1250);
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case wxFONTENCODING_SYSTEM:
 | 
			
		||||
            info->mglEncoding = MGL_ENCODING_ASCII;
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        default:
 | 
			
		||||
            // encoding not known to MGL
 | 
			
		||||
            return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    info->encoding = encoding;
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxTestFontEncoding(const wxNativeEncodingInfo& info)
 | 
			
		||||
{
 | 
			
		||||
    if ( !info.facename )
 | 
			
		||||
        return TRUE;
 | 
			
		||||
        
 | 
			
		||||
    wxMGLFontFamily *family = wxTheFontsManager->GetFamily(info.facename);
 | 
			
		||||
    if ( !family )
 | 
			
		||||
        return FALSE;
 | 
			
		||||
    if ( family->GetInfo()->fontLibType == MGL_BITMAPFONT_LIB )
 | 
			
		||||
        return (info.mglEncoding == MGL_ENCODING_ASCII ||
 | 
			
		||||
                info.mglEncoding == MGL_ENCODING_ISO8859_1 ||
 | 
			
		||||
                info.mglEncoding == MGL_ENCODING_ISO8859_15 ||
 | 
			
		||||
                info.mglEncoding == MGL_ENCODING_CP1252);
 | 
			
		||||
    else
 | 
			
		||||
        return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxFontFamily, wxMGLFontInstance, wxMGLFontLibrary
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
WX_DECLARE_LIST(wxMGLFontInstance, wxMGLFontInstanceList);
 | 
			
		||||
WX_DEFINE_LIST(wxMGLFontInstanceList);
 | 
			
		||||
WX_DEFINE_LIST(wxMGLFontFamilyList);
 | 
			
		||||
 | 
			
		||||
wxMGLFontInstance::wxMGLFontInstance(wxMGLFontLibrary *fontLib, 
 | 
			
		||||
                                     float pt, bool slant, bool aa)
 | 
			
		||||
{
 | 
			
		||||
    m_fontLib = fontLib;
 | 
			
		||||
    m_font = NULL;
 | 
			
		||||
    m_pt = pt;
 | 
			
		||||
    m_slant = slant;
 | 
			
		||||
    m_aa = aa;
 | 
			
		||||
 | 
			
		||||
    float slantAngle = m_slant ? 15.0 : 0.0;
 | 
			
		||||
 | 
			
		||||
    wxLogTrace("mgl_font", "loading instance of '%s' slant=%i pt=%0.1f aa=%i", 
 | 
			
		||||
               m_fontLib->GetMGLfont_lib_t()->name, m_slant, m_pt, m_aa);
 | 
			
		||||
    m_font = MGL_loadFontInstance(m_fontLib->GetMGLfont_lib_t(), 
 | 
			
		||||
                                  m_pt, slantAngle, 0.0, aa);
 | 
			
		||||
    wxASSERT_MSG( m_font, wxT("Cannot create font instance.") );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxMGLFontInstance::~wxMGLFontInstance()
 | 
			
		||||
{
 | 
			
		||||
    wxLogTrace("mgl_font", "unloading instance of '%s' slant=%i pt=%0.1f aa=%i", 
 | 
			
		||||
               m_fontLib->GetMGLfont_lib_t()->name, m_slant, m_pt, m_aa);
 | 
			
		||||
    if ( m_font )
 | 
			
		||||
        MGL_unloadFontInstance(m_font);
 | 
			
		||||
}
 | 
			
		||||
    
 | 
			
		||||
wxMGLFontLibrary::wxMGLFontLibrary(const wxString& filename, int type)
 | 
			
		||||
{
 | 
			
		||||
    m_type = type;
 | 
			
		||||
    m_fileName = filename;
 | 
			
		||||
    m_refs = 0;
 | 
			
		||||
    m_fontLib = NULL;
 | 
			
		||||
 | 
			
		||||
    m_instances = new wxMGLFontInstanceList;
 | 
			
		||||
    m_instances->DeleteContents(TRUE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxMGLFontLibrary::~wxMGLFontLibrary()
 | 
			
		||||
{
 | 
			
		||||
    wxLogTrace("mgl_font", "font library dtor '%s'", m_fileName.mb_str());
 | 
			
		||||
    delete m_instances;
 | 
			
		||||
}
 | 
			
		||||
    
 | 
			
		||||
void wxMGLFontLibrary::IncRef()
 | 
			
		||||
{
 | 
			
		||||
    wxLogTrace("mgl_font", "incRef(%u) '%s'", m_refs, m_fileName.c_str());
 | 
			
		||||
    if ( m_refs++ == 0 )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogTrace("mgl_font", "opening library '%s'", m_fileName.mb_str());
 | 
			
		||||
        m_fontLib = MGL_openFontLib(m_fileName.mb_str());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxMGLFontLibrary::DecRef()
 | 
			
		||||
{
 | 
			
		||||
    wxLogTrace("mgl_font", "decRef(%u) '%s'", m_refs, m_fileName.c_str());
 | 
			
		||||
    if ( --m_refs == 0 )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogTrace("mgl_font", "killing instances of '%s'", m_fileName.mb_str());
 | 
			
		||||
        m_instances->Clear();
 | 
			
		||||
        wxLogTrace("mgl_font", "closing library '%s'", m_fileName.mb_str());
 | 
			
		||||
        MGL_closeFontLib(m_fontLib);
 | 
			
		||||
        m_fontLib = NULL;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxMGLFontInstance *wxMGLFontLibrary::GetFontInstance(wxFont *font, 
 | 
			
		||||
                                                     float scale, bool aa)
 | 
			
		||||
{
 | 
			
		||||
    wxASSERT_MSG(m_refs > 0 && m_fontLib, wxT("font library not loaded!"));
 | 
			
		||||
 | 
			
		||||
    wxString facename;
 | 
			
		||||
    bool slant;
 | 
			
		||||
    bool antialiased = 
 | 
			
		||||
        (m_fontLib->fontLibType == MGL_BITMAPFONT_LIB) ? FALSE : aa;
 | 
			
		||||
    float pt = (float)font->GetPointSize() * scale;
 | 
			
		||||
 | 
			
		||||
    slant = (((m_type & wxFONTFACE_ITALIC) == 0) &&
 | 
			
		||||
             (font->GetStyle() == wxSLANT || font->GetStyle() == wxITALIC));
 | 
			
		||||
 | 
			
		||||
    // FIXME_MGL -- MGL does not yet support slant, although the API is there
 | 
			
		||||
    slant = FALSE;
 | 
			
		||||
 | 
			
		||||
    wxLogTrace("mgl_font", "requested instance of '%s' slant=%i pt=%0.1f aa=%i", 
 | 
			
		||||
               m_fileName.mb_str(), slant, pt, antialiased);
 | 
			
		||||
 | 
			
		||||
    wxMGLFontInstance *i;
 | 
			
		||||
    wxMGLFontInstanceList::Node *node;
 | 
			
		||||
    
 | 
			
		||||
    for (node = m_instances->GetFirst(); node; node = node->GetNext())
 | 
			
		||||
    {
 | 
			
		||||
        i = node->GetData();
 | 
			
		||||
        if ( i->GetPt() == pt && i->GetSlant() == slant &&
 | 
			
		||||
             i->GetAA() == antialiased )
 | 
			
		||||
        {
 | 
			
		||||
            wxLogTrace("mgl_font", "    got from cache: slant=%i pt=%0.1f aa=%i", 
 | 
			
		||||
                       i->GetSlant(), i->GetPt(), i->GetAA());
 | 
			
		||||
            return i;
 | 
			
		||||
        }
 | 
			
		||||
    }    
 | 
			
		||||
    
 | 
			
		||||
    i = new wxMGLFontInstance(this, pt, slant, antialiased);
 | 
			
		||||
    m_instances->Append(i);
 | 
			
		||||
    return i;   
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
wxMGLFontFamily::wxMGLFontFamily(const font_info_t *info)
 | 
			
		||||
{
 | 
			
		||||
    m_name = info->familyName;
 | 
			
		||||
    m_fontInfo = info;
 | 
			
		||||
    
 | 
			
		||||
    if ( info->regularFace[0] == '\0' )
 | 
			
		||||
        m_fontLibs[wxFONTFACE_REGULAR] = NULL;
 | 
			
		||||
    else
 | 
			
		||||
        m_fontLibs[wxFONTFACE_REGULAR] = 
 | 
			
		||||
            new wxMGLFontLibrary(info->regularFace, wxFONTFACE_REGULAR);
 | 
			
		||||
    
 | 
			
		||||
    if ( info->italicFace[0] == '\0' )
 | 
			
		||||
        m_fontLibs[wxFONTFACE_ITALIC] = NULL;
 | 
			
		||||
    else
 | 
			
		||||
        m_fontLibs[wxFONTFACE_ITALIC] = 
 | 
			
		||||
            new wxMGLFontLibrary(info->italicFace, wxFONTFACE_ITALIC);
 | 
			
		||||
    
 | 
			
		||||
    if ( info->boldFace[0] == '\0' )
 | 
			
		||||
        m_fontLibs[wxFONTFACE_BOLD] = NULL;
 | 
			
		||||
    else
 | 
			
		||||
        m_fontLibs[wxFONTFACE_BOLD] = 
 | 
			
		||||
            new wxMGLFontLibrary(info->boldFace, wxFONTFACE_BOLD);
 | 
			
		||||
    
 | 
			
		||||
    if ( info->boldItalicFace[0] == '\0' )
 | 
			
		||||
        m_fontLibs[wxFONTFACE_BOLD_ITALIC] = NULL;
 | 
			
		||||
    else
 | 
			
		||||
        m_fontLibs[wxFONTFACE_BOLD_ITALIC] = 
 | 
			
		||||
            new wxMGLFontLibrary(info->boldItalicFace, wxFONTFACE_BOLD_ITALIC);
 | 
			
		||||
            
 | 
			
		||||
    wxLogTrace("mgl_font", "new family '%s' (r=%s, i=%s, b=%s, bi=%s)\n",
 | 
			
		||||
               info->familyName, info->regularFace, info->italicFace, 
 | 
			
		||||
               info->boldFace, info->boldItalicFace);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxMGLFontFamily::~wxMGLFontFamily()
 | 
			
		||||
{
 | 
			
		||||
    for (size_t i = 0; i < wxFONTFACE_MAX; i++)
 | 
			
		||||
        delete m_fontLibs[i];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxMGLFontFamily::HasFace(int type) const
 | 
			
		||||
{
 | 
			
		||||
    return (m_fontLibs[type] != NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxFontsManager
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
wxMGLFontLibrary *wxFontsManager::GetFontLibrary(wxFont *font)
 | 
			
		||||
{
 | 
			
		||||
    wxMGLFontFamily *family;
 | 
			
		||||
    wxString facename;
 | 
			
		||||
    int type;
 | 
			
		||||
    
 | 
			
		||||
    if ( facename )
 | 
			
		||||
        family = GetFamily(font->GetFaceName());
 | 
			
		||||
    else
 | 
			
		||||
        family = NULL;
 | 
			
		||||
    if ( family )
 | 
			
		||||
        facename = font->GetFaceName();
 | 
			
		||||
    else
 | 
			
		||||
        facename.Empty();
 | 
			
		||||
    
 | 
			
		||||
    if ( !family )
 | 
			
		||||
    {
 | 
			
		||||
        switch (font->GetFamily())
 | 
			
		||||
        {
 | 
			
		||||
            case wxSCRIPT:
 | 
			
		||||
                facename = wxT("Script");
 | 
			
		||||
                break;
 | 
			
		||||
            case wxDECORATIVE:
 | 
			
		||||
                facename = wxT("Charter");
 | 
			
		||||
                break;
 | 
			
		||||
            case wxROMAN:
 | 
			
		||||
                facename = wxT("Times");
 | 
			
		||||
                break;
 | 
			
		||||
            case wxTELETYPE:
 | 
			
		||||
            case wxMODERN:
 | 
			
		||||
                facename = wxT("Courier");
 | 
			
		||||
                break;
 | 
			
		||||
            case wxSWISS:
 | 
			
		||||
                facename = wxT("Helvetica");
 | 
			
		||||
                break;
 | 
			
		||||
            case wxDEFAULT:
 | 
			
		||||
            default:
 | 
			
		||||
                facename = wxT("Helvetica");
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        family = GetFamily(facename);
 | 
			
		||||
        if ( !family )
 | 
			
		||||
        {
 | 
			
		||||
           if ( m_list->GetFirst() )
 | 
			
		||||
               family = m_list->GetFirst()->GetData();
 | 
			
		||||
           else
 | 
			
		||||
               wxFAIL_MSG(wxT("Fatal error, no fonts available!"));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    type = wxFONTFACE_REGULAR;
 | 
			
		||||
 | 
			
		||||
    if ( font->GetWeight() == wxBOLD )
 | 
			
		||||
        type |= wxFONTFACE_BOLD;
 | 
			
		||||
 | 
			
		||||
    // FIXME_MGL -- this should read "if ( font->GetStyle() == wxITALIC )",
 | 
			
		||||
    // but since MGL does not yet support slant, we try to display it with
 | 
			
		||||
    // italic face (better than nothing...)
 | 
			
		||||
    if ( font->GetStyle() == wxITALIC || font->GetStyle() == wxSLANT )
 | 
			
		||||
    {
 | 
			
		||||
        if ( family->HasFace(type | wxFONTFACE_ITALIC) )
 | 
			
		||||
            type |= wxFONTFACE_ITALIC;
 | 
			
		||||
    }
 | 
			
		||||
    if ( !family->HasFace(type) )
 | 
			
		||||
    {
 | 
			
		||||
        for (int i = 0; i < wxFONTFACE_MAX; i++)
 | 
			
		||||
            if ( family->HasFace(i) )
 | 
			
		||||
            {
 | 
			
		||||
                type = i;
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    return family->GetLibrary(type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static ibool enum_callback(const font_info_t *info, void *cookie)
 | 
			
		||||
{
 | 
			
		||||
    wxFontsManager *db = (wxFontsManager*)cookie;
 | 
			
		||||
    db->AddFamily(info);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxFontsManager::wxFontsManager()
 | 
			
		||||
{
 | 
			
		||||
    m_hash = new wxHashTable(wxKEY_STRING);
 | 
			
		||||
    m_hash->DeleteContents(FALSE);
 | 
			
		||||
    m_list = new wxMGLFontFamilyList;
 | 
			
		||||
    m_list->DeleteContents(TRUE);
 | 
			
		||||
    MGL_enumerateFonts(enum_callback, (void*)this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxFontsManager::~wxFontsManager()
 | 
			
		||||
{
 | 
			
		||||
    delete m_hash;
 | 
			
		||||
    delete m_list;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxFontsManager::AddFamily(const font_info_t *info)
 | 
			
		||||
{
 | 
			
		||||
    wxMGLFontFamily *f = new wxMGLFontFamily(info);
 | 
			
		||||
    m_hash->Put(f->GetName().Lower(), f);
 | 
			
		||||
    m_list->Append(f);
 | 
			
		||||
}
 | 
			
		||||
        
 | 
			
		||||
wxMGLFontFamily *wxFontsManager::GetFamily(const wxString& name) const
 | 
			
		||||
{
 | 
			
		||||
    return (wxMGLFontFamily*)m_hash->Get(name.Lower());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
wxFontsManager *wxTheFontsManager = NULL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// A module that takes care of fonts DB initialization and destruction:
 | 
			
		||||
 | 
			
		||||
class wxFontutilModule: public wxModule
 | 
			
		||||
{
 | 
			
		||||
DECLARE_DYNAMIC_CLASS(wxFontutilModule)
 | 
			
		||||
public:
 | 
			
		||||
    wxFontutilModule() {}
 | 
			
		||||
    bool OnInit() 
 | 
			
		||||
    {
 | 
			
		||||
        wxTheFontsManager = new wxFontsManager;
 | 
			
		||||
        return TRUE; 
 | 
			
		||||
    }
 | 
			
		||||
    void OnExit() 
 | 
			
		||||
    { 
 | 
			
		||||
        delete wxTheFontsManager;
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxFontutilModule, wxModule)
 | 
			
		||||
							
								
								
									
										23
									
								
								src/mgl/frame.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/mgl/frame.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        frame.cpp
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Robert Roebling
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 1998 Robert Roebling
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// ============================================================================
 | 
			
		||||
// declarations
 | 
			
		||||
// ============================================================================
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// headers
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
    #pragma implementation "frame.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/frame.h"
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxFrame,wxWindow)
 | 
			
		||||
							
								
								
									
										36
									
								
								src/mgl/gdiobj.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/mgl/gdiobj.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        gdiobj.cpp
 | 
			
		||||
// Purpose:     wxGDIObject class
 | 
			
		||||
// Author:      Julian Smart
 | 
			
		||||
// Modified by:
 | 
			
		||||
// Created:     01/02/97
 | 
			
		||||
// RCS-ID:      $Id$
 | 
			
		||||
// Copyright:   (c) Julian Smart and Markus Holzem
 | 
			
		||||
// Licence:   	wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "gdiobj.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// For compilers that support precompilation, includes "wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
#pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef WX_PRECOMP
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "wx/setup.h"
 | 
			
		||||
#include "wx/list.h"
 | 
			
		||||
#include "wx/utils.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/gdiobj.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxGDIObject, wxObject)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										56
									
								
								src/mgl/icon.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								src/mgl/icon.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        icon.cpp
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:   	wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "icon.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// For compilers that support precompilation, includes "wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/icon.h"
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxIcon
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxIcon, wxBitmap)
 | 
			
		||||
 | 
			
		||||
wxIcon::wxIcon(const char **bits, int WXUNUSED(width), int WXUNUSED(height)) :
 | 
			
		||||
    wxBitmap(bits)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxIcon::wxIcon(char **bits, int WXUNUSED(width), int WXUNUSED(height)) :
 | 
			
		||||
    wxBitmap(bits)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxIcon::wxIcon(const wxIcon& icon) : wxBitmap()
 | 
			
		||||
{
 | 
			
		||||
    Ref(icon);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxIcon& wxIcon::operator = (const wxIcon& icon)
 | 
			
		||||
{
 | 
			
		||||
    if (*this == icon) 
 | 
			
		||||
        return (*this);
 | 
			
		||||
    Ref(icon);
 | 
			
		||||
    return *this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxIcon::CopyFromBitmap(const wxBitmap& bmp)
 | 
			
		||||
{
 | 
			
		||||
    wxIcon *icon = (wxIcon*)(&bmp);
 | 
			
		||||
    *this = *icon;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										169
									
								
								src/mgl/palette.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										169
									
								
								src/mgl/palette.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,169 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        palette.cpp
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Created:     2001/03/11
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "palette.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// For compilers that support precompilation, includes "wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
    #pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/palette.h"
 | 
			
		||||
#include <mgraph.h>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxPalette
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class wxPaletteRefData: public wxObjectRefData
 | 
			
		||||
{
 | 
			
		||||
    public:
 | 
			
		||||
        wxPaletteRefData(void);
 | 
			
		||||
        ~wxPaletteRefData(void);
 | 
			
		||||
    
 | 
			
		||||
        int m_count;
 | 
			
		||||
        palette_t *m_entries;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
wxPaletteRefData::wxPaletteRefData()
 | 
			
		||||
{
 | 
			
		||||
    m_count = 0;
 | 
			
		||||
    m_entries = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxPaletteRefData::~wxPaletteRefData()
 | 
			
		||||
{
 | 
			
		||||
    delete[] m_entries;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#define M_PALETTEDATA ((wxPaletteRefData *)m_refData)
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxPalette,wxGDIObject)
 | 
			
		||||
 | 
			
		||||
wxPalette::wxPalette()
 | 
			
		||||
{
 | 
			
		||||
    m_refData = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxPalette::wxPalette(int n, const unsigned char *red, const unsigned char *green, const unsigned char *blue)
 | 
			
		||||
{
 | 
			
		||||
    Create(n, red, green, blue);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxPalette::wxPalette(const wxPalette& palette)
 | 
			
		||||
{
 | 
			
		||||
    Ref(palette);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxPalette::~wxPalette()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxPalette& wxPalette::operator = (const wxPalette& palette)
 | 
			
		||||
{
 | 
			
		||||
    if (*this == palette) return (*this);
 | 
			
		||||
    Ref(palette);
 | 
			
		||||
    return *this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxPalette::operator == (const wxPalette& palette) const
 | 
			
		||||
{
 | 
			
		||||
    return m_refData == palette.m_refData;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxPalette::operator != (const wxPalette& palette) const
 | 
			
		||||
{
 | 
			
		||||
    return m_refData != palette.m_refData;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxPalette::Ok(void) const
 | 
			
		||||
{
 | 
			
		||||
    return (m_refData != NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxPalette::Create(int n,
 | 
			
		||||
                       const unsigned char *red,
 | 
			
		||||
                       const unsigned char *green, 
 | 
			
		||||
                       const unsigned char *blue)
 | 
			
		||||
{
 | 
			
		||||
    UnRef();
 | 
			
		||||
    m_refData = new wxPaletteRefData();
 | 
			
		||||
    
 | 
			
		||||
    M_PALETTEDATA->m_count = n;    
 | 
			
		||||
    M_PALETTEDATA->m_entries = new palette_t[n];
 | 
			
		||||
 | 
			
		||||
    palette_t *e = M_PALETTEDATA->m_entries;
 | 
			
		||||
    for (int i = 0; i < n; i++, e++)
 | 
			
		||||
    {
 | 
			
		||||
        e->red = red[i];
 | 
			
		||||
        e->green = green[i];
 | 
			
		||||
        e->blue = blue[i];
 | 
			
		||||
        e->alpha = 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxPalette::GetPixel(const unsigned char red,
 | 
			
		||||
                        const unsigned char green,
 | 
			
		||||
                        const unsigned char blue) const
 | 
			
		||||
{
 | 
			
		||||
    if (!m_refData) return FALSE;
 | 
			
		||||
 | 
			
		||||
	int closest = 0;
 | 
			
		||||
	double d,distance = 1000.0; // max. dist is 256
 | 
			
		||||
 | 
			
		||||
    palette_t *e = M_PALETTEDATA->m_entries;
 | 
			
		||||
    for (int i = 0; i < M_PALETTEDATA->m_count; i++, e++)
 | 
			
		||||
    {
 | 
			
		||||
        if ((d = 0.299 * abs(red - e->red) +
 | 
			
		||||
                 0.587 * abs(green - e->green) +
 | 
			
		||||
                 0.114 * abs(blue - e->blue)) < distance) {
 | 
			
		||||
            distance = d;
 | 
			
		||||
            closest = i;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
	return closest;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxPalette::GetRGB(int pixel, 
 | 
			
		||||
                       unsigned char *red,
 | 
			
		||||
                       unsigned char *green, 
 | 
			
		||||
                       unsigned char *blue) const
 | 
			
		||||
{
 | 
			
		||||
    if (!m_refData) return FALSE;
 | 
			
		||||
    if (pixel >= M_PALETTEDATA->m_count) return FALSE;
 | 
			
		||||
    
 | 
			
		||||
    palette_t& p = M_PALETTEDATA->m_entries[pixel];
 | 
			
		||||
    if (red) *red = p.red;
 | 
			
		||||
    if (green) *green = p.green;
 | 
			
		||||
    if (blue) *blue = p.blue;
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxPalette::GetColoursCount() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), 0, wxT("invalid palette") );   
 | 
			
		||||
    return M_PALETTEDATA->m_count;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
palette_t *wxPalette::GetMGLpalette_t() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), NULL, wxT("invalid palette") );   
 | 
			
		||||
    return M_PALETTEDATA->m_entries;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										283
									
								
								src/mgl/pen.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										283
									
								
								src/mgl/pen.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,283 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        pen.cpp
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "pen.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/pen.h"
 | 
			
		||||
#include "wx/bitmap.h"
 | 
			
		||||
#include "wx/mgl/private.h"
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxPen
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class wxPenRefData: public wxObjectRefData
 | 
			
		||||
{
 | 
			
		||||
    public:
 | 
			
		||||
        wxPenRefData();
 | 
			
		||||
        wxPenRefData(const wxPenRefData& data);
 | 
			
		||||
 | 
			
		||||
        int            m_width;
 | 
			
		||||
        int            m_style;
 | 
			
		||||
        wxColour       m_colour;
 | 
			
		||||
        wxBitmap       m_stipple;
 | 
			
		||||
        pixpattern24_t m_pixPattern;
 | 
			
		||||
 | 
			
		||||
        // not used by wxMGL, but we want to preserve values
 | 
			
		||||
        int            m_joinStyle;
 | 
			
		||||
        int            m_capStyle;
 | 
			
		||||
        int            m_countDashes;
 | 
			
		||||
        wxDash        *m_dash;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
wxPenRefData::wxPenRefData()
 | 
			
		||||
{
 | 
			
		||||
    m_width = 1;
 | 
			
		||||
    m_style = wxSOLID;
 | 
			
		||||
    m_joinStyle = wxJOIN_ROUND;
 | 
			
		||||
    m_capStyle = wxCAP_ROUND;
 | 
			
		||||
    m_dash = (wxDash*) NULL;
 | 
			
		||||
    m_countDashes = 0;
 | 
			
		||||
 | 
			
		||||
    int x, y, c;
 | 
			
		||||
    for (y = 0; y < 8; y++)
 | 
			
		||||
        for (x = 0; x < 8; x++)
 | 
			
		||||
            for (c = 0; c < 3; c++)
 | 
			
		||||
                m_pixPattern.p[x][y][c] = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxPenRefData::wxPenRefData(const wxPenRefData& data)
 | 
			
		||||
{
 | 
			
		||||
    m_style = data.m_style;
 | 
			
		||||
    m_width = data.m_width;
 | 
			
		||||
    m_joinStyle = data.m_joinStyle;
 | 
			
		||||
    m_capStyle = data.m_capStyle;
 | 
			
		||||
    m_colour = data.m_colour;
 | 
			
		||||
    m_countDashes = data.m_countDashes;
 | 
			
		||||
    m_dash = data.m_dash;
 | 
			
		||||
    m_stipple = data.m_stipple;
 | 
			
		||||
 | 
			
		||||
    int x, y, c;
 | 
			
		||||
    for (y = 0; y < 8; y++)
 | 
			
		||||
        for (x = 0; x < 8; x++)
 | 
			
		||||
            for (c = 0; c < 3; c++)
 | 
			
		||||
                m_pixPattern.p[x][y][c] = data.m_pixPattern.p[x][y][c];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#define M_PENDATA ((wxPenRefData *)m_refData)
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxPen,wxGDIObject)
 | 
			
		||||
 | 
			
		||||
wxPen::wxPen()
 | 
			
		||||
{
 | 
			
		||||
    if ( wxThePenList ) 
 | 
			
		||||
        wxThePenList->AddPen(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxPen::wxPen(const wxColour &colour, int width, int style)
 | 
			
		||||
{
 | 
			
		||||
    m_refData = new wxPenRefData();
 | 
			
		||||
    M_PENDATA->m_width = width;
 | 
			
		||||
    M_PENDATA->m_style = style;
 | 
			
		||||
    M_PENDATA->m_colour = colour;
 | 
			
		||||
 | 
			
		||||
    if ( wxThePenList )
 | 
			
		||||
        wxThePenList->AddPen(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxPen::wxPen(const wxBitmap& stipple, int width)
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_RET( stipple.Ok(), _T("invalid bitmap") );
 | 
			
		||||
    wxCHECK_RET( stipple.GetWidth() == 8 && stipple.GetHeight() == 8, 
 | 
			
		||||
                  _T("stipple bitmap must be 8x8") );
 | 
			
		||||
 | 
			
		||||
    m_refData = new wxPenRefData();
 | 
			
		||||
    M_PENDATA->m_width = width;
 | 
			
		||||
    M_PENDATA->m_style = wxSTIPPLE;
 | 
			
		||||
    M_PENDATA->m_stipple = stipple;
 | 
			
		||||
    wxBitmapToPixPattern(stipple, &(M_PENDATA->m_pixPattern), NULL);
 | 
			
		||||
 | 
			
		||||
    if ( wxThePenList ) 
 | 
			
		||||
        wxThePenList->AddPen(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxPen::wxPen(const wxPen& pen)
 | 
			
		||||
{
 | 
			
		||||
    Ref(pen);
 | 
			
		||||
    if ( wxThePenList )
 | 
			
		||||
        wxThePenList->AddPen(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxPen::~wxPen()
 | 
			
		||||
{
 | 
			
		||||
    if ( wxThePenList )
 | 
			
		||||
        wxThePenList->RemovePen(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxPen& wxPen::operator = (const wxPen& pen)
 | 
			
		||||
{
 | 
			
		||||
    if (*this == pen) return (*this);
 | 
			
		||||
    Ref(pen);
 | 
			
		||||
    return *this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxPen::operator == (const wxPen& pen) const
 | 
			
		||||
{
 | 
			
		||||
    return m_refData == pen.m_refData;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxPen::operator != (const wxPen& pen) const
 | 
			
		||||
{
 | 
			
		||||
    return m_refData != pen.m_refData;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxPen::SetColour(const wxColour &colour)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_PENDATA->m_colour = colour;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxPen::SetDashes(int number_of_dashes, const wxDash *dash)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_PENDATA->m_countDashes = number_of_dashes;
 | 
			
		||||
    M_PENDATA->m_dash = (wxDash *)dash; /* TODO */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxPen::SetColour(int red, int green, int blue)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_PENDATA->m_colour.Set(red, green, blue);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxPen::SetCap(int capStyle)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_PENDATA->m_capStyle = capStyle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxPen::SetJoin(int joinStyle)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_PENDATA->m_joinStyle = joinStyle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxPen::SetStyle(int style)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_PENDATA->m_style = style;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxPen::SetStipple(const wxBitmap& stipple)
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_RET( stipple.Ok(), _T("invalid bitmap") );
 | 
			
		||||
    wxCHECK_RET( stipple.GetWidth() == 8 && stipple.GetHeight() == 8, 
 | 
			
		||||
                  _T("stipple bitmap must be 8x8") );
 | 
			
		||||
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_PENDATA->m_stipple = stipple;
 | 
			
		||||
    wxBitmapToPixPattern(stipple, &(M_PENDATA->m_pixPattern), NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxPen::SetWidth(int width)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_PENDATA->m_width = width;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxPen::GetDashes(wxDash **ptr) const 
 | 
			
		||||
{
 | 
			
		||||
     *ptr = (M_PENDATA ? (wxDash*)M_PENDATA->m_dash : (wxDash*) NULL); 
 | 
			
		||||
     return (M_PENDATA ? M_PENDATA->m_countDashes : 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxPen::GetDashCount() const 
 | 
			
		||||
{ 
 | 
			
		||||
    return (M_PENDATA->m_countDashes); 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxDash* wxPen::GetDash() const 
 | 
			
		||||
{ 
 | 
			
		||||
    return (wxDash*)M_PENDATA->m_dash; 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxPen::GetCap() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), -1, wxT("invalid pen") );
 | 
			
		||||
 | 
			
		||||
    return M_PENDATA->m_capStyle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxPen::GetJoin() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), -1, wxT("invalid pen") );
 | 
			
		||||
 | 
			
		||||
    return M_PENDATA->m_joinStyle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxPen::GetStyle() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), -1, wxT("invalid pen") );
 | 
			
		||||
 | 
			
		||||
    return M_PENDATA->m_style;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxPen::GetWidth() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), -1, wxT("invalid pen") );
 | 
			
		||||
 | 
			
		||||
    return M_PENDATA->m_width;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxColour &wxPen::GetColour() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), wxNullColour, wxT("invalid pen") );
 | 
			
		||||
 | 
			
		||||
    return M_PENDATA->m_colour;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxBitmap *wxPen::GetStipple() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), NULL, wxT("invalid pen") );
 | 
			
		||||
 | 
			
		||||
    return &(M_PENDATA->m_stipple);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* wxPen::GetPixPattern() const
 | 
			
		||||
{
 | 
			
		||||
    wxCHECK_MSG( Ok(), NULL, wxT("invalid pen") );
 | 
			
		||||
 | 
			
		||||
    return (void*)&(M_PENDATA->m_pixPattern);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool wxPen::Ok() const
 | 
			
		||||
{
 | 
			
		||||
    return (m_refData != NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxPen::Unshare()
 | 
			
		||||
{
 | 
			
		||||
    if (!m_refData)
 | 
			
		||||
    {
 | 
			
		||||
        m_refData = new wxPenRefData();
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxPenRefData* ref = new wxPenRefData( *(wxPenRefData*)m_refData );
 | 
			
		||||
        UnRef();
 | 
			
		||||
        m_refData = ref;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										399
									
								
								src/mgl/region.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										399
									
								
								src/mgl/region.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,399 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:      region.cpp
 | 
			
		||||
// Purpose:   Region handling for wxWindows/MGL
 | 
			
		||||
// Author:    Vaclav Slavik
 | 
			
		||||
// RCS-ID:    $Id$
 | 
			
		||||
// Copyright: (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:   wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "region.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// For compilers that support precompilation, includes "wx.h".
 | 
			
		||||
#include "wx/wxprec.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
#pragma hdrstop
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/region.h"
 | 
			
		||||
#include "wx/gdicmn.h"
 | 
			
		||||
#include "wx/thread.h"
 | 
			
		||||
 | 
			
		||||
#include <mgraph.hpp>
 | 
			
		||||
 | 
			
		||||
#include "wx/listimpl.cpp"
 | 
			
		||||
WX_DEFINE_LIST(wxRegionRectList)
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxRegion, wxGDIObject)
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxRegionIterator, wxObject)
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxRegionRefData implementation
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
class WXDLLEXPORT wxRegionRefData : public wxGDIRefData
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    wxRegionRefData()
 | 
			
		||||
    {
 | 
			
		||||
    }    
 | 
			
		||||
 | 
			
		||||
    wxRegionRefData(const wxRegionRefData& data)
 | 
			
		||||
    {
 | 
			
		||||
        m_region = data.m_region;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ~wxRegionRefData()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    MGLRegion m_region;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define M_REGION       (((wxRegionRefData*)m_refData)->m_region)
 | 
			
		||||
#define M_REGION_OF(r) (((wxRegionRefData*)(r.m_refData))->m_region)
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// wxRegion
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Create an empty region.
 | 
			
		||||
 */
 | 
			
		||||
wxRegion::wxRegion()
 | 
			
		||||
{
 | 
			
		||||
    m_refData = (wxRegionRefData *)NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxRegion::wxRegion(wxCoord x, wxCoord y, wxCoord w, wxCoord h)
 | 
			
		||||
{    
 | 
			
		||||
    m_refData = new wxRegionRefData;
 | 
			
		||||
    MGLRect rect(x, y, x + w, y + h);
 | 
			
		||||
    M_REGION = rect;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxRegion::wxRegion(const wxPoint& topLeft, const wxPoint& bottomRight)
 | 
			
		||||
{
 | 
			
		||||
    m_refData = new wxRegionRefData;
 | 
			
		||||
    MGLRect rect(topLeft.x, topLeft.y, bottomRight.x, bottomRight.y);
 | 
			
		||||
    M_REGION = rect;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxRegion::wxRegion(const wxRect& r)
 | 
			
		||||
{
 | 
			
		||||
    m_refData = new wxRegionRefData;
 | 
			
		||||
    MGLRect rect(r.GetLeft(), r.GetTop(), r.GetRight(), r.GetBottom());
 | 
			
		||||
    M_REGION = rect;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxRegion::wxRegion(const MGLRegion& region)
 | 
			
		||||
{
 | 
			
		||||
    m_refData = new wxRegionRefData;
 | 
			
		||||
    M_REGION = region;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxRegion::~wxRegion()
 | 
			
		||||
{
 | 
			
		||||
    // m_refData unrefed in ~wxObject
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const MGLRegion& wxRegion::GetMGLRegion() const
 | 
			
		||||
{
 | 
			
		||||
    return M_REGION;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// Modify region
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// Clear current region
 | 
			
		||||
void wxRegion::Clear()
 | 
			
		||||
{
 | 
			
		||||
    UnRef();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// Information on region
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// Outer bounds of region
 | 
			
		||||
void wxRegion::GetBox(wxCoord& x, wxCoord& y, wxCoord&w, wxCoord &h) const
 | 
			
		||||
{
 | 
			
		||||
    if (m_refData) 
 | 
			
		||||
    {
 | 
			
		||||
        rect_t rect;
 | 
			
		||||
        rect = M_REGION.getBounds();
 | 
			
		||||
        x = rect.left;
 | 
			
		||||
        y = rect.top;
 | 
			
		||||
        w = rect.right - rect.left;
 | 
			
		||||
        h = rect.bottom - rect.top;
 | 
			
		||||
    } 
 | 
			
		||||
    else 
 | 
			
		||||
    {
 | 
			
		||||
        x = y = w = h = 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxRect wxRegion::GetBox() const
 | 
			
		||||
{
 | 
			
		||||
    wxCoord x, y, w, h;
 | 
			
		||||
    GetBox(x, y, w, h);
 | 
			
		||||
    return wxRect(x, y, w, h);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Is region empty?
 | 
			
		||||
bool wxRegion::Empty() const
 | 
			
		||||
{
 | 
			
		||||
    if (!m_refData) return TRUE;
 | 
			
		||||
    return M_REGION.isEmpty();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// Modifications
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// Union rectangle or region with this.
 | 
			
		||||
bool wxRegion::Union(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_REGION += MGLRect(x, y, x + width, y + height);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxRegion::Union(const wxRegion& region)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_REGION += M_REGION_OF(region);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Intersect rectangle or region with this.
 | 
			
		||||
bool wxRegion::Intersect(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_REGION &= MGLRect(x, y, x + width, y + height);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxRegion::Intersect(const wxRegion& region)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_REGION &= M_REGION_OF(region);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Subtract rectangle or region from this:
 | 
			
		||||
// Combines the parts of 'this' that are not part of the second region.
 | 
			
		||||
bool wxRegion::Subtract(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_REGION -= MGLRect(x, y, x + width, y + height);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxRegion::Subtract(const wxRegion& region)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    M_REGION -= M_REGION_OF(region);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// XOR: the union of two combined regions except for any overlapping areas.
 | 
			
		||||
bool wxRegion::Xor(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    MGLRect rect(x, y, x + width, y + height);
 | 
			
		||||
    MGLRegion rg1 = M_REGION + rect,
 | 
			
		||||
              rg2 = M_REGION & rect;
 | 
			
		||||
    M_REGION = rg1 - rg2;
 | 
			
		||||
    return TRUE;    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxRegion::Xor(const wxRegion& region)
 | 
			
		||||
{
 | 
			
		||||
    Unshare();
 | 
			
		||||
    MGLRegion rg1 = M_REGION + M_REGION_OF(region),
 | 
			
		||||
              rg2 = M_REGION & M_REGION_OF(region);
 | 
			
		||||
    M_REGION = rg1 - rg2;
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
// Tests
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// Does the region contain the point (x,y)?
 | 
			
		||||
wxRegionContain wxRegion::Contains(wxCoord x, wxCoord y) const
 | 
			
		||||
{
 | 
			
		||||
    if (!m_refData)
 | 
			
		||||
        return wxOutRegion;
 | 
			
		||||
 | 
			
		||||
    if (M_REGION.includes((int)x, (int)y))
 | 
			
		||||
        return wxInRegion;
 | 
			
		||||
    else
 | 
			
		||||
        return wxOutRegion;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Does the region contain the point pt?
 | 
			
		||||
wxRegionContain wxRegion::Contains(const wxPoint& pt) const
 | 
			
		||||
{
 | 
			
		||||
    return Contains(pt.x, pt.y);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Does the region contain the rectangle (x, y, w, h)?
 | 
			
		||||
wxRegionContain wxRegion::Contains(wxCoord x, wxCoord y, wxCoord w, wxCoord h) const
 | 
			
		||||
{
 | 
			
		||||
    if (!m_refData)
 | 
			
		||||
        return wxOutRegion;
 | 
			
		||||
 | 
			
		||||
    MGLRect rect(x, y, x + w, y + h);
 | 
			
		||||
    MGLRegion rg;
 | 
			
		||||
    
 | 
			
		||||
    // 1) is the rectangle entirely covered by the region?
 | 
			
		||||
    rg = MGLRegion(rect) - M_REGION;
 | 
			
		||||
    if (rg.isEmpty()) return wxInRegion;
 | 
			
		||||
    
 | 
			
		||||
    // 2) is the rectangle completely outside the region?
 | 
			
		||||
    rg = M_REGION & rect; // intersection
 | 
			
		||||
    if (rg.isEmpty()) return wxOutRegion;
 | 
			
		||||
 | 
			
		||||
    // 3) neither case happened => it is partially covered:
 | 
			
		||||
    return wxPartRegion;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Does the region contain the rectangle rect
 | 
			
		||||
wxRegionContain wxRegion::Contains(const wxRect& rect) const
 | 
			
		||||
{
 | 
			
		||||
    return Contains(rect.x, rect.y, rect.width, rect.height);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void wxRegion::Unshare()
 | 
			
		||||
{
 | 
			
		||||
    if (!m_refData)
 | 
			
		||||
    {
 | 
			
		||||
        m_refData = new wxRegionRefData();
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        wxRegionRefData* ref = new wxRegionRefData(*(wxRegionRefData*)m_refData);
 | 
			
		||||
        UnRef();
 | 
			
		||||
        m_refData = ref;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//                               wxRegionIterator                                 //
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Initialize empty iterator
 | 
			
		||||
 */
 | 
			
		||||
wxRegionIterator::wxRegionIterator() : m_currentNode(NULL)
 | 
			
		||||
{
 | 
			
		||||
    m_rects.DeleteContents(TRUE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxRegionIterator::~wxRegionIterator()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Initialize iterator for region
 | 
			
		||||
 */
 | 
			
		||||
wxRegionIterator::wxRegionIterator(const wxRegion& region)
 | 
			
		||||
{
 | 
			
		||||
    m_rects.DeleteContents(TRUE);
 | 
			
		||||
    Reset(region);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Reset iterator for a new /e region.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
static wxRegionRectList *gs_rectList;
 | 
			
		||||
 | 
			
		||||
static void wxMGL_region_callback(const rect_t *r)
 | 
			
		||||
{
 | 
			
		||||
    gs_rectList->Append(new wxRect(r->left, r->top, 
 | 
			
		||||
                                   r->right - r->left, r->bottom - r->top));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
void wxRegionIterator::Reset(const wxRegion& region)
 | 
			
		||||
{
 | 
			
		||||
    m_currentNode = NULL;
 | 
			
		||||
    m_rects.Clear();
 | 
			
		||||
 | 
			
		||||
    if (!region.Empty())
 | 
			
		||||
    {
 | 
			
		||||
        wxMutexGuiEnter();
 | 
			
		||||
        gs_rectList = &m_rects;
 | 
			
		||||
        M_REGION_OF(region).traverse(wxMGL_region_callback);
 | 
			
		||||
        wxMutexGuiLeave();
 | 
			
		||||
        m_currentNode = m_rects.GetFirst();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Increment iterator. The rectangle returned is the one after the
 | 
			
		||||
 * incrementation.
 | 
			
		||||
 */
 | 
			
		||||
void wxRegionIterator::operator ++ ()
 | 
			
		||||
{
 | 
			
		||||
    if (m_currentNode)
 | 
			
		||||
        m_currentNode = m_currentNode->GetNext();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Increment iterator. The rectangle returned is the one before the
 | 
			
		||||
 * incrementation.
 | 
			
		||||
 */
 | 
			
		||||
void wxRegionIterator::operator ++ (int)
 | 
			
		||||
{
 | 
			
		||||
    if (m_currentNode)
 | 
			
		||||
        m_currentNode = m_currentNode->GetNext();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxCoord wxRegionIterator::GetX() const
 | 
			
		||||
{
 | 
			
		||||
    if (m_currentNode)
 | 
			
		||||
        return m_currentNode->GetData()->x;
 | 
			
		||||
    else
 | 
			
		||||
        return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxCoord wxRegionIterator::GetY() const
 | 
			
		||||
{
 | 
			
		||||
    if (m_currentNode)
 | 
			
		||||
        return m_currentNode->GetData()->y;
 | 
			
		||||
    else
 | 
			
		||||
        return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxCoord wxRegionIterator::GetW() const
 | 
			
		||||
{
 | 
			
		||||
    if (m_currentNode)
 | 
			
		||||
        return m_currentNode->GetData()->width;
 | 
			
		||||
    else
 | 
			
		||||
        return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxCoord wxRegionIterator::GetH() const
 | 
			
		||||
{
 | 
			
		||||
    if (m_currentNode)
 | 
			
		||||
        return m_currentNode->GetData()->height;
 | 
			
		||||
    else
 | 
			
		||||
        return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										16
									
								
								src/mgl/settings.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/mgl/settings.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        settings.cpp
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Robert Roebling
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 1998 Robert Roebling
 | 
			
		||||
// Licence:   	wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "settings.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/settings.h"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										23
									
								
								src/mgl/timer.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/mgl/timer.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        gtk/timer.cpp
 | 
			
		||||
// Purpose:     wxTimer implementation
 | 
			
		||||
// Author:      Robert Roebling
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 1998 Robert Roebling
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
#pragma implementation "timer.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/timer.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// wxTimer
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_ABSTRACT_CLASS(wxTimer,wxObject)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										98
									
								
								src/mgl/utils.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								src/mgl/utils.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,98 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        utils.cpp
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Vaclav Slavik
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 2001 Vaclav Slavik
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#include "wx/utils.h"
 | 
			
		||||
#include "wx/string.h"
 | 
			
		||||
 | 
			
		||||
#include "wx/intl.h"
 | 
			
		||||
#include "wx/log.h"
 | 
			
		||||
 | 
			
		||||
#include "wx/process.h"
 | 
			
		||||
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <mgraph.hpp>
 | 
			
		||||
 | 
			
		||||
#ifdef __UNIX__
 | 
			
		||||
#include "wx/unix/execute.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------------------------
 | 
			
		||||
// misc.
 | 
			
		||||
//----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
void wxBell()
 | 
			
		||||
{
 | 
			
		||||
    // FIXME_MGL
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// display characterstics
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
extern MGLDevCtx *g_displayDC;
 | 
			
		||||
 | 
			
		||||
void wxDisplaySize( int *width, int *height )
 | 
			
		||||
{
 | 
			
		||||
    wxASSERT_MSG( g_displayDC, wxT("MGL display DC not created yet.") );
 | 
			
		||||
    if (width) *width = g_displayDC->sizex();
 | 
			
		||||
    if (height) *height = g_displayDC->sizey();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxGetMousePosition( int* x, int* y )
 | 
			
		||||
{
 | 
			
		||||
#if 0 // FIXME_MGL
 | 
			
		||||
    gdk_window_get_pointer( (GdkWindow*) NULL, x, y, (GdkModifierType*) NULL );
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wxColourDisplay()
 | 
			
		||||
{
 | 
			
		||||
    wxASSERT_MSG( g_displayDC, wxT("MGL display DC not created yet.") );
 | 
			
		||||
    
 | 
			
		||||
    return (wxDisplayDepth() > 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxDisplayDepth()
 | 
			
		||||
{
 | 
			
		||||
    wxASSERT_MSG( g_displayDC, wxT("MGL display DC not created yet.") );
 | 
			
		||||
 | 
			
		||||
    return g_displayDC->getBitsPerPixel();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int wxGetOsVersion(int *majorVsn, int *minorVsn)
 | 
			
		||||
{
 | 
			
		||||
#if 0 // FIXME_MGL
 | 
			
		||||
        // FIXME_MGL : wxGetOsVersion, too
 | 
			
		||||
  if (majorVsn) *majorVsn = GTK_MAJOR_VERSION;
 | 
			
		||||
  if (minorVsn) *minorVsn = GTK_MINOR_VERSION;
 | 
			
		||||
 | 
			
		||||
  return wxGTK;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __UNIX__
 | 
			
		||||
 | 
			
		||||
int wxAddProcessCallback(wxEndProcessData *proc_data, int fd)
 | 
			
		||||
{
 | 
			
		||||
#if 0 // FIXME_MGL -do we need it at all?
 | 
			
		||||
    int tag = gdk_input_add(fd,
 | 
			
		||||
                            GDK_INPUT_READ,
 | 
			
		||||
                            GTK_EndProcessDetector,
 | 
			
		||||
                            (gpointer)proc_data);
 | 
			
		||||
 | 
			
		||||
    return tag;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										33
									
								
								src/mgl/window.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/mgl/window.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Name:        gtk/window.cpp
 | 
			
		||||
// Purpose:
 | 
			
		||||
// Author:      Robert Roebling
 | 
			
		||||
// Id:          $Id$
 | 
			
		||||
// Copyright:   (c) 1998 Robert Roebling, Julian Smart
 | 
			
		||||
// Licence:     wxWindows licence
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __GNUG__
 | 
			
		||||
    #pragma implementation "window.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "wx/defs.h"
 | 
			
		||||
#include "wx/window.h"
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_DYNAMIC_CLASS(wxWindowMGL, wxWindowBase)
 | 
			
		||||
 | 
			
		||||
wxWindow *g_captureWindow = NULL;
 | 
			
		||||
wxWindow *g_focusWindow = NULL;
 | 
			
		||||
 | 
			
		||||
/* static */
 | 
			
		||||
wxWindow *wxWindowBase::GetCapture()
 | 
			
		||||
{
 | 
			
		||||
    return (wxWindow *)g_captureWindow;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
wxWindow *wxWindowBase::FindFocus()
 | 
			
		||||
{
 | 
			
		||||
    // the cast is necessary when we compile in wxUniversal mode
 | 
			
		||||
    return (wxWindow *)g_focusWindow;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user