1. added wxStatusBarUniv

2. several bug fixes to wxSpinButton/wxSpinCtrl


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11991 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2001-10-14 21:38:58 +00:00
parent 5d9007815f
commit 71e030352d
25 changed files with 1157 additions and 362 deletions

View File

@ -10,24 +10,24 @@
# BaseOnly /src/common but only needed for the wxBase compilation
# Generic /src/generic
# Common /src/common
# MSW /src/msw
# Mac /src/mac for Mac OS X with Apple Developer Tools
# MSW /src/msw
# Mac /src/mac for Mac OS X with Apple Developer Tools
# Motif /src/motif
# Univ /src/univ or src/univ/themes
# Unix /src/unix
# GTK /src/gtk
# MGL /src/mgl
# OS2 /src/os2
# HTML /src/html
# Univ /src/univ or src/univ/themes
# Unix /src/unix
# GTK /src/gtk
# MGL /src/mgl
# OS2 /src/os2
# HTML /src/html
#
# 'H' suffix means these are headers, not .cpp files
#
# WXH /include/wx
# GTKH /include/wx/gtk
# MacH /include/wx/mac
# WXH /include/wx
# GTKH /include/wx/gtk
# MacH /include/wx/mac
# MotifH /include/wx/motif
# MSWH /include/wx/msw
# OS2H /include/wx/os2
# MSWH /include/wx/msw
# OS2H /include/wx/os2
# GenericH /include/wx/generic
# HtmlH /include/wx/html
# ProtoH /include/wx/protocol
@ -36,27 +36,28 @@
#
# 'R' suffix means these are resource files
#
# MacR /src/mac
# MacR /src/mac
#
# The third column may be empty or contain some additional info about this
# file (only compile it in 16bit mode, don't compile it with this or that
# compiler, &c)
#
# Known flags:
# Base makes part of the base library too
# Base makes part of the base library too
# NotWin32 not used under Win32, but used under Win16
# Win32Only only can be compiled under Win32
# Generic generic code which might be used instead of native one
# OLE OLE file (needs Win32 and a decent compiler)
# OLE OLE file (needs Win32 and a decent compiler)
# Socket Socket file (currently doesn't compile under Win16)
# NotMSW Not required for the MSW port
# NotMac Not required for the MAC port under Mac OS X
# NotMGL Not required for the MGL port
# NotGTK Not required for the GTK port
# NotX Not required for the Motif port
# NotX Not required for the Motif port
# NotOS2 Not required for the os2Pm port
# NotUniv Not required for the wxUniversal
# LowLevel Low level GUI toolkit file, used by wxUniversal as well
# Theme implements a wxUniv theme
# Theme implements a wxUniv theme
###############################################################################
# File name Type Flags
@ -207,6 +208,7 @@ sckstrm.cpp Common Socket,Base
serbase.cpp Common Base
sizer.cpp Common
socket.cpp Common Socket,Base
statbar.cpp Common
strconv.cpp Common Base
stream.cpp Common Base
string.cpp Common Base
@ -383,6 +385,7 @@ statbmp.cpp Univ
statbox.cpp Univ
statline.cpp Univ
stattext.cpp Univ
statusbr.cpp Univ
textctrl.cpp Univ
theme.cpp Univ
gtk.cpp Univ Theme
@ -1410,6 +1413,7 @@ statbmp.h UnivH
statbox.h UnivH
statline.h UnivH
stattext.h UnivH
statusbr.h UnivH
textctrl.h UnivH
theme.h UnivH
window.h UnivH

View File

@ -135,68 +135,71 @@ The status field string if the field is valid, otherwise the empty string.
\helpref{wxStatusBar::SetStatusText}{wxstatusbarsetstatustext}
\membersection{wxStatusBar::DrawField}\label{wxstatusbardrawfield}
\func{virtual void}{DrawField}{\param{wxDC\& }{dc}, \param{int }{i}}
Draws a field, including shaded borders and text.
\wxheading{Parameters}
\docparam{dc}{The device context to draw onto.}
\docparam{i}{The field to be drawn.}
\wxheading{See also}
\helpref{wxStatusBar::DrawFieldText}{wxstatusbardrawfieldtext}
\membersection{wxStatusBar::DrawFieldText}\label{wxstatusbardrawfieldtext}
\func{virtual void}{DrawFieldText}{\param{wxDC\& }{dc}, \param{int }{i}}
Draws a field's text.
\wxheading{Parameters}
\docparam{dc}{The device context to draw onto.}
\docparam{i}{The field whose text is to be drawn.}
\wxheading{See also}
\helpref{wxStatusBar::DrawField}{wxstatusbardrawfield}
\membersection{wxStatusBar::InitColours}\label{wxstatusbarinitcolours}
\func{virtual void}{InitColours}{\void}
Sets up the background colour and shading pens using suitable system colours (Windows) or tasteful shades
of grey (other platforms).
\wxheading{Remarks}
This function is called when the window is created, and also
from \helpref{wxStatusBar::OnSysColourChanged}{wxstatusbaronsyscolourchanged} on Windows.
\wxheading{See also}
\helpref{wxStatusBar::OnSysColourChanged}{wxstatusbaronsyscolourchanged}
\membersection{wxStatusBar::OnSysColourChanged}\label{wxstatusbaronsyscolourchanged}
\func{void}{OnSysColourChanged}{\param{wxSysColourChangedEvent\& }{event}}
Handles a system colour change by calling \helpref{wxStatusBar::InitColours}{wxstatusbarinitcolours},
and refreshes the window.
\wxheading{Parameters}
\docparam{event}{The colour change event.}
\wxheading{See also}
\helpref{wxStatusBar::InitColours}{wxstatusbarinitcolours}
%% VZ: these functions are not in wxStatusBar API, these are just
%% implementation details of wxStatusBarGeneric
%%
%% \membersection{wxStatusBar::DrawField}\label{wxstatusbardrawfield}
%%
%% \func{virtual void}{DrawField}{\param{wxDC\& }{dc}, \param{int }{i}}
%%
%% Draws a field, including shaded borders and text.
%%
%% \wxheading{Parameters}
%%
%% \docparam{dc}{The device context to draw onto.}
%%
%% \docparam{i}{The field to be drawn.}
%%
%% \wxheading{See also}
%%
%% \helpref{wxStatusBar::DrawFieldText}{wxstatusbardrawfieldtext}
%%
%% \membersection{wxStatusBar::DrawFieldText}\label{wxstatusbardrawfieldtext}
%%
%% \func{virtual void}{DrawFieldText}{\param{wxDC\& }{dc}, \param{int }{i}}
%%
%% Draws a field's text.
%%
%% \wxheading{Parameters}
%%
%% \docparam{dc}{The device context to draw onto.}
%%
%% \docparam{i}{The field whose text is to be drawn.}
%%
%% \wxheading{See also}
%%
%% \helpref{wxStatusBar::DrawField}{wxstatusbardrawfield}
%%
%% \membersection{wxStatusBar::InitColours}\label{wxstatusbarinitcolours}
%%
%% \func{virtual void}{InitColours}{\void}
%%
%% Sets up the background colour and shading pens using suitable system colours (Windows) or tasteful shades
%% of grey (other platforms).
%%
%% \wxheading{Remarks}
%%
%% This function is called when the window is created, and also
%% from \helpref{wxStatusBar::OnSysColourChanged}{wxstatusbaronsyscolourchanged} on Windows.
%%
%% \wxheading{See also}
%%
%% \helpref{wxStatusBar::OnSysColourChanged}{wxstatusbaronsyscolourchanged}
%%
%% \membersection{wxStatusBar::OnSysColourChanged}\label{wxstatusbaronsyscolourchanged}
%%
%% \func{void}{OnSysColourChanged}{\param{wxSysColourChangedEvent\& }{event}}
%%
%% Handles a system colour change by calling \helpref{wxStatusBar::InitColours}{wxstatusbarinitcolours},
%% and refreshes the window.
%%
%% \wxheading{Parameters}
%%
%% \docparam{event}{The colour change event.}
%%
%% \wxheading{See also}
%%
%% \helpref{wxStatusBar::InitColours}{wxstatusbarinitcolours}
\membersection{wxStatusBar::SetFieldsCount}\label{wxstatusbarsetfieldscount}
@ -246,15 +249,27 @@ Sets the text for one field.
\func{virtual void}{SetStatusWidths}{\param{int}{ n}, \param{int *}{widths}}
Sets the widths of the fields in the status line.
Sets the widths of the fields in the status line. There are two types of
fields: fixed widths one and variable width fields. For the fixed width fields
you should specify their (constant) width in pixels. For the variable width
fields, specify a negative number which indicates how should the field expand:
the space left for all variable width fields is divided between them according
to the absolute value of this number. A variable width field with width of $-2$
gets twice as much of it as a field with width $-1$ and so on.
For example, to create one fixed width field of width $50$ in the right part of
the status bar and two more fields which get $66$\% and $33$\% of the remaining
space correspondingly, you should use an array containing $-2$, $-1$ and $100$.
\wxheading{Parameters}
\docparam{n}{The number of fields in the status bar.}
\docparam{n}{The number of fields in the status bar. Must be equal to the
number passed to \helpref{SetFieldsCount}{wxstatusbarsetfieldscount} the last
time it was called.}
\docparam{widths}{Must contain an array of {\it n} integers, each of which is a status field width
in pixels. A value of -1 indicates that the field is variable width; at least one
field must be -1. You should delete this array after calling {\bf SetStatusWidths}.}
\docparam{widths}{Contains an array of {\it n} integers, each of which is
either an absolute status field width in pixels if positive or indicates a
variable width field if negative}
\wxheading{Remarks}

View File

@ -12,6 +12,10 @@
#ifndef _WX_STATUSBR_H_BASE_
#define _WX_STATUSBR_H_BASE_
#ifdef __GNUG__
#pragma interface "statbar.h"
#endif
#include "wx/window.h"
#if wxUSE_STATUSBAR
@ -23,19 +27,37 @@
class WXDLLEXPORT wxStatusBarBase : public wxWindow
{
public:
wxStatusBarBase() { m_statusWidths = NULL; }
wxStatusBarBase();
// get/set the number of fields
virtual void SetFieldsCount(int number = 1,
const int *widths = (const int *) NULL) = 0;
virtual ~wxStatusBarBase();
// field count
// -----------
// set the number of fields and call SetStatusWidths(widths) if widths are
// given
virtual void SetFieldsCount(int number = 1, const int *widths = NULL);
int GetFieldsCount() const { return m_nFields; }
// get/set the text of the given field
// field text
// ----------
virtual void SetStatusText(const wxString& text, int number = 0) = 0;
virtual wxString GetStatusText(int number = 0) const = 0;
// set status line widths (n should be the same as field count)
virtual void SetStatusWidths(int n, const int widths[]) = 0;
// fields widths
// -------------
// set status field widths as absolute numbers: positive widths mean that
// the field has the specified absolute width, negative widths are
// interpreted as the sizer options, i.e. the extra space (total space
// minus the sum of fixed width fields) is divided between the fields with
// negative width according to the abs value of the width (field with width
// -2 grows twice as much as one with width -1 &c)
virtual void SetStatusWidths(int n, const int widths[]);
// geometry
// --------
// Get the position and size of the field's internal bounding rectangle
virtual bool GetFieldRect(int i, wxRect& rect) const = 0;
@ -51,54 +73,54 @@ public:
virtual bool AcceptsFocus() const { return FALSE; }
protected:
int m_nFields; // the current number of fields
int *m_statusWidths; // the width (if !NULL) of the fields
// set the widths array to NULL
void InitWidths();
// free the status widths arrays
void FreeWidths();
// reset the widths
void ReinitWidths() { FreeWidths(); InitWidths(); }
// calculate the real field widths for the given total available size
wxArrayInt CalculateAbsWidths(wxCoord widthTotal) const;
// the current number of fields
int m_nFields;
// the widths of the fields in pixels if !NULL, all fields have the same
// width otherwise
int *m_statusWidths;
};
#if defined(__WIN32__) && wxUSE_NATIVE_STATUSBAR
#include "wx/msw/statbr95.h"
// ----------------------------------------------------------------------------
// include the actual wxStatusBar class declaration
// ----------------------------------------------------------------------------
typedef wxStatusBar95 wxStatusBarReal;
#if defined(__WXUNIVERSAL__)
#define wxStatusBarUniv wxStatusBar
#define sm_classwxStatusBarUniv sm_classwxStatusBar
#include "wx/univ/statusbr.h"
#elif defined(__WIN32__) && wxUSE_NATIVE_STATUSBAR
#define wxStatusBar95 wxStatusBar
#define sm_classwxStatusBar95 sm_classwxStatusBar
#include "wx/msw/statbr95.h"
#elif defined(__WXMAC__)
#define wxStatusBarMac wxStatusBar
#define sm_classwxStatusBarMac sm_classwxStatusBar
#include "wx/generic/statusbr.h"
#include "wx/mac/statusbr.h"
typedef wxStatusBarMac wxStatusBarReal;
#else
#define wxStatusBarGeneric wxStatusBar
#define sm_classwxStatusBarGeneric sm_classwxStatusBar
#include "wx/generic/statusbr.h"
typedef wxStatusBarGeneric wxStatusBarReal;
#endif
// we can't just typedef wxStatusBar to be one of 95/Generic because we should
// be able to forward declare it (done in several places) and because wxWin
// RTTI wouldn't work then
class WXDLLEXPORT wxStatusBar : public wxStatusBarReal
{
public:
wxStatusBar() { }
wxStatusBar(wxWindow *parent,
wxWindowID id,
const wxPoint& WXUNUSED(pos) = wxDefaultPosition,
const wxSize& WXUNUSED(size) = wxDefaultSize,
long style = wxST_SIZEGRIP,
const wxString& name = wxPanelNameStr)
{
Create(parent, id, style, name);
}
wxStatusBar(wxWindow *parent,
wxWindowID id,
long style,
const wxString& name = wxPanelNameStr)
{
Create(parent, id, style, name);
}
private:
DECLARE_DYNAMIC_CLASS(wxStatusBar)
};
#endif
#endif // wxUSE_STATUSBAR
#endif
// _WX_STATUSBR_H_BASE_

View File

@ -1035,6 +1035,8 @@ public:
size_t Add(const wxString& str);
// add new element at given position
void Insert(const wxString& str, size_t uiIndex);
// expand the array to have count elements
void SetCount(size_t count);
// remove first item matching this value
void Remove(const wxChar *sz);
// remove item by index

View File

@ -35,6 +35,7 @@
#define wxINP_HANDLER_SCROLLBAR _T("scrollbar")
#define wxINP_HANDLER_SLIDER _T("slider")
#define wxINP_HANDLER_SPINBTN _T("spinbtn")
#define wxINP_HANDLER_STATUSBAR _T("statusbar")
#define wxINP_HANDLER_TEXTCTRL _T("textctrl")
#define wxINP_HANDLER_TOPLEVEL _T("toplevel")

View File

@ -26,24 +26,10 @@
class WXDLLEXPORT wxMenuInfo;
WX_DECLARE_OBJARRAY(wxMenuInfo, wxMenuInfoArray);
class wxPopupMenuWindow;
class WXDLLEXPORT wxMenuGeometryInfo;
class WXDLLEXPORT wxPopupMenuWindow;
class WXDLLEXPORT wxRenderer;
// ----------------------------------------------------------------------------
// wxMenu helper classes, used in implementation only
// ----------------------------------------------------------------------------
// used by wxRenderer
class WXDLLEXPORT wxMenuGeometryInfo
{
public:
// get the total size of the menu
virtual wxSize GetSize() const = 0;
virtual ~wxMenuGeometryInfo();
};
// ----------------------------------------------------------------------------
// wxMenu
// ----------------------------------------------------------------------------

View File

@ -44,6 +44,16 @@ class WXDLLEXPORT wxGauge;
#include "wx/gdicmn.h"
#include "wx/scrolbar.h" // for wxScrollBar::Element
// helper class used by wxMenu-related functions
class WXDLLEXPORT wxMenuGeometryInfo
{
public:
// get the total size of the menu
virtual wxSize GetSize() const = 0;
virtual ~wxMenuGeometryInfo();
};
// ----------------------------------------------------------------------------
// wxRenderer: abstract renderers interface
// ----------------------------------------------------------------------------
@ -220,7 +230,6 @@ public:
int step = 1,
int flags = 0) = 0;
#if wxUSE_MENUS
// draw a menu bar item
virtual void DrawMenuBarItem(wxDC& dc,
const wxRect& rect,
@ -244,7 +253,14 @@ public:
virtual void DrawMenuSeparator(wxDC& dc,
wxCoord y,
const wxMenuGeometryInfo& geomInfo) = 0;
#endif
// draw a status bar field: wxCONTROL_ISDEFAULT bit in the flags is
// interpreted specially and means "draw the status bar grip" here
virtual void DrawStatusField(wxDC& dc,
const wxRect& rect,
const wxString& label,
int flags = 0) = 0;
// draw complete frame/dialog titlebar
virtual void DrawFrameTitleBar(wxDC& dc,
const wxRect& rect,
@ -253,7 +269,7 @@ public:
int flags,
int specialButton = 0,
int specialButtonFlags = 0) = 0;
// draw frame borders
virtual void DrawFrameBorder(wxDC& dc,
const wxRect& rect,
@ -373,7 +389,6 @@ public:
// get the size of one progress bar step (in horz and vertical directions)
virtual wxSize GetProgressBarStep() const = 0;
#if wxUSE_MENUS
// get the size of rectangle to use in the menubar for the given text rect
virtual wxSize GetMenuBarItemSize(const wxSize& sizeText) const = 0;
@ -384,19 +399,25 @@ public:
// the returned pointer must be deleted by the caller
virtual wxMenuGeometryInfo *GetMenuGeometry(wxWindow *win,
const wxMenu& menu) const = 0;
#endif
// get the borders around the status bar fields (x and y fields of the
// return value) and also, optionally, the border between the fields
virtual wxSize GetStatusBarBorders(wxCoord *borderBetweenFields) const = 0;
// get client area rectangle of top level window (i.e. subtract
// decorations from given rectangle)
virtual wxRect GetFrameClientArea(const wxRect& rect, int flags) const = 0;
// get size of whole top level window, given size of its client area size
virtual wxSize GetFrameTotalSize(const wxSize& clientSize, int flags) const = 0;
// get titlebar icon size
virtual wxSize GetFrameIconSize() const = 0;
// returns one of wxHT_TOPLEVEL_XXX constants
virtual int HitTestFrame(const wxRect& rect,
const wxPoint& pt,
int flags) const = 0;
int flags = 0) const = 0;
// virtual dtor for any base class
virtual ~wxRenderer();
@ -599,7 +620,6 @@ public:
int flags = 0)
{ m_renderer->DrawSliderTicks(dc, rect, sizeThumb, orient,
start, end, start, flags); }
#if wxUSE_MENUS
virtual void DrawMenuBarItem(wxDC& dc,
const wxRect& rect,
@ -621,7 +641,13 @@ public:
wxCoord y,
const wxMenuGeometryInfo& geomInfo)
{ m_renderer->DrawMenuSeparator(dc, y, geomInfo); }
#endif
virtual void DrawStatusField(wxDC& dc,
const wxRect& rect,
const wxString& label,
int flags = 0)
{ m_renderer->DrawStatusField(dc, rect, label, flags); }
virtual void DrawFrameTitleBar(wxDC& dc,
const wxRect& rect,
const wxString& title,
@ -629,7 +655,7 @@ public:
int flags,
int specialButton = 0,
int specialButtonFlag = 0)
{ m_renderer->DrawFrameTitleBar(dc, rect, title, icon, flags,
{ m_renderer->DrawFrameTitleBar(dc, rect, title, icon, flags,
specialButton, specialButtonFlag); }
virtual void DrawFrameBorder(wxDC& dc,
const wxRect& rect,
@ -717,13 +743,13 @@ public:
{ return m_renderer->GetSliderThumbSize(rect, orient); }
virtual wxSize GetProgressBarStep() const
{ return m_renderer->GetProgressBarStep(); }
#if wxUSE_MENUS
virtual wxSize GetMenuBarItemSize(const wxSize& sizeText) const
{ return m_renderer->GetMenuBarItemSize(sizeText); }
virtual wxMenuGeometryInfo *GetMenuGeometry(wxWindow *win,
const wxMenu& menu) const
{ return m_renderer->GetMenuGeometry(win, menu); }
#endif
virtual wxSize GetStatusBarBorders(wxCoord *borderBetweenFields) const
{ return m_renderer->GetStatusBarBorders(borderBetweenFields); }
virtual wxRect GetFrameClientArea(const wxRect& rect, int flags) const
{ return m_renderer->GetFrameClientArea(rect, flags); }
virtual wxSize GetFrameTotalSize(const wxSize& clientSize, int flags) const

View File

@ -98,7 +98,7 @@
#define wxUSE_STATLINE 1
#define wxUSE_STATTEXT 1
#define wxUSE_STATBMP 1
#define wxUSE_STATUSBAR 0
#define wxUSE_STATUSBAR 1
#define wxUSE_TEXTCTRL 1
#define wxUSE_TOOLTIPS 0
#define wxUSE_TREECTRL 0
@ -121,7 +121,7 @@
#define wxUSE_FILEDLG 0
#define wxUSE_COLOURDLG 0
#define wxUSE_CHOICEDLG 0
#define wxUSE_NUMBERDLG 0
#define wxUSE_NUMBERDLG 1
#define wxUSE_STARTUP_TIPS 0
#define wxUSE_MSGDLG 1
#define wxUSE_SPLITTER 1
@ -252,7 +252,7 @@
#define wxUSE_STATLINE 1
#define wxUSE_STATTEXT 1
#define wxUSE_STATBMP 1
#define wxUSE_STATUSBAR 0
#define wxUSE_STATUSBAR 1
#define wxUSE_TEXTCTRL 1
#define wxUSE_TOOLTIPS 0
#define wxUSE_TREECTRL 0
@ -275,7 +275,7 @@
#define wxUSE_COLOURDLG 0
#define wxUSE_TEXTDLG 0
#define wxUSE_CHOICEDLG 0
#define wxUSE_NUMBERDLG 0
#define wxUSE_NUMBERDLG 1
#define wxUSE_STARTUP_TIPS 0
#define wxUSE_MSGDLG 1
#define wxUSE_SPLITTER 1

108
include/wx/univ/statusbr.h Normal file
View File

@ -0,0 +1,108 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/univ/statusbr.h
// Purpose: wxStatusBarUniv: wxStatusBar for wxUniversal declaration
// Author: Vadim Zeitlin
// Modified by:
// Created: 14.10.01
// RCS-ID: $Id$
// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com)
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_UNIV_STATUSBR_H_
#define _WX_UNIV_STATUSBR_H_
#ifdef __GNUG__
#pragma interface "univstatusbr.h"
#endif
// ----------------------------------------------------------------------------
// wxStatusBar: a window near the bottom of the frame used for status info
// ----------------------------------------------------------------------------
class WXDLLEXPORT wxStatusBarUniv : public wxStatusBarBase,
public wxInputConsumer
{
public:
wxStatusBarUniv() { Init(); }
wxStatusBarUniv(wxWindow *parent,
wxWindowID id = -1,
long style = 0,
const wxString& name = wxPanelNameStr)
{
Init();
(void)Create(parent, id, style, name);
}
bool Create(wxWindow *parent,
wxWindowID id = -1,
long style = 0,
const wxString& name = wxPanelNameStr);
// set field count/widths
virtual void SetFieldsCount(int number = 1, const int *widths = NULL);
virtual void SetStatusWidths(int n, const int widths[]);
// get/set the text of the given field
virtual void SetStatusText(const wxString& text, int number = 0);
virtual wxString GetStatusText(int number = 0) const;
// Get the position and size of the field's internal bounding rectangle
virtual bool GetFieldRect(int i, wxRect& rect) const;
// sets the minimal vertical size of the status bar
virtual void SetMinHeight(int height);
// get the dimensions of the horizontal and vertical borders
virtual int GetBorderX() const;
virtual int GetBorderY() const;
protected:
// recalculate the field widths
void OnSize(wxSizeEvent& event);
// draw the statusbar
virtual void DoDraw(wxControlRenderer *renderer);
// wxInputConsumer pure virtual
virtual wxWindow *GetInputWindow() const
{ return wxConstCast(this, wxStatusBar); }
// tell them about our preferred height
virtual wxSize DoGetBestSize() const;
// override DoSetSize() to prevent the status bar height from changing
virtual void DoSetSize(int x, int y,
int width, int height,
int sizeFlags = wxSIZE_AUTO);
// get the (fixed) status bar height
wxCoord GetHeight() const;
// get the rectangle containing all the fields and the border between them
//
// also updates m_widthsAbs if necessary
wxRect GetTotalFieldRect(wxCoord *borderBetweenFields);
// refresh the given field
void RefreshField(int i);
// common part of all ctors
void Init();
private:
// the status fields strings
wxArrayString m_statusText;
// the absolute status fields widths
wxArrayInt m_widthsAbs;
DECLARE_DYNAMIC_CLASS(wxStatusBarUniv)
DECLARE_EVENT_TABLE()
WX_DECLARE_INPUT_CONSUMER()
};
#endif // _WX_UNIV_STATUSBR_H_

View File

@ -35,7 +35,7 @@ enum
wxTOPLEVEL_BUTTON_MAXIMIZE = 0x02000000,
wxTOPLEVEL_BUTTON_ICONIZE = 0x04000000,
wxTOPLEVEL_BUTTON_RESTORE = 0x08000000,
wxTOPLEVEL_BUTTON_HELP = 0x10000000,
wxTOPLEVEL_BUTTON_HELP = 0x10000000,
};
// frame hit test return values:
@ -115,14 +115,15 @@ public:
// implementation from now on
// --------------------------
// tests for frame's part at given point
long HitTest(const wxPoint& pt) const;
protected:
virtual bool PerformAction(const wxControlAction& action,
long numArg = -1,
const wxString& strArg = wxEmptyString);
protected:
// handle titlebar button click event
virtual void ClickTitleBarButton(long button);
@ -133,7 +134,7 @@ protected:
// common part of all ctors
void Init();
void RefreshTitleBar();
void OnNcPaint(wxPaintEvent& event);

View File

@ -341,16 +341,20 @@ void MyFrame::OnSetStatusFields(wxCommandEvent& WXUNUSED(event))
// SetFieldsCount() with the same number of fields should be ok
if ( nFields != -1 )
{
// we set the widths only for 2 of them, otherwise let all the fields
// have equal width (the default behaviour)
const int *widths = NULL;
if ( nFields == 2 )
{
static const int widthsFor2Fields[2] = { 200, -1 };
widths = widthsFor2Fields;
}
static const int widthsFor2Fields[] = { 200, -1 };
static const int widthsFor3Fields[] = { -1, -2, -1 };
static const int widthsFor4Fields[] = { 100, -1, 100, -2, 100 };
sb->SetFieldsCount(nFields, widths);
static const int *widths[] =
{
NULL, // 1 field: default
widthsFor2Fields, // 2 fields: 1 fixed, 1 var
widthsFor3Fields, // 3 fields: 3 var
widthsFor4Fields, // 4 fields: 3 fixed, 2 vars
NULL // 5 fields: default (all have same width)
};
sb->SetFieldsCount(nFields, widths[nFields - 1]);
wxLogStatus(this,
wxString::Format(wxT("Status bar now has %ld fields"),
@ -447,7 +451,9 @@ MyStatusBar::MyStatusBar(wxWindow *parent)
#ifdef USE_STATIC_BITMAP
m_statbmp = new wxStaticBitmap(this, -1, wxIcon(green_xpm));
#else
m_statbmp = new wxBitmapButton(this, -1, CreateBitmapForButton());
m_statbmp = new wxBitmapButton(this, -1, CreateBitmapForButton(),
wxDefaultPosition, wxDefaultSize,
wxBU_EXACTFIT);
#endif
m_timer.Start(1000);
@ -497,11 +503,7 @@ void MyStatusBar::OnSize(wxSizeEvent& event)
m_checkbox->SetSize(rect.x + 2, rect.y + 2, rect.width - 4, rect.height - 4);
GetFieldRect(Field_Bitmap, rect);
#ifdef USE_BUTTON_FOR_BITMAP
wxSize size(BITMAP_SIZE_X, BITMAP_SIZE_Y);
#else
wxSize size = m_statbmp->GetSize();
#endif
m_statbmp->Move(rect.x + (rect.width - size.x) / 2,
rect.y + (rect.height - size.y) / 2);

View File

@ -244,17 +244,6 @@ wxStatusBar *wxFrameBase::OnCreateStatusBar(int number,
{
wxStatusBar *statusBar = new wxStatusBar(this, id, style, name);
// Set the height according to the font and the border size
wxClientDC dc(statusBar);
dc.SetFont(statusBar->GetFont());
wxCoord y;
dc.GetTextExtent( "X", NULL, &y );
int height = (int)( (11*y)/10 + 2*statusBar->GetBorderY());
statusBar->SetSize( -1, -1, -1, height );
statusBar->SetFieldsCount(number);
return statusBar;

186
src/common/statbar.cpp Normal file
View File

@ -0,0 +1,186 @@
///////////////////////////////////////////////////////////////////////////////
// Name: common/statbar.cpp
// Purpose: wxStatusBarBase implementation
// Author: Vadim Zeitlin
// Modified by:
// Created: 14.10.01
// RCS-ID: $Id$
// Copyright: (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// License: wxWindows license
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#ifdef __GNUG__
#pragma implementation "statbar.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/statusbr.h"
#endif //WX_PRECOMP
#if wxUSE_STATUSBAR
// ============================================================================
// wxStatusBarBase implementation
// ============================================================================
IMPLEMENT_DYNAMIC_CLASS(wxStatusBar, wxWindow)
// ----------------------------------------------------------------------------
// ctor/dtor
// ----------------------------------------------------------------------------
wxStatusBarBase::wxStatusBarBase()
{
m_nFields = 0;
InitWidths();
}
wxStatusBarBase::~wxStatusBarBase()
{
FreeWidths();
}
// ----------------------------------------------------------------------------
// widths array handling
// ----------------------------------------------------------------------------
void wxStatusBarBase::InitWidths()
{
m_statusWidths = NULL;
}
void wxStatusBarBase::FreeWidths()
{
delete [] m_statusWidths;
}
// ----------------------------------------------------------------------------
// field widths
// ----------------------------------------------------------------------------
void wxStatusBarBase::SetFieldsCount(int number, const int *widths)
{
wxCHECK_RET( number > 0, _T("invalid field number in SetFieldsCount") );
bool refresh = FALSE;
if ( number != m_nFields )
{
m_nFields = number;
ReinitWidths();
refresh = TRUE;
}
//else: keep the old m_statusWidths if we had them
if ( widths )
{
SetStatusWidths(number, widths);
// already done from SetStatusWidths()
refresh = FALSE;
}
if ( refresh )
Refresh();
}
void wxStatusBarBase::SetStatusWidths(int WXUNUSED_UNLESS_DEBUG(n),
const int widths[])
{
wxCHECK_RET( widths, _T("NULL pointer in SetStatusWidths") );
wxASSERT_MSG( n == m_nFields, _T("field number mismatch") );
if ( !m_statusWidths )
m_statusWidths = new int[m_nFields];
for ( int i = 0; i < m_nFields; i++ )
{
m_statusWidths[i] = widths[i];
}
// update the display after the widths changed
Refresh();
}
wxArrayInt wxStatusBarBase::CalculateAbsWidths(wxCoord widthTotal) const
{
wxArrayInt widths;
if ( m_statusWidths == NULL )
{
// default: all fields have the same width
int nWidth = widthTotal / m_nFields;
for ( int i = 0; i < m_nFields; i++ )
{
widths.Add(nWidth);
}
}
else // have explicit status widths
{
// calculate the total width of all the fixed width fields and the
// total number of var field widths counting with multiplicity
int nTotalWidth = 0,
nVarCount = 0,
i;
for ( i = 0; i < m_nFields; i++ )
{
if ( m_statusWidths[i] >= 0 )
{
nTotalWidth += m_statusWidths[i];
}
else
{
nVarCount += -m_statusWidths[i];
}
}
// the amount of extra width we have per each var width field
int nVarWidth;
if ( nVarCount )
{
int widthExtra = widthTotal - nTotalWidth;
nVarWidth = widthExtra > 0 ? widthExtra / nVarCount : 0;
}
else // no var width fields at all
{
nVarWidth = 0;
}
// do fill the array
for ( i = 0; i < m_nFields; i++ )
{
if ( m_statusWidths[i] >= 0 )
{
widths.Add(m_statusWidths[i]);
}
else
{
widths.Add(-m_statusWidths[i]*nVarWidth);
}
}
}
return widths;
}
#endif // wxUSE_STATUSBAR

View File

@ -2156,6 +2156,16 @@ void wxArrayString::Insert(const wxString& str, size_t nIndex)
m_nCount++;
}
// expand the array
void wxArrayString::SetCount(size_t count)
{
Alloc(count);
wxString s;
while ( m_nCount < count )
m_pItems[m_nCount++] = (wxChar *)s.c_str();
}
// removes item from array (by index)
void wxArrayString::Remove(size_t nIndex)
{

View File

@ -69,13 +69,13 @@ protected:
event.Skip();
}
bool ProcessEvent(wxEvent &event)
{
// Hand button down events to wxSpinCtrl. Doesn't work.
if (event.GetEventType() == wxEVT_LEFT_DOWN && m_spin->ProcessEvent( event ))
return TRUE;
return wxTextCtrl::ProcessEvent( event );
}
@ -101,7 +101,7 @@ public:
{
m_spin = spin;
SetWindowStyle(style);
SetWindowStyle(style | wxSP_VERTICAL);
}
protected:
@ -155,6 +155,17 @@ bool wxSpinCtrl::Create(wxWindow *parent,
return FALSE;
}
// the string value overrides the numeric one (for backwards compatibility
// reasons and also because it is simpler to satisfy the string value which
// comes much sooner in the list of arguments and leave the initial
// parameter unspecified)
if ( !value.empty() )
{
long l;
if ( value.ToLong(&l) )
initial = l;
}
SetBackgroundColour(*wxRED);
m_text = new wxSpinCtrlText(this, value);
m_btn = new wxSpinCtrlButton(this, style);

View File

@ -36,10 +36,6 @@
IMPLEMENT_DYNAMIC_CLASS(wxStatusBarGeneric, wxWindow)
#if !defined(__WIN32__) || !wxUSE_NATIVE_STATUSBAR
IMPLEMENT_DYNAMIC_CLASS(wxStatusBar, wxStatusBarGeneric)
#endif // Win32 && wxUSE_NATIVE_STATUSBAR
BEGIN_EVENT_TABLE(wxStatusBarGeneric, wxWindow)
EVT_PAINT(wxStatusBarGeneric::OnPaint)
EVT_SYS_COLOUR_CHANGED(wxStatusBarGeneric::OnSysColourChanged)
@ -64,8 +60,6 @@ wxStatusBarGeneric::~wxStatusBarGeneric()
SetFont(wxNullFont);
# endif // MSW
if ( m_statusWidths )
delete[] m_statusWidths;
if ( m_statusStrings )
delete[] m_statusStrings;
}
@ -93,6 +87,17 @@ bool wxStatusBarGeneric::Create(wxWindow *parent,
SetFont(m_defaultStatusBarFont);
// Set the height according to the font and the border size
wxClientDC dc(this);
dc.SetFont(GetFont());
wxCoord y;
dc.GetTextExtent(_T("X"), NULL, &y );
int height = (int)( (11*y)/10 + 2*GetBorderY());
SetSize(-1, -1, -1, height);
return success;
}
@ -104,12 +109,6 @@ void wxStatusBarGeneric::SetFieldsCount(int number, const int *widths)
delete[] m_statusStrings;
m_statusStrings = new wxString[number];
#if 0 // VZ: what is this for?
int i;
for (i = 0; i < number; i++)
m_statusStrings[i] = "";
#endif
}
SetStatusWidths(number, widths);

View File

@ -231,17 +231,6 @@ wxStatusBar *wxFrameMSW::OnCreateStatusBar(int number,
statusBar = new wxStatusBar(this, id, style, name);
}
// Set the height according to the font and the border size
wxClientDC dc(statusBar);
dc.SetFont(statusBar->GetFont());
wxCoord y;
dc.GetTextExtent(_T("X"), NULL, &y );
int height = (int)( (11*y)/10 + 2*statusBar->GetBorderY());
statusBar->SetSize(-1, -1, -1, height);
statusBar->SetFieldsCount(number);
return statusBar;

View File

@ -45,7 +45,6 @@
// ----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxStatusBar95, wxWindow);
IMPLEMENT_DYNAMIC_CLASS(wxStatusBar, wxStatusBar95)
// ----------------------------------------------------------------------------
// macros
@ -127,7 +126,6 @@ bool wxStatusBar95::Create(wxWindow *parent,
wxStatusBar95::~wxStatusBar95()
{
delete [] m_statusWidths;
}
void wxStatusBar95::CopyFieldsWidth(const int widths[])

View File

@ -2562,7 +2562,10 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
break;
#endif // __WIN32__
#ifdef __WXUNIVERSAL__
// unfortunately this doesn't really work as then window which
// doesn't accept focus doesn't get any mouse events neither which
// means it can't get any input at all
#if 0 //def __WXUNIVERSAL__
case WM_NCHITTEST:
// we shouldn't allow the windows which don't want to get focus to
// get it

View File

@ -77,7 +77,7 @@ void wxFrame::OnSize(wxSizeEvent& event)
}
void wxFrame::SendSizeEvent()
{
{
wxSizeEvent event(GetSize(), GetId());
event.SetEventObject(this);
GetEventHandler()->ProcessEvent(event);
@ -117,9 +117,8 @@ void wxFrame::PositionStatusBar()
{
if ( m_frameStatusBar )
{
wxCoord heightBar = m_frameStatusBar->GetSize().y;
m_frameStatusBar->SetSize(0, GetClientSize().y,
GetClientSize().x, heightBar);
wxSize size = GetClientSize();
m_frameStatusBar->SetSize(0, size.y, size.x, -1);
}
}

283
src/univ/statusbr.cpp Normal file
View File

@ -0,0 +1,283 @@
/////////////////////////////////////////////////////////////////////////////
// Name: univ/statusbr.cpp
// Purpose: wxStatusBar implementation
// Author: Vadim Zeitlin
// Modified by:
// Created: 14.10.01
// RCS-ID: $Id$
// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
#ifdef __GNUG__
#pragma implementation "univstatusbr.h"
#endif
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_STATUSBAR
#ifndef WX_PRECOMP
#endif
#include "wx/statusbr.h"
#include "wx/univ/renderer.h"
// ============================================================================
// implementation
// ============================================================================
BEGIN_EVENT_TABLE(wxStatusBarUniv, wxStatusBarBase)
EVT_SIZE(wxStatusBarUniv::OnSize)
WX_EVENT_TABLE_INPUT_CONSUMER(wxStatusBarUniv)
END_EVENT_TABLE()
WX_FORWARD_TO_INPUT_CONSUMER(wxStatusBarUniv)
// ----------------------------------------------------------------------------
// creation
// ----------------------------------------------------------------------------
void wxStatusBarUniv::Init()
{
}
bool wxStatusBarUniv::Create(wxWindow *parent,
wxWindowID id,
long style,
const wxString& name)
{
if ( !wxWindow::Create(parent, id,
wxDefaultPosition, wxDefaultSize,
style, name) )
{
return FALSE;
}
SetFieldsCount(1);
CreateInputHandler(wxINP_HANDLER_STATUSBAR);
SetSize(DoGetBestSize());
return TRUE;
}
// ----------------------------------------------------------------------------
// drawing
// ----------------------------------------------------------------------------
wxRect wxStatusBarUniv::GetTotalFieldRect(wxCoord *borderBetweenFields)
{
// determine the space we have for the fields
wxSize sizeBorders = m_renderer->GetStatusBarBorders(borderBetweenFields);
wxRect rect = GetClientRect();
// no, don't do this - the borders are meant to be inside this rect
//rect.Deflate(sizeBorders.x, sizeBorders.y);
// recalc the field widths if needed
if ( m_widthsAbs.IsEmpty() )
{
// the total width for the fields doesn't include the borders between
// them
m_widthsAbs = CalculateAbsWidths(rect.width -
*borderBetweenFields*(m_nFields - 1));
}
return rect;
}
void wxStatusBarUniv::DoDraw(wxControlRenderer *renderer)
{
// get the fields rect
wxCoord borderBetweenFields;
wxRect rect = GetTotalFieldRect(&borderBetweenFields);
// prepare the DC
wxDC& dc = renderer->GetDC();
dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
// do draw the fields
int flags = IsEnabled() ? 0 : wxCONTROL_DISABLED;
for ( int n = 0; n < m_nFields; n++ )
{
rect.width = m_widthsAbs[n];
if ( IsExposed(rect) )
{
// the size grip may be drawn only on the last field and only if we
// have the corresponding style and even then only if we really can
// resize this frame
if ( n == m_nFields - 1 &&
HasFlag(wxST_SIZEGRIP) &&
GetParent()->HasFlag(wxRESIZE_BORDER) )
{
// NB: we use wxCONTROL_ISDEFAULT for this because it doesn't
// have any meaning for the status bar otherwise anyhow
// (it's still ugly, of course, but there are too few flags
// to squander them for things like this)
flags |= wxCONTROL_ISDEFAULT;
}
m_renderer->DrawStatusField(dc, rect, m_statusText[n], flags);
}
rect.x += rect.width + borderBetweenFields;
}
}
void wxStatusBarUniv::RefreshField(int i)
{
wxRect rect;
if ( GetFieldRect(i, rect) )
{
RefreshRect(rect);
}
}
// ----------------------------------------------------------------------------
// fields text
// ----------------------------------------------------------------------------
void wxStatusBarUniv::SetStatusText(const wxString& text, int number)
{
wxCHECK_RET( number >= 0 && number < m_nFields,
_T("invalid status bar field index in SetStatusText()") );
if ( text == m_statusText[number] )
{
// nothing changed
return;
}
m_statusText[number] = text;
RefreshField(number);
}
wxString wxStatusBarUniv::GetStatusText(int number) const
{
wxCHECK_MSG( number >= 0 && number < m_nFields, _T(""),
_T("invalid status bar field index") );
return m_statusText[number];
}
// ----------------------------------------------------------------------------
// fields count/widths
// ----------------------------------------------------------------------------
void wxStatusBarUniv::SetFieldsCount(int number, const int *widths)
{
wxStatusBarBase::SetFieldsCount(number, widths);
m_statusText.SetCount(number);
m_widthsAbs.Empty();
}
void wxStatusBarUniv::SetStatusWidths(int n, const int widths[])
{
wxStatusBarBase::SetStatusWidths(n, widths);
m_widthsAbs.Empty();
}
// ----------------------------------------------------------------------------
// geometry
// ----------------------------------------------------------------------------
void wxStatusBarUniv::OnSize(wxSizeEvent& event)
{
// invalidate the widths, we'll have to recalc them
m_widthsAbs.Empty();
// refresh entirely, shouldn't matter much as the statusbar is quick to
// redraw and it would be difficult to avoid it as we'd need to find out
// which fields exactly were affected...
Refresh();
event.Skip();
}
bool wxStatusBarUniv::GetFieldRect(int n, wxRect& rect) const
{
wxCHECK_MSG( n >= 0 && n < m_nFields, FALSE,
_T("invalid field index in GetFieldRect()") );
// this is a fix for a bug exhibited by the statbar sample: if
// GetFieldRect() is called from the derived class OnSize() handler, then
// our geometry info is wrong as our OnSize() didn't invalidate m_widthsAbs
// yet - so recalc it just in case
wxStatusBarUniv *self = wxConstCast(this, wxStatusBarUniv);
self->m_widthsAbs.Empty();
wxCoord borderBetweenFields;
rect = self->GetTotalFieldRect(&borderBetweenFields);
for ( int i = 0; i <= n; i++ )
{
rect.width = m_widthsAbs[i];
if ( i < n )
rect.x += rect.width + borderBetweenFields;
}
return TRUE;
}
wxCoord wxStatusBarUniv::GetHeight() const
{
wxClientDC dc(wxConstCast(this, wxStatusBarUniv));
dc.SetFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
return dc.GetCharHeight() + 2*GetBorderY();
}
wxSize wxStatusBarUniv::DoGetBestSize() const
{
return wxSize(100, GetHeight());
}
void wxStatusBarUniv::DoSetSize(int x, int y,
int width, int WXUNUSED(height),
int sizeFlags)
{
wxStatusBarBase::DoSetSize(x, y, width, GetHeight(), sizeFlags);
}
// ----------------------------------------------------------------------------
// misc
// ----------------------------------------------------------------------------
void wxStatusBarUniv::SetMinHeight(int WXUNUSED(height))
{
// nothing to do here, we don't support it - and why would we?
}
int wxStatusBarUniv::GetBorderX() const
{
return m_renderer->GetStatusBarBorders(NULL).x;
}
int wxStatusBarUniv::GetBorderY() const
{
return m_renderer->GetStatusBarBorders(NULL).y;
}
#endif // wxUSE_STATUSBAR

View File

@ -188,7 +188,6 @@ public:
// we don't have the ticks in GTK version
}
#if wxUSE_MENUS
virtual void DrawMenuBarItem(wxDC& dc,
const wxRect& rect,
const wxString& label,
@ -205,7 +204,11 @@ public:
virtual void DrawMenuSeparator(wxDC& dc,
wxCoord y,
const wxMenuGeometryInfo& geomInfo);
#endif
virtual void DrawStatusField(wxDC& dc,
const wxRect& rect,
const wxString& label,
int flags = 0);
virtual void DrawFrameTitleBar(wxDC& dc,
const wxRect& rect,
@ -285,12 +288,13 @@ public:
virtual wxSize GetSliderThumbSize(const wxRect& rect,
wxOrientation orient) const;
virtual wxSize GetProgressBarStep() const { return wxSize(16, 32); }
#if wxUSE_MENUS
virtual wxSize GetMenuBarItemSize(const wxSize& sizeText) const;
virtual wxMenuGeometryInfo *GetMenuGeometry(wxWindow *win,
const wxMenu& menu) const;
#endif
virtual wxSize GetStatusBarBorders(wxCoord *borderBetweenFields) const;
// helpers for "wxBitmap wxColourScheme::Get()"
void DrawCheckBitmap(wxDC& dc, const wxRect& rect);
void DrawUncheckBitmap(wxDC& dc, const wxRect& rect, bool isPressed);
@ -1817,7 +1821,6 @@ void wxGTKRenderer::DrawSliderThumb(wxDC& dc,
DrawShadedRect(dc, &rect, m_penDarkGrey, m_penHighlight);
}
#if wxUSE_MENUS
// ----------------------------------------------------------------------------
// menu and menubar
// ----------------------------------------------------------------------------
@ -1862,7 +1865,22 @@ wxMenuGeometryInfo *wxGTKRenderer::GetMenuGeometry(wxWindow *win,
return NULL;
}
#endif // wxUSE_MENUS
// ----------------------------------------------------------------------------
// status bar
// ----------------------------------------------------------------------------
wxSize wxGTKRenderer::GetStatusBarBorders(wxCoord *borderBetweenFields) const
{
return wxSize(0, 0);
}
void wxGTKRenderer::DrawStatusField(wxDC& dc,
const wxRect& rect,
const wxString& label,
int flags)
{
}
// ----------------------------------------------------------------------------
// combobox

View File

@ -73,6 +73,11 @@ static const int FRAME_TITLEBAR_HEIGHT = 18;
static const int FRAME_BUTTON_WIDTH = 16;
static const int FRAME_BUTTON_HEIGHT = 14;
static const size_t NUM_STATUSBAR_GRIP_BANDS = 3;
static const size_t WIDTH_STATUSBAR_GRIP_BAND = 4;
static const size_t STATUSBAR_GRIP_SIZE =
WIDTH_STATUSBAR_GRIP_BAND*NUM_STATUSBAR_GRIP_BANDS;
enum IndicatorType
{
IndicatorType_Check,
@ -255,7 +260,6 @@ public:
int end,
int step = 1,
int flags = 0);
#if wxUSE_MENUS
virtual void DrawMenuBarItem(wxDC& dc,
const wxRect& rect,
@ -273,7 +277,12 @@ public:
virtual void DrawMenuSeparator(wxDC& dc,
wxCoord y,
const wxMenuGeometryInfo& geomInfo);
#endif
virtual void DrawStatusField(wxDC& dc,
const wxRect& rect,
const wxString& label,
int flags = 0);
// titlebars
virtual void DrawFrameTitleBar(wxDC& dc,
const wxRect& rect,
@ -351,11 +360,12 @@ public:
wxOrientation orient) const;
virtual wxSize GetProgressBarStep() const { return wxSize(16, 32); }
#if wxUSE_MENUS
virtual wxSize GetMenuBarItemSize(const wxSize& sizeText) const;
virtual wxMenuGeometryInfo *GetMenuGeometry(wxWindow *win,
const wxMenu& menu) const;
#endif
virtual wxSize GetStatusBarBorders(wxCoord *borderBetweenFields) const;
protected:
// helper of DrawLabel() and DrawCheckOrRadioButton()
void DoDrawLabel(wxDC& dc,
@ -459,9 +469,9 @@ private:
m_penDarkGrey,
m_penLightGrey,
m_penHighlight;
wxFont m_titlebarFont;
// titlebar icons:
wxBitmap m_bmpFrameButtons[FrameButton_Max];
@ -542,6 +552,29 @@ public:
bool pressed);
};
class wxWin32StatusBarInputHandler : public wxStdInputHandler
{
public:
wxWin32StatusBarInputHandler(wxInputHandler *handler);
virtual bool HandleMouse(wxInputConsumer *consumer,
const wxMouseEvent& event);
virtual bool HandleMouseMove(wxInputConsumer *consumer,
const wxMouseEvent& event);
protected:
// is the given point over the statusbar grip?
bool IsOnGrip(wxWindow *statbar, const wxPoint& pt) const;
private:
// the cursor we had replaced with the resize one
wxCursor m_cursorOld;
// was the mouse over the grip last time we checked?
bool m_isOnGrip;
};
// ----------------------------------------------------------------------------
// wxWin32ColourScheme: uses (default) Win32 colours
// ----------------------------------------------------------------------------
@ -1152,6 +1185,10 @@ wxInputHandler *wxWin32Theme::GetInputHandler(const wxString& control)
else if ( control == wxINP_HANDLER_NOTEBOOK )
handler = new wxStdNotebookInputHandler(GetDefaultInputHandler());
#endif // wxUSE_NOTEBOOK
#if wxUSE_STATUSBAR
else if ( control == wxINP_HANDLER_STATUSBAR )
handler = new wxWin32StatusBarInputHandler(GetDefaultInputHandler());
#endif // wxUSE_STATUSBAR
else if ( control == wxINP_HANDLER_TOPLEVEL )
handler = new wxStdFrameInputHandler(GetDefaultInputHandler());
else
@ -1254,7 +1291,7 @@ wxColour wxWin32ColourScheme::Get(wxWin32ColourScheme::StdColour col) const
case CONTROL_TEXT_DISABLED_SHADOW:
case SHADOW_OUT: return wxColour(GetSysColor(COLOR_BTNSHADOW));
case TITLEBAR: return wxColour(GetSysColor(COLOR_INACTIVECAPTION));
case TITLEBAR_ACTIVE: return wxColour(GetSysColor(COLOR_ACTIVECAPTION));
case TITLEBAR_TEXT: return wxColour(GetSysColor(COLOR_CAPTIONTEXT));
@ -1320,7 +1357,7 @@ wxWin32Renderer::wxWin32Renderer(const wxColourScheme *scheme)
m_colHighlight = wxSCHEME_COLOUR(scheme, SHADOW_HIGHLIGHT);
m_penHighlight = wxPen(m_colHighlight, 0, wxSOLID);
m_titlebarFont = wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT);
m_titlebarFont.SetWeight(wxFONTWEIGHT_BOLD);
@ -1493,7 +1530,7 @@ wxWin32Renderer::wxWin32Renderer(const wxColourScheme *scheme)
m_bmpArrows[Arrow_Pressed][n] = m_bmpArrows[Arrow_Normal][n];
}
// init the frame buttons bitmaps
m_bmpFrameButtons[FrameButton_Close] = wxBitmap(frame_button_close_xpm);
m_bmpFrameButtons[FrameButton_Minimize] = wxBitmap(frame_button_minimize_xpm);
@ -2599,8 +2636,6 @@ void wxWin32Renderer::DrawSliderTicks(wxDC& dc,
// menu and menubar
// ----------------------------------------------------------------------------
#if wxUSE_MENUS
// wxWin32MenuGeometryInfo: the wxMenuGeometryInfo used by wxWin32Renderer
class WXDLLEXPORT wxWin32MenuGeometryInfo : public wxMenuGeometryInfo
{
@ -2625,12 +2660,10 @@ private:
// the height of a normal (not separator) item
wxCoord m_heightItem;
friend wxMenuGeometryInfo *wxWin32Renderer::
GetMenuGeometry(wxWindow *, const wxMenu&) const;
friend wxMenuGeometryInfo *
wxWin32Renderer::GetMenuGeometry(wxWindow *, const wxMenu&) const;
};
#endif // wxUSE_MENUS
// FIXME: all constants are hardcoded but shouldn't be
static const wxCoord MENU_LEFT_MARGIN = 9;
static const wxCoord MENU_RIGHT_MARGIN = 18;
@ -2650,10 +2683,6 @@ static const wxCoord MENU_SEPARATOR_HEIGHT = 3;
// the size of the standard checkmark bitmap
static const wxCoord MENU_CHECK_SIZE = 9;
// we can't implement these methods without wxMenuGeometryInfo implementation
// which we don't have if !wxUSE_MENUS
#if wxUSE_MENUS
void wxWin32Renderer::DrawMenuBarItem(wxDC& dc,
const wxRect& rectOrig,
const wxString& label,
@ -2865,48 +2894,81 @@ wxMenuGeometryInfo *wxWin32Renderer::GetMenuGeometry(wxWindow *win,
return gi;
}
#else // !wxUSE_MENUS
// ----------------------------------------------------------------------------
// status bar
// ----------------------------------------------------------------------------
/*
void wxWin32Renderer::DrawMenuBarItem(wxDC& WXUNUSED(dc),
const wxRect& WXUNUSED(rectOrig),
const wxString& WXUNUSED(label),
int WXUNUSED(flags),
int WXUNUSED(indexAccel))
static const wxCoord STATBAR_BORDER_X = 2;
static const wxCoord STATBAR_BORDER_Y = 2;
wxSize wxWin32Renderer::GetStatusBarBorders(wxCoord *borderBetweenFields) const
{
if ( borderBetweenFields )
*borderBetweenFields = 2;
return wxSize(STATBAR_BORDER_X, STATBAR_BORDER_Y);
}
void wxWin32Renderer::DrawMenuItem(wxDC& WXUNUSED(dc),
wxCoord WXUNUSED(y),
const wxMenuGeometryInfo& WXUNUSED(gi),
const wxString& WXUNUSED(label),
const wxString& WXUNUSED(accel),
const wxBitmap& WXUNUSED(bitmap),
int WXUNUSED(flags),
int WXUNUSED(indexAccel))
void wxWin32Renderer::DrawStatusField(wxDC& dc,
const wxRect& rect,
const wxString& label,
int flags)
{
}
wxRect rectIn;
void wxWin32Renderer::DrawMenuSeparator(wxDC& WXUNUSED(dc),
wxCoord WXUNUSED(y),
const wxMenuGeometryInfo& WXUNUSED(gi))
{
}
if ( flags & wxCONTROL_ISDEFAULT )
{
// draw the size grip: it is a normal rect except that in the lower
// right corner we have several bands which may be used for dragging
// the status bar corner
//
// each band consists of 4 stripes: m_penHighlight, double
// m_penDarkGrey and transparent one
wxCoord x2 = rect.GetRight(),
y2 = rect.GetBottom();
wxSize wxWin32Renderer::GetMenuBarItemSize(const wxSize& size) const
{
return size;
}
// draw the upper left part of the rect normally
dc.SetPen(m_penDarkGrey);
dc.DrawLine(rect.GetLeft(), rect.GetTop(), rect.GetLeft(), y2);
dc.DrawLine(rect.GetLeft() + 1, rect.GetTop(), x2, rect.GetTop());
wxMenuGeometryInfo *
wxWin32Renderer::GetMenuGeometry(wxWindow *WXUNUSED(win),
const wxMenu& WXUNUSED(menu)) const
{
return NULL;
}
*/
// draw the grey stripes of the grip
size_t n;
wxCoord ofs = WIDTH_STATUSBAR_GRIP_BAND - 1;
for ( n = 0; n < NUM_STATUSBAR_GRIP_BANDS; n++, ofs += WIDTH_STATUSBAR_GRIP_BAND )
{
dc.DrawLine(x2 - ofs + 1, y2 - 1, x2, y2 - ofs);
dc.DrawLine(x2 - ofs, y2 - 1, x2, y2 - ofs - 1);
}
#endif // wxUSE_MENUS/!wxUSE_MENUS
// draw the white stripes
dc.SetPen(m_penHighlight);
ofs = WIDTH_STATUSBAR_GRIP_BAND + 1;
for ( n = 0; n < NUM_STATUSBAR_GRIP_BANDS; n++, ofs += WIDTH_STATUSBAR_GRIP_BAND )
{
dc.DrawLine(x2 - ofs + 1, y2 - 1, x2, y2 - ofs);
}
// draw the remaining rect boundaries
ofs -= WIDTH_STATUSBAR_GRIP_BAND;
dc.DrawLine(x2, rect.GetTop(), x2, y2 - ofs + 1);
dc.DrawLine(rect.GetLeft(), y2, x2 - ofs + 1, y2);
rectIn = rect;
rectIn.Deflate(1);
rectIn.width -= STATUSBAR_GRIP_SIZE;
}
else // normal pane
{
DrawBorder(dc, wxBORDER_STATIC, rect, flags, &rectIn);
}
rectIn.Deflate(STATBAR_BORDER_X, STATBAR_BORDER_Y);
wxDCClipper clipper(dc, rectIn);
DrawLabel(dc, label, rectIn, flags, wxALIGN_LEFT | wxALIGN_CENTRE_VERTICAL);
}
// ----------------------------------------------------------------------------
// combobox
@ -3104,10 +3166,10 @@ int wxWin32Renderer::PixelToScrollbar(const wxScrollBar *scrollbar,
int wxWin32Renderer::HitTestFrame(const wxRect& rect, const wxPoint& pt, int flags) const
{
wxRect client = GetFrameClientArea(rect, flags);
if ( client.Inside(pt) )
return wxHT_TOPLEVEL_CLIENT_AREA;
if ( flags & wxTOPLEVEL_TITLEBAR )
{
wxRect client = GetFrameClientArea(rect, flags & ~wxTOPLEVEL_TITLEBAR);
@ -3117,11 +3179,11 @@ int wxWin32Renderer::HitTestFrame(const wxRect& rect, const wxPoint& pt, int fla
if ( wxRect(client.GetPosition(), GetFrameIconSize()).Inside(pt) )
return wxHT_TOPLEVEL_ICON;
}
wxRect btnRect(client.GetRight() - 2 - FRAME_BUTTON_WIDTH,
client.GetTop() + (FRAME_TITLEBAR_HEIGHT-FRAME_BUTTON_HEIGHT)/2,
FRAME_BUTTON_WIDTH, FRAME_BUTTON_HEIGHT);
if ( flags & wxTOPLEVEL_BUTTON_CLOSE )
{
if ( btnRect.Inside(pt) )
@ -3160,7 +3222,7 @@ int wxWin32Renderer::HitTestFrame(const wxRect& rect, const wxPoint& pt, int fla
if ( (flags & wxTOPLEVEL_BORDER) && !(flags & wxTOPLEVEL_MAXIMIZED) )
{
// we are certainly at one of borders, lets decide which one:
int border = 0;
// dirty trick, relies on the way wxHT_TOPLEVEL_XXX are defined!
if ( pt.x < client.x )
@ -3173,7 +3235,7 @@ int wxWin32Renderer::HitTestFrame(const wxRect& rect, const wxPoint& pt, int fla
border |= wxHT_TOPLEVEL_BORDER_S;
return border;
}
return wxHT_NOWHERE;
}
@ -3195,12 +3257,12 @@ void wxWin32Renderer::DrawFrameTitleBar(wxDC& dc,
if ( flags & wxTOPLEVEL_ICON )
DrawFrameIcon(dc, rect, icon, flags);
DrawFrameTitle(dc, rect, title, flags);
wxRect client = GetFrameClientArea(rect, flags & ~wxTOPLEVEL_TITLEBAR);
wxCoord x,y;
x = client.GetRight() - 2 - FRAME_BUTTON_WIDTH;
y = client.GetTop() + (FRAME_TITLEBAR_HEIGHT-FRAME_BUTTON_HEIGHT)/2;
if ( flags & wxTOPLEVEL_BUTTON_CLOSE )
{
DrawFrameButton(dc, x, y, wxTOPLEVEL_BUTTON_CLOSE,
@ -3244,9 +3306,9 @@ void wxWin32Renderer::DrawFrameBorder(wxDC& dc,
int flags)
{
if ( !(flags & wxTOPLEVEL_BORDER) ) return;
wxRect r(rect);
DrawShadedRect(dc, &r, m_penLightGrey, m_penBlack);
DrawShadedRect(dc, &r, m_penHighlight, m_penDarkGrey);
DrawShadedRect(dc, &r, m_penLightGrey, m_penLightGrey);
@ -3260,13 +3322,13 @@ void wxWin32Renderer::DrawFrameBackground(wxDC& dc,
{
if ( !(flags & wxTOPLEVEL_TITLEBAR) ) return;
wxColour col = (flags & wxTOPLEVEL_ACTIVE) ?
wxColour col = (flags & wxTOPLEVEL_ACTIVE) ?
wxSCHEME_COLOUR(m_scheme, TITLEBAR_ACTIVE) :
wxSCHEME_COLOUR(m_scheme, TITLEBAR);
wxRect r = GetFrameClientArea(rect, flags & ~wxTOPLEVEL_TITLEBAR);
r.height = FRAME_TITLEBAR_HEIGHT;
DrawBackground(dc, col, r);
}
@ -3281,7 +3343,7 @@ void wxWin32Renderer::DrawFrameTitle(wxDC& dc,
r.x += FRAME_TITLEBAR_HEIGHT;
else
r.x += 1;
dc.SetFont(m_titlebarFont);
dc.SetTextForeground(wxSCHEME_COLOUR(m_scheme, TITLEBAR_TEXT));
dc.DrawLabel(title, wxNullBitmap, r, wxALIGN_LEFT | wxALIGN_CENTRE_VERTICAL);
@ -3317,8 +3379,8 @@ void wxWin32Renderer::DrawFrameButton(wxDC& dc,
default:
wxFAIL_MSG(wxT("incorrect button specification"));
}
if ( flags & wxCONTROL_PRESSED )
if ( flags & wxCONTROL_PRESSED )
{
DrawShadedRect(dc, &r, m_penBlack, m_penHighlight);
DrawShadedRect(dc, &r, m_penDarkGrey, m_penLightGrey);
@ -3342,7 +3404,7 @@ wxRect wxWin32Renderer::GetFrameClientArea(const wxRect& rect,
if ( (flags & wxTOPLEVEL_BORDER) && !(flags & wxTOPLEVEL_MAXIMIZED) )
{
int border = (flags & wxTOPLEVEL_RESIZEABLE) ?
int border = (flags & wxTOPLEVEL_RESIZEABLE) ?
RESIZEABLE_FRAME_BORDER_THICKNESS :
FRAME_BORDER_THICKNESS;
r.Inflate(-border);
@ -3363,7 +3425,7 @@ wxSize wxWin32Renderer::GetFrameTotalSize(const wxSize& clientSize,
if ( (flags & wxTOPLEVEL_BORDER) && !(flags & wxTOPLEVEL_MAXIMIZED) )
{
int border = (flags & wxTOPLEVEL_RESIZEABLE) ?
int border = (flags & wxTOPLEVEL_RESIZEABLE) ?
RESIZEABLE_FRAME_BORDER_THICKNESS :
FRAME_BORDER_THICKNESS;
s.x += 2*border;
@ -3495,11 +3557,15 @@ bool wxWin32InputHandler::HandleMouse(wxInputConsumer *control,
const wxMouseEvent& event)
{
// clicking on the control gives it focus
if ( event.ButtonDown() && wxWindow::FindFocus() != control->GetInputWindow() )
if ( event.ButtonDown() )
{
control->GetInputWindow()->SetFocus();
wxWindow *win = control->GetInputWindow();
if ( wxWindow::FindFocus() != control->GetInputWindow() )
{
win->SetFocus();
return TRUE;
return TRUE;
}
}
return FALSE;
@ -3749,3 +3815,81 @@ bool wxWin32TextCtrlInputHandler::HandleKey(wxInputConsumer *control,
return wxStdTextCtrlInputHandler::HandleKey(control, event, pressed);
}
// ----------------------------------------------------------------------------
// wxWin32StatusBarInputHandler
// ----------------------------------------------------------------------------
wxWin32StatusBarInputHandler::
wxWin32StatusBarInputHandler(wxInputHandler *handler)
: wxStdInputHandler(handler)
{
m_isOnGrip = FALSE;
}
bool wxWin32StatusBarInputHandler::IsOnGrip(wxWindow *statbar,
const wxPoint& pt) const
{
if ( statbar->HasFlag(wxST_SIZEGRIP) &&
statbar->GetParent()->HasFlag(wxRESIZE_BORDER) )
{
wxSize sizeSbar = statbar->GetSize();
return (sizeSbar.x - pt.x) < STATUSBAR_GRIP_SIZE &&
(sizeSbar.y - pt.y) < STATUSBAR_GRIP_SIZE;
}
return FALSE;
}
bool wxWin32StatusBarInputHandler::HandleMouse(wxInputConsumer *consumer,
const wxMouseEvent& event)
{
if ( event.Button(1) )
{
if ( event.ButtonDown(1) )
{
wxWindow *statbar = consumer->GetInputWindow();
if ( IsOnGrip(statbar, event.GetPosition()) )
{
wxTopLevelWindow *tlw = wxDynamicCast(statbar->GetParent(),
wxTopLevelWindow);
if ( tlw )
{
tlw->PerformAction(wxACTION_TOPLEVEL_RESIZE,
wxHT_TOPLEVEL_BORDER_SE);
statbar->SetCursor(m_cursorOld);
return TRUE;
}
}
}
}
return wxStdInputHandler::HandleMouse(consumer, event);
}
bool wxWin32StatusBarInputHandler::HandleMouseMove(wxInputConsumer *consumer,
const wxMouseEvent& event)
{
wxWindow *statbar = consumer->GetInputWindow();
bool isOnGrip = IsOnGrip(statbar, event.GetPosition());
if ( isOnGrip != m_isOnGrip )
{
m_isOnGrip = isOnGrip;
if ( isOnGrip )
{
m_cursorOld = statbar->GetCursor();
statbar->SetCursor(wxCURSOR_SIZENWSE);
}
else
{
statbar->SetCursor(m_cursorOld);
}
}
return wxStdInputHandler::HandleMouseMove(consumer, event);
}

View File

@ -365,13 +365,13 @@ bool wxTopLevelWindow::PerformAction(const wxControlAction& action,
ClickTitleBarButton(numArg);
return TRUE;
}
else if ( action == wxACTION_TOPLEVEL_MOVE )
{
InteractiveMove(wxINTERACTIVE_MOVE);
return TRUE;
}
else if ( action == wxACTION_TOPLEVEL_RESIZE )
{
int flags = wxINTERACTIVE_RESIZE;
@ -386,7 +386,7 @@ bool wxTopLevelWindow::PerformAction(const wxControlAction& action,
InteractiveMove(flags);
return TRUE;
}
else
return FALSE;
}
@ -486,25 +486,25 @@ bool wxStdFrameInputHandler::HandleMouseMove(wxInputConsumer *consumer,
}
else if ( consumer->GetInputWindow()->GetWindowStyle() & wxRESIZE_BORDER )
{
wxTopLevelWindow *win = wxStaticCast(consumer->GetInputWindow(),
wxTopLevelWindow *win = wxStaticCast(consumer->GetInputWindow(),
wxTopLevelWindow);
long hit = win->HitTest(event.GetPosition());
if ( hit != m_winHitTest )
{
m_winHitTest = hit;
if ( m_borderCursorOn )
{
m_borderCursorOn = FALSE;
win->SetCursor(m_origCursor);
}
if ( hit & wxHT_TOPLEVEL_ANY_BORDER )
{
m_borderCursorOn = TRUE;
wxCursor cur;
switch (hit)
{
case wxHT_TOPLEVEL_BORDER_N:

View File

@ -49,7 +49,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo /out:"..\lib\wxuniv.lib"
# ADD LIB32 /nologo
!ELSEIF "$(CFG)" == "wxUniv - Win32 Debug"
@ -197,6 +197,11 @@ SOURCE=.\common\event.cpp
# End Source File
# Begin Source File
SOURCE=.\common\extended.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=.\common\fddlgcmn.cpp
# End Source File
# Begin Source File
@ -453,6 +458,10 @@ SOURCE=.\common\socket.cpp
# End Source File
# Begin Source File
SOURCE=.\common\statbar.cpp
# End Source File
# Begin Source File
SOURCE=.\common\strconv.cpp
# End Source File
# Begin Source File
@ -501,6 +510,11 @@ SOURCE=.\common\txtstrm.cpp
# End Source File
# Begin Source File
SOURCE=.\common\unzip.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=.\common\url.cpp
# End Source File
# Begin Source File
@ -551,18 +565,6 @@ SOURCE=.\common\zipstrm.cpp
SOURCE=.\common\zstream.cpp
# End Source File
# Begin Source File
SOURCE=.\common\extended.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=.\common\unzip.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# End Group
# Begin Group "Generic Files"
@ -709,10 +711,6 @@ SOURCE=.\generic\splitter.cpp
# End Source File
# Begin Source File
SOURCE=.\generic\statusbr.cpp
# End Source File
# Begin Source File
SOURCE=.\generic\tabg.cpp
# End Source File
# Begin Source File
@ -743,7 +741,6 @@ SOURCE=.\generic\treelay.cpp
SOURCE=.\generic\wizard.cpp
# End Source File
# End Group
# Begin Group "wxHTML Files"
@ -828,18 +825,12 @@ SOURCE=.\html\m_tables.cpp
SOURCE=.\html\winpars.cpp
# End Source File
# End Group
# Begin Group "MSW Files"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\msw\dummy.cpp
# ADD CPP /Yc"wx/wxprec.h"
# End Source File
# Begin Source File
SOURCE=.\msw\app.cpp
# End Source File
# Begin Source File
@ -904,6 +895,11 @@ SOURCE=.\msw\dir.cpp
# End Source File
# Begin Source File
SOURCE=.\msw\dummy.cpp
# ADD CPP /Yc"wx/wxprec.h"
# End Source File
# Begin Source File
SOURCE=.\msw\evtloop.cpp
# End Source File
# Begin Source File
@ -928,6 +924,16 @@ SOURCE=.\msw\gdiobj.cpp
# End Source File
# Begin Source File
SOURCE=.\msw\gsocket.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=.\msw\gsockmsw.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=.\msw\icon.cpp
# End Source File
# Begin Source File
@ -994,22 +1000,22 @@ SOURCE=.\msw\utilsexc.cpp
SOURCE=.\msw\window.cpp
# End Source File
# Begin Source File
SOURCE=.\msw\gsocket.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# Begin Source File
SOURCE=.\msw\gsockmsw.c
# SUBTRACT CPP /YX /Yc /Yu
# End Source File
# End Group
# Begin Group "Universal Files"
# PROP Default_Filter ""
# Begin Group "Theme Files"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\univ\themes\gtk.cpp
# End Source File
# Begin Source File
SOURCE=.\univ\themes\win32.cpp
# End Source File
# End Group
# Begin Source File
SOURCE=.\univ\bmpbuttn.cpp
@ -1120,6 +1126,10 @@ SOURCE=.\univ\stattext.cpp
# End Source File
# Begin Source File
SOURCE=.\univ\statusbr.cpp
# End Source File
# Begin Source File
SOURCE=.\univ\textctrl.cpp
# End Source File
# Begin Source File
@ -1134,20 +1144,6 @@ SOURCE=.\univ\topluniv.cpp
SOURCE=.\univ\winuniv.cpp
# End Source File
# Begin Group "Theme Files"
# PROP Default_Filter ""
# Begin Source File
SOURCE=.\univ\themes\gtk.cpp
# End Source File
# Begin Source File
SOURCE=.\univ\themes\win32.cpp
# End Source File
# End Group
# End Group
# Begin Group "Headers"
@ -1158,7 +1154,9 @@ SOURCE=.\univ\themes\win32.cpp
# Begin Source File
SOURCE=..\include\wx\univ\setup.h
!IF "$(CFG)" == "wxUniv - Win32 Release"
# Begin Custom Build - Creating wx/setup.h from $(InputPath)
InputPath=..\include\wx\univ\setup.h
@ -1166,7 +1164,9 @@ InputPath=..\include\wx\univ\setup.h
copy $(InputPath) ..\lib\univ\wx\setup.h
# End Custom Build
!ELSEIF "$(CFG)" == "wxUniv - Win32 Debug"
# Begin Custom Build - Creating wx/setup.h from $(InputPath)
InputPath=..\include\wx\univ\setup.h
@ -1174,7 +1174,9 @@ InputPath=..\include\wx\univ\setup.h
copy $(InputPath) ..\lib\univd\wx\setup.h
# End Custom Build
!ENDIF
# End Source File
# End Group
# Begin Group "Common"
@ -2064,7 +2066,6 @@ SOURCE=..\include\wx\zipstrm.h
SOURCE=..\include\wx\zstream.h
# End Source File
# End Group
# Begin Group "MSW"
@ -2221,7 +2222,6 @@ SOURCE=..\include\wx\generic\treectlg.h
SOURCE=..\include\wx\generic\wizard.h
# End Source File
# End Group
# Begin Group "HTML"
@ -2278,7 +2278,6 @@ SOURCE=..\include\wx\html\m_templ.h
SOURCE=..\include\wx\html\winpars.h
# End Source File
# End Group
# Begin Group "Universal"