wxgui: Upgraded to wxWidgets 2.8.10.

git-svn-id: http://pcsx2.googlecode.com/svn/branches/wxgui@1494 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2009-07-12 04:56:57 +00:00
parent 32233c1509
commit ec10451047
132 changed files with 2956 additions and 1457 deletions

View File

@ -3,7 +3,7 @@
// Purpose: declaration of wxAboutDialog class // Purpose: declaration of wxAboutDialog class
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Created: 2006-10-07 // Created: 2006-10-07
// RCS-ID: $Id: aboutdlg.h 41813 2006-10-09 16:56:18Z RD $ // RCS-ID: $Id: aboutdlg.h 58748 2009-02-08 09:46:03Z VZ $
// Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org> // Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -128,6 +128,12 @@ public:
// artists and translators) as a one long multiline string // artists and translators) as a one long multiline string
wxString GetDescriptionAndCredits() const; wxString GetDescriptionAndCredits() const;
#if wxABI_VERSION >= 20810
// returns the copyright with the (C) string substituted by the Unicode
// character U+00A9
wxString GetCopyrightToDisplay() const;
#endif // wx 2.8.10+
private: private:
wxString m_name, wxString m_name,
m_version, m_version,

View File

@ -4,7 +4,7 @@
// Author: Mattia Barbon and Vadim Zeitlin // Author: Mattia Barbon and Vadim Zeitlin
// Modified by: // Modified by:
// Created: 07/07/03 // Created: 07/07/03
// RCS-ID: $Id: arrstr.h 33888 2005-04-26 19:24:12Z MBN $ // RCS-ID: $Id: arrstr.h 56758 2008-11-13 22:32:21Z VS $
// Copyright: (c) 2003 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> // Copyright: (c) 2003 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -364,6 +364,11 @@ public:
m_strings[i] = m_array[i]; m_strings[i] = m_array[i];
return m_strings; return m_strings;
} }
#if wxABI_VERSION >= 20810
wxString* Release();
#endif // wxABI_VERSION >= 20810
private: private:
const wxArrayString& m_array; const wxArrayString& m_array;
wxString* m_strings; wxString* m_strings;

View File

@ -4,7 +4,7 @@
// Author: Vaclav Slavik // Author: Vaclav Slavik
// Modified by: // Modified by:
// Created: 18/03/2002 // Created: 18/03/2002
// RCS-ID: $Id: artprov.h 53135 2008-04-12 02:31:04Z VZ $ // RCS-ID: $Id: artprov.h 57701 2008-12-31 23:40:06Z VS $
// Copyright: (c) Vaclav Slavik // Copyright: (c) Vaclav Slavik
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -122,6 +122,10 @@ public:
// Add new provider to the bottom of providers stack (i.e. the provider // Add new provider to the bottom of providers stack (i.e. the provider
// will be queried as the last one). // will be queried as the last one).
#if wxABI_VERSION >= 20810
static void PushBack(wxArtProvider *provider);
#endif
// same as PushBack()
static void Insert(wxArtProvider *provider); static void Insert(wxArtProvider *provider);
// Remove latest added provider and delete it. // Remove latest added provider and delete it.

View File

@ -4,7 +4,7 @@
// Author: Benjamin I. Williams // Author: Benjamin I. Williams
// Modified by: // Modified by:
// Created: 2005-05-17 // Created: 2005-05-17
// RCS-ID: $Id: aui.h 40232 2006-07-22 13:14:07Z BIW $ // RCS-ID: $Id: aui.h 55195 2008-08-23 06:31:01Z BIW $
// Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved. // Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved.
// Licence: wxWindows Library Licence, Version 3.1 // Licence: wxWindows Library Licence, Version 3.1
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -15,6 +15,7 @@
#include "wx/aui/framemanager.h" #include "wx/aui/framemanager.h"
#include "wx/aui/dockart.h" #include "wx/aui/dockart.h"
#include "wx/aui/floatpane.h" #include "wx/aui/floatpane.h"
#include "wx/aui/auibar.h"
#include "wx/aui/auibook.h" #include "wx/aui/auibook.h"
#include "wx/aui/tabmdi.h" #include "wx/aui/tabmdi.h"

View File

@ -469,15 +469,17 @@ protected:
void OnRightDown(wxMouseEvent& evt); void OnRightDown(wxMouseEvent& evt);
void OnRightUp(wxMouseEvent& evt); void OnRightUp(wxMouseEvent& evt);
void OnLeftDClick(wxMouseEvent& evt); void OnLeftDClick(wxMouseEvent& evt);
void OnSetFocus(wxFocusEvent& event); void OnSetFocus(wxFocusEvent& evt);
void OnKillFocus(wxFocusEvent& event); void OnKillFocus(wxFocusEvent& evt);
void OnChar(wxKeyEvent& event); void OnChar(wxKeyEvent& evt);
#endif
#if wxABI_VERSION >= 20809
void OnCaptureLost(wxMouseCaptureLostEvent& evt);
#endif #endif
void OnMotion(wxMouseEvent& evt); void OnMotion(wxMouseEvent& evt);
void OnLeaveWindow(wxMouseEvent& evt); void OnLeaveWindow(wxMouseEvent& evt);
void OnButton(wxAuiNotebookEvent& evt); void OnButton(wxAuiNotebookEvent& evt);
protected: protected:
wxPoint m_click_pt; wxPoint m_click_pt;

View File

@ -4,7 +4,7 @@
// Author: Benjamin I. Williams // Author: Benjamin I. Williams
// Modified by: // Modified by:
// Created: 2005-05-17 // Created: 2005-05-17
// RCS-ID: $Id: framemanager.h 53135 2008-04-12 02:31:04Z VZ $ // RCS-ID: $Id: framemanager.h 57885 2009-01-07 14:51:49Z JS $
// Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved. // Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved.
// Licence: wxWindows Library Licence, Version 3.1 // Licence: wxWindows Library Licence, Version 3.1
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -47,6 +47,7 @@ enum wxAuiManagerOption
wxAUI_MGR_RECTANGLE_HINT = 1 << 5, wxAUI_MGR_RECTANGLE_HINT = 1 << 5,
wxAUI_MGR_HINT_FADE = 1 << 6, wxAUI_MGR_HINT_FADE = 1 << 6,
wxAUI_MGR_NO_VENETIAN_BLINDS_FADE = 1 << 7, wxAUI_MGR_NO_VENETIAN_BLINDS_FADE = 1 << 7,
wxAUI_MGR_LIVE_RESIZE = 1 << 8,
wxAUI_MGR_DEFAULT = wxAUI_MGR_ALLOW_FLOATING | wxAUI_MGR_DEFAULT = wxAUI_MGR_ALLOW_FLOATING |
wxAUI_MGR_TRANSPARENT_HINT | wxAUI_MGR_TRANSPARENT_HINT |
@ -166,7 +167,7 @@ public:
} }
~wxAuiPaneInfo() {} ~wxAuiPaneInfo() {}
#ifndef SWIG #ifndef SWIG
wxAuiPaneInfo(const wxAuiPaneInfo& c) wxAuiPaneInfo(const wxAuiPaneInfo& c)
{ {
@ -350,12 +351,12 @@ public:
#ifdef SWIG #ifdef SWIG
%typemap(out) wxAuiPaneInfo& ; %typemap(out) wxAuiPaneInfo& ;
#endif #endif
public: public:
// NOTE: You can add and subtract flags from this list, // NOTE: You can add and subtract flags from this list,
// but do not change the values of the flags, because // but do not change the values of the flags, because
// they are stored in a binary integer format in the // they are stored in a binary integer format in the
// perspective string. If you really need to change the // perspective string. If you really need to change the
// values around, you'll have to ensure backwards-compatibility // values around, you'll have to ensure backwards-compatibility
// in the perspective loading code. // in the perspective loading code.
@ -384,11 +385,11 @@ public:
buttonMaximize = 1 << 22, buttonMaximize = 1 << 22,
buttonMinimize = 1 << 23, buttonMinimize = 1 << 23,
buttonPin = 1 << 24, buttonPin = 1 << 24,
buttonCustom1 = 1 << 26, buttonCustom1 = 1 << 26,
buttonCustom2 = 1 << 27, buttonCustom2 = 1 << 27,
buttonCustom3 = 1 << 28, buttonCustom3 = 1 << 28,
savedHiddenState = 1 << 30, // used internally savedHiddenState = 1 << 30, // used internally
actionPane = 1 << 31 // used internally actionPane = 1 << 31 // used internally
}; };
@ -451,7 +452,7 @@ public:
bool AddPane(wxWindow* window, bool AddPane(wxWindow* window,
const wxAuiPaneInfo& pane_info); const wxAuiPaneInfo& pane_info);
bool AddPane(wxWindow* window, bool AddPane(wxWindow* window,
const wxAuiPaneInfo& pane_info, const wxAuiPaneInfo& pane_info,
const wxPoint& drop_pos); const wxPoint& drop_pos);
@ -465,7 +466,7 @@ public:
int insert_level = wxAUI_INSERT_PANE); int insert_level = wxAUI_INSERT_PANE);
bool DetachPane(wxWindow* window); bool DetachPane(wxWindow* window);
void Update(); void Update();
wxString SavePaneInfo(wxAuiPaneInfo& pane); wxString SavePaneInfo(wxAuiPaneInfo& pane);
@ -475,7 +476,7 @@ public:
void SetDockSizeConstraint(double width_pct, double height_pct); void SetDockSizeConstraint(double width_pct, double height_pct);
void GetDockSizeConstraint(double* width_pct, double* height_pct) const; void GetDockSizeConstraint(double* width_pct, double* height_pct) const;
void ClosePane(wxAuiPaneInfo& pane_info); void ClosePane(wxAuiPaneInfo& pane_info);
void MaximizePane(wxAuiPaneInfo& pane_info); void MaximizePane(wxAuiPaneInfo& pane_info);
void RestorePane(wxAuiPaneInfo& pane_info); void RestorePane(wxAuiPaneInfo& pane_info);
@ -493,12 +494,12 @@ public:
wxWindow* pane_window, wxWindow* pane_window,
const wxPoint& pt, const wxPoint& pt,
const wxPoint& offset); const wxPoint& offset);
void DrawHintRect( void DrawHintRect(
wxWindow* pane_window, wxWindow* pane_window,
const wxPoint& pt, const wxPoint& pt,
const wxPoint& offset); const wxPoint& offset);
virtual void ShowHint(const wxRect& rect); virtual void ShowHint(const wxRect& rect);
virtual void HideHint(); virtual void HideHint();
@ -506,14 +507,14 @@ public:
// deprecated -- please use SetManagedWindow() and // deprecated -- please use SetManagedWindow() and
// and GetManagedWindow() instead // and GetManagedWindow() instead
wxDEPRECATED( void SetFrame(wxFrame* frame) ); wxDEPRECATED( void SetFrame(wxFrame* frame) );
wxDEPRECATED( wxFrame* GetFrame() const ); wxDEPRECATED( wxFrame* GetFrame() const );
protected: protected:
void UpdateHintWindowConfig(); void UpdateHintWindowConfig();
void DoFrameLayout(); void DoFrameLayout();
void LayoutAddPane(wxSizer* container, void LayoutAddPane(wxSizer* container,
@ -559,6 +560,10 @@ protected:
wxArrayInt& positions, wxArrayInt& positions,
wxArrayInt& sizes); wxArrayInt& sizes);
#if wxABI_VERSION >= 20810
/// Ends a resize action, or for live update, resizes the sash
bool DoEndResizeAction(wxMouseEvent& event);
#endif
public: public:
@ -623,7 +628,7 @@ protected:
wxTimer m_hint_fadetimer; // transparent fade timer wxTimer m_hint_fadetimer; // transparent fade timer
wxByte m_hint_fadeamt; // transparent fade amount wxByte m_hint_fadeamt; // transparent fade amount
wxByte m_hint_fademax; // maximum value of hint fade wxByte m_hint_fademax; // maximum value of hint fade
void* m_reserved; void* m_reserved;
#ifndef SWIG #ifndef SWIG
@ -665,17 +670,17 @@ public:
void SetPane(wxAuiPaneInfo* p) { pane = p; } void SetPane(wxAuiPaneInfo* p) { pane = p; }
void SetButton(int b) { button = b; } void SetButton(int b) { button = b; }
void SetDC(wxDC* pdc) { dc = pdc; } void SetDC(wxDC* pdc) { dc = pdc; }
wxAuiManager* GetManager() const { return manager; } wxAuiManager* GetManager() const { return manager; }
wxAuiPaneInfo* GetPane() const { return pane; } wxAuiPaneInfo* GetPane() const { return pane; }
int GetButton() const { return button; } int GetButton() const { return button; }
wxDC* GetDC() const { return dc; } wxDC* GetDC() const { return dc; }
void Veto(bool veto = true) { veto_flag = veto; } void Veto(bool veto = true) { veto_flag = veto; }
bool GetVeto() const { return veto_flag; } bool GetVeto() const { return veto_flag; }
void SetCanVeto(bool can_veto) { canveto_flag = can_veto; } void SetCanVeto(bool can_veto) { canveto_flag = can_veto; }
bool CanVeto() const { return canveto_flag && veto_flag; } bool CanVeto() const { return canveto_flag && veto_flag; }
public: public:
wxAuiManager* manager; wxAuiManager* manager;
wxAuiPaneInfo* pane; wxAuiPaneInfo* pane;

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: Wlodzimierz ABX Skiba from wx/listbook.h // Modified by: Wlodzimierz ABX Skiba from wx/listbook.h
// Created: 15.09.04 // Created: 15.09.04
// RCS-ID: $Id: choicebk.h 49804 2007-11-10 01:09:42Z VZ $ // RCS-ID: $Id: choicebk.h 56623 2008-10-31 23:07:49Z VZ $
// Copyright: (c) Vadim Zeitlin, Wlodzimierz Skiba // Copyright: (c) Vadim Zeitlin, Wlodzimierz Skiba
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -93,7 +93,7 @@ protected:
void UpdateSelectedPage(size_t newsel) void UpdateSelectedPage(size_t newsel)
{ {
m_selection = newsel; m_selection = wx_static_cast(int, newsel);
GetChoiceCtrl()->Select(newsel); GetChoiceCtrl()->Select(newsel);
} }

View File

@ -5,7 +5,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
// Created: 10.02.99 // Created: 10.02.99
// RCS-ID: $Id: datetime.h 53135 2008-04-12 02:31:04Z VZ $ // RCS-ID: $Id: datetime.h 57502 2008-12-22 19:52:20Z VZ $
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> // Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -577,7 +577,7 @@ public:
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// default ctor does not initialize the object, use Set()! // default ctor does not initialize the object, use Set()!
wxDateTime() { m_time = wxLongLong((long)ULONG_MAX, ULONG_MAX); } wxDateTime() { m_time = wxLongLong((wxInt32)UINT_MAX, UINT_MAX); }
// from time_t: seconds since the Epoch 00:00:00 UTC, Jan 1, 1970) // from time_t: seconds since the Epoch 00:00:00 UTC, Jan 1, 1970)
#if (!(defined(__VISAGECPP__) && __IBMCPP__ >= 400)) #if (!(defined(__VISAGECPP__) && __IBMCPP__ >= 400))
@ -1100,13 +1100,8 @@ public:
// another one to get the current time broken down // another one to get the current time broken down
static struct tm *GetTmNow() static struct tm *GetTmNow()
{ {
#ifdef __WXWINCE__
static struct tm l_CurrentTime; static struct tm l_CurrentTime;
return GetTmNow(&l_CurrentTime); return GetTmNow(&l_CurrentTime);
#else
time_t t = GetTimeNow();
return localtime(&t);
#endif
} }
// get current time using thread-safe function // get current time using thread-safe function

View File

@ -17,7 +17,7 @@
// databases operate the same in that respect // databases operate the same in that respect
// //
// Created: 9.96 // Created: 9.96
// RCS-ID: $Id: db.h 45498 2007-04-16 13:03:05Z VZ $ // RCS-ID: $Id: db.h 56697 2008-11-07 22:45:47Z VZ $
// Copyright: (c) 1996 Remstar International, Inc. // Copyright: (c) 1996 Remstar International, Inc.
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -78,10 +78,15 @@
// defined in many other places on other systems (Motif, at least on // defined in many other places on other systems (Motif, at least on
// OpenVMS; Cocoa and X11) so prevent the problem by defining it before // OpenVMS; Cocoa and X11) so prevent the problem by defining it before
// including these headers // including these headers
#define BOOL int #ifndef BOOL
#include <sql.h> #define BOOL int
#include <sqlext.h> #include <sql.h>
#undef BOOL #include <sqlext.h>
#undef BOOL
#else
#include <sql.h>
#include <sqlext.h>
#endif
#endif // wxUSE_BUILTIN_IODBC/!wxUSE_BUILTIN_IODBC #endif // wxUSE_BUILTIN_IODBC/!wxUSE_BUILTIN_IODBC
} }
#endif #endif

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
// Created: 05/25/99 // Created: 05/25/99
// RCS-ID: $Id: dc.h 53135 2008-04-12 02:31:04Z VZ $ // RCS-ID: $Id: dc.h 55927 2008-09-28 09:12:16Z VS $
// Copyright: (c) wxWidgets team // Copyright: (c) wxWidgets team
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -466,7 +466,6 @@ public:
bool GetPartialTextExtents(const wxString& text, wxArrayInt& widths) const bool GetPartialTextExtents(const wxString& text, wxArrayInt& widths) const
{ return DoGetPartialTextExtents(text, widths); } { return DoGetPartialTextExtents(text, widths); }
// size and resolution // size and resolution
// ------------------- // -------------------
@ -793,6 +792,13 @@ protected:
virtual void DoDrawSpline(wxList *points); virtual void DoDrawSpline(wxList *points);
#endif #endif
#if wxABI_VERSION >= 20810
// returns adjustment factor for converting wxFont "point size"; in wx
// it is point size on screen and needs to be multiplied by this value
// for rendering on higher-resolution DCs such as printer ones
static float GetFontPointSizeAdjustment(float dpi);
#endif
protected: protected:
// unset clipping variables (after clipping region was destroyed) // unset clipping variables (after clipping region was destroyed)
void ResetClipping() void ResetClipping()

View File

@ -4,7 +4,7 @@
* Author: Vadim Zeitlin * Author: Vadim Zeitlin
* Modified by: Ryan Norton (Converted to C) * Modified by: Ryan Norton (Converted to C)
* Created: 29/01/98 * Created: 29/01/98
* RCS-ID: $Id: debug.h 53711 2008-05-22 22:58:28Z SN $ * RCS-ID: $Id: debug.h 54492 2008-07-05 17:54:03Z SN $
* Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> * Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
* Licence: wxWindows licence * Licence: wxWindows licence
*/ */
@ -190,6 +190,17 @@
/* as wxCHECK2 but with a message explaining why we fail */ /* as wxCHECK2 but with a message explaining why we fail */
#ifdef __GNUC__
#define wxFORCE_SEMICOLON typedef int wxDummyCheckInt
/* Note: old gcc versions (e.g. 2.8) give an internal compiler error */
/* on a simple forward declaration, when used in a template */
/* function, so rather use a dummy typedef which does work... */
#else
#define wxFORCE_SEMICOLON struct wxDummyCheckStruct
/* Note2: however, some other compilers (notably Digital Mars */
/* don't like multiple typedefs (even though the standard */
/* does allow them), so use a forward declaration for non-gcc. */
#endif
/* see comment near the definition of wxASSERT_MSG for the # if/else reason */ /* see comment near the definition of wxASSERT_MSG for the # if/else reason */
#if defined(__MWERKS__) #if defined(__MWERKS__)
#define wxCHECK2_MSG(cond, op, msg) \ #define wxCHECK2_MSG(cond, op, msg) \
@ -210,10 +221,7 @@
wxFAIL_COND_MSG(#cond, msg); \ wxFAIL_COND_MSG(#cond, msg); \
op; \ op; \
} \ } \
typedef int wxDummyCheckInt /* just to force a semicolon */ wxFORCE_SEMICOLON /* just to force a semicolon */
/* NB: old gcc versions (e.g. 2.8) give an internal compiler error */
/* on a simple forward declaration, when used in a template */
/* function, so rather use a dummy typedef which does work... */
#endif #endif
/* special form of wxCHECK2: as wxCHECK, but for use in void functions */ /* special form of wxCHECK2: as wxCHECK, but for use in void functions */

View File

@ -4,7 +4,7 @@
// Author: Guilhem Lavaux, Vadim Zeitlin, Vaclav Slavik // Author: Guilhem Lavaux, Vadim Zeitlin, Vaclav Slavik
// Modified by: // Modified by:
// Created: 20/07/98 // Created: 20/07/98
// RCS-ID: $Id: dynlib.h 53135 2008-04-12 02:31:04Z VZ $ // RCS-ID: $Id: dynlib.h 58750 2009-02-08 10:01:03Z VZ $
// Copyright: (c) 1998 Guilhem Lavaux // Copyright: (c) 1998 Guilhem Lavaux
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -76,6 +76,18 @@ enum wxDLFlags
wxDL_NOSHARE = 0x00000010, // load new DLL, don't reuse already loaded wxDL_NOSHARE = 0x00000010, // load new DLL, don't reuse already loaded
// (only for wxPluginManager) // (only for wxPluginManager)
wxDL_QUIET = 0x00000020, // don't log an error if failed to load
#if wxABI_VERSION >= 20810
// this flag is dangerous, for internal use of wxMSW only, don't use at all
// and especially don't use directly, use wxLoadedDLL instead if you really
// do need it
wxDL_GET_LOADED = 0x00000040, // Win32 only: return handle of already
// loaded DLL or NULL otherwise; Unload()
// should not be called so don't forget to
// Detach() if you use this function
#endif // wx 2.8.10+
wxDL_DEFAULT = wxDL_NOW // default flags correspond to Win32 wxDL_DEFAULT = wxDL_NOW // default flags correspond to Win32
}; };
@ -309,6 +321,28 @@ protected:
DECLARE_NO_COPY_CLASS(wxDynamicLibrary) DECLARE_NO_COPY_CLASS(wxDynamicLibrary)
}; };
#if defined(__WXMSW__) && wxABI_VERSION >= 20810
// ----------------------------------------------------------------------------
// wxLoadedDLL is a MSW-only internal helper class allowing to dynamically bind
// to a DLL already loaded into the project address space
// ----------------------------------------------------------------------------
class wxLoadedDLL : public wxDynamicLibrary
{
public:
wxLoadedDLL(const wxString& dllname)
: wxDynamicLibrary(dllname, wxDL_GET_LOADED | wxDL_VERBATIM | wxDL_QUIET)
{
}
~wxLoadedDLL()
{
Detach();
}
};
#endif // __WXMSW__
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Interesting defines // Interesting defines

View File

@ -4,7 +4,7 @@
// Author: Julian Smart and Guillermo Rodriguez Garcia // Author: Julian Smart and Guillermo Rodriguez Garcia
// Modified by: Francesco Montorsi // Modified by: Francesco Montorsi
// Created: 13/8/99 // Created: 13/8/99
// RCS-ID: $Id: animate.h 43898 2006-12-10 14:18:37Z VZ $ // RCS-ID: $Id: animate.h 58350 2009-01-24 10:00:38Z FM $
// Copyright: (c) Julian Smart and Guillermo Rodriguez Garcia // Copyright: (c) Julian Smart and Guillermo Rodriguez Garcia
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -23,6 +23,11 @@ WX_DECLARE_LIST_WITH_DECL(wxAnimationDecoder, wxAnimationDecoderList, class WXDL
class WXDLLIMPEXP_ADV wxAnimation : public wxAnimationBase class WXDLLIMPEXP_ADV wxAnimation : public wxAnimationBase
{ {
public: public:
#if wxABI_VERSION >= 20810
wxAnimation() {}
wxAnimation(const wxString &name, wxAnimationType type = wxANIMATION_TYPE_ANY)
{ LoadFile(name, type); }
#endif
virtual bool IsOk() const virtual bool IsOk() const
{ return m_refData != NULL; } { return m_refData != NULL; }

View File

@ -5,7 +5,7 @@
// Modified by: // Modified by:
// Created: 14/4/2006 // Created: 14/4/2006
// Copyright: (c) Vadim Zeitlin, Francesco Montorsi // Copyright: (c) Vadim Zeitlin, Francesco Montorsi
// RCS-ID: $Id: clrpickerg.h 40322 2006-07-25 11:41:53Z ABX $ // RCS-ID: $Id: clrpickerg.h 58967 2009-02-17 13:31:28Z SC $
// Licence: wxWindows Licence // Licence: wxWindows Licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -25,8 +25,18 @@
// the default style // the default style
#define wxCLRBTN_DEFAULT_STYLE (wxCLRBTN_SHOW_LABEL) #define wxCLRBTN_DEFAULT_STYLE (wxCLRBTN_SHOW_LABEL)
#ifndef wxCLRBTN_USES_BMP_BUTTON
#define wxCLRBTN_USES_BMP_BUTTON 0
#endif
class WXDLLIMPEXP_CORE wxGenericColourButton : public wxButton, #if wxCLRBTN_USES_BMP_BUTTON
#include "wx/bmpbutton.h"
#define wxCLRBTN_BASE_CLASS wxBitmapButton
#else
#define wxCLRBTN_BASE_CLASS wxButton
#endif
class WXDLLIMPEXP_CORE wxGenericColourButton : public wxCLRBTN_BASE_CLASS,
public wxColourPickerWidgetBase public wxColourPickerWidgetBase
{ {
public: public:

View File

@ -4,7 +4,7 @@
// Author: Michael Bedward (based on code by Julian Smart, Robin Dunn) // Author: Michael Bedward (based on code by Julian Smart, Robin Dunn)
// Modified by: Santiago Palacios // Modified by: Santiago Palacios
// Created: 1/08/1999 // Created: 1/08/1999
// RCS-ID: $Id: grid.h 53135 2008-04-12 02:31:04Z VZ $ // RCS-ID: $Id: grid.h 55568 2008-09-12 12:49:11Z VZ $
// Copyright: (c) Michael Bedward // Copyright: (c) Michael Bedward
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -2256,7 +2256,7 @@ typedef void (wxEvtHandler::*wxGridEditorCreatedEventFunction)(wxGridEditorCreat
#define EVT_GRID_CMD_LABEL_RIGHT_DCLICK(id, fn) wx__DECLARE_GRIDEVT(LABEL_RIGHT_DCLICK, id, fn) #define EVT_GRID_CMD_LABEL_RIGHT_DCLICK(id, fn) wx__DECLARE_GRIDEVT(LABEL_RIGHT_DCLICK, id, fn)
#define EVT_GRID_CMD_ROW_SIZE(id, fn) wx__DECLARE_GRIDSIZEEVT(ROW_SIZE, id, fn) #define EVT_GRID_CMD_ROW_SIZE(id, fn) wx__DECLARE_GRIDSIZEEVT(ROW_SIZE, id, fn)
#define EVT_GRID_CMD_COL_SIZE(id, fn) wx__DECLARE_GRIDSIZEEVT(COL_SIZE, id, fn) #define EVT_GRID_CMD_COL_SIZE(id, fn) wx__DECLARE_GRIDSIZEEVT(COL_SIZE, id, fn)
#define EVT_GRID_CMD_COL_MOVE(id, fn) wx__DECLARE_GRIDSIZEEVT(COL_MOVE, id, fn) #define EVT_GRID_CMD_COL_MOVE(id, fn) wx__DECLARE_GRIDEVT(COL_MOVE, id, fn)
#define EVT_GRID_CMD_RANGE_SELECT(id, fn) wx__DECLARE_GRIDRANGESELEVT(RANGE_SELECT, id, fn) #define EVT_GRID_CMD_RANGE_SELECT(id, fn) wx__DECLARE_GRIDRANGESELEVT(RANGE_SELECT, id, fn)
#define EVT_GRID_CMD_CELL_CHANGE(id, fn) wx__DECLARE_GRIDEVT(CELL_CHANGE, id, fn) #define EVT_GRID_CMD_CELL_CHANGE(id, fn) wx__DECLARE_GRIDEVT(CELL_CHANGE, id, fn)
#define EVT_GRID_CMD_SELECT_CELL(id, fn) wx__DECLARE_GRIDEVT(SELECT_CELL, id, fn) #define EVT_GRID_CMD_SELECT_CELL(id, fn) wx__DECLARE_GRIDEVT(SELECT_CELL, id, fn)

View File

@ -5,7 +5,7 @@
// Modified by: // Modified by:
// Created: // Created:
// Copyright: (c) Stefan Csomor // Copyright: (c) Stefan Csomor
// RCS-ID: $Id: graphics.h 50671 2007-12-12 20:19:36Z MR $ // RCS-ID: $Id: graphics.h 57953 2009-01-09 18:46:48Z SC $
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -29,6 +29,7 @@ class WXDLLIMPEXP_CORE wxGraphicsRenderer;
class WXDLLIMPEXP_CORE wxGraphicsPen; class WXDLLIMPEXP_CORE wxGraphicsPen;
class WXDLLIMPEXP_CORE wxGraphicsBrush; class WXDLLIMPEXP_CORE wxGraphicsBrush;
class WXDLLIMPEXP_CORE wxGraphicsFont; class WXDLLIMPEXP_CORE wxGraphicsFont;
class WXDLLIMPEXP_CORE wxGraphicsBitmap;
/* /*
* notes about the graphics context apis * notes about the graphics context apis
@ -63,6 +64,10 @@ class WXDLLIMPEXP_CORE wxGraphicsObject : public wxObject
{ {
public : public :
wxGraphicsObject() ; wxGraphicsObject() ;
#if wxABI_VERSION >= 20810
wxGraphicsObject( const wxGraphicsObject& other) : wxObject( other ) {}
wxGraphicsObject& operator= (const wxGraphicsObject & other) { Ref(other); return *this;}
#endif
wxGraphicsObject( wxGraphicsRenderer* renderer ) ; wxGraphicsObject( wxGraphicsRenderer* renderer ) ;
virtual ~wxGraphicsObject() ; virtual ~wxGraphicsObject() ;
@ -82,6 +87,10 @@ class WXDLLIMPEXP_CORE wxGraphicsPen : public wxGraphicsObject
{ {
public : public :
wxGraphicsPen() {} wxGraphicsPen() {}
#if wxABI_VERSION >= 20810
wxGraphicsPen( const wxGraphicsPen& other) : wxGraphicsObject( other ) {}
wxGraphicsPen& operator= (const wxGraphicsPen & other) { Ref(other); return *this;}
#endif
virtual ~wxGraphicsPen() {} virtual ~wxGraphicsPen() {}
private : private :
DECLARE_DYNAMIC_CLASS(wxGraphicsPen) DECLARE_DYNAMIC_CLASS(wxGraphicsPen)
@ -93,6 +102,10 @@ class WXDLLIMPEXP_CORE wxGraphicsBrush : public wxGraphicsObject
{ {
public : public :
wxGraphicsBrush() {} wxGraphicsBrush() {}
#if wxABI_VERSION >= 20810
wxGraphicsBrush( const wxGraphicsBrush& other) : wxGraphicsObject( other ) {}
wxGraphicsBrush& operator= (const wxGraphicsBrush & other) { Ref(other); return *this;}
#endif
virtual ~wxGraphicsBrush() {} virtual ~wxGraphicsBrush() {}
private : private :
DECLARE_DYNAMIC_CLASS(wxGraphicsBrush) DECLARE_DYNAMIC_CLASS(wxGraphicsBrush)
@ -104,6 +117,10 @@ class WXDLLIMPEXP_CORE wxGraphicsFont : public wxGraphicsObject
{ {
public : public :
wxGraphicsFont() {} wxGraphicsFont() {}
#if wxABI_VERSION >= 20810
wxGraphicsFont( const wxGraphicsFont& other) : wxGraphicsObject( other ) {}
wxGraphicsFont& operator= (const wxGraphicsFont & other) { Ref(other); return *this;}
#endif
virtual ~wxGraphicsFont() {} virtual ~wxGraphicsFont() {}
private : private :
DECLARE_DYNAMIC_CLASS(wxGraphicsFont) DECLARE_DYNAMIC_CLASS(wxGraphicsFont)
@ -111,6 +128,20 @@ private :
extern WXDLLEXPORT_DATA(wxGraphicsFont) wxNullGraphicsFont; extern WXDLLEXPORT_DATA(wxGraphicsFont) wxNullGraphicsFont;
class WXDLLIMPEXP_CORE wxGraphicsBitmap : public wxGraphicsObject
{
public :
wxGraphicsBitmap() {}
#if wxABI_VERSION >= 20810
wxGraphicsBitmap( const wxGraphicsBitmap& other) : wxGraphicsObject( other ) {}
wxGraphicsBitmap& operator= (const wxGraphicsBitmap & other) { Ref(other); return *this;}
#endif
virtual ~wxGraphicsBitmap() {}
private :
DECLARE_DYNAMIC_CLASS(wxGraphicsBitmap)
} ;
extern WXDLLEXPORT_DATA(wxGraphicsBitmap) wxNullGraphicsBitmap;
class WXDLLIMPEXP_CORE wxGraphicsMatrixData : public wxGraphicsObjectRefData class WXDLLIMPEXP_CORE wxGraphicsMatrixData : public wxGraphicsObjectRefData
{ {
@ -171,6 +202,10 @@ class WXDLLIMPEXP_CORE wxGraphicsMatrix : public wxGraphicsObject
{ {
public : public :
wxGraphicsMatrix() {} wxGraphicsMatrix() {}
#if wxABI_VERSION >= 20810
wxGraphicsMatrix( const wxGraphicsMatrix& other) : wxGraphicsObject( other ) {}
wxGraphicsMatrix& operator= (const wxGraphicsMatrix & other) { Ref(other); return *this;}
#endif
virtual ~wxGraphicsMatrix() {} virtual ~wxGraphicsMatrix() {}
@ -306,6 +341,10 @@ class WXDLLIMPEXP_CORE wxGraphicsPath : public wxGraphicsObject
{ {
public : public :
wxGraphicsPath() {} wxGraphicsPath() {}
#if wxABI_VERSION >= 20810
wxGraphicsPath( const wxGraphicsPath& other) : wxGraphicsObject( other ) {}
wxGraphicsPath& operator= (const wxGraphicsPath & other) { Ref(other); return *this;}
#endif
virtual ~wxGraphicsPath() {} virtual ~wxGraphicsPath() {}
// //
@ -428,6 +467,12 @@ public:
// sets the font // sets the font
virtual wxGraphicsFont CreateFont( const wxFont &font , const wxColour &col = *wxBLACK ) const; virtual wxGraphicsFont CreateFont( const wxFont &font , const wxColour &col = *wxBLACK ) const;
#if wxABI_VERSION >= 20809
wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) const;
#endif
//virtual wxGraphicsBitmap CreateSubBitmap( const wxGraphicsBitmap &bitmap, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) const;
// create a 'native' matrix corresponding to these values // create a 'native' matrix corresponding to these values
virtual wxGraphicsMatrix CreateMatrix( wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0, virtual wxGraphicsMatrix CreateMatrix( wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0,
@ -527,7 +572,10 @@ public:
// //
// image support // image support
// //
#if wxABI_VERSION >= 20809
void DrawGraphicsBitmap( const wxGraphicsBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h );
#endif
virtual void DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) = 0; virtual void DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) = 0;
virtual void DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) = 0; virtual void DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) = 0;
@ -584,6 +632,10 @@ class WXDLLIMPEXP_CORE wxGraphicsFigure : public wxGraphicsObject
{ {
public : public :
wxGraphicsFigure(wxGraphicsRenderer* renderer) ; wxGraphicsFigure(wxGraphicsRenderer* renderer) ;
#if wxABI_VERSION >= 20810
wxGraphicsFigure( const wxGraphicsFigure& other) : wxGraphicsObject( other ) {}
wxGraphicsFigure& operator= (const wxGraphicsFigure & other) { Ref(other); return *this;}
#endif
virtual ~wxGraphicsFigure() ; virtual ~wxGraphicsFigure() ;
@ -666,6 +718,10 @@ public :
// sets the font // sets the font
virtual wxGraphicsFont CreateFont( const wxFont &font , const wxColour &col = *wxBLACK ) = 0; virtual wxGraphicsFont CreateFont( const wxFont &font , const wxColour &col = *wxBLACK ) = 0;
#if wxABI_VERSION >= 20809
wxGraphicsBitmap CreateBitmap( const wxBitmap &bmp );
#endif
private : private :
DECLARE_NO_COPY_CLASS(wxGraphicsRenderer) DECLARE_NO_COPY_CLASS(wxGraphicsRenderer)
DECLARE_ABSTRACT_CLASS(wxGraphicsRenderer) DECLARE_ABSTRACT_CLASS(wxGraphicsRenderer)

View File

@ -4,7 +4,7 @@
// Author: Mattia Barbon // Author: Mattia Barbon
// Modified by: // Modified by:
// Created: 29/01/2002 // Created: 29/01/2002
// RCS-ID: $Id: hashmap.h 45498 2007-04-16 13:03:05Z VZ $ // RCS-ID: $Id: hashmap.h 57388 2008-12-17 09:34:48Z VZ $
// Copyright: (c) Mattia Barbon // Copyright: (c) Mattia Barbon
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -14,12 +14,34 @@
#include "wx/string.h" #include "wx/string.h"
// In wxUSE_STL build we prefer to use the standard hash map class but it can
// be either in non-standard hash_map header (old g++ and some other STL
// implementations) or in C++0x standard unordered_map which can in turn be
// available either in std::tr1 or std namespace itself
//
// To summarize: if std::unordered_map is available use it, otherwise use tr1
// and finally fall back to non-standard hash_map
#if (defined(HAVE_EXT_HASH_MAP) || defined(HAVE_HASH_MAP)) \ #if (defined(HAVE_EXT_HASH_MAP) || defined(HAVE_HASH_MAP)) \
&& (defined(HAVE_GNU_CXX_HASH_MAP) || defined(HAVE_STD_HASH_MAP)) && (defined(HAVE_GNU_CXX_HASH_MAP) || defined(HAVE_STD_HASH_MAP))
#define HAVE_STL_HASH_MAP #define HAVE_STL_HASH_MAP
#endif #endif
#if wxUSE_STL && defined(HAVE_STL_HASH_MAP) #if wxUSE_STL && \
(defined(HAVE_STD_UNORDERED_MAP) || defined(HAVE_TR1_UNORDERED_MAP))
#if defined(HAVE_STD_UNORDERED_MAP)
#include <unordered_map>
#define WX_HASH_MAP_NAMESPACE std
#elif defined(HAVE_TR1_UNORDERED_MAP)
#include <tr1/unordered_map>
#define WX_HASH_MAP_NAMESPACE std::tr1
#endif
#define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \
typedef WX_HASH_MAP_NAMESPACE::unordered_map< KEY_T, VALUE_T, HASH_T, KEY_EQ_T > CLASSNAME
#elif wxUSE_STL && defined(HAVE_STL_HASH_MAP)
#if defined(HAVE_EXT_HASH_MAP) #if defined(HAVE_EXT_HASH_MAP)
#include <ext/hash_map> #include <ext/hash_map>
@ -36,8 +58,9 @@
#define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \ #define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \
typedef WX_HASH_MAP_NAMESPACE::hash_map< KEY_T, VALUE_T, HASH_T, KEY_EQ_T > CLASSNAME typedef WX_HASH_MAP_NAMESPACE::hash_map< KEY_T, VALUE_T, HASH_T, KEY_EQ_T > CLASSNAME
#else // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP) #else // !wxUSE_STL || no std::{hash,unordered}_map class available
#define wxNEEDS_WX_HASH_MAP
#ifdef __WXWINCE__ #ifdef __WXWINCE__
typedef int ptrdiff_t; typedef int ptrdiff_t;
@ -442,7 +465,7 @@ inline bool grow_lf70( size_t buckets, size_t items )
return float(items)/float(buckets) >= 0.85; return float(items)/float(buckets) >= 0.85;
} }
#endif // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP) #endif // various hash map implementations
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// hashing and comparison functors // hashing and comparison functors
@ -452,7 +475,7 @@ inline bool grow_lf70( size_t buckets, size_t items )
// operators to suppress warnings about "statement with no effect" from gcc // operators to suppress warnings about "statement with no effect" from gcc
// in the hash table class assignment operator (where they're assigned) // in the hash table class assignment operator (where they're assigned)
#if wxUSE_STL && defined(HAVE_STL_HASH_MAP) #ifndef wxNEEDS_WX_HASH_MAP
// integer types // integer types
class WXDLLIMPEXP_BASE wxIntegerHash class WXDLLIMPEXP_BASE wxIntegerHash
@ -496,7 +519,7 @@ public:
wxIntegerHash& operator=(const wxIntegerHash&) { return *this; } wxIntegerHash& operator=(const wxIntegerHash&) { return *this; }
}; };
#else // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP) #else // wxNEEDS_WX_HASH_MAP
// integer types // integer types
class WXDLLIMPEXP_BASE wxIntegerHash class WXDLLIMPEXP_BASE wxIntegerHash
@ -517,7 +540,7 @@ public:
wxIntegerHash& operator=(const wxIntegerHash&) { return *this; } wxIntegerHash& operator=(const wxIntegerHash&) { return *this; }
}; };
#endif // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP) #endif // !wxNEEDS_WX_HASH_MAP/wxNEEDS_WX_HASH_MAP
class WXDLLIMPEXP_BASE wxIntegerEqual class WXDLLIMPEXP_BASE wxIntegerEqual
{ {
@ -543,8 +566,8 @@ class WXDLLIMPEXP_BASE wxPointerHash
public: public:
wxPointerHash() { } wxPointerHash() { }
#if wxUSE_STL && defined(HAVE_STL_HASH_MAP) #ifdef wxNEEDS_WX_HASH_MAP
size_t operator()( const void* k ) const { return (size_t)k; } wxUIntPtr operator()( const void* k ) const { return wxPtrToUInt(k); }
#else #else
wxUIntPtr operator()( const void* k ) const { return wxPtrToUInt(k); } wxUIntPtr operator()( const void* k ) const { return wxPtrToUInt(k); }
#endif #endif
@ -596,7 +619,7 @@ public:
wxStringEqual& operator=(const wxStringEqual&) { return *this; } wxStringEqual& operator=(const wxStringEqual&) { return *this; }
}; };
#if !wxUSE_STL || !defined(HAVE_STL_HASH_MAP) #ifdef wxNEEDS_WX_HASH_MAP
#define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \ #define _WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP ) \
_WX_DECLARE_PAIR( KEY_T, VALUE_T, CLASSNAME##_wxImplementation_Pair, CLASSEXP ) \ _WX_DECLARE_PAIR( KEY_T, VALUE_T, CLASSNAME##_wxImplementation_Pair, CLASSEXP ) \
@ -637,8 +660,6 @@ public: \
Node *node = GetOrCreateNode( \ Node *node = GetOrCreateNode( \
CLASSNAME##_wxImplementation_Pair( v.first, v.second ), \ CLASSNAME##_wxImplementation_Pair( v.first, v.second ), \
created); \ created); \
if ( !created ) \
node->m_value.second = v.second; \
return Insert_Result(iterator(node, this), created); \ return Insert_Result(iterator(node, this), created); \
} \ } \
\ \
@ -655,7 +676,7 @@ public: \
} \ } \
} }
#endif // !wxUSE_STL || !defined(HAVE_STL_HASH_MAP) #endif // wxNEEDS_WX_HASH_MAP
// these macros are to be used in the user code // these macros are to be used in the user code
#define WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME) \ #define WX_DECLARE_HASH_MAP( KEY_T, VALUE_T, HASH_T, KEY_EQ_T, CLASSNAME) \

View File

@ -4,7 +4,7 @@
// Author: Mattia Barbon // Author: Mattia Barbon
// Modified by: // Modified by:
// Created: 11/08/2003 // Created: 11/08/2003
// RCS-ID: $Id: hashset.h 49056 2007-10-05 22:42:35Z VS $ // RCS-ID: $Id: hashset.h 55215 2008-08-23 18:54:04Z VZ $
// Copyright: (c) Mattia Barbon // Copyright: (c) Mattia Barbon
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -14,7 +14,25 @@
#include "wx/hashmap.h" #include "wx/hashmap.h"
#if wxUSE_STL && defined(HAVE_STL_HASH_MAP) // see comment in wx/hashmap.h which also applies to different standard hash
// set classes
#if wxUSE_STL && \
(defined(HAVE_STD_UNORDERED_SET) || defined(HAVE_TR1_UNORDERED_SET))
#if defined(HAVE_STD_UNORDERED_SET)
#include <unordered_set>
#define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP )\
typedef std::unordered_set< KEY_T, HASH_T, KEY_EQ_T > CLASSNAME
#elif defined(HAVE_TR1_UNORDERED_SET)
#include <tr1/unordered_set>
#define _WX_DECLARE_HASH_SET( KEY_T, HASH_T, KEY_EQ_T, CLASSNAME, CLASSEXP )\
typedef std::tr1::unordered_set< KEY_T, HASH_T, KEY_EQ_T > CLASSNAME
#else
#error Update this code: unordered_set is available, but I do not know where.
#endif
#elif wxUSE_STL && defined(HAVE_STL_HASH_MAP)
#if defined(HAVE_EXT_HASH_MAP) #if defined(HAVE_EXT_HASH_MAP)
#include <ext/hash_set> #include <ext/hash_set>

View File

@ -2,7 +2,7 @@
// Name: winpars.h // Name: winpars.h
// Purpose: wxHtmlWinParser class (parser to be used with wxHtmlWindow) // Purpose: wxHtmlWinParser class (parser to be used with wxHtmlWindow)
// Author: Vaclav Slavik // Author: Vaclav Slavik
// RCS-ID: $Id: winpars.h 53457 2008-05-05 10:53:58Z VS $ // RCS-ID: $Id: winpars.h 59260 2009-03-02 10:43:00Z VS $
// Copyright: (c) 1999 Vaclav Slavik // Copyright: (c) 1999 Vaclav Slavik
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -24,6 +24,7 @@ class WXDLLIMPEXP_FWD_HTML wxHtmlWindowInterface;
class WXDLLIMPEXP_FWD_HTML wxHtmlWinParser; class WXDLLIMPEXP_FWD_HTML wxHtmlWinParser;
class WXDLLIMPEXP_FWD_HTML wxHtmlWinTagHandler; class WXDLLIMPEXP_FWD_HTML wxHtmlWinTagHandler;
class WXDLLIMPEXP_FWD_HTML wxHtmlTagsModule; class WXDLLIMPEXP_FWD_HTML wxHtmlTagsModule;
struct wxHtmlWinParser_TextParsingState;
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
@ -221,22 +222,10 @@ private:
wxEncodingConverter *m_EncConv; wxEncodingConverter *m_EncConv;
#endif #endif
struct TextParsingState
{
// current whitespace handling mode
WhitespaceMode m_whitespaceMode;
wxHtmlWordCell *m_lastWordCell;
// current position on line, in num. of characters; used to properly
// expand TABs; only updated while inside <pre>
int m_posColumn;
};
// NB: this pointer replaces m_lastWordCell pointer in wx<=2.8.7; this // NB: this pointer replaces m_lastWordCell pointer in wx<=2.8.7; this
// way, wxHtmlWinParser remains ABI compatible with older versions // way, wxHtmlWinParser remains ABI compatible with older versions
// despite addition of two fields in TextParsingState // despite addition of two fields in wxHtmlWinParser_TextParsingState
TextParsingState *m_textParsingState; wxHtmlWinParser_TextParsingState *m_textParsingState;
DECLARE_NO_COPY_CLASS(wxHtmlWinParser) DECLARE_NO_COPY_CLASS(wxHtmlWinParser)
}; };

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: VZ at 16/11/98: WX_DECLARE_LIST() and typesafe lists added // Modified by: VZ at 16/11/98: WX_DECLARE_LIST() and typesafe lists added
// Created: 29/01/98 // Created: 29/01/98
// RCS-ID: $Id: list.h 53135 2008-04-12 02:31:04Z VZ $ // RCS-ID: $Id: list.h 58742 2009-02-07 23:46:53Z VZ $
// Copyright: (c) 1998 Julian Smart // Copyright: (c) 1998 Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -296,7 +296,7 @@ private:
push_front( e ); \ push_front( e ); \
return compatibility_iterator( this, begin() ); \ return compatibility_iterator( this, begin() ); \
} \ } \
compatibility_iterator Insert( compatibility_iterator & i, elT e ) \ compatibility_iterator Insert(const compatibility_iterator &i, elT e) \
{ \ { \
return compatibility_iterator( this, insert( i.m_iter, e ) ); \ return compatibility_iterator( this, insert( i.m_iter, e ) ); \
} \ } \
@ -1035,18 +1035,22 @@ private:
} \ } \
iterator insert(const iterator& it, const_reference v = value_type())\ iterator insert(const iterator& it, const_reference v = value_type())\
{ \ { \
Insert(it.m_node, (const_base_reference)v); \ if ( it == end() ) \
return iterator(it.m_node->GetPrevious(), GetLast()); \ Append((const_base_reference)v); \
else \
Insert(it.m_node, (const_base_reference)v); \
iterator itprev(it); \
return itprev--; \
} \ } \
void insert(const iterator& it, size_type n, const_reference v = value_type())\ void insert(const iterator& it, size_type n, const_reference v = value_type())\
{ \ { \
for(size_type i = 0; i < n; ++i) \ for(size_type i = 0; i < n; ++i) \
Insert(it.m_node, (const_base_reference)v); \ insert(it, v); \
} \ } \
void insert(const iterator& it, const_iterator first, const const_iterator& last)\ void insert(const iterator& it, const_iterator first, const const_iterator& last)\
{ \ { \
for(; first != last; ++first) \ for(; first != last; ++first) \
Insert(it.m_node, (const_base_reference)*first); \ insert(it, *first); \
} \ } \
iterator erase(const iterator& it) \ iterator erase(const iterator& it) \
{ \ { \
@ -1055,7 +1059,9 @@ private:
} \ } \
iterator erase(const iterator& first, const iterator& last) \ iterator erase(const iterator& first, const iterator& last) \
{ \ { \
iterator next = last; ++next; \ iterator next = last; \
if ( next != end() ) \
++next; \
DeleteNodes(first.m_node, last.m_node); \ DeleteNodes(first.m_node, last.m_node); \
return next; \ return next; \
} \ } \
@ -1066,10 +1072,11 @@ private:
{ splice(it, l, l.begin(), l.end() ); } \ { splice(it, l, l.begin(), l.end() ); } \
void splice(const iterator& it, name& l, const iterator& first) \ void splice(const iterator& it, name& l, const iterator& first) \
{ \ { \
iterator tmp = first; ++tmp; \ if ( it != first ) \
if(it == first || it == tmp) return; \ { \
insert(it, *first); \ insert(it, *first); \
l.erase(first); \ l.erase(first); \
} \
} \ } \
void remove(const_reference v) \ void remove(const_reference v) \
{ DeleteObject((const_base_reference)v); } \ { DeleteObject((const_base_reference)v); } \

View File

@ -5,7 +5,7 @@
// Author: Jeffrey C. Ollie <jeff@ollie.clive.ia.us>, Vadim Zeitlin // Author: Jeffrey C. Ollie <jeff@ollie.clive.ia.us>, Vadim Zeitlin
// Modified by: // Modified by:
// Created: 10.02.99 // Created: 10.02.99
// RCS-ID: $Id: longlong.h 53135 2008-04-12 02:31:04Z VZ $ // RCS-ID: $Id: longlong.h 54663 2008-07-16 15:22:22Z VZ $
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> // Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -113,9 +113,9 @@ public:
// from long long // from long long
wxLongLongNative(wxLongLong_t ll) : m_ll(ll) { } wxLongLongNative(wxLongLong_t ll) : m_ll(ll) { }
// from 2 longs // from 2 longs
wxLongLongNative(long hi, unsigned long lo) : m_ll(0) wxLongLongNative(wxInt32 hi, wxUint32 lo)
{ {
// assign first to avoid precision loss! // cast to wxLongLong_t first to avoid precision loss!
m_ll = ((wxLongLong_t) hi) << 32; m_ll = ((wxLongLong_t) hi) << 32;
m_ll |= (wxLongLong_t) lo; m_ll |= (wxLongLong_t) lo;
} }
@ -160,11 +160,11 @@ public:
// accessors // accessors
// get high part // get high part
long GetHi() const wxInt32 GetHi() const
{ return wx_truncate_cast(long, m_ll >> 32); } { return wx_truncate_cast(wxInt32, m_ll >> 32); }
// get low part // get low part
unsigned long GetLo() const wxUint32 GetLo() const
{ return wx_truncate_cast(unsigned long, m_ll); } { return wx_truncate_cast(wxUint32, m_ll); }
// get absolute value // get absolute value
wxLongLongNative Abs() const { return wxLongLongNative(*this).Abs(); } wxLongLongNative Abs() const { return wxLongLongNative(*this).Abs(); }
@ -350,9 +350,9 @@ public:
// from long long // from long long
wxULongLongNative(wxULongLong_t ll) : m_ll(ll) { } wxULongLongNative(wxULongLong_t ll) : m_ll(ll) { }
// from 2 longs // from 2 longs
wxULongLongNative(unsigned long hi, unsigned long lo) : m_ll(0) wxULongLongNative(wxUint32 hi, wxUint32 lo) : m_ll(0)
{ {
// assign first to avoid precision loss! // cast to wxLongLong_t first to avoid precision loss!
m_ll = ((wxULongLong_t) hi) << 32; m_ll = ((wxULongLong_t) hi) << 32;
m_ll |= (wxULongLong_t) lo; m_ll |= (wxULongLong_t) lo;
} }
@ -392,11 +392,11 @@ public:
// accessors // accessors
// get high part // get high part
unsigned long GetHi() const wxUint32 GetHi() const
{ return wx_truncate_cast(unsigned long, m_ll >> 32); } { return wx_truncate_cast(wxUint32, m_ll >> 32); }
// get low part // get low part
unsigned long GetLo() const wxUint32 GetLo() const
{ return wx_truncate_cast(unsigned long, m_ll); } { return wx_truncate_cast(wxUint32, m_ll); }
// convert to native ulong long // convert to native ulong long
wxULongLong_t GetValue() const { return m_ll; } wxULongLong_t GetValue() const { return m_ll; }

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: Agron Selimaj // Modified by: Agron Selimaj
// Created: 01/02/97 // Created: 01/02/97
// RCS-ID: $Id: listctrl.h 51773 2008-02-13 22:46:30Z VZ $ // RCS-ID: $Id: listctrl.h 54419 2008-06-29 01:35:24Z VZ $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -12,7 +12,6 @@
#ifndef _WX_LISTCTRL_H_ #ifndef _WX_LISTCTRL_H_
#define _WX_LISTCTRL_H_ #define _WX_LISTCTRL_H_
#include "wx/dcbuffer.h"
#include "wx/textctrl.h" #include "wx/textctrl.h"
class WXDLLIMPEXP_FWD_CORE wxImageList; class WXDLLIMPEXP_FWD_CORE wxImageList;
@ -342,7 +341,6 @@ public:
bool SortItems(wxListCtrlCompare fn, long data); bool SortItems(wxListCtrlCompare fn, long data);
// IMPLEMENTATION // IMPLEMENTATION
virtual bool MSWDrawSubItem(wxPaintDC& rPainDC, int item, int subitem);
virtual bool MSWCommand(WXUINT param, WXWORD id); virtual bool MSWCommand(WXUINT param, WXWORD id);
virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
virtual bool MSWShouldPreProcessMessage(WXMSG* msg); virtual bool MSWShouldPreProcessMessage(WXMSG* msg);
@ -437,6 +435,11 @@ private:
// UpdateStyle()), only should be called if InReportView() // UpdateStyle()), only should be called if InReportView()
void MSWSetExListStyles(); void MSWSetExListStyles();
// initialize the (already created) m_textCtrl with the associated HWND
void InitEditControl(WXHWND hWnd);
// destroy m_textCtrl if it's currently valid and reset it to NULL
void DeleteEditControl();
DECLARE_DYNAMIC_CLASS(wxListCtrl) DECLARE_DYNAMIC_CLASS(wxListCtrl)
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
// Created: 11.07.97 // Created: 11.07.97
// RCS-ID: $Id: uuid.h 35650 2005-09-23 12:56:45Z MR $ // RCS-ID: $Id: uuid.h 55113 2008-08-18 11:30:10Z VZ $
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> // Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// Licence: wxWindows licence // Licence: wxWindows licence
// //
@ -74,6 +74,12 @@ public:
bool Set(const wxChar *pc); // from a string, returns true if ok bool Set(const wxChar *pc); // from a string, returns true if ok
void Set(const UUID& uuid); // from another UUID (never fails) void Set(const UUID& uuid); // from another UUID (never fails)
#if wxABI_VERSION >= 20809
// comparison operators
bool operator==(const Uuid& uuid) const;
bool operator!=(const Uuid& uuid) const;
#endif // wxABI_VERSION >= 2.8.9
// accessors // accessors
operator const UUID*() const { return &m_uuid; } operator const UUID*() const { return &m_uuid; }
operator const wxChar*() const { return (wxChar *)(m_pszUuid); } operator const wxChar*() const { return (wxChar *)(m_pszUuid); }

View File

@ -1158,19 +1158,19 @@
#define wxUSE_LIBJPEG 1 #define wxUSE_LIBJPEG 1
// Set to 1 for TIFF format support (requires libtiff) // Set to 1 for TIFF format support (requires libtiff)
#define wxUSE_LIBTIFF 1 #define wxUSE_LIBTIFF 0
// Set to 1 for TGA format support (loading only) // Set to 1 for TGA format support (loading only)
#define wxUSE_TGA 1 #define wxUSE_TGA 1
// Set to 1 for GIF format support // Set to 1 for GIF format support
#define wxUSE_GIF 1 #define wxUSE_GIF 0
// Set to 1 for PNM format support // Set to 1 for PNM format support
#define wxUSE_PNM 1 #define wxUSE_PNM 1
// Set to 1 for PCX format support // Set to 1 for PCX format support
#define wxUSE_PCX 1 #define wxUSE_PCX 0
// Set to 1 for IFF format support (Amiga format) // Set to 1 for IFF format support (Amiga format)
#define wxUSE_IFF 0 #define wxUSE_IFF 0

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 01/02/97 // Created: 01/02/97
// RCS-ID: $Id: tbar95.h 44317 2007-01-25 23:35:07Z RD $ // RCS-ID: $Id: tbar95.h 58446 2009-01-26 23:32:16Z VS $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -142,6 +142,9 @@ protected:
wxToolBarToolBase *m_pInTool; wxToolBarToolBase *m_pInTool;
private: private:
// makes sure tool bitmap size is sufficient for all tools
void AdjustToolBitmapSize();
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS(wxToolBar) DECLARE_DYNAMIC_CLASS(wxToolBar)
DECLARE_NO_COPY_CLASS(wxToolBar) DECLARE_NO_COPY_CLASS(wxToolBar)

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
// Created: 2005-03-07 // Created: 2005-03-07
// RCS-ID: $Id: chkconf.h 40023 2006-07-06 07:07:52Z ABX $ // RCS-ID: $Id: chkconf.h 55651 2008-09-16 08:03:55Z VZ $
// Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwindows.org> // Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwindows.org>
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -29,6 +29,16 @@
#undef wxUSE_IPC #undef wxUSE_IPC
#define wxUSE_IPC 0 #define wxUSE_IPC 0
// no AUI under CE: it's unnecessary and currently doesn't compile
#undef wxUSE_AUI
#define wxUSE_AUI 0
// no MDI under CE
#undef wxUSE_MDI
#define wxUSE_MDI 0
#undef wxUSE_MDI_ARCHITECTURE
#define wxUSE_MDI_ARCHITECTURE 0
// metafiles are not supported neither // metafiles are not supported neither
#undef wxUSE_ENH_METAFILE #undef wxUSE_ENH_METAFILE
#define wxUSE_ENH_METAFILE 0 #define wxUSE_ENH_METAFILE 0

View File

@ -1,4 +1,5 @@
// Copyright 1998, Ben Goetter. All rights reserved. // Copyright 1998, Ben Goetter. All rights reserved.
// Also released under wxWindows license - see src/msw/wince/net.cpp
/* /*
patch holes in winsock patch holes in winsock

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 01/02/97 // Created: 01/02/97
// RCS-ID: $Id: prntbase.h 49563 2007-10-31 20:46:21Z VZ $ // RCS-ID: $Id: prntbase.h 54404 2008-06-28 15:32:52Z VS $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -575,6 +575,10 @@ protected:
private: private:
void Init(wxPrintout *printout, wxPrintout *printoutForPrinting); void Init(wxPrintout *printout, wxPrintout *printoutForPrinting);
// helpers for RenderPage():
bool RenderPageIntoDC(wxDC& dc, int pageNum);
bool RenderPageIntoBitmap(wxBitmap& bmp, int pageNum);
DECLARE_NO_COPY_CLASS(wxPrintPreviewBase) DECLARE_NO_COPY_CLASS(wxPrintPreviewBase)
DECLARE_CLASS(wxPrintPreviewBase) DECLARE_CLASS(wxPrintPreviewBase)
}; };

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
// Created: 10.09.00 // Created: 10.09.00
// RCS-ID: $Id: radiobox.h 50255 2007-11-26 13:48:36Z VZ $ // RCS-ID: $Id: radiobox.h 54930 2008-08-02 19:45:23Z VZ $
// Copyright: (c) Vadim Zeitlin // Copyright: (c) Vadim Zeitlin
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -49,7 +49,8 @@ public:
unsigned int GetColumnCount() const { return m_numCols; } unsigned int GetColumnCount() const { return m_numCols; }
unsigned int GetRowCount() const { return m_numRows; } unsigned int GetRowCount() const { return m_numRows; }
// return the item above/below/to the left/right of the given one // return the next active (i.e. shown and not disabled) item above/below/to
// the left/right of the given one
int GetNextItem(int item, wxDirection dir, long style) const; int GetNextItem(int item, wxDirection dir, long style) const;
#if wxUSE_TOOLTIPS #if wxUSE_TOOLTIPS

View File

@ -4,7 +4,7 @@
// Author: Karsten Ballueder // Author: Karsten Ballueder
// Modified by: VZ at 13.07.01 (integrated to wxWin) // Modified by: VZ at 13.07.01 (integrated to wxWin)
// Created: 05.02.2000 // Created: 05.02.2000
// RCS-ID: $Id: regex.h 53135 2008-04-12 02:31:04Z VZ $ // RCS-ID: $Id: regex.h 57779 2009-01-02 17:35:16Z PC $
// Copyright: (c) 2000 Karsten Ballueder <ballueder@gmx.net> // Copyright: (c) 2000 Karsten Ballueder <ballueder@gmx.net>
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -16,7 +16,7 @@
#if wxUSE_REGEX #if wxUSE_REGEX
class WXDLLIMPEXP_FWD_BASE wxString; #include "wx/string.h"
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// constants // constants

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 2005-09-30 // Created: 2005-09-30
// RCS-ID: $Id: richtextbuffer.h 53671 2008-05-20 13:23:07Z JS $ // RCS-ID: $Id: richtextbuffer.h 58841 2009-02-12 10:16:07Z JS $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -73,7 +73,11 @@
// Setting wxRICHTEXT_USE_OWN_CARET to 1 implements a non-flashing // Setting wxRICHTEXT_USE_OWN_CARET to 1 implements a non-flashing
// cursor reliably without using wxClientDC in case there // cursor reliably without using wxClientDC in case there
// are platform-specific problems with the generic caret. // are platform-specific problems with the generic caret.
#if defined(wxMAC_USE_CORE_GRAPHICS) && wxMAC_USE_CORE_GRAPHICS
#define wxRICHTEXT_USE_OWN_CARET 1
#else
#define wxRICHTEXT_USE_OWN_CARET 0 #define wxRICHTEXT_USE_OWN_CARET 0
#endif
// Switch off for binary compatibility, on for faster drawing // Switch off for binary compatibility, on for faster drawing
#define wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING 0 #define wxRICHTEXT_USE_OPTIMIZED_LINE_DRAWING 0
@ -310,7 +314,7 @@ public:
void operator =(const wxRichTextRange& range) { m_start = range.m_start; m_end = range.m_end; } void operator =(const wxRichTextRange& range) { m_start = range.m_start; m_end = range.m_end; }
bool operator ==(const wxRichTextRange& range) const { return (m_start == range.m_start && m_end == range.m_end); } bool operator ==(const wxRichTextRange& range) const { return (m_start == range.m_start && m_end == range.m_end); }
bool operator !=(const wxRichTextRange& range) const { return (m_start != range.m_start && m_end != range.m_end); } bool operator !=(const wxRichTextRange& range) const { return (m_start != range.m_start || m_end != range.m_end); }
wxRichTextRange operator -(const wxRichTextRange& range) const { return wxRichTextRange(m_start - range.m_start, m_end - range.m_end); } wxRichTextRange operator -(const wxRichTextRange& range) const { return wxRichTextRange(m_start - range.m_start, m_end - range.m_end); }
wxRichTextRange operator +(const wxRichTextRange& range) const { return wxRichTextRange(m_start + range.m_start, m_end + range.m_end); } wxRichTextRange operator +(const wxRichTextRange& range) const { return wxRichTextRange(m_start + range.m_start, m_end + range.m_end); }
@ -1067,7 +1071,7 @@ public:
virtual int GetParagraphLength(long paragraphNumber) const; virtual int GetParagraphLength(long paragraphNumber) const;
/// Get the number of paragraphs /// Get the number of paragraphs
virtual int GetParagraphCount() const { return GetChildCount(); } virtual int GetParagraphCount() const { return wx_static_cast(int, GetChildCount()); }
/// Get the number of visible lines /// Get the number of visible lines
virtual int GetLineCount() const; virtual int GetLineCount() const;

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 2005-09-30 // Created: 2005-09-30
// RCS-ID: $Id: richtextctrl.h 52136 2008-02-27 08:54:40Z JS $ // RCS-ID: $Id: richtextctrl.h 58256 2009-01-21 12:05:11Z JS $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -38,6 +38,8 @@ class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextStyleDefinition;
#define wxRE_READONLY 0x0010 #define wxRE_READONLY 0x0010
#define wxRE_MULTILINE 0x0020 #define wxRE_MULTILINE 0x0020
#define wxRE_CENTRE_CARET 0x8000
#define wxRE_CENTER_CARET wxRE_CENTRE_CARET
/* Flags /* Flags
*/ */

View File

@ -3,7 +3,7 @@
// Purpose: Rich text printing classes // Purpose: Rich text printing classes
// Author: Julian Smart // Author: Julian Smart
// Created: 2006-10-23 // Created: 2006-10-23
// RCS-ID: $Id: richtextprint.h 43603 2006-11-22 17:11:53Z JS $ // RCS-ID: $Id: richtextprint.h 55146 2008-08-21 16:07:54Z JS $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -119,7 +119,7 @@ public:
const wxRichTextHeaderFooterData& GetHeaderFooterData() const { return m_headerFooterData; } const wxRichTextHeaderFooterData& GetHeaderFooterData() const { return m_headerFooterData; }
/// Sets margins in 10ths of millimetre. Defaults to 1 inch for margins. /// Sets margins in 10ths of millimetre. Defaults to 1 inch for margins.
void SetMargins(int top = 252, int bottom = 252, int left = 252, int right = 252); void SetMargins(int top = 254, int bottom = 254, int left = 254, int right = 254);
/// Calculate scaling and rectangles, setting the device context scaling /// Calculate scaling and rectangles, setting the device context scaling
void CalculateScaling(wxDC* dc, wxRect& textRect, wxRect& headerRect, wxRect& footerRect); void CalculateScaling(wxDC* dc, wxRect& textRect, wxRect& headerRect, wxRect& footerRect);

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 10/5/2006 3:11:58 PM // Created: 10/5/2006 3:11:58 PM
// RCS-ID: $Id: richtextsymboldlg.h 50950 2007-12-30 16:11:12Z JS $ // RCS-ID: $Id: richtextsymboldlg.h 58466 2009-01-27 19:19:40Z BP $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -43,7 +43,7 @@ class wxSymbolListCtrl;
*/ */
#define SYMBOL_WXSYMBOLPICKERDIALOG_STYLE (wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxCLOSE_BOX) #define SYMBOL_WXSYMBOLPICKERDIALOG_STYLE (wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxCLOSE_BOX)
#define SYMBOL_WXSYMBOLPICKERDIALOG_TITLE _("Symbols") #define SYMBOL_WXSYMBOLPICKERDIALOG_TITLE wxGetTranslation(wxT("Symbols"))
#define SYMBOL_WXSYMBOLPICKERDIALOG_IDNAME ID_SYMBOLPICKERDIALOG #define SYMBOL_WXSYMBOLPICKERDIALOG_IDNAME ID_SYMBOLPICKERDIALOG
#define SYMBOL_WXSYMBOLPICKERDIALOG_SIZE wxSize(400, 300) #define SYMBOL_WXSYMBOLPICKERDIALOG_SIZE wxSize(400, 300)
#define SYMBOL_WXSYMBOLPICKERDIALOG_POSITION wxDefaultPosition #define SYMBOL_WXSYMBOLPICKERDIALOG_POSITION wxDefaultPosition

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 01/02/97 // Created: 01/02/97
// RCS-ID: $Id: settings.h 49563 2007-10-31 20:46:21Z VZ $ // RCS-ID: $Id: settings.h 57542 2008-12-25 13:03:24Z VZ $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -79,6 +79,7 @@ enum wxSystemColour
wxSYS_COLOUR_GRADIENTINACTIVECAPTION, wxSYS_COLOUR_GRADIENTINACTIVECAPTION,
wxSYS_COLOUR_MENUHILIGHT, wxSYS_COLOUR_MENUHILIGHT,
wxSYS_COLOUR_MENUBAR, wxSYS_COLOUR_MENUBAR,
wxSYS_COLOUR_LISTBOXTEXT,
wxSYS_COLOUR_MAX wxSYS_COLOUR_MAX
}; };

View File

@ -999,7 +999,7 @@
// //
// Recommended setting: 1, set to 0 if you want compile a // Recommended setting: 1, set to 0 if you want compile a
// smaller library. // smaller library.
#define wxUSE_RICHTEXT 0 #define wxUSE_RICHTEXT 1
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Data transfer // Data transfer
@ -1284,14 +1284,14 @@
// //
// Recommended setting: 1, only set it to 0 if your compiler doesn't have // Recommended setting: 1, only set it to 0 if your compiler doesn't have
// or can't compile <richedit.h> // or can't compile <richedit.h>
#define wxUSE_RICHEDIT 0 #define wxUSE_RICHEDIT 1
// Set this to 1 to use extra features of richedit v2 and later controls // Set this to 1 to use extra features of richedit v2 and later controls
// //
// Default is 1 for compilers which support it // Default is 1 for compilers which support it
// //
// Recommended setting: 1 // Recommended setting: 1
#define wxUSE_RICHEDIT2 0 #define wxUSE_RICHEDIT2 1
// Set this to 1 to enable support for the owner-drawn menu and listboxes. This // Set this to 1 to enable support for the owner-drawn menu and listboxes. This
// is required by wxUSE_CHECKLISTBOX. // is required by wxUSE_CHECKLISTBOX.

View File

@ -1221,16 +1221,16 @@
#define wxUSE_LIBJPEG 1 #define wxUSE_LIBJPEG 1
// Set to 1 for TIFF format support (requires libtiff) // Set to 1 for TIFF format support (requires libtiff)
#define wxUSE_LIBTIFF 1 #define wxUSE_LIBTIFF 0
// Set to 1 for GIF format support // Set to 1 for GIF format support
#define wxUSE_GIF 1 #define wxUSE_GIF 0
// Set to 1 for PNM format support // Set to 1 for PNM format support
#define wxUSE_PNM 1 #define wxUSE_PNM 1
// Set to 1 for PCX format support // Set to 1 for PCX format support
#define wxUSE_PCX 1 #define wxUSE_PCX 0
// Set to 1 for IFF format support (Amiga format) // Set to 1 for IFF format support (Amiga format)
#define wxUSE_IFF 0 #define wxUSE_IFF 0
@ -1289,8 +1289,8 @@
#define wxUSE_RICHEDIT2 0 // currently not supported #define wxUSE_RICHEDIT2 0 // currently not supported
#else #else
#define wxUSE_RICHEDIT 0 #define wxUSE_RICHEDIT 1
#define wxUSE_RICHEDIT2 0 #define wxUSE_RICHEDIT2 1
#endif #endif
// Set this to 1 to enable support for the owner-drawn menu and listboxes. // Set this to 1 to enable support for the owner-drawn menu and listboxes.

View File

@ -4,7 +4,7 @@
* Author: Julian Smart * Author: Julian Smart
* Modified by: Ryan Norton (Converted to C) * Modified by: Ryan Norton (Converted to C)
* Created: 29/01/98 * Created: 29/01/98
* RCS-ID: $Id: version.h 53651 2008-05-19 19:09:22Z CE $ * RCS-ID: $Id: version.h 58872 2009-02-13 09:18:23Z CE $
* Copyright: (c) 1998 Julian Smart * Copyright: (c) 1998 Julian Smart
* Licence: wxWindows licence * Licence: wxWindows licence
*/ */
@ -28,9 +28,9 @@
/* NB: this file is parsed by automatic tools so don't change its format! */ /* NB: this file is parsed by automatic tools so don't change its format! */
#define wxMAJOR_VERSION 2 #define wxMAJOR_VERSION 2
#define wxMINOR_VERSION 8 #define wxMINOR_VERSION 8
#define wxRELEASE_NUMBER 8 #define wxRELEASE_NUMBER 10
#define wxSUBRELEASE_NUMBER 0 #define wxSUBRELEASE_NUMBER 0
#define wxVERSION_STRING _T("wxWidgets 2.8.8") #define wxVERSION_STRING _T("wxWidgets 2.8.10")
/* nothing to update below this line when updating the version */ /* nothing to update below this line when updating the version */
/* ---------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------------- */

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: Ron Lee // Modified by: Ron Lee
// Created: 01/02/97 // Created: 01/02/97
// RCS-ID: $Id: window.h 52330 2008-03-05 14:19:38Z VS $ // RCS-ID: $Id: window.h 56758 2008-11-13 22:32:21Z VS $
// Copyright: (c) Vadim Zeitlin // Copyright: (c) Vadim Zeitlin
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -1004,14 +1004,21 @@ public:
void SetToolTip( const wxString &tip ); void SetToolTip( const wxString &tip );
// attach a tooltip to the window // attach a tooltip to the window
void SetToolTip( wxToolTip *tip ) { DoSetToolTip(tip); } void SetToolTip( wxToolTip *tip ) { DoSetToolTip(tip); }
#if wxABI_VERSION >= 20809
// more readable synonym for SetToolTip(NULL)
void UnsetToolTip() { SetToolTip(NULL); }
#endif // wxABI_VERSION >= 2.8.9
// get the associated tooltip or NULL if none // get the associated tooltip or NULL if none
wxToolTip* GetToolTip() const { return m_tooltip; } wxToolTip* GetToolTip() const { return m_tooltip; }
wxString GetToolTipText() const ; wxString GetToolTipText() const ;
#else #else // !wxUSE_TOOLTIPS
// make it much easier to compile apps in an environment // make it much easier to compile apps in an environment
// that doesn't support tooltips, such as PocketPC // that doesn't support tooltips, such as PocketPC
inline void SetToolTip( const wxString & WXUNUSED(tip) ) {} void SetToolTip( const wxString & WXUNUSED(tip) ) {}
#endif // wxUSE_TOOLTIPS #if wxABI_VERSION >= 20809
void UnsetToolTip() { }
#endif // wxABI_VERSION >= 2.8.9
#endif // wxUSE_TOOLTIPS/!wxUSE_TOOLTIPS
// drag and drop // drag and drop
// ------------- // -------------
@ -1020,6 +1027,14 @@ public:
// NULL; it's owned by the window and will be deleted by it) // NULL; it's owned by the window and will be deleted by it)
virtual void SetDropTarget( wxDropTarget *dropTarget ) = 0; virtual void SetDropTarget( wxDropTarget *dropTarget ) = 0;
virtual wxDropTarget *GetDropTarget() const { return m_dropTarget; } virtual wxDropTarget *GetDropTarget() const { return m_dropTarget; }
#ifndef __WXMSW__ // MSW version is in msw/window.h
#if wxABI_VERSION >= 20810
// Accept files for dragging
void DragAcceptFiles(bool accept);
#endif // wxABI_VERSION >= 20810
#endif // !__WXMSW__
#endif // wxUSE_DRAG_AND_DROP #endif // wxUSE_DRAG_AND_DROP
// constraints and sizers // constraints and sizers

View File

@ -3,7 +3,7 @@
// Purpose: XML resources // Purpose: XML resources
// Author: Vaclav Slavik // Author: Vaclav Slavik
// Created: 2000/03/05 // Created: 2000/03/05
// RCS-ID: $Id: xmlres.h 49563 2007-10-31 20:46:21Z VZ $ // RCS-ID: $Id: xmlres.h 55504 2008-09-07 09:15:46Z VS $
// Copyright: (c) 2000 Vaclav Slavik // Copyright: (c) 2000 Vaclav Slavik
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -128,8 +128,6 @@ public:
// Destructor. // Destructor.
virtual ~wxXmlResource(); virtual ~wxXmlResource();
wxXmlNode *GetFirstRoot();
// Loads resources from XML files that match given filemask. // Loads resources from XML files that match given filemask.
// This method understands VFS (see filesys.h). // This method understands VFS (see filesys.h).
bool Load(const wxString& filemask); bool Load(const wxString& filemask);

View File

@ -4,7 +4,7 @@
// Author: Guilhem Lavaux // Author: Guilhem Lavaux
// Modified by: Mike Wetherell // Modified by: Mike Wetherell
// Created: 11/07/98 // Created: 11/07/98
// RCS-ID: $Id: zstream.h 42713 2006-10-30 11:56:12Z ABX $ // RCS-ID: $Id: zstream.h 54688 2008-07-18 08:06:44Z MW $
// Copyright: (c) Guilhem Lavaux // Copyright: (c) Guilhem Lavaux
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -125,11 +125,11 @@ public:
wxFilterInputStream *NewStream(wxInputStream& stream) const wxFilterInputStream *NewStream(wxInputStream& stream) const
{ return new wxZlibInputStream(stream); } { return new wxZlibInputStream(stream); }
wxFilterOutputStream *NewStream(wxOutputStream& stream) const wxFilterOutputStream *NewStream(wxOutputStream& stream) const
{ return new wxZlibOutputStream(stream, -1); } { return new wxZlibOutputStream(stream, -1, wxZLIB_GZIP); }
wxFilterInputStream *NewStream(wxInputStream *stream) const wxFilterInputStream *NewStream(wxInputStream *stream) const
{ return new wxZlibInputStream(stream); } { return new wxZlibInputStream(stream); }
wxFilterOutputStream *NewStream(wxOutputStream *stream) const wxFilterOutputStream *NewStream(wxOutputStream *stream) const
{ return new wxZlibOutputStream(stream, -1); } { return new wxZlibOutputStream(stream, -1, wxZLIB_GZIP); }
const wxChar * const *GetProtocols(wxStreamProtocolType type const wxChar * const *GetProtocols(wxStreamProtocolType type
= wxSTREAM_PROTOCOL) const; = wxSTREAM_PROTOCOL) const;

View File

@ -1158,19 +1158,19 @@
#define wxUSE_LIBJPEG 1 #define wxUSE_LIBJPEG 1
// Set to 1 for TIFF format support (requires libtiff) // Set to 1 for TIFF format support (requires libtiff)
#define wxUSE_LIBTIFF 1 #define wxUSE_LIBTIFF 0
// Set to 1 for TGA format support (loading only) // Set to 1 for TGA format support (loading only)
#define wxUSE_TGA 1 #define wxUSE_TGA 1
// Set to 1 for GIF format support // Set to 1 for GIF format support
#define wxUSE_GIF 1 #define wxUSE_GIF 0
// Set to 1 for PNM format support // Set to 1 for PNM format support
#define wxUSE_PNM 1 #define wxUSE_PNM 1
// Set to 1 for PCX format support // Set to 1 for PCX format support
#define wxUSE_PCX 1 #define wxUSE_PCX 0
// Set to 1 for IFF format support (Amiga format) // Set to 1 for IFF format support (Amiga format)
#define wxUSE_IFF 0 #define wxUSE_IFF 0

View File

@ -4,7 +4,7 @@
// Author: Vaclav Slavik // Author: Vaclav Slavik
// Modified by: // Modified by:
// Created: 18/03/2002 // Created: 18/03/2002
// RCS-ID: $Id: artprov.cpp 41398 2006-09-23 20:16:18Z VZ $ // RCS-ID: $Id: artprov.cpp 57701 2008-12-31 23:40:06Z VS $
// Copyright: (c) Vaclav Slavik // Copyright: (c) Vaclav Slavik
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -30,6 +30,10 @@
#include "wx/module.h" #include "wx/module.h"
#endif #endif
#ifdef __WXMSW__
#include "wx/msw/wrapwin.h"
#endif
// =========================================================================== // ===========================================================================
// implementation // implementation
// =========================================================================== // ===========================================================================
@ -135,6 +139,11 @@ wxArtProvider::~wxArtProvider()
sm_providers->Append(provider); sm_providers->Append(provider);
} }
/*static*/ void wxArtProvider::PushBack(wxArtProvider *provider)
{
Insert(provider);
}
/*static*/ bool wxArtProvider::Pop() /*static*/ bool wxArtProvider::Pop()
{ {
wxCHECK_MSG( sm_providers, false, _T("no wxArtProvider exists") ); wxCHECK_MSG( sm_providers, false, _T("no wxArtProvider exists") );
@ -272,7 +281,14 @@ wxArtProvider::~wxArtProvider()
else if (client == wxART_MENU) else if (client == wxART_MENU)
return wxSize(16, 15); return wxSize(16, 15);
else if (client == wxART_FRAME_ICON) else if (client == wxART_FRAME_ICON)
return wxSize(16, 15); {
#ifdef __WXMSW__
return wxSize(::GetSystemMetrics(SM_CXSMICON),
::GetSystemMetrics(SM_CYSMICON));
#else
return wxSize(16, 16);
#endif // __WXMSW__/!__WXMSW__
}
else if (client == wxART_CMN_DIALOG || client == wxART_MESSAGE_BOX) else if (client == wxART_CMN_DIALOG || client == wxART_MESSAGE_BOX)
return wxSize(32, 32); return wxSize(32, 32);
else if (client == wxART_HELP_BROWSER) else if (client == wxART_HELP_BROWSER)

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
// Created: 05.01.00 // Created: 05.01.00
// RCS-ID: $Id: cmdline.cpp 42197 2006-10-21 14:04:27Z VZ $ // RCS-ID: $Id: cmdline.cpp 54704 2008-07-19 01:53:04Z VZ $
// Copyright: (c) 2000 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> // Copyright: (c) 2000 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -1235,7 +1235,7 @@ wxArrayString wxCmdLineParser::ConvertStringToArgs(const wxChar *p)
break; break;
} }
lastBS = *p == _T('\\'); lastBS = !lastBS && *p == _T('\\');
arg += *p; arg += *p;
} }

View File

@ -4,7 +4,7 @@
// Author: Jaakko Salli // Author: Jaakko Salli
// Modified by: // Modified by:
// Created: Apr-30-2006 // Created: Apr-30-2006
// RCS-ID: $Id: combocmn.cpp 45512 2007-04-16 20:51:27Z RD $ // RCS-ID: $Id: combocmn.cpp 55201 2008-08-23 08:20:00Z RR $
// Copyright: (c) 2005 Jaakko Salli // Copyright: (c) 2005 Jaakko Salli
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -1138,6 +1138,8 @@ bool wxComboCtrlBase::Enable(bool enable)
m_btn->Enable(enable); m_btn->Enable(enable);
if ( m_text ) if ( m_text )
m_text->Enable(enable); m_text->Enable(enable);
Refresh();
return true; return true;
} }
@ -1194,16 +1196,15 @@ void wxComboCtrlBase::SetValidator(const wxValidator& validator)
if ( textCtrl ) if ( textCtrl )
textCtrl->SetValidator( validator ); textCtrl->SetValidator( validator );
else
wxControl::SetValidator( validator );
} }
wxValidator* wxComboCtrlBase::GetValidator() wxValidator* wxComboCtrlBase::GetValidator()
{ {
wxTextCtrl* textCtrl = GetTextCtrl(); wxTextCtrl* textCtrl = GetTextCtrl();
if ( textCtrl ) return textCtrl ? textCtrl->GetValidator() : wxControl::GetValidator();
return textCtrl->GetValidator();
return wxControl::GetValidator();
} }
#endif // wxUSE_VALIDATORS #endif // wxUSE_VALIDATORS

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
// Created: 11.05.99 // Created: 11.05.99
// RCS-ID: $Id: datetime.cpp 53900 2008-06-01 14:37:26Z VZ $ // RCS-ID: $Id: datetime.cpp 58486 2009-01-28 21:52:37Z VZ $
// Copyright: (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> // Copyright: (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// parts of code taken from sndcal library by Scott E. Lee: // parts of code taken from sndcal library by Scott E. Lee:
// //
@ -147,59 +147,26 @@ wxCUSTOM_TYPE_INFO(wxDateTime, wxToStringConverter<wxDateTime> , wxFromStringCon
#if !defined(WX_TIMEZONE) && !defined(WX_GMTOFF_IN_TM) #if !defined(WX_TIMEZONE) && !defined(WX_GMTOFF_IN_TM)
#if defined(__WXPALMOS__) #if defined(__WXPALMOS__)
#define WX_GMTOFF_IN_TM #define WX_GMTOFF_IN_TM
#elif defined(__BORLANDC__) || defined(__MINGW32__) || defined(__VISAGECPP__) #elif defined(__WXMSW__)
static long wxGetTimeZone()
{
static long s_timezone = MAXLONG; // invalid timezone
if (s_timezone == MAXLONG)
{
TIME_ZONE_INFORMATION info;
GetTimeZoneInformation(&info);
s_timezone = info.Bias * 60; // convert minutes to seconds
}
return s_timezone;
}
#define WX_TIMEZONE wxGetTimeZone()
#elif defined(__VISAGECPP__)
#define WX_TIMEZONE _timezone #define WX_TIMEZONE _timezone
#elif defined(__MWERKS__) #elif defined(__MWERKS__)
long wxmw_timezone = 28800; long wxmw_timezone = 28800;
#define WX_TIMEZONE wxmw_timezone #define WX_TIMEZONE wxmw_timezone
#elif defined(__DJGPP__) || defined(__WINE__)
#include <sys/timeb.h>
#include <values.h>
static long wxGetTimeZone()
{
static long timezone = MAXLONG; // invalid timezone
if (timezone == MAXLONG)
{
struct timeb tb;
ftime(&tb);
timezone = tb.timezone;
}
return timezone;
}
#define WX_TIMEZONE wxGetTimeZone()
#elif defined(__DARWIN__) #elif defined(__DARWIN__)
#define WX_GMTOFF_IN_TM #define WX_GMTOFF_IN_TM
#elif defined(__WXWINCE__) && defined(__VISUALC8__)
// _timezone is not present in dynamic run-time library
#if 0
// Solution (1): use the function equivalent of _timezone
static long wxGetTimeZone()
{
static long s_Timezone = MAXLONG; // invalid timezone
if (s_Timezone == MAXLONG)
{
int t;
_get_timezone(& t);
s_Timezone = (long) t;
}
return s_Timezone;
}
#define WX_TIMEZONE wxGetTimeZone()
#elif 1
// Solution (2): using GetTimeZoneInformation
static long wxGetTimeZone()
{
static long timezone = MAXLONG; // invalid timezone
if (timezone == MAXLONG)
{
TIME_ZONE_INFORMATION tzi;
::GetTimeZoneInformation(&tzi);
timezone = tzi.Bias;
}
return timezone;
}
#define WX_TIMEZONE wxGetTimeZone()
#endif
#else // unknown platform - try timezone #else // unknown platform - try timezone
#define WX_TIMEZONE timezone #define WX_TIMEZONE timezone
#endif #endif
@ -1272,6 +1239,17 @@ wxDateTime wxDateTime::GetBeginDST(int year, Country country)
wxFAIL_MSG( _T("no first Sunday in April?") ); wxFAIL_MSG( _T("no first Sunday in April?") );
} }
} }
else if ( year > 2006 )
// Energy Policy Act of 2005, Pub. L. no. 109-58, 119 Stat 594 (2005).
// Starting in 2007, daylight time begins in the United States on the
// second Sunday in March and ends on the first Sunday in November
{
if ( !dt.SetToWeekDay(Sun, 2, Mar, year) )
{
// weird...
wxFAIL_MSG( _T("no second Sunday in March?") );
}
}
else else
{ {
if ( !dt.SetToWeekDay(Sun, 1, Apr, year) ) if ( !dt.SetToWeekDay(Sun, 1, Apr, year) )
@ -1351,21 +1329,36 @@ wxDateTime wxDateTime::GetEndDST(int year, Country country)
dt.Set(30, Sep, year); dt.Set(30, Sep, year);
break; break;
default: default: // default for switch (year)
// DST ends at 2 a.m. on the last Sunday of October if ( year > 2006 )
if ( !dt.SetToLastWeekDay(Sun, Oct, year) ) // Energy Policy Act of 2005, Pub. L. no. 109-58, 119 Stat 594 (2005).
// Starting in 2007, daylight time begins in the United States on the
// second Sunday in March and ends on the first Sunday in November
{ {
// weirder and weirder... if ( !dt.SetToWeekDay(Sun, 1, Nov, year) )
wxFAIL_MSG( _T("no last Sunday in October?") ); {
// weird...
wxFAIL_MSG( _T("no first Sunday in November?") );
}
}
else
// pre-2007
// DST ends at 2 a.m. on the last Sunday of October
{
if ( !dt.SetToLastWeekDay(Sun, Oct, year) )
{
// weirder and weirder...
wxFAIL_MSG( _T("no last Sunday in October?") );
}
} }
dt += wxTimeSpan::Hours(2); dt += wxTimeSpan::Hours(2);
// TODO what about timezone?? // TODO: what about timezone??
} }
break; break;
default: default: // default for switch (country)
// assume October 26th as the end of the DST - totally bogus too // assume October 26th as the end of the DST - totally bogus too
dt.Set(26, Oct, year); dt.Set(26, Oct, year);
} }
@ -4304,7 +4297,16 @@ enum TimeSpanPart
// %l milliseconds (000 - 999) // %l milliseconds (000 - 999)
wxString wxTimeSpan::Format(const wxChar *format) const wxString wxTimeSpan::Format(const wxChar *format) const
{ {
wxCHECK_MSG( format, wxEmptyString, _T("NULL format in wxTimeSpan::Format") ); // we deal with only positive time spans here and just add the sign in
// front for the negative ones
if ( IsNegative() )
{
wxString str(Negate().Format(format));
return _T("-") + str;
}
wxCHECK_MSG( format, wxEmptyString,
_T("NULL format in wxTimeSpan::Format") );
wxString str; wxString str;
str.Alloc(wxStrlen(format)); str.Alloc(wxStrlen(format));
@ -4374,13 +4376,6 @@ wxString wxTimeSpan::Format(const wxChar *format) const
n = GetHours(); n = GetHours();
if ( partBiggest < Part_Hour ) if ( partBiggest < Part_Hour )
{ {
if ( n < 0 )
{
// the sign has already been taken into account
// when outputting the biggest part
n = -n;
}
n %= HOURS_PER_DAY; n %= HOURS_PER_DAY;
} }
else else
@ -4395,9 +4390,6 @@ wxString wxTimeSpan::Format(const wxChar *format) const
n = GetMilliseconds().ToLong(); n = GetMilliseconds().ToLong();
if ( partBiggest < Part_MSec ) if ( partBiggest < Part_MSec )
{ {
if ( n < 0 )
n = -n;
n %= 1000; n %= 1000;
} }
//else: no need to reset partBiggest to Part_MSec, it is //else: no need to reset partBiggest to Part_MSec, it is
@ -4410,9 +4402,6 @@ wxString wxTimeSpan::Format(const wxChar *format) const
n = GetMinutes(); n = GetMinutes();
if ( partBiggest < Part_Min ) if ( partBiggest < Part_Min )
{ {
if ( n < 0 )
n = -n;
n %= MIN_PER_HOUR; n %= MIN_PER_HOUR;
} }
else else
@ -4427,9 +4416,6 @@ wxString wxTimeSpan::Format(const wxChar *format) const
n = GetSeconds().ToLong(); n = GetSeconds().ToLong();
if ( partBiggest < Part_Sec ) if ( partBiggest < Part_Sec )
{ {
if ( n < 0 )
n = -n;
n %= SEC_PER_MIN; n %= SEC_PER_MIN;
} }
else else
@ -4443,10 +4429,6 @@ wxString wxTimeSpan::Format(const wxChar *format) const
if ( digits ) if ( digits )
{ {
// negative numbers need one extra position for '-' display
if ( n < 0 )
digits++;
fmtPrefix << _T("0") << digits; fmtPrefix << _T("0") << digits;
} }

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
// Created: 05/25/99 // Created: 05/25/99
// RCS-ID: $Id: dcbase.cpp 48616 2007-09-09 19:36:50Z VZ $ // RCS-ID: $Id: dcbase.cpp 56135 2008-10-06 21:04:02Z VZ $
// Copyright: (c) wxWidgets team // Copyright: (c) wxWidgets team
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -1157,3 +1157,18 @@ void wxDCBase::CalculateEllipticPoints( wxList* points,
} // CalculateEllipticPoints } // CalculateEllipticPoints
#endif #endif
float wxDCBase::GetFontPointSizeAdjustment(float dpi)
{
// wxMSW has long-standing bug where wxFont point size is interpreted as
// "pixel size corresponding to given point size *on screen*". In other
// words, on a typical 600dpi printer and a typical 96dpi screen, fonts
// are ~6 times smaller when printing. Unfortunately, this bug is so severe
// that *all* printing code has to account for it and consequently, other
// ports need to emulate this bug too:
const wxSize screenPixels = wxGetDisplaySize();
const wxSize screenMM = wxGetDisplaySizeMM();
const float screenPPI_y = (screenPixels.y * 25.4) / screenMM.y;
return screenPPI_y / dpi;
}

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 01/02/97 // Created: 01/02/97
// RCS-ID: $Id: event.cpp 51404 2008-01-27 12:57:04Z VZ $ // RCS-ID: $Id: event.cpp 56712 2008-11-08 22:41:10Z VZ $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -34,6 +34,7 @@
#include "wx/module.h" #include "wx/module.h"
#if wxUSE_GUI #if wxUSE_GUI
#include "wx/window.h"
#include "wx/control.h" #include "wx/control.h"
#include "wx/dc.h" #include "wx/dc.h"
#include "wx/textctrl.h" #include "wx/textctrl.h"
@ -1039,7 +1040,7 @@ wxEvtHandler::wxEvtHandler()
m_eventsLocker = new wxCriticalSection; m_eventsLocker = new wxCriticalSection;
# endif # endif
#endif #endif
// no client data (yet) // no client data (yet)
m_clientData = NULL; m_clientData = NULL;
m_clientDataType = wxClientData_None; m_clientDataType = wxClientData_None;
@ -1141,8 +1142,6 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event)
m_pendingEvents->Append(eventCopy); m_pendingEvents->Append(eventCopy);
wxLEAVE_CRIT_SECT( Lock() );
// 2) Add this event handler to list of event handlers that // 2) Add this event handler to list of event handlers that
// have pending events. // have pending events.
@ -1154,6 +1153,8 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event)
wxLEAVE_CRIT_SECT(*wxPendingEventsLocker); wxLEAVE_CRIT_SECT(*wxPendingEventsLocker);
wxLEAVE_CRIT_SECT( Lock() );
// 3) Inform the system that new pending events are somewhere, // 3) Inform the system that new pending events are somewhere,
// and that these should be processed in idle time. // and that these should be processed in idle time.
wxWakeUpIdle(); wxWakeUpIdle();
@ -1165,7 +1166,7 @@ void wxEvtHandler::ProcessPendingEvents()
// pending events // pending events
wxCHECK_RET( m_pendingEvents, wxCHECK_RET( m_pendingEvents,
wxT("Please call wxApp::ProcessPendingEvents() instead") ); wxT("Please call wxApp::ProcessPendingEvents() instead") );
wxENTER_CRIT_SECT( Lock() ); wxENTER_CRIT_SECT( Lock() );
// we leave the loop once we have processed all events that were present at // we leave the loop once we have processed all events that were present at

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 29/01/98 // Created: 29/01/98
// RCS-ID: $Id: filefn.cpp 51858 2008-02-17 09:16:11Z SC $ // RCS-ID: $Id: filefn.cpp 58220 2009-01-19 11:40:24Z VZ $
// Copyright: (c) 1998 Julian Smart // Copyright: (c) 1998 Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -1493,7 +1493,7 @@ wxChar *wxDoGetCwd(wxChar *buf, int sz)
{ {
sz -= 3; sz -= 3;
rc = ::DosQueryCurrentDir( 0 // current drive rc = ::DosQueryCurrentDir( 0 // current drive
,cbuf + 3 ,(PBYTE)cbuf + 3
,(PULONG)&sz ,(PULONG)&sz
); );
cbuf[0] = char('A' + (ulDriveNum - 1)); cbuf[0] = char('A' + (ulDriveNum - 1));

View File

@ -4,7 +4,7 @@
// Author: Robert Roebling, Vadim Zeitlin // Author: Robert Roebling, Vadim Zeitlin
// Modified by: // Modified by:
// Created: 28.12.2000 // Created: 28.12.2000
// RCS-ID: $Id: filename.cpp 52996 2008-04-03 12:47:16Z VZ $ // RCS-ID: $Id: filename.cpp 58751 2009-02-08 10:05:28Z VZ $
// Copyright: (c) 2000 Robert Roebling // Copyright: (c) 2000 Robert Roebling
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -704,7 +704,6 @@ static wxString wxCreateTempImpl(
WXFILEARGS(wxFile *fileTemp, wxFFile *ffileTemp), WXFILEARGS(wxFile *fileTemp, wxFFile *ffileTemp),
bool *deleteOnClose = NULL) bool *deleteOnClose = NULL)
{ {
static int pid = -1;
#if wxUSE_FILE && wxUSE_FFILE #if wxUSE_FILE && wxUSE_FFILE
wxASSERT(fileTemp == NULL || ffileTemp == NULL); wxASSERT(fileTemp == NULL || ffileTemp == NULL);
#endif #endif
@ -823,11 +822,7 @@ static wxString wxCreateTempImpl(
#else // !HAVE_MKTEMP (includes __DOS__) #else // !HAVE_MKTEMP (includes __DOS__)
// generate the unique file name ourselves // generate the unique file name ourselves
#if !defined(__DOS__) && !defined(__PALMOS__) && (!defined(__MWERKS__) || defined(__DARWIN__) ) #if !defined(__DOS__) && !defined(__PALMOS__) && (!defined(__MWERKS__) || defined(__DARWIN__) )
path << (unsigned int)getpid();
if(pid < 0)
pid = getpid();
path << (unsigned int)pid;
#endif #endif
wxString pathTry; wxString pathTry;
@ -1266,11 +1261,6 @@ bool wxFileName::Normalize(int flags,
} }
} }
if ( (flags & wxPATH_NORM_CASE) && !IsCaseSensitive(format) )
{
dir.MakeLower();
}
m_dirs.Add(dir); m_dirs.Add(dir);
} }
@ -1280,26 +1270,12 @@ bool wxFileName::Normalize(int flags,
wxString filename; wxString filename;
if (GetShortcutTarget(GetFullPath(format), filename)) if (GetShortcutTarget(GetFullPath(format), filename))
{ {
// Repeat this since we may now have a new path
if ( (flags & wxPATH_NORM_CASE) && !IsCaseSensitive(format) )
{
filename.MakeLower();
}
m_relative = false; m_relative = false;
Assign(filename); Assign(filename);
} }
} }
#endif #endif
if ( (flags & wxPATH_NORM_CASE) && !IsCaseSensitive(format) )
{
// VZ: expand env vars here too?
m_volume.MakeLower();
m_name.MakeLower();
m_ext.MakeLower();
}
#if defined(__WIN32__) #if defined(__WIN32__)
if ( (flags & wxPATH_NORM_LONG) && (format == wxPATH_DOS) ) if ( (flags & wxPATH_NORM_LONG) && (format == wxPATH_DOS) )
{ {
@ -1307,6 +1283,22 @@ bool wxFileName::Normalize(int flags,
} }
#endif // Win32 #endif // Win32
// Change case (this should be kept at the end of the function, to ensure
// that the path doesn't change any more after we normalize its case)
if ( (flags & wxPATH_NORM_CASE) && !IsCaseSensitive(format) )
{
m_volume.MakeLower();
m_name.MakeLower();
m_ext.MakeLower();
// directory entries must be made lower case as well
count = m_dirs.GetCount();
for ( size_t i = 0; i < count; i++ )
{
m_dirs[i].MakeLower();
}
}
return true; return true;
} }
@ -2255,7 +2247,7 @@ bool wxFileName::GetTimes(wxDateTime *dtAccess,
// not 9x // not 9x
bool ok; bool ok;
FILETIME ftAccess, ftCreate, ftWrite; FILETIME ftAccess, ftCreate, ftWrite;
if ( IsDir() ) if ( IsDir() )
{ {
// implemented in msw/dir.cpp // implemented in msw/dir.cpp
extern bool wxGetDirectoryTimes(const wxString& dirname, extern bool wxGetDirectoryTimes(const wxString& dirname,

View File

@ -3,7 +3,7 @@
// Purpose: wxFileSystem class - interface for opening files // Purpose: wxFileSystem class - interface for opening files
// Author: Vaclav Slavik // Author: Vaclav Slavik
// Copyright: (c) 1999 Vaclav Slavik // Copyright: (c) 1999 Vaclav Slavik
// CVS-ID: $Id: filesys.cpp 51940 2008-02-20 16:33:55Z VZ $ // CVS-ID: $Id: filesys.cpp 55271 2008-08-26 00:03:04Z VZ $
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -23,6 +23,7 @@
#include "wx/module.h" #include "wx/module.h"
#endif #endif
#include "wx/sysopt.h"
#include "wx/wfstream.h" #include "wx/wfstream.h"
#include "wx/mimetype.h" #include "wx/mimetype.h"
#include "wx/filename.h" #include "wx/filename.h"
@ -62,64 +63,77 @@ wxString wxFileSystemHandler::GetMimeTypeFromExt(const wxString& location)
#if wxUSE_MIMETYPE #if wxUSE_MIMETYPE
static bool s_MinimalMimeEnsured = false; static bool s_MinimalMimeEnsured = false;
if (!s_MinimalMimeEnsured)
{
static const wxFileTypeInfo fallbacks[] =
{
wxFileTypeInfo(_T("image/jpeg"),
wxEmptyString,
wxEmptyString,
_T("JPEG image (from fallback)"),
_T("jpg"), _T("jpeg"), _T("JPG"), _T("JPEG"), NULL),
wxFileTypeInfo(_T("image/gif"),
wxEmptyString,
wxEmptyString,
_T("GIF image (from fallback)"),
_T("gif"), _T("GIF"), NULL),
wxFileTypeInfo(_T("image/png"),
wxEmptyString,
wxEmptyString,
_T("PNG image (from fallback)"),
_T("png"), _T("PNG"), NULL),
wxFileTypeInfo(_T("image/bmp"),
wxEmptyString,
wxEmptyString,
_T("windows bitmap image (from fallback)"),
_T("bmp"), _T("BMP"), NULL),
wxFileTypeInfo(_T("text/html"),
wxEmptyString,
wxEmptyString,
_T("HTML document (from fallback)"),
_T("htm"), _T("html"), _T("HTM"), _T("HTML"), NULL),
// must terminate the table with this!
wxFileTypeInfo()
};
wxTheMimeTypesManager->AddFallbacks(fallbacks);
s_MinimalMimeEnsured = true;
}
wxFileType *ft = wxTheMimeTypesManager->GetFileTypeFromExtension(ext); // Don't use mime types manager if the application doesn't need it and it would be
if ( !ft || !ft -> GetMimeType(&mime) ) // cause an unacceptable delay, especially on startup.
{ bool useMimeTypesManager = true;
mime = wxEmptyString; #if wxUSE_SYSTEM_OPTIONS
} useMimeTypesManager = (wxSystemOptions::GetOptionInt(wxT("filesys.no-mimetypesmanager")) == 0);
delete ft;
return mime;
#else
if ( ext.IsSameAs(wxT("htm"), false) || ext.IsSameAs(_T("html"), false) )
return wxT("text/html");
if ( ext.IsSameAs(wxT("jpg"), false) || ext.IsSameAs(_T("jpeg"), false) )
return wxT("image/jpeg");
if ( ext.IsSameAs(wxT("gif"), false) )
return wxT("image/gif");
if ( ext.IsSameAs(wxT("png"), false) )
return wxT("image/png");
if ( ext.IsSameAs(wxT("bmp"), false) )
return wxT("image/bmp");
return wxEmptyString;
#endif #endif
if (useMimeTypesManager)
{
if (!s_MinimalMimeEnsured)
{
static const wxFileTypeInfo fallbacks[] =
{
wxFileTypeInfo(_T("image/jpeg"),
wxEmptyString,
wxEmptyString,
_T("JPEG image (from fallback)"),
_T("jpg"), _T("jpeg"), _T("JPG"), _T("JPEG"), NULL),
wxFileTypeInfo(_T("image/gif"),
wxEmptyString,
wxEmptyString,
_T("GIF image (from fallback)"),
_T("gif"), _T("GIF"), NULL),
wxFileTypeInfo(_T("image/png"),
wxEmptyString,
wxEmptyString,
_T("PNG image (from fallback)"),
_T("png"), _T("PNG"), NULL),
wxFileTypeInfo(_T("image/bmp"),
wxEmptyString,
wxEmptyString,
_T("windows bitmap image (from fallback)"),
_T("bmp"), _T("BMP"), NULL),
wxFileTypeInfo(_T("text/html"),
wxEmptyString,
wxEmptyString,
_T("HTML document (from fallback)"),
_T("htm"), _T("html"), _T("HTM"), _T("HTML"), NULL),
// must terminate the table with this!
wxFileTypeInfo()
};
wxTheMimeTypesManager->AddFallbacks(fallbacks);
s_MinimalMimeEnsured = true;
}
wxFileType *ft = wxTheMimeTypesManager->GetFileTypeFromExtension(ext);
if ( !ft || !ft -> GetMimeType(&mime) )
{
mime = wxEmptyString;
}
delete ft;
return mime;
}
else
#endif
{
if ( ext.IsSameAs(wxT("htm"), false) || ext.IsSameAs(_T("html"), false) )
return wxT("text/html");
if ( ext.IsSameAs(wxT("jpg"), false) || ext.IsSameAs(_T("jpeg"), false) )
return wxT("image/jpeg");
if ( ext.IsSameAs(wxT("gif"), false) )
return wxT("image/gif");
if ( ext.IsSameAs(wxT("png"), false) )
return wxT("image/png");
if ( ext.IsSameAs(wxT("bmp"), false) )
return wxT("image/bmp");
return wxEmptyString;
}
} }
@ -174,8 +188,10 @@ wxString wxFileSystemHandler::GetAnchor(const wxString& location) const
for (int i = l-1; i >= 0; i--) { for (int i = l-1; i >= 0; i--) {
c = location[i]; c = location[i];
if (c == wxT('#')) return location.Right(l-i-1); if (c == wxT('#'))
else if ((c == wxT('.')) || (c == wxT('/')) || (c == wxT('\\')) || (c == wxT(':'))) return wxEmptyString; return location.Right(l-i-1);
else if ((c == wxT('/')) || (c == wxT('\\')) || (c == wxT(':')))
return wxEmptyString;
} }
return wxEmptyString; return wxEmptyString;
} }

View File

@ -3,7 +3,7 @@
// Purpose: font management for ports that don't have their own // Purpose: font management for ports that don't have their own
// Author: Vaclav Slavik // Author: Vaclav Slavik
// Created: 2006-11-18 // Created: 2006-11-18
// RCS-ID: $Id: fontmgrcmn.cpp 43550 2006-11-20 20:45:57Z VS $ // RCS-ID: $Id: fontmgrcmn.cpp 54757 2008-07-21 17:34:48Z VZ $
// Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com) // Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com)
// (c) 2006 REA Elektronik GmbH // (c) 2006 REA Elektronik GmbH
// Licence: wxWindows licence // Licence: wxWindows licence
@ -24,9 +24,15 @@
WX_DECLARE_LIST(wxFontInstance, wxFontInstanceList); WX_DECLARE_LIST(wxFontInstance, wxFontInstanceList);
WX_DEFINE_LIST(wxFontInstanceList) WX_DEFINE_LIST(wxFontInstanceList)
WX_DEFINE_LIST(wxFontBundleList) WX_DEFINE_LIST(wxFontBundleList)
WX_DECLARE_HASH_MAP(wxString, wxFontBundle*, WX_DECLARE_HASH_MAP(wxString, wxFontBundle*,
wxStringHash, wxStringEqual, wxStringHash, wxStringEqual,
wxFontBundleHash); wxFontBundleHashBase);
// in STL build, hash class is typedef to a template, so it can't be forward
// declared, as we do; solve it by having a dummy class:
class wxFontBundleHash : public wxFontBundleHashBase
{
};
// ============================================================================ // ============================================================================
// implementation // implementation
@ -65,17 +71,14 @@ wxFontInstance *wxFontFaceBase::GetFontInstance(float ptSize, bool aa)
{ {
wxASSERT_MSG( m_refCnt > 0, _T("font library not loaded!") ); wxASSERT_MSG( m_refCnt > 0, _T("font library not loaded!") );
wxFontInstance *i; for ( wxFontInstanceList::const_iterator i = m_instances->begin();
wxFontInstanceList::Node *node; i != m_instances->end(); ++i )
for ( node = m_instances->GetFirst(); node; node = node->GetNext() )
{ {
i = node->GetData(); if ( (*i)->GetPointSize() == ptSize && (*i)->IsAntiAliased() == aa )
if ( i->GetPointSize() == ptSize && i->IsAntiAliased() == aa ) return *i;
return i;
} }
i = CreateFontInstance(ptSize, aa); wxFontInstance *i = CreateFontInstance(ptSize, aa);
m_instances->Append(i); m_instances->Append(i);
return i; return i;
} }

View File

@ -6,7 +6,7 @@
// //
// Author: Robin Dunn // Author: Robin Dunn
// Created: 03-Nov-2003 // Created: 03-Nov-2003
// RCS-ID: $Id: gbsizer.cpp 53000 2008-04-03 23:28:16Z RD $ // RCS-ID: $Id: gbsizer.cpp 54568 2008-07-10 01:32:23Z RD $
// Copyright: (c) Robin Dunn // Copyright: (c) Robin Dunn
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -580,7 +580,7 @@ void wxGridBagSizer::AdjustForOverflow()
{ {
wxGBPosition pos(row,col); wxGBPosition pos(row,col);
wxGBSizerItem* item = FindItemAtPosition(pos); wxGBSizerItem* item = FindItemAtPosition(pos);
if ( !item ) if ( !item || !item->ShouldAccountFor() )
continue; continue;
int endrow, endcol; int endrow, endcol;
@ -623,7 +623,7 @@ void wxGridBagSizer::AdjustForOverflow()
{ {
wxGBPosition pos(row,col); wxGBPosition pos(row,col);
wxGBSizerItem* item = FindItemAtPosition(pos); wxGBSizerItem* item = FindItemAtPosition(pos);
if ( !item ) if ( !item || !item->ShouldAccountFor() )
continue; continue;
int endrow, endcol; int endrow, endcol;

View File

@ -3,7 +3,7 @@
// Purpose: wxGIFDecoder, GIF reader for wxImage and wxAnimation // Purpose: wxGIFDecoder, GIF reader for wxImage and wxAnimation
// Author: Guillermo Rodriguez Garcia <guille@iies.es> // Author: Guillermo Rodriguez Garcia <guille@iies.es>
// Version: 3.04 // Version: 3.04
// RCS-ID: $Id: gifdecod.cpp 43898 2006-12-10 14:18:37Z VZ $ // RCS-ID: $Id: gifdecod.cpp 54944 2008-08-03 00:36:52Z VZ $
// Copyright: (c) Guillermo Rodriguez Garcia // Copyright: (c) Guillermo Rodriguez Garcia
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -186,7 +186,7 @@ bool wxGIFDecoder::ConvertToImage(unsigned int frame, wxImage *image) const
// Get data for current frame // Get data for current frame
wxSize wxGIFDecoder::GetFrameSize(unsigned int frame) const wxSize wxGIFDecoder::GetFrameSize(unsigned int frame) const
{ {
return wxSize(GetFrame(frame)->w, GetFrame(frame)->h); return wxSize(GetFrame(frame)->w, GetFrame(frame)->h);
} }
@ -593,7 +593,7 @@ bool wxGIFDecoder::CanRead(wxInputStream &stream) const
wxGIFErrorCode wxGIFDecoder::LoadGIF(wxInputStream& stream) wxGIFErrorCode wxGIFDecoder::LoadGIF(wxInputStream& stream)
{ {
unsigned int global_ncolors = 0; unsigned int global_ncolors = 0;
int bits, interl, transparent, i; int bits, interl, i;
wxAnimationDisposal disposal; wxAnimationDisposal disposal;
long size; long size;
long delay; long delay;
@ -655,7 +655,7 @@ wxGIFErrorCode wxGIFDecoder::LoadGIF(wxInputStream& stream)
} }
// transparent colour, disposal method and delay default to unused // transparent colour, disposal method and delay default to unused
transparent = -1; int transparent = -1;
disposal = wxANIM_UNSPECIFIED; disposal = wxANIM_UNSPECIFIED;
delay = -1; delay = -1;
@ -705,8 +705,7 @@ wxGIFErrorCode wxGIFDecoder::LoadGIF(wxInputStream& stream)
delay = 10 * (buf[2] + 256 * buf[3]); delay = 10 * (buf[2] + 256 * buf[3]);
// read transparent colour index, if used // read transparent colour index, if used
if (buf[1] & 0x01) transparent = buf[1] & 0x01 ? buf[4] : -1;
transparent = buf[4];
// read disposal method // read disposal method
disposal = (wxAnimationDisposal)(((buf[1] & 0x1C) >> 2) - 1); disposal = (wxAnimationDisposal)(((buf[1] & 0x1C) >> 2) - 1);
@ -756,8 +755,8 @@ wxGIFErrorCode wxGIFDecoder::LoadGIF(wxInputStream& stream)
pimg->w = buf[4] + 256 * buf[5]; pimg->w = buf[4] + 256 * buf[5];
pimg->h = buf[6] + 256 * buf[7]; pimg->h = buf[6] + 256 * buf[7];
if (anim && ((pimg->w == 0) || (pimg->w > (unsigned int)m_szAnimation.GetWidth()) || if (anim && ((pimg->w == 0) || (pimg->w > (unsigned int)m_szAnimation.GetWidth()) ||
(pimg->h == 0) || (pimg->h > (unsigned int)m_szAnimation.GetHeight()))) (pimg->h == 0) || (pimg->h > (unsigned int)m_szAnimation.GetHeight())))
{ {
Destroy(); Destroy();
return wxGIF_INVFORMAT; return wxGIF_INVFORMAT;

View File

@ -4,7 +4,7 @@
// Author: Stefan Csomor // Author: Stefan Csomor
// Modified by: // Modified by:
// Created: // Created:
// RCS-ID: $Id: graphcmn.cpp 49287 2007-10-21 11:52:54Z SC $ // RCS-ID: $Id: graphcmn.cpp 56801 2008-11-16 23:25:09Z KO $
// Copyright: (c) Stefan Csomor // Copyright: (c) Stefan Csomor
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -120,10 +120,12 @@ wxObjectRefData* wxGraphicsObject::CloneRefData(const wxObjectRefData* data) con
IMPLEMENT_DYNAMIC_CLASS(wxGraphicsPen, wxGraphicsObject) IMPLEMENT_DYNAMIC_CLASS(wxGraphicsPen, wxGraphicsObject)
IMPLEMENT_DYNAMIC_CLASS(wxGraphicsBrush, wxGraphicsObject) IMPLEMENT_DYNAMIC_CLASS(wxGraphicsBrush, wxGraphicsObject)
IMPLEMENT_DYNAMIC_CLASS(wxGraphicsFont, wxGraphicsObject) IMPLEMENT_DYNAMIC_CLASS(wxGraphicsFont, wxGraphicsObject)
IMPLEMENT_DYNAMIC_CLASS(wxGraphicsBitmap, wxGraphicsObject)
WXDLLIMPEXP_DATA_CORE(wxGraphicsPen) wxNullGraphicsPen; WXDLLIMPEXP_DATA_CORE(wxGraphicsPen) wxNullGraphicsPen;
WXDLLIMPEXP_DATA_CORE(wxGraphicsBrush) wxNullGraphicsBrush; WXDLLIMPEXP_DATA_CORE(wxGraphicsBrush) wxNullGraphicsBrush;
WXDLLIMPEXP_DATA_CORE(wxGraphicsFont) wxNullGraphicsFont; WXDLLIMPEXP_DATA_CORE(wxGraphicsFont) wxNullGraphicsFont;
WXDLLIMPEXP_DATA_CORE(wxGraphicsBitmap) wxNullGraphicsBitmap;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// matrix // matrix
@ -729,6 +731,11 @@ wxGraphicsFont wxGraphicsContext::CreateFont( const wxFont &font , const wxColou
return GetRenderer()->CreateFont(font,col); return GetRenderer()->CreateFont(font,col);
} }
wxGraphicsBitmap wxGraphicsContext::CreateBitmap( const wxBitmap& bmp ) const
{
return GetRenderer()->CreateBitmap(bmp);
}
wxGraphicsContext* wxGraphicsContext::Create( const wxWindowDC& dc) wxGraphicsContext* wxGraphicsContext::Create( const wxWindowDC& dc)
{ {
return wxGraphicsRenderer::GetDefaultRenderer()->CreateContext(dc); return wxGraphicsRenderer::GetDefaultRenderer()->CreateContext(dc);

View File

@ -2,7 +2,7 @@
// Name: src/common/imagbmp.cpp // Name: src/common/imagbmp.cpp
// Purpose: wxImage BMP,ICO and CUR handlers // Purpose: wxImage BMP,ICO and CUR handlers
// Author: Robert Roebling, Chris Elliott // Author: Robert Roebling, Chris Elliott
// RCS-ID: $Id: imagbmp.cpp 41819 2006-10-09 17:51:07Z VZ $ // RCS-ID: $Id: imagbmp.cpp 54942 2008-08-03 00:23:38Z VZ $
// Copyright: (c) Robert Roebling, Chris Elliott // Copyright: (c) Robert Roebling, Chris Elliott
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -454,9 +454,9 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
wxFileOffset bmpOffset, wxInputStream& stream, wxFileOffset bmpOffset, wxInputStream& stream,
bool verbose, bool IsBmp, bool hasPalette) bool verbose, bool IsBmp, bool hasPalette)
{ {
wxInt32 aDword, rmask = 0, gmask = 0, bmask = 0; wxInt32 aDword, rmask = 0, gmask = 0, bmask = 0, amask = 0;
int rshift = 0, gshift = 0, bshift = 0; int rshift = 0, gshift = 0, bshift = 0, ashift = 0;
int rbits = 0, gbits = 0, bbits = 0; int rbits = 0, gbits = 0, bbits = 0, abits = 0;
wxInt32 dbuf[4]; wxInt32 dbuf[4];
wxInt8 bbuf[4]; wxInt8 bbuf[4];
wxUint8 aByte; wxUint8 aByte;
@ -488,11 +488,29 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
{ {
if ( verbose ) if ( verbose )
wxLogError( _("BMP: Couldn't allocate memory.") ); wxLogError( _("BMP: Couldn't allocate memory.") );
if ( cmap ) delete[] cmap;
delete[] cmap;
return false; return false;
} }
unsigned char *alpha;
if ( bpp == 32 )
{
// tell the image to allocate an alpha buffer
image->SetAlpha();
alpha = image->GetAlpha();
if ( !alpha )
{
if ( verbose )
wxLogError(_("BMP: Couldn't allocate memory."));
delete[] cmap;
return false;
}
}
else // no alpha
{
alpha = NULL;
}
// Reading the palette, if it exists: // Reading the palette, if it exists:
if ( bpp < 16 && ncolors != 0 ) if ( bpp < 16 && ncolors != 0 )
{ {
@ -577,9 +595,13 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
rmask = 0x00FF0000; rmask = 0x00FF0000;
gmask = 0x0000FF00; gmask = 0x0000FF00;
bmask = 0x000000FF; bmask = 0x000000FF;
amask = 0xFF000000;
ashift = 24;
rshift = 16; rshift = 16;
gshift = 8; gshift = 8;
bshift = 0; bshift = 0;
abits = 8;
rbits = 8; rbits = 8;
gbits = 8; gbits = 8;
bbits = 8; bbits = 8;
@ -815,6 +837,11 @@ bool wxBMPHandler::DoLoadDib(wxImage * image, int width, int height,
ptr[poffset + 1] = temp; ptr[poffset + 1] = temp;
temp = (unsigned char)((aDword & bmask) >> bshift); temp = (unsigned char)((aDword & bmask) >> bshift);
ptr[poffset + 2] = temp; ptr[poffset + 2] = temp;
if ( alpha )
{
temp = (unsigned char)((aDword & amask) >> ashift);
alpha[line * width + column] = temp;
}
column++; column++;
} }
} }

View File

@ -2,7 +2,7 @@
// Name: src/common/image.cpp // Name: src/common/image.cpp
// Purpose: wxImage // Purpose: wxImage
// Author: Robert Roebling // Author: Robert Roebling
// RCS-ID: $Id: image.cpp 53245 2008-04-17 15:10:20Z RR $ // RCS-ID: $Id: image.cpp 59197 2009-02-28 15:44:53Z VZ $
// Copyright: (c) Robert Roebling // Copyright: (c) Robert Roebling
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -234,6 +234,7 @@ bool wxImage::Create( int width, int height, unsigned char* data, unsigned char*
M_IMGDATA->m_height = height; M_IMGDATA->m_height = height;
M_IMGDATA->m_ok = true; M_IMGDATA->m_ok = true;
M_IMGDATA->m_static = static_data; M_IMGDATA->m_static = static_data;
M_IMGDATA->m_staticAlpha = static_data;
return true; return true;
} }
@ -1274,7 +1275,6 @@ void wxImage::Paste( const wxImage &image, int x, int y )
(GetMaskGreen()==image.GetMaskGreen()) && (GetMaskGreen()==image.GetMaskGreen()) &&
(GetMaskBlue()==image.GetMaskBlue())))) (GetMaskBlue()==image.GetMaskBlue()))))
{ {
width *= 3;
unsigned char* source_data = image.GetData() + xx*3 + yy*3*image.GetWidth(); unsigned char* source_data = image.GetData() + xx*3 + yy*3*image.GetWidth();
int source_step = image.GetWidth()*3; int source_step = image.GetWidth()*3;
@ -1282,11 +1282,10 @@ void wxImage::Paste( const wxImage &image, int x, int y )
int target_step = M_IMGDATA->m_width*3; int target_step = M_IMGDATA->m_width*3;
for (int j = 0; j < height; j++) for (int j = 0; j < height; j++)
{ {
memcpy( target_data, source_data, width ); memcpy( target_data, source_data, width*3 );
source_data += source_step; source_data += source_step;
target_data += target_step; target_data += target_step;
} }
return;
} }
// Copy over the alpha channel from the original image // Copy over the alpha channel from the original image
@ -1315,7 +1314,6 @@ void wxImage::Paste( const wxImage &image, int x, int y )
unsigned char g = image.GetMaskGreen(); unsigned char g = image.GetMaskGreen();
unsigned char b = image.GetMaskBlue(); unsigned char b = image.GetMaskBlue();
width *= 3;
unsigned char* source_data = image.GetData() + xx*3 + yy*3*image.GetWidth(); unsigned char* source_data = image.GetData() + xx*3 + yy*3*image.GetWidth();
int source_step = image.GetWidth()*3; int source_step = image.GetWidth()*3;
@ -1324,7 +1322,7 @@ void wxImage::Paste( const wxImage &image, int x, int y )
for (int j = 0; j < height; j++) for (int j = 0; j < height; j++)
{ {
for (int i = 0; i < width; i+=3) for (int i = 0; i < width*3; i+=3)
{ {
if ((source_data[i] != r) || if ((source_data[i] != r) ||
(source_data[i+1] != g) || (source_data[i+1] != g) ||

View File

@ -3,7 +3,7 @@
// Purpose: wxImage PCX handler // Purpose: wxImage PCX handler
// Author: Guillermo Rodriguez Garcia <guille@iies.es> // Author: Guillermo Rodriguez Garcia <guille@iies.es>
// Version: 1.1 // Version: 1.1
// CVS-ID: $Id: imagpcx.cpp 40943 2006-08-31 19:31:43Z ABX $ // CVS-ID: $Id: imagpcx.cpp 54766 2008-07-22 20:16:03Z VZ $
// Copyright: (c) 1999 Guillermo Rodriguez Garcia // Copyright: (c) 1999 Guillermo Rodriguez Garcia
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -87,17 +87,15 @@ void RLEencode(unsigned char *p, unsigned int size, wxOutputStream& s)
void RLEdecode(unsigned char *p, unsigned int size, wxInputStream& s) void RLEdecode(unsigned char *p, unsigned int size, wxInputStream& s)
{ {
unsigned int i, data, cont;
// Read 'size' bytes. The PCX official specs say there will be // Read 'size' bytes. The PCX official specs say there will be
// a decoding break at the end of each scanline (but not at the // a decoding break at the end of each scanline (but not at the
// end of each plane inside a scanline). Only use this function // end of each plane inside a scanline). Only use this function
// to read one or more _complete_ scanlines. Else, more than // to read one or more _complete_ scanlines. Else, more than
// 'size' bytes might be read and the buffer might overflow. // 'size' bytes might be read and the buffer might overflow.
while (size > 0) while (size != 0)
{ {
data = (unsigned char)s.GetC(); unsigned int data = (unsigned char)s.GetC();
// If ((data & 0xC0) != 0xC0), then the value read is a data // If ((data & 0xC0) != 0xC0), then the value read is a data
// byte. Else, it is a counter (cont = val & 0x3F) and the // byte. Else, it is a counter (cont = val & 0x3F) and the
@ -110,9 +108,11 @@ void RLEdecode(unsigned char *p, unsigned int size, wxInputStream& s)
} }
else else
{ {
cont = data & 0x3F; unsigned int cont = data & 0x3F;
if (cont > size) // can happen only if the file is malformed
break;
data = (unsigned char)s.GetC(); data = (unsigned char)s.GetC();
for (i = 1; i <= cont; i++) for (unsigned int i = 1; i <= cont; i++)
*(p++) = (unsigned char)data; *(p++) = (unsigned char)data;
size -= cont; size -= cont;
} }

View File

@ -5,7 +5,7 @@
// Modified by: Michael N. Filippov <michael@idisys.iae.nsk.su> // Modified by: Michael N. Filippov <michael@idisys.iae.nsk.su>
// (2003/09/30 - PluralForms support) // (2003/09/30 - PluralForms support)
// Created: 29/01/98 // Created: 29/01/98
// RCS-ID: $Id: intl.cpp 53628 2008-05-17 22:49:30Z VZ $ // RCS-ID: $Id: intl.cpp 57501 2008-12-22 19:50:17Z VZ $
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> // Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -2504,7 +2504,13 @@ wxFontEncoding wxLocale::GetSystemEncoding()
// (a.k.a. US-ASCII) which is arguably a bug but keep it like this for // (a.k.a. US-ASCII) which is arguably a bug but keep it like this for
// backwards compatibility and just take care to not return // backwards compatibility and just take care to not return
// wxFONTENCODING_DEFAULT from here as this surely doesn't make sense // wxFONTENCODING_DEFAULT from here as this surely doesn't make sense
if ( enc != wxFONTENCODING_MAX && enc != wxFONTENCODING_DEFAULT ) if ( enc == wxFONTENCODING_DEFAULT )
{
// we don't have wxFONTENCODING_ASCII, so use the closest one
return wxFONTENCODING_ISO8859_1;
}
if ( enc != wxFONTENCODING_MAX )
{ {
return enc; return enc;
} }
@ -3699,9 +3705,9 @@ void wxLocale::InitLanguagesDB()
LNG(wxLANGUAGE_SANSKRIT, "sa" , LANG_SANSKRIT , SUBLANG_DEFAULT , wxLayout_LeftToRight, "Sanskrit") LNG(wxLANGUAGE_SANSKRIT, "sa" , LANG_SANSKRIT , SUBLANG_DEFAULT , wxLayout_LeftToRight, "Sanskrit")
LNG(wxLANGUAGE_SCOTS_GAELIC, "gd" , 0 , 0 , wxLayout_LeftToRight, "Scots Gaelic") LNG(wxLANGUAGE_SCOTS_GAELIC, "gd" , 0 , 0 , wxLayout_LeftToRight, "Scots Gaelic")
LNG(wxLANGUAGE_SAMI, "se_NO", LANG_SAMI , SUBLANG_DEFAULT , wxLayout_LeftToRight, "Northern Sami") LNG(wxLANGUAGE_SAMI, "se_NO", LANG_SAMI , SUBLANG_DEFAULT , wxLayout_LeftToRight, "Northern Sami")
LNG(wxLANGUAGE_SERBIAN, "sr_SR", LANG_SERBIAN , SUBLANG_DEFAULT , wxLayout_LeftToRight, "Serbian") LNG(wxLANGUAGE_SERBIAN, "sr_RS", LANG_SERBIAN , SUBLANG_DEFAULT , wxLayout_LeftToRight, "Serbian")
LNG(wxLANGUAGE_SERBIAN_CYRILLIC, "sr_SR", LANG_SERBIAN , SUBLANG_SERBIAN_CYRILLIC , wxLayout_LeftToRight, "Serbian (Cyrillic)") LNG(wxLANGUAGE_SERBIAN_CYRILLIC, "sr_RS", LANG_SERBIAN , SUBLANG_SERBIAN_CYRILLIC , wxLayout_LeftToRight, "Serbian (Cyrillic)")
LNG(wxLANGUAGE_SERBIAN_LATIN, "sr_SR@latin", LANG_SERBIAN , SUBLANG_SERBIAN_LATIN , wxLayout_LeftToRight, "Serbian (Latin)") LNG(wxLANGUAGE_SERBIAN_LATIN, "sr_RS@latin", LANG_SERBIAN , SUBLANG_SERBIAN_LATIN , wxLayout_LeftToRight, "Serbian (Latin)")
LNG(wxLANGUAGE_SERBIAN_CYRILLIC, "sr_YU", LANG_SERBIAN , SUBLANG_SERBIAN_CYRILLIC , wxLayout_LeftToRight, "Serbian (Cyrillic)") LNG(wxLANGUAGE_SERBIAN_CYRILLIC, "sr_YU", LANG_SERBIAN , SUBLANG_SERBIAN_CYRILLIC , wxLayout_LeftToRight, "Serbian (Cyrillic)")
LNG(wxLANGUAGE_SERBIAN_LATIN, "sr_YU@latin", LANG_SERBIAN , SUBLANG_SERBIAN_LATIN , wxLayout_LeftToRight, "Serbian (Latin)") LNG(wxLANGUAGE_SERBIAN_LATIN, "sr_YU@latin", LANG_SERBIAN , SUBLANG_SERBIAN_LATIN , wxLayout_LeftToRight, "Serbian (Latin)")
LNG(wxLANGUAGE_SERBO_CROATIAN, "sh" , 0 , 0 , wxLayout_LeftToRight, "Serbo-Croatian") LNG(wxLANGUAGE_SERBO_CROATIAN, "sh" , 0 , 0 , wxLayout_LeftToRight, "Serbo-Croatian")

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 04/01/98 // Created: 04/01/98
// RCS-ID: $Id: ipcbase.cpp 38787 2006-04-18 07:24:35Z ABX $ // RCS-ID: $Id: ipcbase.cpp 54615 2008-07-14 02:34:29Z VZ $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -61,8 +61,8 @@ wxConnectionBase::wxConnectionBase(const wxConnectionBase& copy)
wxConnectionBase::~wxConnectionBase(void) wxConnectionBase::~wxConnectionBase(void)
{ {
if ( m_deletebufferwhendone && m_buffer ) if ( m_deletebufferwhendone )
delete m_buffer; delete [] m_buffer;
} }
wxChar *wxConnectionBase::GetBufferAtLeast( size_t bytes ) wxChar *wxConnectionBase::GetBufferAtLeast( size_t bytes )
@ -73,8 +73,7 @@ wxChar *wxConnectionBase::GetBufferAtLeast( size_t bytes )
{ // need to resize buffer { // need to resize buffer
if ( m_deletebufferwhendone ) if ( m_deletebufferwhendone )
{ // we're in charge of buffer, increase it { // we're in charge of buffer, increase it
if ( m_buffer ) delete [] m_buffer;
delete m_buffer;
// the argument specifies **byte size**, but m_buffer is of type // the argument specifies **byte size**, but m_buffer is of type
// wxChar. Under unicode: sizeof(wxChar) > 1, so the buffer size is // wxChar. Under unicode: sizeof(wxChar) > 1, so the buffer size is
// bytes / sizeof(wxChar) rounded upwards. // bytes / sizeof(wxChar) rounded upwards.

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
// Created: 26.10.99 // Created: 26.10.99
// RCS-ID: $Id: menucmn.cpp 51361 2008-01-24 18:12:55Z PC $ // RCS-ID: $Id: menucmn.cpp 57852 2009-01-06 09:40:34Z SC $
// Copyright: (c) wxWidgets team // Copyright: (c) wxWidgets team
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -194,7 +194,11 @@ wxAcceleratorEntry::ParseAccel(const wxString& text, int *flagsOut, int *keyOut)
{ {
if ( (label[n] == '+') || (label[n] == '-') ) if ( (label[n] == '+') || (label[n] == '-') )
{ {
// differentiate between a ctrl that will be translated to cmd on mac
// and an explicit xctrl that will not be translated and remains a ctrl
if ( CompareAccelString(current, wxTRANSLATE("ctrl")) ) if ( CompareAccelString(current, wxTRANSLATE("ctrl")) )
accelFlags |= wxACCEL_CMD;
else if ( CompareAccelString(current, wxTRANSLATE("xctrl")) )
accelFlags |= wxACCEL_CTRL; accelFlags |= wxACCEL_CTRL;
else if ( CompareAccelString(current, wxTRANSLATE("alt")) ) else if ( CompareAccelString(current, wxTRANSLATE("alt")) )
accelFlags |= wxACCEL_ALT; accelFlags |= wxACCEL_ALT;
@ -312,8 +316,12 @@ wxString wxAcceleratorEntry::ToString() const
int flags = GetFlags(); int flags = GetFlags();
if ( flags & wxACCEL_ALT ) if ( flags & wxACCEL_ALT )
text += _("Alt-"); text += _("Alt-");
if ( flags & wxACCEL_CTRL ) if ( flags & wxACCEL_CMD )
text += _("Ctrl-"); text += _("Ctrl-");
#ifdef __WXMAC__
if ( flags & wxACCEL_CTRL )
text += _("XCtrl-");
#endif
if ( flags & wxACCEL_SHIFT ) if ( flags & wxACCEL_SHIFT )
text += _("Shift-"); text += _("Shift-");

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: Ron Lee // Modified by: Ron Lee
// Created: 04/01/98 // Created: 04/01/98
// RCS-ID: $Id: object.cpp 40111 2006-07-15 22:21:44Z MW $ // RCS-ID: $Id: object.cpp 56500 2008-10-23 14:48:31Z MW $
// Copyright: (c) 1998 Julian Smart // Copyright: (c) 1998 Julian Smart
// (c) 2001 Ron Lee <ron@debian.org> // (c) 2001 Ron Lee <ron@debian.org>
// Licence: wxWindows licence // Licence: wxWindows licence
@ -205,37 +205,45 @@ wxClassInfo *wxClassInfo::FindClass(const wxChar *className)
} }
} }
// This function wasn't written to be reentrant but there is a possiblity of // Reentrance can occur on some platforms (Solaris for one), as the use of hash
// reentrance if something it does causes a shared lib to load and register // and string objects can cause other modules to load and register classes
// classes. On Solaris this happens when the wxHashTable is newed, so the first // before the original call returns. This is handled by keeping the hash table
// part of the function has been modified to handle it, and a wxASSERT checks // local when it is first created and only assigning it to the global variable
// against reentrance in the remainder of the function. // when the function is ready to return.
//
// That does make the assumption that after the function has completed the
// first time the problem will no longer happen; all the modules it depends on
// will have been loaded. The assumption is checked using the 'entry' variable
// as a reentrance guard, it checks that once the hash table is global it is
// not accessed multiple times simulateously.
void wxClassInfo::Register() void wxClassInfo::Register()
{ {
if ( !sm_classTable )
{
wxHashTable *classTable = new wxHashTable(wxKEY_STRING);
// check for reentrance
if ( sm_classTable )
delete classTable;
else
sm_classTable = classTable;
}
#ifdef __WXDEBUG__ #ifdef __WXDEBUG__
// reentrance guard - see note above // reentrance guard - see note above
static int entry = 0; static int entry = 0;
wxASSERT_MSG(++entry == 1, _T("wxClassInfo::Register() reentrance"));
#endif #endif
wxHashTable *classTable;
if ( !sm_classTable )
{
// keep the hash local initially, reentrance is possible
classTable = new wxHashTable(wxKEY_STRING);
}
else
{
// guard againt reentrance once the global has been created
wxASSERT_MSG(++entry == 1, _T("wxClassInfo::Register() reentrance"));
classTable = sm_classTable;
}
// Using IMPLEMENT_DYNAMIC_CLASS() macro twice (which may happen if you // Using IMPLEMENT_DYNAMIC_CLASS() macro twice (which may happen if you
// link any object module twice mistakenly, or link twice against wx shared // link any object module twice mistakenly, or link twice against wx shared
// library) will break this function because it will enter an infinite loop // library) will break this function because it will enter an infinite loop
// and eventually die with "out of memory" - as this is quite hard to // and eventually die with "out of memory" - as this is quite hard to
// detect if you're unaware of this, try to do some checks here. // detect if you're unaware of this, try to do some checks here.
wxASSERT_MSG( sm_classTable->Get(m_className) == NULL, wxASSERT_MSG( classTable->Get(m_className) == NULL,
wxString::Format wxString::Format
( (
_T("Class \"%s\" already in RTTI table - have you used IMPLEMENT_DYNAMIC_CLASS() multiple times or linked some object file twice)?"), _T("Class \"%s\" already in RTTI table - have you used IMPLEMENT_DYNAMIC_CLASS() multiple times or linked some object file twice)?"),
@ -243,10 +251,27 @@ void wxClassInfo::Register()
) )
); );
sm_classTable->Put(m_className, (wxObject *)this); classTable->Put(m_className, (wxObject *)this);
// if we're using a local hash we need to try to make it global
if ( sm_classTable != classTable )
{
if ( !sm_classTable )
{
// make the hash global
sm_classTable = classTable;
}
else
{
// the gobal hash has already been created by a reentrant call,
// so delete the local hash and try again
delete classTable;
Register();
}
}
#ifdef __WXDEBUG__ #ifdef __WXDEBUG__
--entry; entry = 0;
#endif #endif
} }

View File

@ -4,7 +4,7 @@
// Author: Francesco Montorsi // Author: Francesco Montorsi
// Modified by: // Modified by:
// Created: 15/04/2006 // Created: 15/04/2006
// RCS-ID: $Id: pickerbase.cpp 52566 2008-03-16 13:50:17Z JS $ // RCS-ID: $Id: pickerbase.cpp 58463 2009-01-27 17:39:50Z BP $
// Copyright: (c) Francesco Montorsi // Copyright: (c) Francesco Montorsi
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -144,12 +144,12 @@ void wxPickerBase::DoSetToolTip(wxToolTip *tip)
// wxPickerBase - event handlers // wxPickerBase - event handlers
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void wxPickerBase::OnTextCtrlKillFocus(wxFocusEvent &) void wxPickerBase::OnTextCtrlKillFocus(wxFocusEvent& event)
{ {
wxASSERT(m_text); event.Skip();
// don't leave the textctrl empty // don't leave the textctrl empty
if (m_text->GetValue().empty()) if (m_text && m_text->GetValue().empty())
UpdateTextCtrlFromPicker(); UpdateTextCtrlFromPicker();
} }

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
// Created: 06.01.01 // Created: 06.01.01
// RCS-ID: $Id: popupcmn.cpp 49643 2007-11-05 16:55:13Z SC $ // RCS-ID: $Id: popupcmn.cpp 56979 2008-11-26 15:31:18Z JMS $
// Copyright: (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> // Copyright: (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// License: wxWindows licence // License: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -43,9 +43,10 @@
#ifdef __WXGTK__ #ifdef __WXGTK__
#include <gtk/gtk.h> #include <gtk/gtk.h>
#endif #elif defined(__WXMSW__)
#ifdef __WXX11__ #include "wx/msw/private.h"
#include "wx/x11/private.h" #elif defined(__WXX11__)
#include "wx/x11/private.h"
#endif #endif
IMPLEMENT_DYNAMIC_CLASS(wxPopupWindow, wxWindow) IMPLEMENT_DYNAMIC_CLASS(wxPopupWindow, wxWindow)
@ -260,8 +261,16 @@ void wxPopupTransientWindow::Popup(wxWindow *winFocus)
m_child->PushEventHandler(m_handlerPopup); m_child->PushEventHandler(m_handlerPopup);
m_focus = winFocus ? winFocus : this; #if defined(__WXMSW__)
m_focus->SetFocus(); // Focusing on child of popup window does not work on MSW unless WS_POPUP
// style is set. We do not even want to try to set the focus, as it may
// provoke errors on some Windows versions (Vista and later).
if ( ::GetWindowLong(GetHwnd(), GWL_STYLE) & WS_POPUP )
#endif
{
m_focus = winFocus ? winFocus : this;
m_focus->SetFocus();
}
#if defined( __WXMSW__ ) || defined( __WXMAC__ ) #if defined( __WXMSW__ ) || defined( __WXMAC__ )
// MSW doesn't allow to set focus to the popup window, but we need to // MSW doesn't allow to set focus to the popup window, but we need to

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 04/01/98 // Created: 04/01/98
// RCS-ID: $Id: prntbase.cpp 42763 2006-10-30 20:34:25Z VZ $ // RCS-ID: $Id: prntbase.cpp 58209 2009-01-18 21:31:36Z RD $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -18,6 +18,17 @@
#if wxUSE_PRINTING_ARCHITECTURE #if wxUSE_PRINTING_ARCHITECTURE
// change this to 1 to use experimental high-quality printing on Windows
// (NB: this can't be in msw/printwin.cpp because of binary compatibility)
#define wxUSE_HIGH_QUALITY_PREVIEW_IN_WXMSW 0
#if wxUSE_HIGH_QUALITY_PREVIEW_IN_WXMSW
#if !defined(__WXMSW__) || !wxUSE_IMAGE || !wxUSE_WXDIB
#undef wxUSE_HIGH_QUALITY_PREVIEW_IN_WXMSW
#define wxUSE_HIGH_QUALITY_PREVIEW_IN_WXMSW 0
#endif
#endif
#include "wx/dcprint.h" #include "wx/dcprint.h"
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
@ -65,6 +76,19 @@
#endif #endif
#endif // __WXMSW__ #endif // __WXMSW__
#if wxUSE_HIGH_QUALITY_PREVIEW_IN_WXMSW
#include "wx/msw/dib.h"
#include "wx/image.h"
typedef bool (wxPrintPreviewBase::*RenderPageIntoDCFunc)(wxDC&, int);
static bool RenderPageIntoBitmapHQ(wxPrintPreviewBase *preview,
RenderPageIntoDCFunc RenderPageIntoDC,
wxPrinterDC& printerDC,
wxBitmap& bmp, int pageNum,
int pageWidth, int pageHeight);
#endif // wxUSE_HIGH_QUALITY_PREVIEW_IN_WXMSW
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// wxPrintFactory // wxPrintFactory
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -508,6 +532,7 @@ void wxPrintAbortDialog::OnCancel(wxCommandEvent& WXUNUSED(event))
wxPrinterBase::sm_abortIt = true; wxPrinterBase::sm_abortIt = true;
wxPrinterBase::sm_abortWindow->Show(false); wxPrinterBase::sm_abortWindow->Show(false);
wxPrinterBase::sm_abortWindow->Close(true); wxPrinterBase::sm_abortWindow->Close(true);
wxPrinterBase::sm_abortWindow->Destroy();
wxPrinterBase::sm_abortWindow = (wxWindow *) NULL; wxPrinterBase::sm_abortWindow = (wxWindow *) NULL;
} }
@ -1469,6 +1494,70 @@ void wxPrintPreviewBase::AdjustScrollbars(wxPreviewCanvas *canvas)
canvas->SetScrollbars(10, 10, scrollUnitsX, scrollUnitsY, 0, 0, true); canvas->SetScrollbars(10, 10, scrollUnitsX, scrollUnitsY, 0, 0, true);
} }
bool wxPrintPreviewBase::RenderPageIntoDC(wxDC& dc, int pageNum)
{
m_previewPrintout->SetDC(&dc);
m_previewPrintout->SetPageSizePixels(m_pageWidth, m_pageHeight);
// Need to delay OnPreparePrinting() until here, so we have enough
// information.
if (!m_printingPrepared)
{
m_previewPrintout->OnPreparePrinting();
int selFrom, selTo;
m_previewPrintout->GetPageInfo(&m_minPage, &m_maxPage, &selFrom, &selTo);
m_printingPrepared = true;
}
m_previewPrintout->OnBeginPrinting();
if (!m_previewPrintout->OnBeginDocument(m_printDialogData.GetFromPage(), m_printDialogData.GetToPage()))
{
wxMessageBox(_("Could not start document preview."), _("Print Preview Failure"), wxOK);
return false;
}
m_previewPrintout->OnPrintPage(pageNum);
m_previewPrintout->OnEndDocument();
m_previewPrintout->OnEndPrinting();
m_previewPrintout->SetDC(NULL);
return true;
}
bool wxPrintPreviewBase::RenderPageIntoBitmap(wxBitmap& bmp, int pageNum)
{
#if wxUSE_HIGH_QUALITY_PREVIEW_IN_WXMSW
// try high quality rendering first:
static bool s_hqPreviewFailed = false;
if ( !s_hqPreviewFailed )
{
wxPrinterDC printerDC(m_printDialogData.GetPrintData());
if ( RenderPageIntoBitmapHQ(this,
&wxPrintPreviewBase::RenderPageIntoDC,
printerDC,
bmp, pageNum,
m_pageWidth, m_pageHeight) )
{
return true;
}
else
{
wxLogTrace(_T("printing"),
_T("high-quality preview failed, falling back to normal"));
s_hqPreviewFailed = true; // don't bother re-trying
}
}
#endif // wxUSE_HIGH_QUALITY_PREVIEW_IN_WXMSW
wxMemoryDC memoryDC;
memoryDC.SelectObject(bmp);
memoryDC.Clear();
return RenderPageIntoDC(memoryDC, pageNum);
}
bool wxPrintPreviewBase::RenderPage(int pageNum) bool wxPrintPreviewBase::RenderPage(int pageNum)
{ {
wxBusyCursor busy; wxBusyCursor busy;
@ -1497,44 +1586,15 @@ bool wxPrintPreviewBase::RenderPage(int pageNum)
} }
} }
wxMemoryDC memoryDC; if ( !RenderPageIntoBitmap(*m_previewBitmap, pageNum) )
memoryDC.SelectObject(*m_previewBitmap);
memoryDC.Clear();
m_previewPrintout->SetDC(&memoryDC);
m_previewPrintout->SetPageSizePixels(m_pageWidth, m_pageHeight);
// Need to delay OnPreparePrinting until here, so we have enough information.
if (!m_printingPrepared)
{
m_previewPrintout->OnPreparePrinting();
int selFrom, selTo;
m_previewPrintout->GetPageInfo(&m_minPage, &m_maxPage, &selFrom, &selTo);
m_printingPrepared = true;
}
m_previewPrintout->OnBeginPrinting();
if (!m_previewPrintout->OnBeginDocument(m_printDialogData.GetFromPage(), m_printDialogData.GetToPage()))
{ {
wxMessageBox(_("Could not start document preview."), _("Print Preview Failure"), wxOK); wxMessageBox(_("Could not start document preview."), _("Print Preview Failure"), wxOK);
memoryDC.SelectObject(wxNullBitmap);
delete m_previewBitmap; delete m_previewBitmap;
m_previewBitmap = NULL; m_previewBitmap = NULL;
return false; return false;
} }
m_previewPrintout->OnPrintPage(pageNum);
m_previewPrintout->OnEndDocument();
m_previewPrintout->OnEndPrinting();
m_previewPrintout->SetDC(NULL);
memoryDC.SelectObject(wxNullBitmap);
#if wxUSE_STATUSBAR #if wxUSE_STATUSBAR
wxString status; wxString status;
if (m_maxPage != 0) if (m_maxPage != 0)
@ -1758,4 +1818,273 @@ void wxPrintPreview::DetermineScaling()
m_pimpl->DetermineScaling(); m_pimpl->DetermineScaling();
} }
//----------------------------------------------------------------------------
// experimental backport of high-quality preview on Windows
//----------------------------------------------------------------------------
#if wxUSE_HIGH_QUALITY_PREVIEW_IN_WXMSW
// The preview, as implemented in wxPrintPreviewBase (and as used prior to wx3)
// is inexact: it uses screen DC, which has much lower resolution and has
// other properties different from printer DC, so the preview is not quite
// right.
//
// To make matters worse, if the application depends heavily on GetTextExtent()
// or does text layout itself, the output in preview and on paper can be very
// different. In particular, wxHtmlEasyPrinting is affected and the preview
// can be easily off by several pages.
//
// To fix this, we attempt to render the preview into high-resolution bitmap
// using DC with same resolution etc. as the printer DC. This takes lot of
// memory, so the code is more complicated than it could be, but the results
// are much better.
//
// Finally, this code is specific to wxMSW, because it doesn't make sense to
// bother with it on other platforms. Both OSX and modern GNOME/GTK+
// environments have builtin accurate preview (that applications should use
// instead) and the differences between screen and printer DC in wxGTK are so
// large than this trick doesn't help at all.
namespace
{
// If there's not enough memory, we need to render the preview in parts.
// Unfortunately we cannot simply use wxMemoryDC, because it reports its size
// as bitmap's size, and we need to use smaller bitmap while still reporting
// original ("correct") DC size, because printing code frequently uses
// GetSize() to determine scaling factor. This DC class handles this.
class PageFragmentDC : public wxMemoryDC
{
public:
PageFragmentDC(wxDC *printer, wxBitmap& bmp,
const wxPoint& offset,
const wxSize& fullSize)
: wxMemoryDC(printer),
m_offset(offset),
m_fullSize(fullSize)
{
SetDeviceOrigin(0, 0);
SelectObject(bmp);
}
virtual void SetDeviceOrigin(wxCoord x, wxCoord y)
{
wxMemoryDC::SetDeviceOrigin(x - m_offset.x, y - m_offset.y);
}
virtual void DoGetDeviceOrigin(wxCoord *x, wxCoord *y) const
{
wxMemoryDC::DoGetDeviceOrigin(x, y);
if ( x ) *x += m_offset.x;
if ( x ) *y += m_offset.y;
}
virtual void DoGetSize(int *width, int *height) const
{
if ( width )
*width = m_fullSize.x;
if ( height )
*height = m_fullSize.y;
}
private:
wxPoint m_offset;
wxSize m_fullSize;
};
// estimate how big chunks we can render, given available RAM
long ComputeFragmentSize(long printerDepth,
long width,
long height)
{
// Compute the amount of memory needed to generate the preview.
// Memory requirements of RenderPageFragment() are as follows:
//
// (memory DC - always)
// width * height * printerDepth/8
// (wxImage + wxDIB instance)
// width * height * (3 + 4)
// (this could be reduced to *3 if using wxGraphicsContext)
//
// So, given amount of memory M, we can render at most
//
// height = M / (width * (printerDepth/8 + F))
//
// where F is 3 or 7 depending on whether wxGraphicsContext is used or not
wxMemorySize memAvail = wxGetFreeMemory();
if ( memAvail == -1 )
{
// we don't know; 10meg shouldn't be a problem hopefully
memAvail = 10000000;
}
else
{
// limit ourselves to half of available RAM to have a margin for other
// apps, for our rendering code, and for miscalculations
memAvail /= 2;
}
const float perPixel = float(printerDepth)/8 + (3 + 4);
const long perLine = long(width * perPixel);
const long maxstep = (memAvail / perLine).GetValue();
const long step = wxMin(height, maxstep);
wxLogTrace(_T("printing"),
_T("using %liMB of RAM (%li lines) for preview, %li %lipx fragments"),
long((memAvail >> 20).GetValue()),
maxstep,
(height+step-1) / step,
step);
return step;
}
} // anonymous namespace
static bool RenderPageFragment(wxPrintPreviewBase *preview,
RenderPageIntoDCFunc RenderPageIntoDC,
float scaleX, float scaleY,
int *nextFinalLine,
wxPrinterDC& printer,
wxMemoryDC& finalDC,
const wxRect& rect,
int pageWidth, int pageHeight,
int pageNum)
{
// compute 'rect' equivalent in the small final bitmap:
const wxRect smallRect(wxPoint(0, *nextFinalLine),
wxPoint(int(rect.GetRight() * scaleX),
int(rect.GetBottom() * scaleY)));
wxLogTrace(_T("printing"),
_T("rendering fragment of page %i: [%i,%i,%i,%i] scaled down to [%i,%i,%i,%i]"),
pageNum,
rect.x, rect.y, rect.GetRight(), rect.GetBottom(),
smallRect.x, smallRect.y, smallRect.GetRight(), smallRect.GetBottom()
);
// create DC and bitmap compatible with printer DC:
wxBitmap large(rect.width, rect.height, printer);
if ( !large.IsOk() )
return false;
// render part of the page into it:
{
PageFragmentDC memoryDC(&printer, large,
rect.GetPosition(),
wxSize(pageWidth, pageHeight));
if ( !memoryDC.IsOk() )
return false;
memoryDC.Clear();
if ( !(preview->*RenderPageIntoDC)(memoryDC, pageNum) )
return false;
} // release bitmap from memoryDC
// now scale the rendered part down and blit it into final output:
wxImage img;
{
wxDIB dib(large);
if ( !dib.IsOk() )
return false;
large = wxNullBitmap; // free memory a.s.a.p.
img = dib.ConvertToImage();
} // free the DIB now that it's no longer needed, too
if ( !img.IsOk() )
return false;
img.Rescale(smallRect.width, smallRect.height, wxIMAGE_QUALITY_HIGH);
if ( !img.IsOk() )
return false;
wxBitmap bmp(img);
if ( !bmp.IsOk() )
return false;
img = wxNullImage;
finalDC.DrawBitmap(bmp, smallRect.x, smallRect.y);
if ( bmp.IsOk() )
{
*nextFinalLine += smallRect.height;
return true;
}
return false;
}
static bool RenderPageIntoBitmapHQ(wxPrintPreviewBase *preview,
RenderPageIntoDCFunc RenderPageIntoDC,
wxPrinterDC& printerDC,
wxBitmap& bmp, int pageNum,
int pageWidth, int pageHeight)
{
wxLogTrace(_T("printing"), _T("rendering HQ preview of page %i"), pageNum);
if ( !printerDC.IsOk() )
return false;
// compute scale factor
const float scaleX = float(bmp.GetWidth()) / float(pageWidth);
const float scaleY = float(bmp.GetHeight()) / float(pageHeight);
wxMemoryDC bmpDC;
bmpDC.SelectObject(bmp);
bmpDC.Clear();
const int initialStep = ComputeFragmentSize(printerDC.GetDepth(),
pageWidth, pageHeight);
wxRect todo(0, 0, pageWidth, initialStep); // rect to render
int nextFinalLine = 0; // first not-yet-rendered output line
while ( todo.y < pageHeight )
{
todo.SetBottom(wxMin(todo.GetBottom(), pageHeight - 1));
if ( !RenderPageFragment(preview, RenderPageIntoDC,
scaleX, scaleY,
&nextFinalLine,
printerDC,
bmpDC,
todo,
pageWidth, pageHeight,
pageNum) )
{
if ( todo.height < 20 )
{
// something is very wrong if we can't render even at this
// slow space, let's bail out and fall back to low quality
// preview
wxLogTrace(_T("printing"),
_T("it seems that HQ preview doesn't work at all"));
return false;
}
// it's possible our memory calculation was off, or conditions
// changed, or there's not enough _bitmap_ resources; try if using
// smaller bitmap would help:
todo.height /= 2;
wxLogTrace(_T("printing"),
_T("preview of fragment failed, reducing height to %ipx"),
todo.height);
continue; // retry at the same position again
}
// move to the next segment
todo.Offset(0, todo.height);
}
return true;
}
#endif // wxUSE_HIGH_QUALITY_PREVIEW_IN_WXMSW
#endif // wxUSE_PRINTING_ARCHITECTURE #endif // wxUSE_PRINTING_ARCHITECTURE

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
// Created: 03.06.01 // Created: 03.06.01
// RCS-ID: $Id: radiocmn.cpp 39676 2006-06-11 21:13:13Z VZ $ // RCS-ID: $Id: radiocmn.cpp 54930 2008-08-02 19:45:23Z VZ $
// Copyright: (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> // Copyright: (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// License: wxWindows licence // License: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -64,96 +64,106 @@ void wxRadioBoxBase::SetMajorDim(unsigned int majorDim, long style)
int wxRadioBoxBase::GetNextItem(int item, wxDirection dir, long style) const int wxRadioBoxBase::GetNextItem(int item, wxDirection dir, long style) const
{ {
const int itemStart = item;
int count = GetCount(), int count = GetCount(),
numCols = GetColumnCount(), numCols = GetColumnCount(),
numRows = GetRowCount(); numRows = GetRowCount();
bool horz = (style & wxRA_SPECIFY_COLS) != 0; bool horz = (style & wxRA_SPECIFY_COLS) != 0;
switch ( dir ) do
{ {
case wxUP: switch ( dir )
if ( horz ) {
{ case wxUP:
item -= numCols; if ( horz )
} {
else // vertical layout item -= numCols;
{ }
if ( !item-- ) else // vertical layout
item = count - 1; {
} if ( !item-- )
break; item = count - 1;
}
break;
case wxLEFT: case wxLEFT:
if ( horz ) if ( horz )
{ {
if ( !item-- ) if ( !item-- )
item = count - 1; item = count - 1;
} }
else // vertical layout else // vertical layout
{ {
item -= numRows; item -= numRows;
} }
break; break;
case wxDOWN: case wxDOWN:
if ( horz ) if ( horz )
{ {
item += numCols; item += numCols;
} }
else // vertical layout else // vertical layout
{ {
if ( ++item == count ) if ( ++item == count )
item = 0; item = 0;
} }
break; break;
case wxRIGHT: case wxRIGHT:
if ( horz ) if ( horz )
{ {
if ( ++item == count ) if ( ++item == count )
item = 0; item = 0;
} }
else // vertical layout else // vertical layout
{ {
item += numRows; item += numRows;
} }
break; break;
default: default:
wxFAIL_MSG( _T("unexpected wxDirection value") ); wxFAIL_MSG( _T("unexpected wxDirection value") );
return wxNOT_FOUND; return wxNOT_FOUND;
}
// ensure that the item is in range [0..count)
if ( item < 0 )
{
// first map the item to the one in the same column but in the last
// row
item += count;
// now there are 2 cases: either it is the first item of the last
// row in which case we need to wrap again and get to the last item
// or we can just go to the previous item
if ( item % (horz ? numCols : numRows) )
item--;
else
item = count - 1;
}
else if ( item >= count )
{
// same logic as above
item -= count;
// ... except that we need to check if this is not the last item,
// not the first one
if ( (item + 1) % (horz ? numCols : numRows) )
item++;
else
item = 0;
}
wxASSERT_MSG( item < count && item >= 0,
_T("logic error in wxRadioBox::GetNextItem()") );
} }
// we shouldn't select the non-active items, continue looking for a
// ensure that the item is in range [0..count) // visible and shown one unless we came back to the item we started from in
if ( item < 0 ) // which case bail out to avoid infinite loop
{ while ( !(IsItemShown(item) && IsItemEnabled(item)) && item != itemStart );
// first map the item to the one in the same column but in the last row
item += count;
// now there are 2 cases: either it is the first item of the last row
// in which case we need to wrap again and get to the last item or we
// can just go to the previous item
if ( item % (horz ? numCols : numRows) )
item--;
else
item = count - 1;
}
else if ( item >= count )
{
// same logic as above
item -= count;
// ... except that we need to check if this is not the last item, not
// the first one
if ( (item + 1) % (horz ? numCols : numRows) )
item++;
else
item = 0;
}
wxASSERT_MSG( item < count && item >= 0,
_T("logic error in wxRadioBox::GetNextItem()") );
return item; return item;
} }

View File

@ -4,7 +4,7 @@
// Author: Karsten Ballueder and Vadim Zeitlin // Author: Karsten Ballueder and Vadim Zeitlin
// Modified by: // Modified by:
// Created: 13.07.01 // Created: 13.07.01
// RCS-ID: $Id: regex.cpp 50711 2007-12-15 02:57:58Z VZ $ // RCS-ID: $Id: regex.cpp 57779 2009-01-02 17:35:16Z PC $
// Copyright: (c) 2000 Karsten Ballueder <ballueder@gmx.net> // Copyright: (c) 2000 Karsten Ballueder <ballueder@gmx.net>
// 2001 Vadim Zeitlin <vadim@wxwindows.org> // 2001 Vadim Zeitlin <vadim@wxwindows.org>
// Licence: wxWindows licence // Licence: wxWindows licence
@ -27,9 +27,10 @@
#if wxUSE_REGEX #if wxUSE_REGEX
#include "wx/regex.h"
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
#include "wx/object.h" #include "wx/object.h"
#include "wx/string.h"
#include "wx/log.h" #include "wx/log.h"
#include "wx/intl.h" #include "wx/intl.h"
#endif //WX_PRECOMP #endif //WX_PRECOMP
@ -43,7 +44,6 @@
#endif #endif
#include <regex.h> #include <regex.h>
#include "wx/regex.h"
// WXREGEX_USING_BUILTIN defined when using the built-in regex lib // WXREGEX_USING_BUILTIN defined when using the built-in regex lib
// WXREGEX_USING_RE_SEARCH defined when using re_search in the GNU regex lib // WXREGEX_USING_RE_SEARCH defined when using re_search in the GNU regex lib
@ -277,12 +277,15 @@ bool wxRegExImpl::Compile(const wxString& expr, int flags)
// translate our flags to regcomp() ones // translate our flags to regcomp() ones
int flagsRE = 0; int flagsRE = 0;
if ( !(flags & wxRE_BASIC) ) if ( !(flags & wxRE_BASIC) )
{
#ifndef WX_NO_REGEX_ADVANCED #ifndef WX_NO_REGEX_ADVANCED
if (flags & wxRE_ADVANCED) if (flags & wxRE_ADVANCED)
flagsRE |= REG_ADVANCED; flagsRE |= REG_ADVANCED;
else else
#endif #endif
flagsRE |= REG_EXTENDED; flagsRE |= REG_EXTENDED;
}
if ( flags & wxRE_ICASE ) if ( flags & wxRE_ICASE )
flagsRE |= REG_ICASE; flagsRE |= REG_ICASE;
if ( flags & wxRE_NOSUB ) if ( flags & wxRE_NOSUB )

View File

@ -4,7 +4,7 @@
// Author: Vaclav Slavik // Author: Vaclav Slavik
// Modified by: // Modified by:
// Created: 2004-08-15 // Created: 2004-08-15
// RCS-ID: $Id: stockitem.cpp 42936 2006-11-02 10:42:42Z JS $ // RCS-ID: $Id: stockitem.cpp 58617 2009-02-02 05:12:43Z SC $
// Copyright: (c) Vaclav Slavik, 2004 // Copyright: (c) Vaclav Slavik, 2004
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -235,15 +235,15 @@ wxAcceleratorEntry wxGetStockAccelerator(wxWindowID id)
switch (id) switch (id)
{ {
STOCKITEM(wxID_COPY, wxACCEL_CTRL,'C') STOCKITEM(wxID_COPY, wxACCEL_CMD,'C')
STOCKITEM(wxID_CUT, wxACCEL_CTRL,'X') STOCKITEM(wxID_CUT, wxACCEL_CMD,'X')
STOCKITEM(wxID_FIND, wxACCEL_CTRL,'F') STOCKITEM(wxID_FIND, wxACCEL_CMD,'F')
STOCKITEM(wxID_REPLACE, wxACCEL_CTRL,'R') STOCKITEM(wxID_REPLACE, wxACCEL_CMD,'R')
STOCKITEM(wxID_HELP, wxACCEL_CTRL,'H') STOCKITEM(wxID_HELP, wxACCEL_CMD,'H')
STOCKITEM(wxID_NEW, wxACCEL_CTRL,'N') STOCKITEM(wxID_NEW, wxACCEL_CMD,'N')
STOCKITEM(wxID_OPEN, wxACCEL_CTRL,'O') STOCKITEM(wxID_OPEN, wxACCEL_CMD,'O')
STOCKITEM(wxID_PASTE, wxACCEL_CTRL,'V') STOCKITEM(wxID_PASTE, wxACCEL_CMD,'V')
STOCKITEM(wxID_SAVE, wxACCEL_CTRL,'S') STOCKITEM(wxID_SAVE, wxACCEL_CMD,'S')
default: default:
// set the wxAcceleratorEntry to return into an invalid state: // set the wxAcceleratorEntry to return into an invalid state:

View File

@ -5,7 +5,7 @@
// Ryan Norton, Fredrik Roubert (UTF7) // Ryan Norton, Fredrik Roubert (UTF7)
// Modified by: // Modified by:
// Created: 29/01/98 // Created: 29/01/98
// RCS-ID: $Id: strconv.cpp 45921 2007-05-09 18:10:26Z VZ $ // RCS-ID: $Id: strconv.cpp 56394 2008-10-17 11:31:22Z VZ $
// Copyright: (c) 1999 Ove Kaaven, Robert Roebling, Vaclav Slavik // Copyright: (c) 1999 Ove Kaaven, Robert Roebling, Vaclav Slavik
// (c) 2000-2003 Vadim Zeitlin // (c) 2000-2003 Vadim Zeitlin
// (c) 2004 Ryan Norton, Fredrik Roubert // (c) 2004 Ryan Norton, Fredrik Roubert
@ -66,6 +66,8 @@
// includes Mac headers // includes Mac headers
#include "wx/mac/private.h" #include "wx/mac/private.h"
#include "wx/thread.h"
#endif #endif
@ -1957,7 +1959,7 @@ size_t wxMBConv_iconv::GetMBNulLen() const
wxMutexLocker lock(self->m_iconvMutex); wxMutexLocker lock(self->m_iconvMutex);
#endif #endif
wchar_t *wnul = L""; const wchar_t *wnul = L"";
char buf[8]; // should be enough for NUL in any encoding char buf[8]; // should be enough for NUL in any encoding
size_t inLen = sizeof(wchar_t), size_t inLen = sizeof(wchar_t),
outLen = WXSIZEOF(buf); outLen = WXSIZEOF(buf);
@ -2733,7 +2735,8 @@ public:
#if wxUSE_FONTMAP #if wxUSE_FONTMAP
wxMBConv_mac(const wxChar* name) wxMBConv_mac(const wxChar* name)
{ {
Init( wxMacGetSystemEncFromFontEnc( wxFontMapperBase::Get()->CharsetToEncoding(name, false) ) ); wxFontEncoding enc = wxFontMapperBase::Get()->CharsetToEncoding(name, false);
Init( (enc != wxFONTENCODING_SYSTEM) ? wxMacGetSystemEncFromFontEnc( enc ) : kTextEncodingUnknown);
} }
#endif #endif
@ -2756,13 +2759,22 @@ public:
{ {
m_MB2WC_converter = NULL ; m_MB2WC_converter = NULL ;
m_WC2MB_converter = NULL ; m_WC2MB_converter = NULL ;
m_char_encoding = CreateTextEncoding(encoding, encodingVariant, encodingFormat) ; if ( encoding != kTextEncodingUnknown )
m_unicode_encoding = CreateTextEncoding(kTextEncodingUnicodeDefault, 0, kUnicode16BitFormat) ; {
m_char_encoding = CreateTextEncoding(encoding, encodingVariant, encodingFormat) ;
m_unicode_encoding = CreateTextEncoding(kTextEncodingUnicodeDefault, 0, kUnicode16BitFormat) ;
}
else
{
m_char_encoding = kTextEncodingUnknown;
m_unicode_encoding = kTextEncodingUnknown;
}
} }
virtual void CreateIfNeeded() const virtual void CreateIfNeeded() const
{ {
if ( m_MB2WC_converter == NULL && m_WC2MB_converter == NULL ) if ( m_MB2WC_converter == NULL && m_WC2MB_converter == NULL &&
m_char_encoding != kTextEncodingUnknown && m_unicode_encoding != kTextEncodingUnknown )
{ {
OSStatus status = noErr ; OSStatus status = noErr ;
status = TECCreateConverter(&m_MB2WC_converter, status = TECCreateConverter(&m_MB2WC_converter,
@ -2800,10 +2812,14 @@ public:
#else #else
ubuf = (UniChar*) (buf ? buf : tbuf) ; ubuf = (UniChar*) (buf ? buf : tbuf) ;
#endif #endif
{
status = TECConvertText( #if wxUSE_THREADS
wxMutexLocker lock( m_MB2WC_guard );
#endif
status = TECConvertText(
m_MB2WC_converter, (ConstTextPtr) psz, byteInLen, &byteInLen, m_MB2WC_converter, (ConstTextPtr) psz, byteInLen, &byteInLen,
(TextPtr) ubuf, byteBufferLen, &byteOutLen); (TextPtr) ubuf, byteBufferLen, &byteOutLen);
}
#if SIZEOF_WCHAR_T == 4 #if SIZEOF_WCHAR_T == 4
// we have to terminate here, because n might be larger for the trailing zero, and if UniChar // we have to terminate here, because n might be larger for the trailing zero, and if UniChar
@ -2854,10 +2870,15 @@ public:
ubuf = (UniChar*) psz ; ubuf = (UniChar*) psz ;
#endif #endif
status = TECConvertText( {
#if wxUSE_THREADS
wxMutexLocker lock( m_WC2MB_guard );
#endif
status = TECConvertText(
m_WC2MB_converter, (ConstTextPtr) ubuf, byteInLen, &byteInLen, m_WC2MB_converter, (ConstTextPtr) ubuf, byteInLen, &byteInLen,
(TextPtr) (buf ? buf : tbuf), byteBufferLen, &byteOutLen); (TextPtr) (buf ? buf : tbuf), byteBufferLen, &byteOutLen);
}
#if SIZEOF_WCHAR_T == 4 #if SIZEOF_WCHAR_T == 4
free( ubuf ) ; free( ubuf ) ;
#endif #endif
@ -2898,6 +2919,10 @@ public:
protected : protected :
mutable TECObjectRef m_MB2WC_converter; mutable TECObjectRef m_MB2WC_converter;
mutable TECObjectRef m_WC2MB_converter; mutable TECObjectRef m_WC2MB_converter;
#if wxUSE_THREADS
mutable wxMutex m_MB2WC_guard;
mutable wxMutex m_WC2MB_guard;
#endif
TextEncodingBase m_char_encoding; TextEncodingBase m_char_encoding;
TextEncodingBase m_unicode_encoding; TextEncodingBase m_unicode_encoding;
@ -2958,15 +2983,20 @@ public :
ByteCount dcubufread , dcubufwritten ; ByteCount dcubufread , dcubufwritten ;
UniChar *dcubuf = (UniChar*) malloc( dcubuflen ) ; UniChar *dcubuf = (UniChar*) malloc( dcubuflen ) ;
ConvertFromUnicodeToText( m_uni , byteInLen , ubuf , {
kUnicodeDefaultDirectionMask, 0, NULL, NULL, NULL, dcubuflen , &dcubufread , &dcubufwritten , dcubuf ) ; #if wxUSE_THREADS
wxMutexLocker lock( m_WC2MB_guard );
#endif
ConvertFromUnicodeToText( m_uni , byteInLen , ubuf ,
kUnicodeDefaultDirectionMask, 0, NULL, NULL, NULL, dcubuflen , &dcubufread , &dcubufwritten , dcubuf ) ;
// we now convert that decomposed buffer into UTF8 // we now convert that decomposed buffer into UTF8
status = TECConvertText( status = TECConvertText(
m_WC2MB_converter, (ConstTextPtr) dcubuf, dcubufwritten, &dcubufread, m_WC2MB_converter, (ConstTextPtr) dcubuf, dcubufwritten, &dcubufread,
(TextPtr) (buf ? buf : tbuf), byteBufferLen, &byteOutLen); (TextPtr) (buf ? buf : tbuf), byteBufferLen, &byteOutLen);
}
free( dcubuf ); free( dcubuf );
#if SIZEOF_WCHAR_T == 4 #if SIZEOF_WCHAR_T == 4
@ -3015,16 +3045,21 @@ public :
ByteCount dcubufread , dcubufwritten ; ByteCount dcubufread , dcubufwritten ;
UniChar *dcubuf = (UniChar*) malloc( dcubuflen ) ; UniChar *dcubuf = (UniChar*) malloc( dcubuflen ) ;
status = TECConvertText( {
#if wxUSE_THREADS
wxMutexLocker lock( m_MB2WC_guard );
#endif
status = TECConvertText(
m_MB2WC_converter, (ConstTextPtr) psz, byteInLen, &byteInLen, m_MB2WC_converter, (ConstTextPtr) psz, byteInLen, &byteInLen,
(TextPtr) dcubuf, dcubuflen, &byteOutLen); (TextPtr) dcubuf, dcubuflen, &byteOutLen);
// we have to terminate here, because n might be larger for the trailing zero, and if UniChar // we have to terminate here, because n might be larger for the trailing zero, and if UniChar
// is not properly terminated we get random characters at the end // is not properly terminated we get random characters at the end
dcubuf[byteOutLen / sizeof( UniChar ) ] = 0 ; dcubuf[byteOutLen / sizeof( UniChar ) ] = 0 ;
// now from the decomposed UniChar to properly composed uniChar // now from the decomposed UniChar to properly composed uniChar
ConvertFromUnicodeToText( m_uniBack , byteOutLen , dcubuf , ConvertFromUnicodeToText( m_uniBack , byteOutLen , dcubuf ,
kUnicodeDefaultDirectionMask, 0, NULL, NULL, NULL, dcubuflen , &dcubufread , &dcubufwritten , ubuf ) ; kUnicodeDefaultDirectionMask, 0, NULL, NULL, NULL, dcubuflen , &dcubufread , &dcubufwritten , ubuf ) ;
}
free( dcubuf ); free( dcubuf );
byteOutLen = dcubufwritten ; byteOutLen = dcubufwritten ;
@ -3205,6 +3240,16 @@ wxCSConv::wxCSConv(const wxChar *charset)
#if wxUSE_FONTMAP #if wxUSE_FONTMAP
m_encoding = wxFontMapperBase::GetEncodingFromName(charset); m_encoding = wxFontMapperBase::GetEncodingFromName(charset);
if ( m_encoding == wxFONTENCODING_MAX )
{
// set to unknown/invalid value
m_encoding = wxFONTENCODING_SYSTEM;
}
else if ( m_encoding == wxFONTENCODING_DEFAULT )
{
// wxFONTENCODING_DEFAULT is same as US-ASCII in this context
m_encoding = wxFONTENCODING_ISO8859_1;
}
#else #else
m_encoding = wxFONTENCODING_SYSTEM; m_encoding = wxFONTENCODING_SYSTEM;
#endif #endif
@ -3506,7 +3551,7 @@ void wxCSConv::CreateConvIfNeeded() const
if ( !m_name && m_encoding == wxFONTENCODING_SYSTEM ) if ( !m_name && m_encoding == wxFONTENCODING_SYSTEM )
{ {
#if wxUSE_INTL #if wxUSE_INTL
self->m_name = wxStrdup(wxLocale::GetSystemEncodingName()); self->m_encoding = wxLocale::GetSystemEncoding();
#else #else
// fallback to some reasonable default: // fallback to some reasonable default:
self->m_encoding = wxFONTENCODING_ISO8859_1; self->m_encoding = wxFONTENCODING_ISO8859_1;
@ -3540,7 +3585,19 @@ size_t wxCSConv::ToWChar(wchar_t *dst, size_t dstLen,
return m_convReal->ToWChar(dst, dstLen, src, srcLen); return m_convReal->ToWChar(dst, dstLen, src, srcLen);
// latin-1 (direct) // latin-1 (direct)
return wxMBConv::ToWChar(dst, dstLen, src, srcLen); if ( srcLen == wxNO_LEN )
srcLen = strlen(src) + 1; // take trailing NUL too
if ( dst )
{
if ( dstLen < srcLen )
return wxCONV_FAILED;
for ( size_t n = 0; n < srcLen; n++ )
dst[n] = (unsigned char)(src[n]);
}
return srcLen;
} }
size_t wxCSConv::FromWChar(char *dst, size_t dstLen, size_t wxCSConv::FromWChar(char *dst, size_t dstLen,
@ -3552,57 +3609,45 @@ size_t wxCSConv::FromWChar(char *dst, size_t dstLen,
return m_convReal->FromWChar(dst, dstLen, src, srcLen); return m_convReal->FromWChar(dst, dstLen, src, srcLen);
// latin-1 (direct) // latin-1 (direct)
return wxMBConv::FromWChar(dst, dstLen, src, srcLen); if ( srcLen == wxNO_LEN )
srcLen = wxWcslen(src) + 1;
if ( dst )
{
if ( dstLen < srcLen )
return wxCONV_FAILED;
for ( size_t n = 0; n < srcLen; n++ )
{
if ( src[n] > 0xFF )
return wxCONV_FAILED;
dst[n] = (char)src[n];
}
}
else // still need to check the input validity
{
for ( size_t n = 0; n < srcLen; n++ )
{
if ( src[n] > 0xFF )
return wxCONV_FAILED;
}
}
return srcLen;
} }
size_t wxCSConv::MB2WC(wchar_t *buf, const char *psz, size_t n) const size_t wxCSConv::MB2WC(wchar_t *buf, const char *psz, size_t n) const
{ {
CreateConvIfNeeded(); // this function exists only for ABI-compatibility in 2.8 branch
return wxMBConv::MB2WC(buf, psz, n);
if (m_convReal)
return m_convReal->MB2WC(buf, psz, n);
// latin-1 (direct)
size_t len = strlen(psz);
if (buf)
{
for (size_t c = 0; c <= len; c++)
buf[c] = (unsigned char)(psz[c]);
}
return len;
} }
size_t wxCSConv::WC2MB(char *buf, const wchar_t *psz, size_t n) const size_t wxCSConv::WC2MB(char *buf, const wchar_t *psz, size_t n) const
{ {
CreateConvIfNeeded(); // this function exists only for ABI-compatibility in 2.8 branch
return wxMBConv::WC2MB(buf, psz, n);
if (m_convReal)
return m_convReal->WC2MB(buf, psz, n);
// latin-1 (direct)
const size_t len = wxWcslen(psz);
if (buf)
{
for (size_t c = 0; c <= len; c++)
{
if (psz[c] > 0xFF)
return wxCONV_FAILED;
buf[c] = (char)psz[c];
}
}
else
{
for (size_t c = 0; c <= len; c++)
{
if (psz[c] > 0xFF)
return wxCONV_FAILED;
}
}
return len;
} }
size_t wxCSConv::GetMBNulLen() const size_t wxCSConv::GetMBNulLen() const

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin, Ryan Norton // Author: Vadim Zeitlin, Ryan Norton
// Modified by: // Modified by:
// Created: 29/01/98 // Created: 29/01/98
// RCS-ID: $Id: string.cpp 53702 2008-05-22 17:22:00Z SN $ // RCS-ID: $Id: string.cpp 56758 2008-11-13 22:32:21Z VS $
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> // Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// (c) 2004 Ryan Norton <wxprojects@comcast.net> // (c) 2004 Ryan Norton <wxprojects@comcast.net>
// Licence: wxWindows licence // Licence: wxWindows licence
@ -1492,8 +1492,8 @@ wxString wxString::AfterFirst(wxChar ch) const
} }
// replace first (or all) occurences of some substring with another one // replace first (or all) occurences of some substring with another one
size_t wxString::Replace(const wxChar *szOld, size_t
const wxChar *szNew, bool bReplaceAll) wxString::Replace(const wxChar *szOld, const wxChar *szNew, bool bReplaceAll)
{ {
// if we tried to replace an empty string we'd enter an infinite loop below // if we tried to replace an empty string we'd enter an infinite loop below
wxCHECK_MSG( szOld && *szOld && szNew, 0, wxCHECK_MSG( szOld && *szOld && szNew, 0,
@ -1501,33 +1501,48 @@ size_t wxString::Replace(const wxChar *szOld,
size_t uiCount = 0; // count of replacements made size_t uiCount = 0; // count of replacements made
size_t uiOldLen = wxStrlen(szOld); // optimize the special common case of replacing one character with another
size_t uiNewLen = wxStrlen(szNew); // one
if ( szOld[1] == '\0' && (szNew[0] != '\0' && szNew[1] == '\0') )
size_t dwPos = 0;
while ( this->c_str()[dwPos] != wxT('\0') )
{ {
//DO NOT USE STRSTR HERE // this loop is the simplified version of the one below
//this string can contain embedded null characters, for ( size_t pos = 0; ; )
//so strstr will function incorrectly
dwPos = find(szOld, dwPos);
if ( dwPos == npos )
break; // exit the loop
else
{ {
//replace this occurance of the old string with the new one pos = find(*szOld, pos);
replace(dwPos, uiOldLen, szNew, uiNewLen); if ( pos == npos )
break;
//move up pos past the string that was replaced (*this)[pos++] = *szNew;
dwPos += uiNewLen;
//increase replace count uiCount++;
++uiCount;
if ( !bReplaceAll )
break;
}
}
else // general case
{
const size_t uiOldLen = wxStrlen(szOld);
const size_t uiNewLen = wxStrlen(szNew);
for ( size_t pos = 0; ; )
{
pos = find(szOld, pos);
if ( pos == npos )
break;
// replace this occurrence of the old string with the new one
replace(pos, uiOldLen, szNew, uiNewLen);
// move past the string that was replaced
pos += uiNewLen;
// increase replace count
uiCount++;
// stop now? // stop now?
if ( !bReplaceAll ) if ( !bReplaceAll )
break; // exit the loop break;
} }
} }
@ -2630,3 +2645,10 @@ int wxCMPFUNC_CONV wxStringSortDescending(wxString* s1, wxString* s2)
{ {
return -s1->Cmp(*s2); return -s1->Cmp(*s2);
} }
wxString* wxCArrayString::Release()
{
wxString *r = GetStrings();
m_strings = NULL;
return r;
}

View File

@ -3,7 +3,7 @@
// Purpose: Implementation of a uri parser // Purpose: Implementation of a uri parser
// Author: Ryan Norton // Author: Ryan Norton
// Created: 10/26/04 // Created: 10/26/04
// RCS-ID: $Id: uri.cpp 37403 2006-02-09 03:09:36Z VZ $ // RCS-ID: $Id: uri.cpp 58728 2009-02-07 22:03:30Z VZ $
// Copyright: (c) 2004 Ryan Norton // Copyright: (c) 2004 Ryan Norton
// Licence: wxWindows // Licence: wxWindows
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -159,22 +159,19 @@ bool wxURI::IsEscape(const wxChar*& uri)
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
wxString wxURI::GetUser() const wxString wxURI::GetUser() const
{ {
size_t dwPasswordPos = m_userinfo.find(':'); // if there is no colon at all, find() returns npos and this method returns
// the entire string which is correct as it means that password was omitted
if (dwPasswordPos == wxString::npos) return m_userinfo(0, m_userinfo.find(':'));
dwPasswordPos = 0;
return m_userinfo(0, dwPasswordPos);
} }
wxString wxURI::GetPassword() const wxString wxURI::GetPassword() const
{ {
size_t dwPasswordPos = m_userinfo.find(':'); size_t posColon = m_userinfo.find(':');
if (dwPasswordPos == wxString::npos) if ( posColon == wxString::npos )
return wxT(""); return wxT("");
else
return m_userinfo(dwPasswordPos+1, m_userinfo.length() + 1); return m_userinfo(posColon + 1, wxString::npos);
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@ -867,7 +864,7 @@ void wxURI::Resolve(const wxURI& base, int flags)
// T.path = remove_dot_segments(T.path); // T.path = remove_dot_segments(T.path);
// endif; // endif;
// T.query = R.query; // T.query = R.query;
if (m_path[0u] != wxT('/')) if (m_path.empty() || m_path[0u] != wxT('/'))
{ {
//Merge paths //Merge paths
const wxChar* op = m_path.c_str(); const wxChar* op = m_path.c_str();

View File

@ -4,7 +4,7 @@
// Author: Guilhem Lavaux // Author: Guilhem Lavaux
// Modified by: // Modified by:
// Created: 20/07/1997 // Created: 20/07/1997
// RCS-ID: $Id: url.cpp 49798 2007-11-09 23:17:49Z VZ $ // RCS-ID: $Id: url.cpp 57545 2008-12-25 17:03:20Z VZ $
// Copyright: (c) 1997, 1998 Guilhem Lavaux // Copyright: (c) 1997, 1998 Guilhem Lavaux
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -242,11 +242,11 @@ wxInputStream *wxURL::GetInputStream()
size_t dwPasswordPos = m_userinfo.find(':'); size_t dwPasswordPos = m_userinfo.find(':');
if (dwPasswordPos == wxString::npos) if (dwPasswordPos == wxString::npos)
m_protocol->SetUser(m_userinfo); m_protocol->SetUser(Unescape(m_userinfo));
else else
{ {
m_protocol->SetUser(m_userinfo(0, dwPasswordPos)); m_protocol->SetUser(Unescape(m_userinfo(0, dwPasswordPos)));
m_protocol->SetPassword(m_userinfo(dwPasswordPos+1, m_userinfo.length() + 1)); m_protocol->SetPassword(Unescape(m_userinfo(dwPasswordPos+1, m_userinfo.length() + 1)));
} }
} }

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 10/09/98 // Created: 10/09/98
// RCS-ID: $Id: variant.cpp 45498 2007-04-16 13:03:05Z VZ $ // RCS-ID: $Id: variant.cpp 58054 2009-01-12 17:27:53Z JMS $
// Copyright: (c) // Copyright: (c)
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -1223,7 +1223,11 @@ bool wxVariantDataDateTime::Write(wxSTD ostream& str) const
bool wxVariantDataDateTime::Write(wxString& str) const bool wxVariantDataDateTime::Write(wxString& str) const
{ {
str = m_value.Format(); if ( m_value.IsValid() )
str = m_value.Format();
else
str = wxT("Invalid");
return true; return true;
} }
@ -1239,6 +1243,12 @@ bool wxVariantDataDateTime::Read(wxSTD istream& WXUNUSED(str))
bool wxVariantDataDateTime::Read(wxString& str) bool wxVariantDataDateTime::Read(wxString& str)
{ {
if ( str == wxT("Invalid") )
{
m_value = wxInvalidDateTime;
return true;
}
if(! m_value.ParseDateTime(str)) if(! m_value.ParseDateTime(str))
return false; return false;
return true; return true;

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 11/07/98 // Created: 11/07/98
// RCS-ID: $Id: wfstream.cpp 44013 2006-12-19 13:49:26Z SC $ // RCS-ID: $Id: wfstream.cpp 54418 2008-06-29 01:28:43Z VZ $
// Copyright: (c) Guilhem Lavaux // Copyright: (c) Guilhem Lavaux
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -107,9 +107,9 @@ wxFileOffset wxFileInputStream::OnSysTell() const
return m_file->Tell(); return m_file->Tell();
} }
bool wxFileInputStream::IsOk() const bool wxFileInputStream::IsOk() const
{ {
return (wxStreamBase::IsOk() && m_file->IsOpened()); return (wxStreamBase::IsOk() && m_file->IsOpened());
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -183,9 +183,9 @@ wxFileOffset wxFileOutputStream::GetLength() const
return m_file->Length(); return m_file->Length();
} }
bool wxFileOutputStream::IsOk() const bool wxFileOutputStream::IsOk() const
{ {
return (wxStreamBase::IsOk() && m_file->IsOpened()); return (wxStreamBase::IsOk() && m_file->IsOpened());
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -220,9 +220,16 @@ size_t wxTempFileOutputStream::OnSysWrite(const void *buffer, size_t size)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
wxFileStream::wxFileStream(const wxString& fileName) wxFileStream::wxFileStream(const wxString& fileName)
: wxFileInputStream(fileName) : wxFileInputStream(),
wxFileOutputStream()
{ {
wxFileOutputStream::m_file = wxFileInputStream::m_file; wxFileOutputStream::m_file =
wxFileInputStream::m_file = new wxFile(fileName, wxFile::read_write);
// this is a bit ugly as streams are symmetric but we still have to delete
// the file we created above exactly once so we decide to (arbitrarily) do
// it in wxFileInputStream
wxFileInputStream::m_file_destroy = true;
} }
#endif //wxUSE_FILE #endif //wxUSE_FILE
@ -300,9 +307,9 @@ wxFileOffset wxFFileInputStream::OnSysTell() const
return m_file->Tell(); return m_file->Tell();
} }
bool wxFFileInputStream::IsOk() const bool wxFFileInputStream::IsOk() const
{ {
return (wxStreamBase::IsOk() && m_file->IsOpened()); return (wxStreamBase::IsOk() && m_file->IsOpened());
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -386,9 +393,9 @@ wxFileOffset wxFFileOutputStream::GetLength() const
return m_file->Length(); return m_file->Length();
} }
bool wxFFileOutputStream::IsOk() const bool wxFFileOutputStream::IsOk() const
{ {
return (wxStreamBase::IsOk() && m_file->IsOpened()); return (wxStreamBase::IsOk() && m_file->IsOpened());
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -396,9 +403,14 @@ bool wxFFileOutputStream::IsOk() const
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
wxFFileStream::wxFFileStream(const wxString& fileName) wxFFileStream::wxFFileStream(const wxString& fileName)
: wxFFileInputStream(fileName) : wxFFileInputStream(),
wxFFileOutputStream()
{ {
wxFFileOutputStream::m_file = wxFFileInputStream::m_file; wxFFileOutputStream::m_file =
wxFFileInputStream::m_file = new wxFFile(fileName, _T("w+b"));
// see comment in wxFileStream ctor
wxFFileInputStream::m_file_destroy = true;
} }
#endif //wxUSE_FFILE #endif //wxUSE_FFILE

View File

@ -4,7 +4,7 @@
// Author: Julian Smart, Vadim Zeitlin // Author: Julian Smart, Vadim Zeitlin
// Modified by: // Modified by:
// Created: 13/07/98 // Created: 13/07/98
// RCS-ID: $Id: wincmn.cpp 52330 2008-03-05 14:19:38Z VS $ // RCS-ID: $Id: wincmn.cpp 57704 2009-01-01 15:18:40Z VZ $
// Copyright: (c) wxWidgets team // Copyright: (c) wxWidgets team
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -2363,7 +2363,7 @@ void wxWindowBase::OnMiddleClick( wxMouseEvent& event )
msg.Printf(_T("wxWidgets Library (%s port)\n") msg.Printf(_T("wxWidgets Library (%s port)\n")
_T("Version %d.%d.%d%s%s, compiled at %s %s\n") _T("Version %d.%d.%d%s%s, compiled at %s %s\n")
_T("Runtime version of toolkit used is %d.%d.%s\n") _T("Runtime version of toolkit used is %d.%d.%s\n")
_T("Copyright (c) 1995-2007 wxWidgets team"), _T("Copyright (c) 1995-2009 wxWidgets team"),
wxPlatformInfo::Get().GetPortIdName().c_str(), wxPlatformInfo::Get().GetPortIdName().c_str(),
wxMAJOR_VERSION, wxMAJOR_VERSION,
wxMINOR_VERSION, wxMINOR_VERSION,
@ -2749,6 +2749,56 @@ void wxWindowBase::DoMoveInTabOrder(wxWindow *win, MoveKind move)
return win ? win->GetMainWindowOfCompositeControl() : NULL; return win ? win->GetMainWindowOfCompositeControl() : NULL;
} }
// ----------------------------------------------------------------------------
// drag and drop
// ----------------------------------------------------------------------------
#if wxUSE_DRAG_AND_DROP && !defined(__WXMSW__)
class wxDragAcceptFilesImplTarget : public wxFileDropTarget
{
public:
wxDragAcceptFilesImplTarget(wxWindowBase *win) : m_win(win) {}
virtual bool OnDropFiles(wxCoord x, wxCoord y,
const wxArrayString& filenames)
{
wxDropFilesEvent event(wxEVT_DROP_FILES,
filenames.size(),
wxCArrayString(filenames).Release());
event.SetEventObject(m_win);
event.m_pos.x = x;
event.m_pos.y = y;
return m_win->GetEventHandler()->ProcessEvent(event);
}
private:
wxWindowBase * const m_win;
DECLARE_NO_COPY_CLASS(wxDragAcceptFilesImplTarget)
};
// Generic version of DragAcceptFiles(). It works by installing a simple
// wxFileDropTarget-to-EVT_DROP_FILES adaptor and therefore cannot be used
// together with explicit SetDropTarget() calls.
void wxWindowBase::DragAcceptFiles(bool accept)
{
if ( accept )
{
wxASSERT_MSG( !GetDropTarget(),
_T("cannot use DragAcceptFiles() and SetDropTarget() together") );
SetDropTarget(new wxDragAcceptFilesImplTarget(this));
}
else
{
SetDropTarget(NULL);
}
}
#endif // wxUSE_DRAG_AND_DROP && !defined(__WXMSW__)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// global functions // global functions
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@ -4,7 +4,7 @@
// Author: Ove Kaven // Author: Ove Kaven
// Modified by: Ron Lee, Francesco Montorsi // Modified by: Ron Lee, Francesco Montorsi
// Created: 09/04/99 // Created: 09/04/99
// RCS-ID: $Id: wxchar.cpp 54071 2008-06-10 18:22:32Z VZ $ // RCS-ID: $Id: wxchar.cpp 58994 2009-02-18 15:49:09Z FM $
// Copyright: (c) wxWidgets copyright // Copyright: (c) wxWidgets copyright
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -565,6 +565,8 @@ bool wxPrintfConvSpec::Parse(const wxChar *format)
break; break;
case wxT('c'): case wxT('c'):
m_szFlags[flagofs++] = char(ch);
m_szFlags[flagofs] = '\0';
if (ilen == -1) if (ilen == -1)
{ {
// in Unicode mode %hc == ANSI character // in Unicode mode %hc == ANSI character
@ -591,6 +593,8 @@ bool wxPrintfConvSpec::Parse(const wxChar *format)
break; break;
case wxT('s'): case wxT('s'):
m_szFlags[flagofs++] = char(ch);
m_szFlags[flagofs] = '\0';
if (ilen == -1) if (ilen == -1)
{ {
// Unicode mode wx extension: we'll let %hs mean non-Unicode // Unicode mode wx extension: we'll let %hs mean non-Unicode
@ -615,6 +619,8 @@ bool wxPrintfConvSpec::Parse(const wxChar *format)
break; break;
case wxT('n'): case wxT('n'):
m_szFlags[flagofs++] = char(ch);
m_szFlags[flagofs] = '\0';
if (ilen == 0) if (ilen == 0)
m_type = wxPAT_NINT; m_type = wxPAT_NINT;
else if (ilen == -1) else if (ilen == -1)
@ -671,7 +677,7 @@ void wxPrintfConvSpec::ReplaceAsteriskWith(int width)
bool wxPrintfConvSpec::LoadArg(wxPrintfArg *p, va_list &argptr) bool wxPrintfConvSpec::LoadArg(wxPrintfArg *p, va_list &argptr)
{ {
// did the '*' width/precision specifier was used ? // was the '*' width/precision specifier used ?
if (m_nMaxWidth == -1) if (m_nMaxWidth == -1)
{ {
// take the maxwidth specifier from the stack // take the maxwidth specifier from the stack
@ -1191,7 +1197,7 @@ int WXDLLEXPORT wxVsnprintf_(wxChar *buf, size_t lenMax,
// NOTE2: the +1 is because we want to copy also the '\0' // NOTE2: the +1 is because we want to copy also the '\0'
size_t tocopy = wxStrlen(format) + 1 - ( toparse - format ) ; size_t tocopy = wxStrlen(format) + 1 - ( toparse - format ) ;
lenCur += wxCopyStrWithPercents(lenMax - lenCur, buf + lenCur, lenCur += wxCopyStrWithPercents(lenMax - lenCur, buf + lenCur,
tocopy, toparse) - 1; tocopy, toparse) - 1;
if (buf[lenCur]) if (buf[lenCur])
{ {
@ -1256,7 +1262,7 @@ int WXDLLEXPORT wxSnprintf_(wxChar *buf, size_t len, const wxChar *format, ...)
int wxSprintf (wchar_t * s, const wchar_t * format, ... ) int wxSprintf (wchar_t * s, const wchar_t * format, ... )
{ {
va_list arglist; va_list arglist;
va_start( arglist, format ); va_start( arglist, format );
int iLen = swprintf ( s, -1, format, arglist ); int iLen = swprintf ( s, -1, format, arglist );
va_end( arglist ); va_end( arglist );

View File

@ -2,7 +2,7 @@
// Name: src/common/xpmdecod.cpp // Name: src/common/xpmdecod.cpp
// Purpose: wxXPMDecoder // Purpose: wxXPMDecoder
// Author: John Cristy, Vaclav Slavik // Author: John Cristy, Vaclav Slavik
// RCS-ID: $Id: xpmdecod.cpp 41689 2006-10-08 08:04:49Z PC $ // RCS-ID: $Id: xpmdecod.cpp 54948 2008-08-03 10:54:33Z VZ $
// Copyright: (c) John Cristy, Vaclav Slavik // Copyright: (c) John Cristy, Vaclav Slavik
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -108,6 +108,7 @@ license is as follows:
#include "wx/hashmap.h" #include "wx/hashmap.h"
#include "wx/stream.h" #include "wx/stream.h"
#include "wx/image.h" #include "wx/image.h"
#include "wx/palette.h"
#endif #endif
#include <string.h> #include <string.h>
@ -808,6 +809,24 @@ wxImage wxXPMDecoder::ReadData(const char* const* xpm_data)
} }
} }
#if wxUSE_PALETTE
unsigned char* r = new unsigned char[colors_cnt];
unsigned char* g = new unsigned char[colors_cnt];
unsigned char* b = new unsigned char[colors_cnt];
for (it = clr_tbl.begin(), i = 0; it != clr_tbl.end(); it++, i++)
{
r[i] = it->second.R;
g[i] = it->second.G;
b[i] = it->second.B;
}
wxASSERT(i == colors_cnt);
img.SetPalette(wxPalette(colors_cnt, r, g, b));
delete[] r;
delete[] g;
delete[] b;
#endif // wxUSE_PALETTE
return img; return img;
} }

View File

@ -3,7 +3,7 @@
// Purpose: implements wxGenericAboutBox() function // Purpose: implements wxGenericAboutBox() function
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Created: 2006-10-08 // Created: 2006-10-08
// RCS-ID: $Id: aboutdlgg.cpp 49560 2007-10-31 16:08:18Z VZ $ // RCS-ID: $Id: aboutdlgg.cpp 58761 2009-02-08 14:55:44Z VZ $
// Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org> // Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -96,6 +96,19 @@ wxIcon wxAboutDialogInfo::GetIcon() const
return icon; return icon;
} }
wxString wxAboutDialogInfo::GetCopyrightToDisplay() const
{
wxString ret = m_copyright;
#if wxUSE_UNICODE
const wxString copyrightSign = wxString::FromUTF8("\xc2\xa9");
ret.Replace(_T("(c)"), copyrightSign);
ret.Replace(_T("(C)"), copyrightSign);
#endif // wxUSE_UNICODE
return ret;
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxGenericAboutDialog // wxGenericAboutDialog
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -120,7 +133,7 @@ bool wxGenericAboutDialog::Create(const wxAboutDialogInfo& info)
m_sizerText->Add(label, wxSizerFlags().Centre().Border()); m_sizerText->Add(label, wxSizerFlags().Centre().Border());
m_sizerText->AddSpacer(5); m_sizerText->AddSpacer(5);
AddText(info.GetCopyright()); AddText(info.GetCopyrightToDisplay());
AddText(info.GetDescription()); AddText(info.GetDescription());
if ( info.HasWebSite() ) if ( info.HasWebSite() )

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin (original code by Robert Roebling) // Author: Vadim Zeitlin (original code by Robert Roebling)
// Modified by: // Modified by:
// Created: 25.05.99 // Created: 25.05.99
// RCS-ID: $Id: caret.cpp 42397 2006-10-25 12:12:56Z VS $ // RCS-ID: $Id: caret.cpp 55170 2008-08-22 10:34:32Z JS $
// Copyright: (c) wxWidgets team // Copyright: (c) wxWidgets team
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -268,10 +268,37 @@ void wxCaret::Refresh()
void wxCaret::DoDraw(wxDC *dc) void wxCaret::DoDraw(wxDC *dc)
{ {
dc->SetPen( *wxBLACK_PEN ); #if defined(__WXGTK__) || defined(__WXMAC__)
wxClientDC* clientDC = wxDynamicCast(dc, wxClientDC);
dc->SetBrush(*(m_hasFocus ? wxBLACK_BRUSH : wxTRANSPARENT_BRUSH)); if (clientDC)
dc->SetPen(*wxBLACK_PEN); {
wxPen pen(*wxBLACK_PEN);
wxBrush brush(*wxBLACK_BRUSH);
#ifdef __WXGTK__
wxWindow* win = clientDC->m_owner;
#else
wxWindow* win = clientDC->GetWindow();
#endif
if (win)
{
wxColour backgroundColour(win->GetBackgroundColour());
if (backgroundColour.Red() < 100 &&
backgroundColour.Green() < 100 &&
backgroundColour.Blue() < 100)
{
pen = *wxWHITE_PEN;
brush = *wxWHITE_BRUSH;
}
}
dc->SetPen( pen );
dc->SetBrush(m_hasFocus ? brush : *wxTRANSPARENT_BRUSH);
}
else
#endif
{
dc->SetBrush(*(m_hasFocus ? wxBLACK_BRUSH : wxTRANSPARENT_BRUSH));
dc->SetPen(*wxBLACK_PEN);
}
// VZ: unfortunately, the rectangle comes out a pixel smaller when this is // VZ: unfortunately, the rectangle comes out a pixel smaller when this is
// done under wxGTK - no idea why // done under wxGTK - no idea why

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: Wlodzimierz ABX Skiba from generic/listbkg.cpp // Modified by: Wlodzimierz ABX Skiba from generic/listbkg.cpp
// Created: 15.09.04 // Created: 15.09.04
// RCS-ID: $Id: choicbkg.cpp 53045 2008-04-06 15:14:25Z VZ $ // RCS-ID: $Id: choicbkg.cpp 58355 2009-01-24 14:12:59Z VZ $
// Copyright: (c) Vadim Zeitlin, Wlodzimierz Skiba // Copyright: (c) Vadim Zeitlin, Wlodzimierz Skiba
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -146,11 +146,15 @@ wxSize wxChoicebook::CalcSizeFromPage(const wxSize& sizePage) const
wxSize size = sizePage; wxSize size = sizePage;
if ( IsVertical() ) if ( IsVertical() )
{ {
if ( sizeChoice.x > sizePage.x )
size.x = sizeChoice.x;
size.y += sizeChoice.y + GetInternalBorder(); size.y += sizeChoice.y + GetInternalBorder();
} }
else // left/right aligned else // left/right aligned
{ {
size.x += sizeChoice.x + GetInternalBorder(); size.x += sizeChoice.x + GetInternalBorder();
if ( sizeChoice.y > sizePage.y )
size.y = sizeChoice.y;
} }
return size; return size;

View File

@ -4,7 +4,7 @@
// Author: Francesco Montorsi (readapted code written by Vadim Zeitlin) // Author: Francesco Montorsi (readapted code written by Vadim Zeitlin)
// Modified by: // Modified by:
// Created: 15/04/2006 // Created: 15/04/2006
// RCS-ID: $Id: clrpickerg.cpp 52835 2008-03-26 15:49:08Z JS $ // RCS-ID: $Id: clrpickerg.cpp 58967 2009-02-17 13:31:28Z SC $
// Copyright: (c) Vadim Zeitlin, Francesco Montorsi // Copyright: (c) Vadim Zeitlin, Francesco Montorsi
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -36,7 +36,7 @@
// ============================================================================ // ============================================================================
wxColourData wxGenericColourButton::ms_data; wxColourData wxGenericColourButton::ms_data;
IMPLEMENT_DYNAMIC_CLASS(wxGenericColourButton, wxButton) IMPLEMENT_DYNAMIC_CLASS(wxGenericColourButton, wxCLRBTN_BASE_CLASS)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxGenericColourButton // wxGenericColourButton
@ -48,8 +48,14 @@ bool wxGenericColourButton::Create( wxWindow *parent, wxWindowID id,
const wxValidator& validator, const wxString &name) const wxValidator& validator, const wxString &name)
{ {
// create this button // create this button
#if wxCLRBTN_USES_BMP_BUTTON
wxBitmap empty(1,1);
if (!wxBitmapButton::Create( parent, id, empty, pos,
size, style, validator, name ))
#else
if (!wxButton::Create( parent, id, wxEmptyString, pos, if (!wxButton::Create( parent, id, wxEmptyString, pos,
size, style, validator, name )) size, style, validator, name ))
#endif
{ {
wxFAIL_MSG( wxT("wxGenericColourButton creation failed") ); wxFAIL_MSG( wxT("wxGenericColourButton creation failed") );
return false; return false;
@ -101,8 +107,13 @@ void wxGenericColourButton::UpdateColour()
{ {
if ( !m_colour.Ok() ) if ( !m_colour.Ok() )
{ {
#if wxCLRBTN_USES_BMP_BUTTON
wxBitmap empty(1,1);
SetBitmapLabel(empty);
#else
if ( HasFlag(wxCLRP_SHOW_LABEL) ) if ( HasFlag(wxCLRP_SHOW_LABEL) )
SetLabel(wxEmptyString); SetLabel(wxEmptyString);
#endif
return; return;
} }
@ -110,18 +121,63 @@ void wxGenericColourButton::UpdateColour()
// the colour to make sure fg colour is different enough from m_colour // the colour to make sure fg colour is different enough from m_colour
wxColour colFg(~m_colour.Red(), ~m_colour.Green(), ~m_colour.Blue()); wxColour colFg(~m_colour.Red(), ~m_colour.Green(), ~m_colour.Blue());
#if wxCLRBTN_USES_BMP_BUTTON
wxSize sz = GetSize();
sz.x -= 2*GetMarginX();
sz.y -= 2*GetMarginY();
wxPoint topleft;
if ( sz.x < 1 )
sz.x = 1;
else
if ( sz.y < 1 )
sz.y = 1;
wxBitmap bmp(sz.x, sz.y);
{
wxMemoryDC memdc(bmp);
memdc.SetPen(colFg);
memdc.SetBrush(m_colour);
memdc.DrawRectangle(topleft,sz);
if ( HasFlag(wxCLRP_SHOW_LABEL) )
{
int x, y, leading, desc;
wxString label = m_colour.GetAsString(wxC2S_HTML_SYNTAX);
memdc.GetTextExtent(label,&x,&y,&desc,&leading);
if ( x <= sz.x && y <= sz.y )
{
topleft.x += (sz.x-x)/2;
topleft.y += (sz.y-y)/2;
memdc.SetTextForeground(colFg);
memdc.DrawText(label,topleft);
}
}
}
SetBitmapLabel(bmp);
#else
SetForegroundColour(colFg); SetForegroundColour(colFg);
SetBackgroundColour(m_colour); SetBackgroundColour(m_colour);
if ( HasFlag(wxCLRP_SHOW_LABEL) ) if ( HasFlag(wxCLRP_SHOW_LABEL) )
SetLabel(m_colour.GetAsString(wxC2S_HTML_SYNTAX)); SetLabel(m_colour.GetAsString(wxC2S_HTML_SYNTAX));
#endif
} }
wxSize wxGenericColourButton::DoGetBestSize() const wxSize wxGenericColourButton::DoGetBestSize() const
{ {
wxSize sz(wxButton::DoGetBestSize()); wxSize sz(wxButton::DoGetBestSize());
if ( HasFlag(wxCLRP_SHOW_LABEL) ) if ( HasFlag(wxCLRP_SHOW_LABEL) )
{
#if wxCLRBTN_USES_BMP_BUTTON
int x, y, leading, desc;
wxString label = m_colour.GetAsString(wxC2S_HTML_SYNTAX);
wxClientDC dc(const_cast<wxGenericColourButton*>(this));
dc.GetTextExtent(label,&x,&y,&desc,&leading);
sz.x = sz.y+x;
#endif
return sz; return sz;
}
// if we have no label, then make this button a square // if we have no label, then make this button a square
// (like e.g. native GTK version of this control) // (like e.g. native GTK version of this control)

View File

@ -4,7 +4,7 @@
// Author: Andreas Pflug // Author: Andreas Pflug
// Modified by: // Modified by:
// Created: 2005-01-19 // Created: 2005-01-19
// RCS-ID: $Id: datectlg.cpp 53510 2008-05-09 22:15:55Z RD $ // RCS-ID: $Id: datectlg.cpp 54407 2008-06-28 18:58:07Z VZ $
// Copyright: (c) 2005 Andreas Pflug <pgadmin@pse-consulting.de> // Copyright: (c) 2005 Andreas Pflug <pgadmin@pse-consulting.de>
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -169,6 +169,11 @@ public:
} }
} }
bool IsTextEmpty() const
{
return m_combo->GetTextCtrl()->IsEmpty();
}
bool ParseDateTime(const wxString& s, wxDateTime* pDt) bool ParseDateTime(const wxString& s, wxDateTime* pDt)
{ {
wxASSERT(pDt); wxASSERT(pDt);
@ -470,6 +475,8 @@ wxDatePickerCtrlGeneric::SetDateRange(const wxDateTime& lowerdate,
wxDateTime wxDatePickerCtrlGeneric::GetValue() const wxDateTime wxDatePickerCtrlGeneric::GetValue() const
{ {
if ( HasFlag(wxDP_ALLOWNONE) && m_popup->IsTextEmpty() )
return wxInvalidDateTime;
return m_popup->GetDate(); return m_popup->GetDate();
} }

View File

@ -4,7 +4,7 @@
// Author: Julian Smart, Robert Roebling, Markus Holzhem // Author: Julian Smart, Robert Roebling, Markus Holzhem
// Modified by: // Modified by:
// Created: 04/01/98 // Created: 04/01/98
// RCS-ID: $Id: dcpsg.cpp 50711 2007-12-15 02:57:58Z VZ $ // RCS-ID: $Id: dcpsg.cpp 55927 2008-09-28 09:12:16Z VS $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -987,8 +987,11 @@ void wxPostScriptDC::SetFont( const wxFont& font )
PsPrint( name ); PsPrint( name );
PsPrint( " findfont\n" ); PsPrint( " findfont\n" );
float size = float(m_font.GetPointSize());
size = size * GetFontPointSizeAdjustment(GetResolution());
char buffer[100]; char buffer[100];
sprintf( buffer, "%f scalefont setfont\n", LogicalToDeviceYRel(m_font.GetPointSize() * 1000) / 1000.0F); sprintf( buffer, "%f scalefont setfont\n", size * m_scaleX);
// this is a hack - we must scale font size (in pts) according to m_scaleY but // this is a hack - we must scale font size (in pts) according to m_scaleY but
// LogicalToDeviceYRel works with wxCoord type (int or longint). Se we first convert font size // LogicalToDeviceYRel works with wxCoord type (int or longint). Se we first convert font size
// to 1/1000th of pt and then back. // to 1/1000th of pt and then back.
@ -1590,7 +1593,6 @@ bool wxPostScriptDC::StartDoc( const wxString& message )
m_title = message; m_title = message;
PsPrint( "%!PS-Adobe-2.0\n" ); PsPrint( "%!PS-Adobe-2.0\n" );
PsPrintf( wxT("%%%%Title: %s\n"), m_title.c_str() );
PsPrint( "%%Creator: wxWidgets PostScript renderer\n" ); PsPrint( "%%Creator: wxWidgets PostScript renderer\n" );
PsPrintf( wxT("%%%%CreationDate: %s\n"), wxNow().c_str() ); PsPrintf( wxT("%%%%CreationDate: %s\n"), wxNow().c_str() );
if (m_printData.GetOrientation() == wxLANDSCAPE) if (m_printData.GetOrientation() == wxLANDSCAPE)
@ -1841,7 +1843,8 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
if (!fontToUse) fontToUse = (wxFont*) &m_font; if (!fontToUse) fontToUse = (wxFont*) &m_font;
wxCHECK_RET( fontToUse, wxT("GetTextExtent: no font defined") ); const float fontSize =
fontToUse->GetPointSize() * GetFontPointSizeAdjustment(72.0);
if (string.empty()) if (string.empty())
{ {
@ -1861,15 +1864,10 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
* Produces accurate results for mono-spaced font * Produces accurate results for mono-spaced font
* such as Courier (aka wxMODERN) */ * such as Courier (aka wxMODERN) */
int height = 12;
if (fontToUse)
{
height = fontToUse->GetPointSize();
}
if ( x ) if ( x )
*x = strlen (strbuf) * height * 72 / 120; *x = strlen (strbuf) * fontSize * 72.0 / 120.0;
if ( y ) if ( y )
*y = (wxCoord) (height * 1.32); /* allow for descender */ *y = (wxCoord) (fontSize * 1.32); /* allow for descender */
if (descent) *descent = 0; if (descent) *descent = 0;
if (externalLeading) *externalLeading = 0; if (externalLeading) *externalLeading = 0;
#else #else
@ -2136,9 +2134,9 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
// VS: dirty, but is there any better solution? // VS: dirty, but is there any better solution?
double *pt; double *pt;
pt = (double*) &m_underlinePosition; pt = (double*) &m_underlinePosition;
*pt = LogicalToDeviceYRel((wxCoord)(UnderlinePosition * fontToUse->GetPointSize())) / 1000.0f; *pt = LogicalToDeviceYRel((wxCoord)(UnderlinePosition * fontSize)) / 1000.0f;
pt = (double*) &m_underlineThickness; pt = (double*) &m_underlineThickness;
*pt = LogicalToDeviceYRel((wxCoord)(UnderlineThickness * fontToUse->GetPointSize())) / 1000.0f; *pt = LogicalToDeviceYRel((wxCoord)(UnderlineThickness * fontSize)) / 1000.0f;
} }
@ -2148,7 +2146,7 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
/ string. they are given in 1/1000 of the size! */ / string. they are given in 1/1000 of the size! */
long sum=0; long sum=0;
wxCoord height=Size; /* by default */ float height=fontSize; /* by default */
unsigned char *p; unsigned char *p;
for(p=(unsigned char *)wxMBSTRINGCAST strbuf; *p; p++) for(p=(unsigned char *)wxMBSTRINGCAST strbuf; *p; p++)
{ {
@ -2164,7 +2162,7 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
} }
double widthSum = sum; double widthSum = sum;
widthSum *= Size; widthSum *= fontSize;
widthSum /= 1000.0F; widthSum /= 1000.0F;
/* add descender to height (it is usually a negative value) */ /* add descender to height (it is usually a negative value) */
@ -2179,14 +2177,14 @@ void wxPostScriptDC::DoGetTextExtent(const wxString& string,
if ( x ) if ( x )
*x = (wxCoord)widthSum; *x = (wxCoord)widthSum;
if ( y ) if ( y )
*y = height; *y = (wxCoord)height;
/* return other parameters */ /* return other parameters */
if (descent) if (descent)
{ {
if(lastDescender!=INT_MIN) if(lastDescender!=INT_MIN)
{ {
*descent = (wxCoord)(((-lastDescender)/1000.0F) * Size); /* MATTHEW: forgot scale */ *descent = (wxCoord)(((-lastDescender)/1000.0F) * fontSize); /* MATTHEW: forgot scale */
} }
else else
{ {

View File

@ -4,7 +4,7 @@
// Author: Stefan Csomor // Author: Stefan Csomor
// Modified by: // Modified by:
// Created: 2006-10-03 // Created: 2006-10-03
// RCS-ID: $Id: graphicc.cpp 51312 2008-01-21 16:30:13Z VS $ // RCS-ID: $Id: graphicc.cpp 56887 2008-11-22 04:40:08Z KO $
// Copyright: (c) 2006 Stefan Csomor // Copyright: (c) 2006 Stefan Csomor
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -301,6 +301,23 @@ private :
double m_alpha; double m_alpha;
}; };
class wxCairoBitmapData : public wxGraphicsObjectRefData
{
public:
wxCairoBitmapData( wxGraphicsRenderer* renderer, const wxBitmap& bmp );
~wxCairoBitmapData();
virtual cairo_surface_t* GetCairoSurface() { return m_surface; }
virtual cairo_pattern_t* GetCairoPattern() { return m_pattern; }
virtual wxSize GetSize() { return wxSize(m_width, m_height); }
private :
cairo_surface_t* m_surface;
cairo_pattern_t* m_pattern;
int m_width;
int m_height;
unsigned char* m_buffer;
};
class WXDLLIMPEXP_CORE wxCairoContext : public wxGraphicsContext class WXDLLIMPEXP_CORE wxCairoContext : public wxGraphicsContext
{ {
DECLARE_NO_COPY_CLASS(wxCairoContext) DECLARE_NO_COPY_CLASS(wxCairoContext)
@ -341,6 +358,7 @@ public:
// gets the matrix of this context // gets the matrix of this context
virtual wxGraphicsMatrix GetTransform() const; virtual wxGraphicsMatrix GetTransform() const;
void DrawGraphicsBitmapInternal( const wxGraphicsBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h );
virtual void DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h ); virtual void DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h );
virtual void DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h ); virtual void DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h );
virtual void PushState(); virtual void PushState();
@ -961,6 +979,90 @@ void * wxCairoMatrixData::GetNativeMatrix() const
return (void*) &m_matrix; return (void*) &m_matrix;
} }
//-----------------------------------------------------------------------------
// wxCairoBitmap implementation
//-----------------------------------------------------------------------------
wxCairoBitmapData::wxCairoBitmapData( wxGraphicsRenderer* renderer, const wxBitmap& bmp ) : wxGraphicsObjectRefData( renderer )
{
wxCHECK_RET( bmp.IsOk(), wxT("Invalid bitmap in wxCairoContext::DrawBitmap"));
int bw = m_width = bmp.GetWidth();
int bh = m_height = bmp.GetHeight();
wxBitmap bmpSource = bmp; // we need a non-const instance
m_buffer = new unsigned char[bw*bh*4];
wxUint32* data = (wxUint32*)m_buffer;
// Create a surface object and copy the bitmap pixel data to it. if the
// image has alpha (or a mask represented as alpha) then we'll use a
// different format and iterator than if it doesn't...
if (bmpSource.HasAlpha() || bmpSource.GetMask())
{
m_surface = cairo_image_surface_create_for_data(
m_buffer, CAIRO_FORMAT_ARGB32, bw, bh, bw*4);
wxAlphaPixelData pixData(bmpSource, wxPoint(0,0), wxSize(bw, bh));
wxCHECK_RET( pixData, wxT("Failed to gain raw access to bitmap data."));
wxAlphaPixelData::Iterator p(pixData);
for (int y=0; y<bh; y++)
{
wxAlphaPixelData::Iterator rowStart = p;
for (int x=0; x<bw; x++)
{
// Each pixel in CAIRO_FORMAT_ARGB32 is a 32-bit quantity,
// with alpha in the upper 8 bits, then red, then green, then
// blue. The 32-bit quantities are stored native-endian.
// Pre-multiplied alpha is used.
unsigned char alpha = p.Alpha();
if (alpha == 0)
*data = 0;
else
*data = ( alpha << 24
| (p.Red() * alpha/255) << 16
| (p.Green() * alpha/255) << 8
| (p.Blue() * alpha/255) );
++data;
++p;
}
p = rowStart;
p.OffsetY(pixData, 1);
}
}
else // no alpha
{
m_surface = cairo_image_surface_create_for_data(
m_buffer, CAIRO_FORMAT_RGB24, bw, bh, bw*4);
wxNativePixelData pixData(bmpSource, wxPoint(0,0), wxSize(bw, bh));
wxCHECK_RET( pixData, wxT("Failed to gain raw access to bitmap data."));
wxNativePixelData::Iterator p(pixData);
for (int y=0; y<bh; y++)
{
wxNativePixelData::Iterator rowStart = p;
for (int x=0; x<bw; x++)
{
// Each pixel in CAIRO_FORMAT_RGB24 is a 32-bit quantity, with
// the upper 8 bits unused. Red, Green, and Blue are stored in
// the remaining 24 bits in that order. The 32-bit quantities
// are stored native-endian.
*data = ( p.Red() << 16 | p.Green() << 8 | p.Blue() );
++data;
++p;
}
p = rowStart;
p.OffsetY(pixData, 1);
}
}
m_pattern = cairo_pattern_create_for_surface(m_surface);
}
wxCairoBitmapData::~wxCairoBitmapData()
{
cairo_pattern_destroy(m_pattern);
cairo_surface_destroy(m_surface);
delete [] m_buffer;
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxCairoContext implementation // wxCairoContext implementation
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -1144,101 +1246,40 @@ void wxCairoContext::PopState()
cairo_restore(m_context); cairo_restore(m_context);
} }
void wxGraphicsContext::DrawGraphicsBitmap(const wxGraphicsBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h)
{
static_cast<wxCairoContext*>(this)->DrawGraphicsBitmapInternal(bmp, x, y, w, h);
}
void wxCairoContext::DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h ) void wxCairoContext::DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h )
{ {
wxCHECK_RET( bmp.IsOk(), wxT("Invalid bitmap in wxCairoContext::DrawBitmap")); wxGraphicsBitmap bitmap = GetRenderer()->CreateBitmap(bmp);
DrawGraphicsBitmapInternal(bitmap, x, y, w, h);
}
cairo_surface_t* surface; void wxCairoContext::DrawGraphicsBitmapInternal(const wxGraphicsBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h )
int bw = bmp.GetWidth(); {
int bh = bmp.GetHeight(); wxCairoBitmapData* data = static_cast<wxCairoBitmapData*>(bmp.GetRefData());
wxBitmap bmpSource = bmp; // we need a non-const instance cairo_pattern_t* pattern = data->GetCairoPattern();
unsigned char* buffer = new unsigned char[bw*bh*4]; wxSize size = data->GetSize();
wxUint32* data = (wxUint32*)buffer;
// Create a surface object and copy the bitmap pixel data to it. if the
// image has alpha (or a mask represented as alpha) then we'll use a
// different format and iterator than if it doesn't...
if (bmpSource.HasAlpha() || bmpSource.GetMask())
{
surface = cairo_image_surface_create_for_data(
buffer, CAIRO_FORMAT_ARGB32, bw, bh, bw*4);
wxAlphaPixelData pixData(bmpSource, wxPoint(0,0), wxSize(bw, bh));
wxCHECK_RET( pixData, wxT("Failed to gain raw access to bitmap data."));
wxAlphaPixelData::Iterator p(pixData);
for (int y=0; y<bh; y++)
{
wxAlphaPixelData::Iterator rowStart = p;
for (int x=0; x<bw; x++)
{
// Each pixel in CAIRO_FORMAT_ARGB32 is a 32-bit quantity,
// with alpha in the upper 8 bits, then red, then green, then
// blue. The 32-bit quantities are stored native-endian.
// Pre-multiplied alpha is used.
unsigned char alpha = p.Alpha();
if (alpha == 0)
*data = 0;
else
*data = ( alpha << 24
| (p.Red() * alpha/255) << 16
| (p.Green() * alpha/255) << 8
| (p.Blue() * alpha/255) );
++data;
++p;
}
p = rowStart;
p.OffsetY(pixData, 1);
}
}
else // no alpha
{
surface = cairo_image_surface_create_for_data(
buffer, CAIRO_FORMAT_RGB24, bw, bh, bw*4);
wxNativePixelData pixData(bmpSource, wxPoint(0,0), wxSize(bw, bh));
wxCHECK_RET( pixData, wxT("Failed to gain raw access to bitmap data."));
wxNativePixelData::Iterator p(pixData);
for (int y=0; y<bh; y++)
{
wxNativePixelData::Iterator rowStart = p;
for (int x=0; x<bw; x++)
{
// Each pixel in CAIRO_FORMAT_RGB24 is a 32-bit quantity, with
// the upper 8 bits unused. Red, Green, and Blue are stored in
// the remaining 24 bits in that order. The 32-bit quantities
// are stored native-endian.
*data = ( p.Red() << 16 | p.Green() << 8 | p.Blue() );
++data;
++p;
}
p = rowStart;
p.OffsetY(pixData, 1);
}
}
PushState(); PushState();
// In case we're scaling the image by using a width and height different // In case we're scaling the image by using a width and height different
// than the bitmap's size create a pattern transformation on the surface and // than the bitmap's size create a pattern transformation on the surface and
// draw the transformed pattern. // draw the transformed pattern.
cairo_pattern_t* pattern = cairo_pattern_create_for_surface(surface); wxDouble scaleX = w / size.GetWidth();
wxDouble scaleX = w / bw; wxDouble scaleY = h / size.GetHeight();
wxDouble scaleY = h / bh;
cairo_scale(m_context, scaleX, scaleY); cairo_scale(m_context, scaleX, scaleY);
// prepare to draw the image // prepare to draw the image
cairo_translate(m_context, x, y); cairo_translate(m_context, x, y);
cairo_set_source(m_context, pattern); cairo_set_source(m_context, pattern);
// use the original size here since the context is scaled already... // use the original size here since the context is scaled already...
cairo_rectangle(m_context, 0, 0, bw, bh); cairo_rectangle(m_context, 0, 0, size.GetWidth(), size.GetHeight());
// fill the rectangle using the pattern // fill the rectangle using the pattern
cairo_fill(m_context); cairo_fill(m_context);
// clean up // clean up
cairo_pattern_destroy(pattern);
cairo_surface_destroy(surface);
delete [] buffer;
PopState(); PopState();
} }
@ -1253,7 +1294,9 @@ void wxCairoContext::DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDou
void wxCairoContext::DrawText( const wxString &str, wxDouble x, wxDouble y ) void wxCairoContext::DrawText( const wxString &str, wxDouble x, wxDouble y )
{ {
if ( m_font.IsNull() || str.empty()) wxCHECK_RET( !m_font.IsNull(), wxT("wxCairoContext::DrawText - no valid font set") );
if ( str.empty())
return; return;
((wxCairoFontData*)m_font.GetRefData())->Apply(this); ((wxCairoFontData*)m_font.GetRefData())->Apply(this);
@ -1271,7 +1314,9 @@ void wxCairoContext::DrawText( const wxString &str, wxDouble x, wxDouble y )
void wxCairoContext::GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height, void wxCairoContext::GetTextExtent( const wxString &str, wxDouble *width, wxDouble *height,
wxDouble *descent, wxDouble *externalLeading ) const wxDouble *descent, wxDouble *externalLeading ) const
{ {
if ( m_font.IsNull() || str.empty()) wxCHECK_RET( !m_font.IsNull(), wxT("wxCairoContext::GetTextExtent - no valid font set") );
if ( str.empty())
return; return;
((wxCairoFontData*)m_font.GetRefData())->Apply((wxCairoContext*)this); ((wxCairoFontData*)m_font.GetRefData())->Apply((wxCairoContext*)this);
@ -1303,6 +1348,8 @@ void wxCairoContext::GetPartialTextExtents(const wxString& text, wxArrayDouble&
widths.Empty(); widths.Empty();
widths.Add(0, text.length()); widths.Add(0, text.length());
wxCHECK_RET( !m_font.IsNull(), wxT("wxCairoContext::GetPartialTextExtents - no valid font set") );
if (text.empty()) if (text.empty())
return; return;
@ -1366,6 +1413,8 @@ public :
// sets the font // sets the font
virtual wxGraphicsFont CreateFont( const wxFont &font , const wxColour &col = *wxBLACK ) ; virtual wxGraphicsFont CreateFont( const wxFont &font , const wxColour &col = *wxBLACK ) ;
wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) ;
private : private :
DECLARE_DYNAMIC_CLASS_NO_COPY(wxCairoRenderer) DECLARE_DYNAMIC_CLASS_NO_COPY(wxCairoRenderer)
@ -1507,4 +1556,16 @@ wxGraphicsFont wxCairoRenderer::CreateFont( const wxFont &font , const wxColour
return wxNullGraphicsFont; return wxNullGraphicsFont;
} }
wxGraphicsBitmap wxGraphicsRenderer::CreateBitmap( const wxBitmap& bmp )
{
if ( bmp.Ok() )
{
wxGraphicsBitmap p;
p.SetRefData(new wxCairoBitmapData( this , bmp ));
return p;
}
else
return wxNullGraphicsBitmap;
}
#endif // wxUSE_GRAPHICS_CONTEXT #endif // wxUSE_GRAPHICS_CONTEXT

View File

@ -4,7 +4,7 @@
// Author: Michael Bedward (based on code by Julian Smart, Robin Dunn) // Author: Michael Bedward (based on code by Julian Smart, Robin Dunn)
// Modified by: Robin Dunn, Vadim Zeitlin, Santiago Palacios // Modified by: Robin Dunn, Vadim Zeitlin, Santiago Palacios
// Created: 1/08/1999 // Created: 1/08/1999
// RCS-ID: $Id: grid.cpp 54276 2008-06-18 11:21:57Z SN $ // RCS-ID: $Id: grid.cpp 58753 2009-02-08 10:23:19Z VZ $
// Copyright: (c) Michael Bedward (mbedward@ozemail.com.au) // Copyright: (c) Michael Bedward (mbedward@ozemail.com.au)
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -96,7 +96,7 @@ struct wxGridCellWithAttr
{ {
if (attr != new_attr) if (attr != new_attr)
{ {
// "Delete" (i.e. DecRef) the old attribute. // "Delete" (i.e. DecRef) the old attribute.
attr->DecRef(); attr->DecRef();
attr = new_attr; attr = new_attr;
// Take ownership of the new attribute, i.e. no IncRef. // Take ownership of the new attribute, i.e. no IncRef.
@ -943,7 +943,6 @@ void wxGridCellNumberEditor::BeginEdit(int row, int col, wxGrid* grid)
bool wxGridCellNumberEditor::EndEdit(int row, int col, bool wxGridCellNumberEditor::EndEdit(int row, int col,
wxGrid* grid) wxGrid* grid)
{ {
bool changed;
long value = 0; long value = 0;
wxString text; wxString text;
@ -951,26 +950,40 @@ bool wxGridCellNumberEditor::EndEdit(int row, int col,
if ( HasRange() ) if ( HasRange() )
{ {
value = Spin()->GetValue(); value = Spin()->GetValue();
changed = value != m_valueOld; if ( value == m_valueOld )
if (changed) return false;
text = wxString::Format(wxT("%ld"), value);
text.Printf(wxT("%ld"), value);
} }
else else // using unconstrained input
#endif #endif // wxUSE_SPINCTRL
{ {
const wxString textOld(grid->GetCellValue(row, col));
text = Text()->GetValue(); text = Text()->GetValue();
changed = (text.empty() || text.ToLong(&value)) && (value != m_valueOld); if ( text.empty() )
{
if ( textOld.empty() )
return false;
}
else // non-empty text now (maybe 0)
{
if ( !text.ToLong(&value) )
return false;
// if value == m_valueOld == 0 but old text was "" and new one is
// "0" something still did change
if ( value == m_valueOld && (value || !textOld.empty()) )
return false;
}
} }
if ( changed ) wxGridTableBase * const table = grid->GetTable();
{ if ( table->CanSetValueAs(row, col, wxGRID_VALUE_NUMBER) )
if (grid->GetTable()->CanSetValueAs(row, col, wxGRID_VALUE_NUMBER)) table->SetValueAsLong(row, col, value);
grid->GetTable()->SetValueAsLong(row, col, value); else
else table->SetValue(row, col, text);
grid->GetTable()->SetValue(row, col, text);
}
return changed; return true;
} }
void wxGridCellNumberEditor::Reset() void wxGridCellNumberEditor::Reset()
@ -1103,7 +1116,7 @@ void wxGridCellFloatEditor::Create(wxWindow* parent,
void wxGridCellFloatEditor::BeginEdit(int row, int col, wxGrid* grid) void wxGridCellFloatEditor::BeginEdit(int row, int col, wxGrid* grid)
{ {
// first get the value // first get the value
wxGridTableBase *table = grid->GetTable(); wxGridTableBase * const table = grid->GetTable();
if ( table->CanGetValueAs(row, col, wxGRID_VALUE_FLOAT) ) if ( table->CanGetValueAs(row, col, wxGRID_VALUE_FLOAT) )
{ {
m_valueOld = table->GetValueAsDouble(row, col); m_valueOld = table->GetValueAsDouble(row, col);
@ -1111,35 +1124,53 @@ void wxGridCellFloatEditor::BeginEdit(int row, int col, wxGrid* grid)
else else
{ {
m_valueOld = 0.0; m_valueOld = 0.0;
wxString sValue = table->GetValue(row, col);
if (! sValue.ToDouble(&m_valueOld) && ! sValue.empty()) const wxString value = table->GetValue(row, col);
if ( !value.empty() )
{ {
wxFAIL_MSG( _T("this cell doesn't have float value") ); if ( !value.ToDouble(&m_valueOld) )
return; {
wxFAIL_MSG( _T("this cell doesn't have float value") );
return;
}
} }
} }
DoBeginEdit(GetString()); DoBeginEdit(GetString());
} }
bool wxGridCellFloatEditor::EndEdit(int row, int col, bool wxGridCellFloatEditor::EndEdit(int row, int col, wxGrid* grid)
wxGrid* grid)
{ {
double value = 0.0; const wxString text(Text()->GetValue()),
wxString text(Text()->GetValue()); textOld(grid->GetCellValue(row, col));
if ( (text.empty() || text.ToDouble(&value)) && double value;
!wxIsSameDouble(value, m_valueOld) ) if ( !text.empty() )
{ {
if (grid->GetTable()->CanSetValueAs(row, col, wxGRID_VALUE_FLOAT)) if ( !text.ToDouble(&value) )
grid->GetTable()->SetValueAsDouble(row, col, value); return false;
else }
grid->GetTable()->SetValue(row, col, text); else // new value is empty string
{
if ( textOld.empty() )
return false; // nothing changed
return true; value = 0.;
} }
return false; // the test for empty strings ensures that we don't skip the value setting
// when "" is replaced by "0" or vice versa as "" numeric value is also 0.
if ( wxIsSameDouble(value, m_valueOld) && !text.empty() && !textOld.empty() )
return false; // nothing changed
wxGridTableBase * const table = grid->GetTable();
if ( table->CanSetValueAs(row, col, wxGRID_VALUE_FLOAT) )
table->SetValueAsDouble(row, col, value);
else
table->SetValue(row, col, text);
return true;
} }
void wxGridCellFloatEditor::Reset() void wxGridCellFloatEditor::Reset()
@ -2790,7 +2821,7 @@ void wxGridRowOrColAttrData::SetAttr(wxGridCellAttr *attr, int rowOrCol)
size_t n = (size_t)i; size_t n = (size_t)i;
if ( m_attrs[n] == attr ) if ( m_attrs[n] == attr )
// nothing to do // nothing to do
return; return;
if ( attr ) if ( attr )
{ {
// change the attribute, handling reference count manually, // change the attribute, handling reference count manually,
@ -4284,6 +4315,14 @@ bool wxGrid::Create(wxWindow *parent, wxWindowID id,
wxGrid::~wxGrid() wxGrid::~wxGrid()
{ {
if ( m_winCapture && m_winCapture->HasCapture() )
m_winCapture->ReleaseMouse();
// Ensure that the editor control is destroyed before the grid is,
// otherwise we crash later when the editor tries to do something with the
// half destroyed grid
HideCellEditControl();
// Must do this or ~wxScrollHelper will pop the wrong event handler // Must do this or ~wxScrollHelper will pop the wrong event handler
SetTargetWindow(this); SetTargetWindow(this);
ClearAttrCache(); ClearAttrCache();
@ -5641,6 +5680,7 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
if ( markerX != m_dragLastPos ) if ( markerX != m_dragLastPos )
{ {
wxClientDC dc( m_colLabelWin ); wxClientDC dc( m_colLabelWin );
DoPrepareDC(dc);
int cw, ch; int cw, ch;
m_colLabelWin->GetClientSize( &cw, &ch ); m_colLabelWin->GetClientSize( &cw, &ch );
@ -6075,7 +6115,8 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
} }
else if ( m_cursorMode == WXGRID_CURSOR_RESIZE_ROW ) else if ( event.LeftIsDown() &&
m_cursorMode == WXGRID_CURSOR_RESIZE_ROW )
{ {
int cw, ch, left, dummy; int cw, ch, left, dummy;
m_gridWin->GetClientSize( &cw, &ch ); m_gridWin->GetClientSize( &cw, &ch );
@ -6093,7 +6134,8 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
dc.DrawLine( left, y, left+cw, y ); dc.DrawLine( left, y, left+cw, y );
m_dragLastPos = y; m_dragLastPos = y;
} }
else if ( m_cursorMode == WXGRID_CURSOR_RESIZE_COL ) else if ( event.LeftIsDown() &&
m_cursorMode == WXGRID_CURSOR_RESIZE_COL )
{ {
int cw, ch, dummy, top; int cw, ch, dummy, top;
m_gridWin->GetClientSize( &cw, &ch ); m_gridWin->GetClientSize( &cw, &ch );
@ -7817,7 +7859,27 @@ void wxGrid::DrawHighlight(wxDC& dc, const wxGridCellCoordsArray& cells)
size_t count = cells.GetCount(); size_t count = cells.GetCount();
for ( size_t n = 0; n < count; n++ ) for ( size_t n = 0; n < count; n++ )
{ {
if ( cells[n] == m_currentCellCoords ) wxGridCellCoords cell = cells[n];
// If we are using attributes, then we may have just exposed another
// cell in a partially-visible merged cluster of cells. If the "anchor"
// (upper left) cell of this merged cluster is the cell indicated by
// m_currentCellCoords, then we need to refresh the cell highlight even
// though the "anchor" itself is not part of our update segment.
if ( CanHaveAttributes() )
{
int rows = 0,
cols = 0;
GetCellSize(cell.GetRow(), cell.GetCol(), &rows, &cols);
if ( rows < 0 )
cell.SetRow(cell.GetRow() + rows);
if ( cols < 0 )
cell.SetCol(cell.GetCol() + cols);
}
if ( cell == m_currentCellCoords )
{ {
wxGridCellAttr* attr = GetCellAttr(m_currentCellCoords); wxGridCellAttr* attr = GetCellAttr(m_currentCellCoords);
DrawCellHighlight(dc, attr); DrawCellHighlight(dc, attr);
@ -8556,11 +8618,19 @@ void wxGrid::HideCellEditControl()
wxGridCellAttr *attr = GetCellAttr(row, col); wxGridCellAttr *attr = GetCellAttr(row, col);
wxGridCellEditor *editor = attr->GetEditor(this, row, col); wxGridCellEditor *editor = attr->GetEditor(this, row, col);
const bool
editorHadFocus = wxWindow::FindFocus() == editor->GetControl();
editor->Show( false ); editor->Show( false );
editor->DecRef(); editor->DecRef();
attr->DecRef(); attr->DecRef();
m_gridWin->SetFocus(); // return the focus to the grid itself if the editor had it
//
// note that we must not do this unconditionally to avoid stealing
// focus from the window which just received it if we are hiding the
// editor precisely because we lost focus
if ( editorHadFocus )
m_gridWin->SetFocus();
// refresh whole row to the right // refresh whole row to the right
wxRect rect( CellToRect(row, col) ); wxRect rect( CellToRect(row, col) );
@ -9996,9 +10066,14 @@ void wxGrid::ClearAttrCache()
{ {
if ( m_attrCache.row != -1 ) if ( m_attrCache.row != -1 )
{ {
wxSafeDecRef(m_attrCache.attr); wxGridCellAttr *oldAttr = m_attrCache.attr;
m_attrCache.attr = NULL; m_attrCache.attr = NULL;
m_attrCache.row = -1; m_attrCache.row = -1;
// wxSafeDecRec(...) might cause event processing that accesses
// the cached attribute, if one exists (e.g. by deleting the
// editor stored within the attribute). Therefore it is important
// to invalidate the cache before calling wxSafeDecRef!
wxSafeDecRef(oldAttr);
} }
} }
@ -10239,7 +10314,7 @@ void wxGrid::SetCellSize( int row, int col, int num_rows, int num_cols )
wxT("wxGrid::SetCellSize setting cell size to < 1")); wxT("wxGrid::SetCellSize setting cell size to < 1"));
// if this was already a multicell then "turn off" the other cells first // if this was already a multicell then "turn off" the other cells first
if ((cell_rows > 1) || (cell_rows > 1)) if ((cell_rows > 1) || (cell_cols > 1))
{ {
int i, j; int i, j;
for (j=row; j < row + cell_rows; j++) for (j=row; j < row + cell_rows; j++)
@ -10408,6 +10483,19 @@ void wxGrid::SetRowSize( int row, int height )
{ {
wxCHECK_RET( row >= 0 && row < m_numRows, _T("invalid row index") ); wxCHECK_RET( row >= 0 && row < m_numRows, _T("invalid row index") );
// if < 0 then calculate new height from label
if ( height < 0 )
{
long w, h;
wxArrayString lines;
wxClientDC dc(m_rowLabelWin);
dc.SetFont(GetLabelFont());
StringToLines(GetRowLabelValue( row ), lines);
GetTextBoxSize( dc, lines, &w, &h );
//check that it is not less than the minimal height
height = wxMax(h, GetRowMinimalAcceptableHeight());
}
// See comment in SetColSize // See comment in SetColSize
if ( height < GetRowMinimalAcceptableHeight()) if ( height < GetRowMinimalAcceptableHeight())
return; return;
@ -10452,6 +10540,23 @@ void wxGrid::SetColSize( int col, int width )
{ {
wxCHECK_RET( col >= 0 && col < m_numCols, _T("invalid column index") ); wxCHECK_RET( col >= 0 && col < m_numCols, _T("invalid column index") );
// if < 0 then calculate new width from label
if ( width < 0 )
{
long w, h;
wxArrayString lines;
wxClientDC dc(m_colLabelWin);
dc.SetFont(GetLabelFont());
StringToLines(GetColLabelValue(col), lines);
if ( GetColLabelTextOrientation() == wxHORIZONTAL )
GetTextBoxSize( dc, lines, &w, &h );
else
GetTextBoxSize( dc, lines, &h, &w );
width = w + 6;
//check that it is not less than the minimal width
width = wxMax(width, GetColMinimalAcceptableWidth());
}
// should we check that it's bigger than GetColMinimalWidth(col) here? // should we check that it's bigger than GetColMinimalWidth(col) here?
// (VZ) // (VZ)
// No, because it is reasonable to assume the library user know's // No, because it is reasonable to assume the library user know's
@ -10469,18 +10574,6 @@ void wxGrid::SetColSize( int col, int width )
InitColWidths(); InitColWidths();
} }
// if < 0 then calculate new width from label
if ( width < 0 )
{
long w, h;
wxArrayString lines;
wxClientDC dc(m_colLabelWin);
dc.SetFont(GetLabelFont());
StringToLines(GetColLabelValue(col), lines);
GetTextBoxSize(dc, lines, &w, &h);
width = w + 6;
}
int w = wxMax( 0, width ); int w = wxMax( 0, width );
int diff = w - m_colWidths[col]; int diff = w - m_colWidths[col];
m_colWidths[col] = w; m_colWidths[col] = w;
@ -10851,9 +10944,6 @@ void wxGrid::AutoSize()
void wxGrid::AutoSizeRowLabelSize( int row ) void wxGrid::AutoSizeRowLabelSize( int row )
{ {
wxArrayString lines;
long w, h;
// Hide the edit control, so it // Hide the edit control, so it
// won't interfere with drag-shrinking. // won't interfere with drag-shrinking.
if ( IsCellEditControlShown() ) if ( IsCellEditControlShown() )
@ -10863,20 +10953,12 @@ void wxGrid::AutoSizeRowLabelSize( int row )
} }
// autosize row height depending on label text // autosize row height depending on label text
StringToLines( GetRowLabelValue( row ), lines ); SetRowSize(row, -1);
wxClientDC dc( m_rowLabelWin );
GetTextBoxSize( dc, lines, &w, &h );
if ( h < m_defaultRowHeight )
h = m_defaultRowHeight;
SetRowSize(row, h);
ForceRefresh(); ForceRefresh();
} }
void wxGrid::AutoSizeColLabelSize( int col ) void wxGrid::AutoSizeColLabelSize( int col )
{ {
wxArrayString lines;
long w, h;
// Hide the edit control, so it // Hide the edit control, so it
// won't interfere with drag-shrinking. // won't interfere with drag-shrinking.
if ( IsCellEditControlShown() ) if ( IsCellEditControlShown() )
@ -10886,15 +10968,7 @@ void wxGrid::AutoSizeColLabelSize( int col )
} }
// autosize column width depending on label text // autosize column width depending on label text
StringToLines( GetColLabelValue( col ), lines ); SetColSize(col, -1);
wxClientDC dc( m_colLabelWin );
if ( GetColLabelTextOrientation() == wxHORIZONTAL )
GetTextBoxSize( dc, lines, &w, &h );
else
GetTextBoxSize( dc, lines, &h, &w );
if ( w < m_defaultColWidth )
w = m_defaultColWidth;
SetColSize(col, w);
ForceRefresh(); ForceRefresh();
} }
@ -11141,37 +11215,36 @@ void wxGrid::ClearSelection()
// This function returns the rectangle that encloses the given block // This function returns the rectangle that encloses the given block
// in device coords clipped to the client size of the grid window. // in device coords clipped to the client size of the grid window.
// //
wxRect wxGrid::BlockToDeviceRect( const wxGridCellCoords &topLeft, wxRect wxGrid::BlockToDeviceRect( const wxGridCellCoords& topLeft,
const wxGridCellCoords &bottomRight ) const wxGridCellCoords& bottomRight )
{ {
wxRect rect( wxGridNoCellRect ); wxRect resultRect;
wxRect cellRect; wxRect tempCellRect = CellToRect(topLeft);
if ( tempCellRect != wxGridNoCellRect )
cellRect = CellToRect( topLeft );
if ( cellRect != wxGridNoCellRect )
{ {
rect = cellRect; resultRect = tempCellRect;
} }
else else
{ {
rect = wxRect(0, 0, 0, 0); resultRect = wxRect(0, 0, 0, 0);
} }
cellRect = CellToRect( bottomRight ); tempCellRect = CellToRect(bottomRight);
if ( cellRect != wxGridNoCellRect ) if ( tempCellRect != wxGridNoCellRect )
{ {
rect += cellRect; resultRect += tempCellRect;
} }
else else
{ {
// If both inputs were "wxGridNoCellRect," then there's nothing to do.
return wxGridNoCellRect; return wxGridNoCellRect;
} }
int i, j; // Ensure that left/right and top/bottom pairs are in order.
int left = rect.GetLeft(); int left = resultRect.GetLeft();
int top = rect.GetTop(); int top = resultRect.GetTop();
int right = rect.GetRight(); int right = resultRect.GetRight();
int bottom = rect.GetBottom(); int bottom = resultRect.GetBottom();
int leftCol = topLeft.GetCol(); int leftCol = topLeft.GetCol();
int topRow = topLeft.GetRow(); int topRow = topLeft.GetRow();
@ -11180,65 +11253,89 @@ wxRect wxGrid::BlockToDeviceRect( const wxGridCellCoords &topLeft,
if (left > right) if (left > right)
{ {
i = left; int tmp = left;
left = right; left = right;
right = i; right = tmp;
i = leftCol;
tmp = leftCol;
leftCol = rightCol; leftCol = rightCol;
rightCol = i; rightCol = tmp;
} }
if (top > bottom) if (top > bottom)
{ {
i = top; int tmp = top;
top = bottom; top = bottom;
bottom = i; bottom = tmp;
i = topRow;
tmp = topRow;
topRow = bottomRow; topRow = bottomRow;
bottomRow = i; bottomRow = tmp;
} }
for ( j = topRow; j <= bottomRow; j++ ) // The following loop is ONLY necessary to detect and handle merged cells.
{ int cw, ch;
for ( i = leftCol; i <= rightCol; i++ ) m_gridWin->GetClientSize( &cw, &ch );
{
if ((j == topRow) || (j == bottomRow) || (i == leftCol) || (i == rightCol))
{
cellRect = CellToRect( j, i );
if (cellRect.x < left) // Get the origin coordinates: notice that they will be negative if the
left = cellRect.x; // grid is scrolled downwards/to the right.
if (cellRect.y < top) int gridOriginX = 0;
top = cellRect.y; int gridOriginY = 0;
if (cellRect.x + cellRect.width > right) CalcScrolledPosition(gridOriginX, gridOriginY, &gridOriginX, &gridOriginY);
right = cellRect.x + cellRect.width;
if (cellRect.y + cellRect.height > bottom) int onScreenLeftmostCol = internalXToCol(-gridOriginX);
bottom = cellRect.y + cellRect.height; int onScreenUppermostRow = internalYToRow(-gridOriginY);
int onScreenRightmostCol = internalXToCol(-gridOriginX + cw);
int onScreenBottommostRow = internalYToRow(-gridOriginY + ch);
// Bound our loop so that we only examine the portion of the selected block
// that is shown on screen. Therefore, we compare the Top-Left block values
// to the Top-Left screen values, and the Bottom-Right block values to the
// Bottom-Right screen values, choosing appropriately.
const int visibleTopRow = wxMax(topRow, onScreenUppermostRow);
const int visibleBottomRow = wxMin(bottomRow, onScreenBottommostRow);
const int visibleLeftCol = wxMax(leftCol, onScreenLeftmostCol);
const int visibleRightCol = wxMin(rightCol, onScreenRightmostCol);
for ( int j = visibleTopRow; j <= visibleBottomRow; j++ )
{
for ( int i = visibleLeftCol; i <= visibleRightCol; i++ )
{
if ( (j == visibleTopRow) || (j == visibleBottomRow) ||
(i == visibleLeftCol) || (i == visibleRightCol) )
{
tempCellRect = CellToRect( j, i );
if (tempCellRect.x < left)
left = tempCellRect.x;
if (tempCellRect.y < top)
top = tempCellRect.y;
if (tempCellRect.x + tempCellRect.width > right)
right = tempCellRect.x + tempCellRect.width;
if (tempCellRect.y + tempCellRect.height > bottom)
bottom = tempCellRect.y + tempCellRect.height;
} }
else else
{ {
i = rightCol; // jump over inner cells. i = visibleRightCol; // jump over inner cells.
} }
} }
} }
// convert to scrolled coords // Convert to scrolled coords
//
CalcScrolledPosition( left, top, &left, &top ); CalcScrolledPosition( left, top, &left, &top );
CalcScrolledPosition( right, bottom, &right, &bottom ); CalcScrolledPosition( right, bottom, &right, &bottom );
int cw, ch;
m_gridWin->GetClientSize( &cw, &ch );
if (right < 0 || bottom < 0 || left > cw || top > ch) if (right < 0 || bottom < 0 || left > cw || top > ch)
return wxRect(0,0,0,0); return wxRect(0,0,0,0);
rect.SetLeft( wxMax(0, left) ); resultRect.SetLeft( wxMax(0, left) );
rect.SetTop( wxMax(0, top) ); resultRect.SetTop( wxMax(0, top) );
rect.SetRight( wxMin(cw, right) ); resultRect.SetRight( wxMin(cw, right) );
rect.SetBottom( wxMin(ch, bottom) ); resultRect.SetBottom( wxMin(ch, bottom) );
return rect; return resultRect;
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@ -4,7 +4,7 @@
// Author: Paul Gammans, Roger Gammans // Author: Paul Gammans, Roger Gammans
// Modified by: // Modified by:
// Created: 11/04/2001 // Created: 11/04/2001
// RCS-ID: $Id: gridctrl.cpp 41587 2006-10-03 14:28:36Z PC $ // RCS-ID: $Id: gridctrl.cpp 59121 2009-02-25 00:09:23Z VZ $
// Copyright: (c) The Computer Surgery (paul@compsurg.co.uk) // Copyright: (c) The Computer Surgery (paul@compsurg.co.uk)
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -357,9 +357,19 @@ wxGridCellAutoWrapStringRenderer::GetTextLines(wxGrid& grid,
dc.GetTextExtent(tok, &x, &y); dc.GetTextExtent(tok, &x, &y);
if ( curr_x + x > max_x) if ( curr_x + x > max_x)
{ {
lines.Add( wxString(thisline) ); if ( curr_x == 0 )
thisline = tok; {
curr_x=x; // this means that a single token is wider than the maximal
// width -- still use it as is as we need to show at least the
// part of it which fits
lines.Add(tok);
}
else
{
lines.Add(thisline);
thisline = tok;
curr_x = x;
}
} }
else else
{ {
@ -380,7 +390,10 @@ wxGridCellAutoWrapStringRenderer::GetBestSize(wxGrid& grid,
wxDC& dc, wxDC& dc,
int row, int col) int row, int col)
{ {
wxCoord x,y, height , width = grid.GetColSize(col) -10; wxCoord x,y, height , width = grid.GetColSize(col) -20;
// for width, subtract 20 because ColSize includes a magin of 10 pixels
// that we do not want here and because we always start with an increment
// by 10 in the loop below.
int count = 250; //Limit iterations.. int count = 250; //Limit iterations..
wxRect rect(0,0,width,10); wxRect rect(0,0,width,10);

View File

@ -2,7 +2,7 @@
// Name: src/generic/imaglist.cpp // Name: src/generic/imaglist.cpp
// Purpose: // Purpose:
// Author: Robert Roebling // Author: Robert Roebling
// Id: $id$ // Id: $Id: imaglist.cpp 58031 2009-01-12 05:39:04Z PC $
// Copyright: (c) 1998 Robert Roebling // Copyright: (c) 1998 Robert Roebling
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -68,6 +68,8 @@ int wxGenericImageList::Add( const wxBitmap &bitmap )
_T("invalid bitmap size in wxImageList: this might work ") _T("invalid bitmap size in wxImageList: this might work ")
_T("on this platform but definitely won't under Windows.") ); _T("on this platform but definitely won't under Windows.") );
const int index = int(m_images.GetCount());
if (bitmap.IsKindOf(CLASSINFO(wxIcon))) if (bitmap.IsKindOf(CLASSINFO(wxIcon)))
{ {
m_images.Append( new wxIcon( (const wxIcon&) bitmap ) ); m_images.Append( new wxIcon( (const wxIcon&) bitmap ) );
@ -98,7 +100,7 @@ int wxGenericImageList::Add( const wxBitmap &bitmap )
m_height = bitmap.GetHeight(); m_height = bitmap.GetHeight();
} }
return m_images.GetCount()-1; return index;
} }
int wxGenericImageList::Add( const wxBitmap& bitmap, const wxBitmap& mask ) int wxGenericImageList::Add( const wxBitmap& bitmap, const wxBitmap& mask )

View File

@ -3,7 +3,7 @@
// Purpose: generic implementation of wxListCtrl // Purpose: generic implementation of wxListCtrl
// Author: Robert Roebling // Author: Robert Roebling
// Vadim Zeitlin (virtual list control support) // Vadim Zeitlin (virtual list control support)
// Id: $Id: listctrl.cpp 54201 2008-06-13 22:38:33Z VZ $ // Id: $Id: listctrl.cpp 57542 2008-12-25 13:03:24Z VZ $
// Copyright: (c) 1998 Robert Roebling // Copyright: (c) 1998 Robert Roebling
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -621,6 +621,8 @@ public:
void OnPaint( wxPaintEvent &event ); void OnPaint( wxPaintEvent &event );
void OnChildFocus(wxChildFocusEvent& event);
void DrawImage( int index, wxDC *dc, int x, int y ); void DrawImage( int index, wxDC *dc, int x, int y );
void GetImageSize( int index, int &width, int &height ) const; void GetImageSize( int index, int &width, int &height ) const;
int GetTextLength( const wxString &s ) const; int GetTextLength( const wxString &s ) const;
@ -1904,6 +1906,19 @@ void wxListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
x += wCol; x += wCol;
} }
// Fill in what's missing to the right of the columns, otherwise we will
// leave an unpainted area when columns are removed (and it looks better)
if ( x < w )
{
wxRendererNative::Get().DrawHeaderButton
(
this,
dc,
wxRect(x, HEADER_OFFSET_Y, w - x, h),
0
);
}
} }
void wxListHeaderWindow::DrawCurrent() void wxListHeaderWindow::DrawCurrent()
@ -2255,6 +2270,7 @@ BEGIN_EVENT_TABLE(wxListMainWindow,wxScrolledWindow)
EVT_SET_FOCUS (wxListMainWindow::OnSetFocus) EVT_SET_FOCUS (wxListMainWindow::OnSetFocus)
EVT_KILL_FOCUS (wxListMainWindow::OnKillFocus) EVT_KILL_FOCUS (wxListMainWindow::OnKillFocus)
EVT_SCROLLWIN (wxListMainWindow::OnScroll) EVT_SCROLLWIN (wxListMainWindow::OnScroll)
EVT_CHILD_FOCUS (wxListMainWindow::OnChildFocus)
END_EVENT_TABLE() END_EVENT_TABLE()
void wxListMainWindow::Init() void wxListMainWindow::Init()
@ -2877,6 +2893,13 @@ void wxListMainWindow::HighlightAll( bool on )
} }
} }
void wxListMainWindow::OnChildFocus(wxChildFocusEvent& WXUNUSED(event))
{
// Do nothing here. This prevents the default handler in wxScrolledWindow
// from needlessly scrolling the window when the edit control is
// dismissed. See ticket #9563.
}
void wxListMainWindow::SendNotify( size_t line, void wxListMainWindow::SendNotify( size_t line,
wxEventType command, wxEventType command,
const wxPoint& point ) const wxPoint& point )
@ -3415,16 +3438,9 @@ void wxListMainWindow::OnKeyDown( wxKeyEvent &event )
wxWindow *parent = GetParent(); wxWindow *parent = GetParent();
// propagate the key event upwards // propagate the key event upwards
wxKeyEvent ke( wxEVT_KEY_DOWN ); wxKeyEvent ke(event);
ke.m_shiftDown = event.m_shiftDown; if (parent->GetEventHandler()->ProcessEvent( ke ))
ke.m_controlDown = event.m_controlDown; return;
ke.m_altDown = event.m_altDown;
ke.m_metaDown = event.m_metaDown;
ke.m_keyCode = event.m_keyCode;
ke.m_x = event.m_x;
ke.m_y = event.m_y;
ke.SetEventObject( parent );
if (parent->GetEventHandler()->ProcessEvent( ke )) return;
event.Skip(); event.Skip();
} }
@ -3434,16 +3450,10 @@ void wxListMainWindow::OnKeyUp( wxKeyEvent &event )
wxWindow *parent = GetParent(); wxWindow *parent = GetParent();
// propagate the key event upwards // propagate the key event upwards
wxKeyEvent ke( wxEVT_KEY_UP ); wxKeyEvent ke(event);
ke.m_shiftDown = event.m_shiftDown;
ke.m_controlDown = event.m_controlDown;
ke.m_altDown = event.m_altDown;
ke.m_metaDown = event.m_metaDown;
ke.m_keyCode = event.m_keyCode;
ke.m_x = event.m_x;
ke.m_y = event.m_y;
ke.SetEventObject( parent ); ke.SetEventObject( parent );
if (parent->GetEventHandler()->ProcessEvent( ke )) return; if (parent->GetEventHandler()->ProcessEvent( ke ))
return;
event.Skip(); event.Skip();
} }
@ -3464,16 +3474,9 @@ void wxListMainWindow::OnChar( wxKeyEvent &event )
} }
// propagate the char event upwards // propagate the char event upwards
wxKeyEvent ke( wxEVT_CHAR ); wxKeyEvent ke(event);
ke.m_shiftDown = event.m_shiftDown; if (parent->GetEventHandler()->ProcessEvent( ke ))
ke.m_controlDown = event.m_controlDown; return;
ke.m_altDown = event.m_altDown;
ke.m_metaDown = event.m_metaDown;
ke.m_keyCode = event.m_keyCode;
ke.m_x = event.m_x;
ke.m_y = event.m_y;
ke.SetEventObject( parent );
if (parent->GetEventHandler()->ProcessEvent( ke )) return;
if (event.GetKeyCode() == WXK_TAB) if (event.GetKeyCode() == WXK_TAB)
{ {
@ -4154,8 +4157,9 @@ wxRect wxListMainWindow::GetViewRect() const
{ {
for ( int i = 0; i < count; i++ ) for ( int i = 0; i < count; i++ )
{ {
wxRect r; // we need logical, not physical, coordinates here, so use
GetItemRect(i, r); // GetLineRect() instead of GetItemRect()
wxRect r = GetLineRect(i);
wxCoord x = r.GetRight(), wxCoord x = r.GetRight(),
y = r.GetBottom(); y = r.GetBottom();
@ -4223,9 +4227,9 @@ void wxListMainWindow::RecalculatePositions(bool noRefresh)
const size_t count = GetItemCount(); const size_t count = GetItemCount();
int iconSpacing; int iconSpacing;
if ( HasFlag(wxLC_ICON) ) if ( HasFlag(wxLC_ICON) && m_normal_image_list )
iconSpacing = m_normal_spacing; iconSpacing = m_normal_spacing;
else if ( HasFlag(wxLC_SMALL_ICON) ) else if ( HasFlag(wxLC_SMALL_ICON) && m_small_image_list )
iconSpacing = m_small_spacing; iconSpacing = m_small_spacing;
else else
iconSpacing = 0; iconSpacing = 0;
@ -5761,7 +5765,7 @@ wxGenericListCtrl::GetClassDefaultAttributes(wxWindowVariant variant)
#else #else
wxUnusedVar(variant); wxUnusedVar(variant);
wxVisualAttributes attr; wxVisualAttributes attr;
attr.colFg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); attr.colFg = wxSystemSettings::GetColour(wxSYS_COLOUR_LISTBOXTEXT);
attr.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_LISTBOX); attr.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_LISTBOX);
attr.font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); attr.font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
return attr; return attr;

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
// Created: 23.07.99 // Created: 23.07.99
// RCS-ID: $Id: numdlgg.cpp 41838 2006-10-09 21:08:45Z VZ $ // RCS-ID: $Id: numdlgg.cpp 54861 2008-07-30 21:53:26Z VZ $
// Copyright: (c) Vadim Zeitlin // Copyright: (c) Vadim Zeitlin
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -104,10 +104,7 @@ wxNumberEntryDialog::wxNumberEntryDialog(wxWindow *parent,
// spin ctrl // spin ctrl
wxString valStr; wxString valStr;
valStr.Printf(wxT("%ld"), m_value); valStr.Printf(wxT("%ld"), m_value);
m_spinctrl = new wxSpinCtrl(this, wxID_ANY, valStr, wxDefaultPosition, wxSize( 140, wxDefaultCoord ) ); m_spinctrl = new wxSpinCtrl(this, wxID_ANY, valStr, wxDefaultPosition, wxSize( 140, wxDefaultCoord ), wxSP_ARROW_KEYS, (int)m_min, (int)m_max, (int)m_value);
#if wxUSE_SPINCTRL
m_spinctrl->SetRange((int)m_min, (int)m_max);
#endif
inputsizer->Add( m_spinctrl, 1, wxCENTER | wxLEFT | wxRIGHT, 10 ); inputsizer->Add( m_spinctrl, 1, wxCENTER | wxLEFT | wxRIGHT, 10 );
// add both // add both
topsizer->Add( inputsizer, 0, wxEXPAND | wxLEFT|wxRIGHT, 5 ); topsizer->Add( inputsizer, 0, wxEXPAND | wxLEFT|wxRIGHT, 5 );

View File

@ -4,7 +4,7 @@
// Author: Jaakko Salli // Author: Jaakko Salli
// Modified by: // Modified by:
// Created: Apr-30-2006 // Created: Apr-30-2006
// RCS-ID: $Id: odcombo.cpp 52747 2008-03-23 20:20:46Z VZ $ // RCS-ID: $Id: odcombo.cpp 58203 2009-01-18 20:05:07Z JMS $
// Copyright: (c) 2005 Jaakko Salli // Copyright: (c) 2005 Jaakko Salli
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -257,14 +257,23 @@ bool wxVListBoxComboPopup::HandleKey( int keycode, bool saturate, wxChar unicode
int comboStyle = m_combo->GetWindowStyle(); int comboStyle = m_combo->GetWindowStyle();
// this is the character equivalent of the code // this is the character equivalent of the code
wxChar keychar=0; wxChar keychar = 0;
if ((keycode >= WXK_SPACE) && (keycode <=255) && (keycode != WXK_DELETE) && wxIsprint(keycode)) if ( keycode < WXK_START )
{ {
keychar = (wxChar)keycode; #if wxUSE_UNICODE
} if ( unicode > 0 )
else if (unicode>0) {
{ if ( wxIsprint(unicode) )
keychar = unicode; keychar = unicode;
}
else
#else
wxUnusedVar(unicode);
#endif
if ( wxIsprint(keycode) )
{
keychar = (wxChar) keycode;
}
} }
if ( keycode == WXK_DOWN || keycode == WXK_RIGHT ) if ( keycode == WXK_DOWN || keycode == WXK_RIGHT )
@ -287,7 +296,7 @@ bool wxVListBoxComboPopup::HandleKey( int keycode, bool saturate, wxChar unicode
value-=10; value-=10;
StopPartialCompletion(); StopPartialCompletion();
} }
else if ( comboStyle & wxCB_READONLY ) else if ( keychar && (comboStyle & wxCB_READONLY) )
{ {
// Try partial completion // Try partial completion

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 04/01/98 // Created: 04/01/98
// RCS-ID: $Id: prntdlgg.cpp 50289 2007-11-28 00:24:25Z VZ $ // RCS-ID: $Id: prntdlgg.cpp 55256 2008-08-25 14:39:11Z VZ $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -201,9 +201,9 @@ void wxGenericPrintDialog::Init(wxWindow * WXUNUSED(parent))
if (factory->HasStatusLine()) if (factory->HasStatusLine())
{ {
flex->Add( new wxStaticText( this, wxID_ANY, _("Status:") ), flex->Add( new wxStaticText( this, wxID_ANY, _("Status:") ),
0, wxALIGN_CENTER_VERTICAL|wxALL-wxTOP, 5 ); 0, wxALIGN_CENTER_VERTICAL|(wxALL-wxTOP), 5 );
flex->Add( new wxStaticText( this, wxID_ANY, factory->CreateStatusLine() ), flex->Add( new wxStaticText( this, wxID_ANY, factory->CreateStatusLine() ),
0, wxALIGN_CENTER_VERTICAL|wxALL-wxTOP, 5 ); 0, wxALIGN_CENTER_VERTICAL|(wxALL-wxTOP), 5 );
} }
mainsizer->Add( topsizer, 0, wxLEFT|wxTOP|wxRIGHT|wxGROW, 10 ); mainsizer->Add( topsizer, 0, wxLEFT|wxTOP|wxRIGHT|wxGROW, 10 );
@ -354,10 +354,12 @@ bool wxGenericPrintDialog::TransferDataToWindow()
if (m_printDialogData.GetToPage() > 0) if (m_printDialogData.GetToPage() > 0)
m_toText->SetValue(wxString::Format(_T("%d"), m_printDialogData.GetToPage())); m_toText->SetValue(wxString::Format(_T("%d"), m_printDialogData.GetToPage()));
if(m_rangeRadioBox) if(m_rangeRadioBox)
{
if (m_printDialogData.GetAllPages() || m_printDialogData.GetFromPage() == 0) if (m_printDialogData.GetAllPages() || m_printDialogData.GetFromPage() == 0)
m_rangeRadioBox->SetSelection(0); m_rangeRadioBox->SetSelection(0);
else else
m_rangeRadioBox->SetSelection(1); m_rangeRadioBox->SetSelection(1);
}
} }
else else
{ {

View File

@ -5,7 +5,7 @@
// Modified by: Vadim Zeitlin on 31.08.00: wxScrollHelper allows to implement. // Modified by: Vadim Zeitlin on 31.08.00: wxScrollHelper allows to implement.
// Ron Lee on 10.4.02: virtual size / auto scrollbars et al. // Ron Lee on 10.4.02: virtual size / auto scrollbars et al.
// Created: 01/02/97 // Created: 01/02/97
// RCS-ID: $Id: scrlwing.cpp 50982 2008-01-01 20:38:33Z VZ $ // RCS-ID: $Id: scrlwing.cpp 55010 2008-08-07 15:58:51Z JS $
// Copyright: (c) wxWidgets team // Copyright: (c) wxWidgets team
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -1352,21 +1352,69 @@ void wxScrollHelper::HandleOnChildFocus(wxChildFocusEvent& event)
if ( win == m_targetWindow ) if ( win == m_targetWindow )
return; // nothing to do return; // nothing to do
while ( win->GetParent() != m_targetWindow ) #ifdef __WXMAC__
if (wxDynamicCast(win, wxScrollBar))
return;
#endif
// Fixing ticket: http://trac.wxwidgets.org/ticket/9563
// When a child inside a wxControlContainer receives a focus, the
// wxControlContainer generates an artificial wxChildFocusEvent for
// itself, telling its parent that 'it' received the focus. The effect is
// that this->HandleOnChildFocus is called twice, first with the
// artificial wxChildFocusEvent and then with the original event. We need
// to ignore the artificial event here or otherwise HandleOnChildFocus
// would first scroll the target window to make the entire
// wxControlContainer visible and immediately afterwards scroll the target
// window again to make the child widget visible. This leads to ugly
// flickering when using nested wxPanels/wxScrolledWindows.
//
// Ignore this event if 'win' is derived from wxControlContainer AND its
// parent is the m_targetWindow AND 'win' is not actually reciving the
// focus (win != FindFocus). TODO: This affects all wxControlContainer
// objects, but wxControlContainer is not part of the wxWidgets RTTI and
// so wxDynamicCast(win, wxControlContainer) does not compile. Find a way
// to determine if 'win' derives from wxControlContainer. Until then,
// testing if 'win' derives from wxPanel will probably get >90% of all
// cases.
wxWindow *actual_focus=wxWindow::FindFocus();
if (win != actual_focus &&
wxDynamicCast(win, wxPanel) != 0 &&
win->GetParent() == m_targetWindow)
// if win is a wxPanel and receives the focus, it should not be
// scrolled into view
return;
wxSize view(m_targetWindow->GetClientSize());
// For composite controls such as wxComboCtrl we should try to fit the
// entire control inside the visible area of the target window, not just
// the focused child of the control. Otherwise we'd make only the textctrl
// part of a wxComboCtrl visible and the button would still be outside the
// scrolled area. But do so only if the parent fits *entirely* inside the
// scrolled window. In other situations, such as nested wxPanel or
// wxScrolledWindows, the parent might be way to big to fit inside the
// scrolled window. If that is the case, then make only the focused window
// visible
if ( win->GetParent() != m_targetWindow)
{ {
win = win->GetParent(); wxWindow *parent=win->GetParent();
if ( !win ) wxSize parent_size=parent->GetSize();
return; // event is not from a child of the target window if (parent_size.GetWidth() <= view.GetWidth() &&
parent_size.GetHeight() <= view.GetHeight())
// make the immediate parent visible instead of the focused control
win=parent;
} }
// if the child is not fully visible, try to scroll it into view: // if the child is not fully visible, try to scroll it into view:
int stepx, stepy; int stepx, stepy;
GetScrollPixelsPerUnit(&stepx, &stepy); GetScrollPixelsPerUnit(&stepx, &stepy);
// NB: we don't call CalcScrolledPosition() on win->GetPosition() here, // 'win' position coordinates are relative to it's parent
// because children' positions are already scrolled // convert them so that they are relative to the m_targetWindow viewing area
wxRect winrect(win->GetPosition(), win->GetSize()); wxRect winrect(m_targetWindow->ScreenToClient(win->GetScreenPosition()),
wxSize view(m_targetWindow->GetClientSize()); win->GetSize());
int startx, starty; int startx, starty;
GetViewStart(&startx, &starty); GetViewStart(&startx, &starty);

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 28/6/2000 // Created: 28/6/2000
// RCS-ID: $Id: splash.cpp 42755 2006-10-30 19:41:46Z VZ $ // RCS-ID: $Id: splash.cpp 58746 2009-02-08 09:16:50Z VZ $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -150,7 +150,8 @@ static void wxDrawSplashBitmap(wxDC& dc, const wxBitmap& bitmap, int WXUNUSED(x)
#endif // USE_PALETTE_IN_SPLASH #endif // USE_PALETTE_IN_SPLASH
dcMem.SelectObjectAsSource(bitmap); dcMem.SelectObjectAsSource(bitmap);
dc.Blit(0, 0, bitmap.GetWidth(), bitmap.GetHeight(), & dcMem, 0, 0); dc.Blit(0, 0, bitmap.GetWidth(), bitmap.GetHeight(), &dcMem, 0, 0, wxCOPY,
true /* use mask */);
dcMem.SelectObject(wxNullBitmap); dcMem.SelectObject(wxNullBitmap);
#ifdef USE_PALETTE_IN_SPLASH #ifdef USE_PALETTE_IN_SPLASH

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 01/02/97 // Created: 01/02/97
// RCS-ID: $Id: splitter.cpp 42816 2006-10-31 08:50:17Z RD $ // RCS-ID: $Id: splitter.cpp 59341 2009-03-05 15:44:24Z JS $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -84,6 +84,11 @@ bool wxSplitterWindow::Create(wxWindow *parent, wxWindowID id,
style &= ~wxBORDER_MASK; style &= ~wxBORDER_MASK;
style |= wxBORDER_NONE; style |= wxBORDER_NONE;
#if defined(__WXMAC__) && wxMAC_USE_CORE_GRAPHICS
// CoreGraphics can't paint sash feedback
style |= wxSP_LIVE_UPDATE;
#endif
if ( !wxWindow::Create(parent, id, pos, size, style, name) ) if ( !wxWindow::Create(parent, id, pos, size, style, name) )
return false; return false;
@ -91,7 +96,7 @@ bool wxSplitterWindow::Create(wxWindow *parent, wxWindowID id,
m_lastSize.x = size.x; m_lastSize.x = size.x;
if (size.y >= 0) if (size.y >= 0)
m_lastSize.y = size.y; m_lastSize.y = size.y;
m_permitUnsplitAlways = (style & wxSP_PERMIT_UNSPLIT) != 0; m_permitUnsplitAlways = (style & wxSP_PERMIT_UNSPLIT) != 0;
// FIXME: with this line the background is not erased at all under GTK1, // FIXME: with this line the background is not erased at all under GTK1,
@ -206,8 +211,11 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event)
int x = (int)event.GetX(), int x = (int)event.GetX(),
y = (int)event.GetY(); y = (int)event.GetY();
if (GetWindowStyle() & wxSP_NOSASH) if ( GetWindowStyle() & wxSP_NOSASH )
{
event.Skip();
return; return;
}
// with wxSP_LIVE_UPDATE style the splitter windows are always resized // with wxSP_LIVE_UPDATE style the splitter windows are always resized
// following the mouse movement while it drags the sash, without it we only // following the mouse movement while it drags the sash, without it we only
@ -389,6 +397,10 @@ void wxSplitterWindow::OnMouseEvent(wxMouseEvent& event)
{ {
OnDoubleClickSash(x, y); OnDoubleClickSash(x, y);
} }
else
{
event.Skip();
}
} }
void wxSplitterWindow::OnSize(wxSizeEvent& event) void wxSplitterWindow::OnSize(wxSizeEvent& event)
@ -600,7 +612,7 @@ int wxSplitterWindow::AdjustSashPosition(int sashPos) const
minSize = m_minimumPaneSize; minSize = m_minimumPaneSize;
int maxSize = GetWindowSize() - minSize - GetBorderSize() - GetSashSize(); int maxSize = GetWindowSize() - minSize - GetBorderSize() - GetSashSize();
if ( maxSize > 0 && sashPos > maxSize ) if ( maxSize > 0 && sashPos > maxSize && maxSize >= m_minimumPaneSize)
sashPos = maxSize; sashPos = maxSize;
} }

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 01/02/97 // Created: 01/02/97
// RCS-ID: $Id: statusbr.cpp 51615 2008-02-09 15:10:13Z VZ $ // RCS-ID: $Id: statusbr.cpp 57542 2008-12-25 13:03:24Z VZ $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -194,6 +194,7 @@ void wxStatusBarGeneric::OnPaint(wxPaintEvent& WXUNUSED(event) )
{ {
wxPaintDC dc(this); wxPaintDC dc(this);
dc.SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT));
#ifdef __WXGTK20__ #ifdef __WXGTK20__
// Draw grip first // Draw grip first
if (HasFlag( wxST_SIZEGRIP )) if (HasFlag( wxST_SIZEGRIP ))

View File

@ -4,7 +4,7 @@
// Author: Evgeniy Tarassov, Vadim Zeitlin // Author: Evgeniy Tarassov, Vadim Zeitlin
// Modified by: // Modified by:
// Created: 2005-09-15 // Created: 2005-09-15
// RCS-ID: $Id: treebkg.cpp 44271 2007-01-21 00:52:05Z VZ $ // RCS-ID: $Id: treebkg.cpp 54645 2008-07-15 21:29:10Z JS $
// Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwidgets.org> // Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -104,15 +104,18 @@ wxTreebook::Create(wxWindow *parent,
style, wxDefaultValidator, name) ) style, wxDefaultValidator, name) )
return false; return false;
#ifdef __WXMSW__
long treeStyle = GetThemedBorderStyle();
#else
long treeStyle = wxBORDER_SUNKEN;
#endif
m_bookctrl = new wxTreeCtrl m_bookctrl = new wxTreeCtrl
( (
this, this,
wxID_ANY, wxID_ANY,
wxDefaultPosition, wxDefaultPosition,
wxDefaultSize, wxDefaultSize,
#ifndef __WXMSW__ treeStyle|
wxBORDER_SIMPLE | // On wxMSW this produces a black border which is wrong
#endif
wxTR_DEFAULT_STYLE | wxTR_DEFAULT_STYLE |
wxTR_HIDE_ROOT | wxTR_HIDE_ROOT |
wxTR_SINGLE wxTR_SINGLE

View File

@ -4,7 +4,7 @@
// Author: Robert Roebling // Author: Robert Roebling
// Created: 01/02/97 // Created: 01/02/97
// Modified: 22/10/98 - almost total rewrite, simpler interface (VZ) // Modified: 22/10/98 - almost total rewrite, simpler interface (VZ)
// Id: $Id: treectlg.cpp 53135 2008-04-12 02:31:04Z VZ $ // Id: $Id: treectlg.cpp 57542 2008-12-25 13:03:24Z VZ $
// Copyright: (c) 1998 Robert Roebling and Julian Smart // Copyright: (c) 1998 Robert Roebling and Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -92,29 +92,8 @@ class WXDLLEXPORT wxTreeTextCtrl: public wxTextCtrl
public: public:
wxTreeTextCtrl(wxGenericTreeCtrl *owner, wxGenericTreeItem *item); wxTreeTextCtrl(wxGenericTreeCtrl *owner, wxGenericTreeItem *item);
void EndEdit(bool discardChanges = false) void EndEdit(bool discardChanges);
{
if ( discardChanges )
{
StopEditing();
}
else
{
m_aboutToFinish = true;
// Notify the owner about the changes
AcceptChanges();
// Even if vetoed, close the control (consistent with MSW)
Finish();
}
}
void StopEditing()
{
Finish();
m_owner->OnRenameCancelled(m_itemEdited);
}
const wxGenericTreeItem* item() const { return m_itemEdited; } const wxGenericTreeItem* item() const { return m_itemEdited; }
protected: protected:
@ -123,13 +102,12 @@ protected:
void OnKillFocus( wxFocusEvent &event ); void OnKillFocus( wxFocusEvent &event );
bool AcceptChanges(); bool AcceptChanges();
void Finish(); void Finish( bool setfocus = true );
private: private:
wxGenericTreeCtrl *m_owner; wxGenericTreeCtrl *m_owner;
wxGenericTreeItem *m_itemEdited; wxGenericTreeItem *m_itemEdited;
wxString m_startValue; wxString m_startValue;
bool m_finished;
bool m_aboutToFinish; bool m_aboutToFinish;
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
@ -363,7 +341,6 @@ wxTreeTextCtrl::wxTreeTextCtrl(wxGenericTreeCtrl *owner,
: m_itemEdited(item), m_startValue(item->GetText()) : m_itemEdited(item), m_startValue(item->GetText())
{ {
m_owner = owner; m_owner = owner;
m_finished = false;
m_aboutToFinish = false; m_aboutToFinish = false;
int w = m_itemEdited->GetWidth(), int w = m_itemEdited->GetWidth(),
@ -407,6 +384,26 @@ wxTreeTextCtrl::wxTreeTextCtrl(wxGenericTreeCtrl *owner,
wxPoint(x - 4, y - 4), wxSize(w + 11, h + 8)); wxPoint(x - 4, y - 4), wxSize(w + 11, h + 8));
} }
void wxTreeTextCtrl::EndEdit(bool discardChanges)
{
m_aboutToFinish = true;
if ( discardChanges )
{
m_owner->OnRenameCancelled(m_itemEdited);
Finish();
}
else
{
// Notify the owner about the changes
AcceptChanges();
// Even if vetoed, close the control (consistent with MSW)
Finish();
}
}
bool wxTreeTextCtrl::AcceptChanges() bool wxTreeTextCtrl::AcceptChanges()
{ {
const wxString value = GetValue(); const wxString value = GetValue();
@ -435,18 +432,14 @@ bool wxTreeTextCtrl::AcceptChanges()
return true; return true;
} }
void wxTreeTextCtrl::Finish() void wxTreeTextCtrl::Finish( bool setfocus )
{ {
if ( !m_finished ) m_owner->ResetTextControl();
{
m_owner->ResetTextControl();
wxPendingDelete.Append(this); wxPendingDelete.Append(this);
m_finished = true;
if (setfocus)
m_owner->SetFocus(); m_owner->SetFocus();
}
} }
void wxTreeTextCtrl::OnChar( wxKeyEvent &event ) void wxTreeTextCtrl::OnChar( wxKeyEvent &event )
@ -454,11 +447,11 @@ void wxTreeTextCtrl::OnChar( wxKeyEvent &event )
switch ( event.m_keyCode ) switch ( event.m_keyCode )
{ {
case WXK_RETURN: case WXK_RETURN:
EndEdit(); EndEdit( false );
break; break;
case WXK_ESCAPE: case WXK_ESCAPE:
StopEditing(); EndEdit( true );
break; break;
default: default:
@ -468,7 +461,7 @@ void wxTreeTextCtrl::OnChar( wxKeyEvent &event )
void wxTreeTextCtrl::OnKeyUp( wxKeyEvent &event ) void wxTreeTextCtrl::OnKeyUp( wxKeyEvent &event )
{ {
if ( !m_finished ) if ( !m_aboutToFinish )
{ {
// auto-grow the textctrl: // auto-grow the textctrl:
wxSize parentSize = m_owner->GetSize(); wxSize parentSize = m_owner->GetSize();
@ -488,18 +481,15 @@ void wxTreeTextCtrl::OnKeyUp( wxKeyEvent &event )
void wxTreeTextCtrl::OnKillFocus( wxFocusEvent &event ) void wxTreeTextCtrl::OnKillFocus( wxFocusEvent &event )
{ {
if ( !m_finished && !m_aboutToFinish ) if ( !m_aboutToFinish )
{ {
// We must finish regardless of success, otherwise we'll get
// focus problems:
Finish();
if ( !AcceptChanges() ) if ( !AcceptChanges() )
m_owner->OnRenameCancelled( m_itemEdited ); m_owner->OnRenameCancelled( m_itemEdited );
Finish( false );
} }
// We must let the native text control handle focus, too, otherwise // We should let the native text control handle focus, too.
// it could have problems with the cursor (e.g., in wxGTK).
event.Skip(); event.Skip();
} }
@ -820,10 +810,10 @@ bool wxGenericTreeCtrl::Create(wxWindow *parent,
style |= wxTR_NO_LINES; style |= wxTR_NO_LINES;
if (major < 10) if (major < 10)
style |= wxTR_ROW_LINES; style |= wxTR_ROW_LINES;
if (style == 0 || style & wxTR_DEFAULT_STYLE) if (style == 0 || style & wxTR_DEFAULT_STYLE)
style |= wxTR_FULL_ROW_HIGHLIGHT; style |= wxTR_FULL_ROW_HIGHLIGHT;
#endif // __WXMAC__ #endif // __WXMAC__
#ifdef __WXGTK20__ #ifdef __WXGTK20__
style |= wxTR_NO_LINES; style |= wxTR_NO_LINES;
@ -1519,7 +1509,7 @@ void wxGenericTreeCtrl::SendDeleteEvent(wxGenericTreeItem *item)
void wxGenericTreeCtrl::ChildrenClosing(wxGenericTreeItem* item) void wxGenericTreeCtrl::ChildrenClosing(wxGenericTreeItem* item)
{ {
if (m_textCtrl != NULL && item != m_textCtrl->item() && IsDescendantOf(item, m_textCtrl->item())) { if (m_textCtrl != NULL && item != m_textCtrl->item() && IsDescendantOf(item, m_textCtrl->item())) {
m_textCtrl->StopEditing(); m_textCtrl->EndEdit( true );
} }
if (item != m_key_current && IsDescendantOf(item, m_key_current)) { if (item != m_key_current && IsDescendantOf(item, m_key_current)) {
m_key_current = NULL; m_key_current = NULL;
@ -1553,7 +1543,7 @@ void wxGenericTreeCtrl::Delete(const wxTreeItemId& itemId)
if (m_textCtrl != NULL && IsDescendantOf(item, m_textCtrl->item())) if (m_textCtrl != NULL && IsDescendantOf(item, m_textCtrl->item()))
{ {
// can't delete the item being edited, cancel editing it first // can't delete the item being edited, cancel editing it first
m_textCtrl->StopEditing(); m_textCtrl->EndEdit( true );
} }
wxGenericTreeItem *parent = item->GetParent(); wxGenericTreeItem *parent = item->GetParent();
@ -1607,7 +1597,7 @@ void wxGenericTreeCtrl::Delete(const wxTreeItemId& itemId)
delete item; delete item;
InvalidateBestSize(); InvalidateBestSize();
} }
void wxGenericTreeCtrl::DeleteAllItems() void wxGenericTreeCtrl::DeleteAllItems()
@ -1905,7 +1895,7 @@ void wxGenericTreeCtrl::SelectItem(const wxTreeItemId& itemId, bool select)
{ {
wxGenericTreeItem *item = (wxGenericTreeItem*) itemId.m_pItem; wxGenericTreeItem *item = (wxGenericTreeItem*) itemId.m_pItem;
wxCHECK_RET( item, wxT("SelectItem(): invalid tree item") ); wxCHECK_RET( item, wxT("SelectItem(): invalid tree item") );
wxTreeEvent event(wxEVT_COMMAND_TREE_SEL_CHANGING, this, item); wxTreeEvent event(wxEVT_COMMAND_TREE_SEL_CHANGING, this, item);
if ( GetEventHandler()->ProcessEvent( event ) && !event.IsAllowed() ) if ( GetEventHandler()->ProcessEvent( event ) && !event.IsAllowed() )
return; return;
@ -2262,7 +2252,7 @@ void wxGenericTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
#else #else
rect.x -= 1; rect.x -= 1;
rect.width += 2; rect.width += 2;
int flags = wxCONTROL_SELECTED; int flags = wxCONTROL_SELECTED;
if (m_hasFocus) if (m_hasFocus)
flags |= wxCONTROL_FOCUSED; flags |= wxCONTROL_FOCUSED;
@ -2289,7 +2279,7 @@ void wxGenericTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc)
{ {
rect.x -= 1; rect.x -= 1;
rect.width += 2; rect.width += 2;
int flags = wxCONTROL_SELECTED; int flags = wxCONTROL_SELECTED;
if (m_hasFocus) if (m_hasFocus)
flags |= wxCONTROL_FOCUSED; flags |= wxCONTROL_FOCUSED;
@ -3629,7 +3619,7 @@ wxGenericTreeCtrl::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant))
return wxListBox::GetClassDefaultAttributes(variant); return wxListBox::GetClassDefaultAttributes(variant);
#else #else
wxVisualAttributes attr; wxVisualAttributes attr;
attr.colFg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); attr.colFg = wxSystemSettings::GetColour(wxSYS_COLOUR_LISTBOXTEXT);
attr.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_LISTBOX); attr.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_LISTBOX);
attr.font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); attr.font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
return attr; return attr;

View File

@ -4,7 +4,7 @@
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Modified by: // Modified by:
// Created: 30.05.03 // Created: 30.05.03
// RCS-ID: $Id: vscroll.cpp 51579 2008-02-07 14:15:45Z JS $ // RCS-ID: $Id: vscroll.cpp 57359 2008-12-15 19:09:31Z BP $
// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwindows.org> // Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwindows.org>
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -373,8 +373,8 @@ bool wxVScrolledWindow::ScrollToLine(size_t line)
// finally refresh the display -- but only redraw as few lines as possible // finally refresh the display -- but only redraw as few lines as possible
// to avoid flicker // to avoid flicker
if ( GetVisibleBegin() >= lineLastOld || if ( GetChildren().empty() &&
GetVisibleEnd() <= lineFirstOld ) (GetVisibleBegin() >= lineLastOld || GetVisibleEnd() <= lineFirstOld ) )
{ {
// the simplest case: we don't have any old lines left, just redraw // the simplest case: we don't have any old lines left, just redraw
// everything // everything

View File

@ -3,7 +3,7 @@
// Purpose: implementation of wxAboutBox() for wxMSW // Purpose: implementation of wxAboutBox() for wxMSW
// Author: Vadim Zeitlin // Author: Vadim Zeitlin
// Created: 2006-10-07 // Created: 2006-10-07
// RCS-ID: $Id: aboutdlg.cpp 45979 2007-05-11 22:39:15Z VZ $ // RCS-ID: $Id: aboutdlg.cpp 58748 2009-02-08 09:46:03Z VZ $
// Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org> // Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -53,7 +53,7 @@ void wxAboutBox(const wxAboutDialogInfo& info)
msg << _T('\n'); msg << _T('\n');
if ( info.HasCopyright() ) if ( info.HasCopyright() )
msg << info.GetCopyright() << _T('\n'); msg << info.GetCopyrightToDisplay() << _T('\n');
// add everything remaining // add everything remaining
msg << info.GetDescriptionAndCredits(); msg << info.GetDescriptionAndCredits();

View File

@ -4,7 +4,7 @@
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
// Created: 04/01/98 // Created: 04/01/98
// RCS-ID: $Id: accel.cpp 49804 2007-11-10 01:09:42Z VZ $ // RCS-ID: $Id: accel.cpp 56049 2008-10-03 12:13:21Z VZ $
// Copyright: (c) Julian Smart // Copyright: (c) Julian Smart
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -152,13 +152,6 @@ WXHACCEL wxAcceleratorTable::GetHACCEL() const
bool wxAcceleratorTable::Translate(wxWindow *window, WXMSG *wxmsg) const bool wxAcceleratorTable::Translate(wxWindow *window, WXMSG *wxmsg) const
{ {
#if 0
// calling TranslateAccelerator() with child window doesn't do anything so
// it's probably a bug
wxASSERT_MSG( window->IsTopLevel(),
_T("TranslateAccelerator() needs a top level window") );
#endif
MSG *msg = (MSG *)wxmsg; MSG *msg = (MSG *)wxmsg;
return Ok() && ::TranslateAccelerator(GetHwndOf(window), GetHaccel(), msg); return Ok() && ::TranslateAccelerator(GetHwndOf(window), GetHaccel(), msg);
} }

Some files were not shown because too many files have changed in this diff Show More