// Author: Vadim Zeitlin
// Modified by:
// Created: 06.08.00
-// RCS-ID: $Id$
// Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#include "wx/notebook.h"
#include "wx/spinbutt.h"
#include "wx/artprov.h"
-#ifdef wxUSE_TOGGLEBTN
#include "wx/tglbtn.h"
-#endif // wxUSE_TOGGLEBTN
#include "wx/univ/scrtimer.h"
#include "wx/univ/stdrend.h"
virtual wxBitmap GetFrameButtonBitmap(FrameButtonType type);
+#if wxUSE_SLIDER
+ // Fill the arguments with true or false if this slider has labels on
+ // left/right side (or top/bottom for horizontal sliders) respectively
+ static
+ void GetSliderLabelsSides(wxOrientation orient, long style,
+ bool *left, bool *right)
+ {
+ // should we draw ticks at all?
+ if ( !(style & wxSL_AUTOTICKS) )
+ {
+ *left =
+ *right = false;
+ return;
+ }
+
+ // should we draw them on both sides?
+ if ( style & wxSL_BOTH )
+ {
+ *left =
+ *right = true;
+ return;
+ }
+
+ // we draw them on one side only, determine which one
+ if ( ((style & wxSL_TOP) && (orient == wxHORIZONTAL)) ||
+ ((style & wxSL_LEFT) && (orient == wxVERTICAL)) )
+ {
+ *left = true;
+ *right = false;
+ }
+ else if ( ((style & wxSL_BOTTOM) && (orient == wxHORIZONTAL)) ||
+ ((style & wxSL_RIGHT) && (orient == wxVERTICAL)) )
+ {
+ *left = false;
+ *right = true;
+ }
+ else
+ {
+ wxFAIL_MSG( "inconsistent wxSlider flags" );
+
+ *left =
+ *right = false;
+ }
+ }
+#endif // wxUSE_SLIDER
+
private:
// the sizing parameters (TODO make them changeable)
wxSize m_sizeScrollbarArrow;
col = Get(CONTROL);
else
{
- if ( !col.Ok() )
+ if ( !col.IsOk() )
{
// doesn't depend on the state
col = Get(WINDOW);
}
#endif // wxUSE_TEXTCTRL
- if (!col.Ok())
+ if (!col.IsOk())
col = Get(CONTROL); // Most controls should be this colour, not WINDOW
}
else
// the colour set by the user should be used for the normal state
// and for the states for which we don't have any specific colours
- if ( !col.Ok() || (flags & wxCONTROL_PRESSED) != 0 )
+ if ( !col.IsOk() || (flags & wxCONTROL_PRESSED) != 0 )
{
#if wxUSE_SCROLLBAR
if ( wxDynamicCast(win, wxScrollBar) )
int flags)
{
wxBitmap bmp;
- if ( bitmap.Ok() )
+ if ( bitmap.IsOk() )
{
bmp = bitmap;
}
? IndicatorStatus_Checked
: IndicatorStatus_Unchecked;
- if ( !m_bmpCheckBitmaps[i].Ok() )
+ if ( !m_bmpCheckBitmaps[i].IsOk() )
{
m_bmpCheckBitmaps[i] = wxBitmap(ms_xpmChecked[i]);
}
GetIndicatorsFromFlags(flags, indState, indStatus);
wxBitmap& bmp = m_bmpIndicators[indType][indState][indStatus];
- if ( !bmp.Ok() )
+ if ( !bmp.IsOk() )
{
const char **xpm = ms_xpmIndicators[indType][indState][indStatus];
if ( xpm )
wxOrientation orient,
long style) const
{
- bool transpose = (orient == wxVERTICAL);
- bool left = ((style & wxSL_AUTOTICKS) != 0) &
- (((style & wxSL_TOP) != 0) & !transpose |
- ((style & wxSL_LEFT) != 0) & transpose |
- ((style & wxSL_BOTH) != 0));
- bool right = ((style & wxSL_AUTOTICKS) != 0) &
- (((style & wxSL_BOTTOM) != 0) & !transpose |
- ((style & wxSL_RIGHT) != 0) & transpose |
- ((style & wxSL_BOTH) != 0));
+ bool left, right;
+ GetSliderLabelsSides(orient, style, &left, &right);
wxRect rect = rectOrig;
wxSize sizeThumb = GetSliderThumbSize (rect, lenThumb, orient);
- if (orient == wxHORIZONTAL) {
+ if (orient == wxHORIZONTAL)
+ {
rect.x += SLIDER_MARGIN;
if (left & right)
{
rect.width -= 2*SLIDER_MARGIN;
rect.height = 2*BORDER_THICKNESS;
}
- else
- { // == wxVERTICAL
+ else // == wxVERTICAL
+ {
rect.y += SLIDER_MARGIN;
if (left & right)
{
y1 y2
*/
- if (flags & wxCONTROL_FOCUSED) {
+ if (flags & wxCONTROL_FOCUSED)
DrawFocusRect(NULL, dc, rectOrig);
- }
wxRect rect = GetSliderShaftRect(rectOrig, lenThumb, orient, style);
DrawBackground(dc, wxNullColour, rect, flags);
- bool transpose = (orient == wxVERTICAL);
- bool left = ((style & wxSL_AUTOTICKS) != 0) &
- (((style & wxSL_TOP) != 0) & !transpose |
- ((style & wxSL_LEFT) != 0) & transpose) &
- ((style & wxSL_BOTH) == 0);
- bool right = ((style & wxSL_AUTOTICKS) != 0) &
- (((style & wxSL_BOTTOM) != 0) & !transpose |
- ((style & wxSL_RIGHT) != 0) & transpose) &
- ((style & wxSL_BOTH) == 0);
+ bool left, right;
+ GetSliderLabelsSides(orient, style, &left, &right);
+
+ bool isVertical = orient == wxVERTICAL;
- wxCoord sizeArrow = (transpose ? rect.height : rect.width) / 2;
- wxCoord c = ((transpose ? rect.height : rect.width) - 2*sizeArrow);
+ wxCoord sizeArrow = (isVertical ? rect.height : rect.width) / 2;
+ wxCoord c = ((isVertical ? rect.height : rect.width) - 2*sizeArrow);
wxCoord x1, x2, x3, y1, y2, y3, y4;
- x1 = (transpose ? rect.y : rect.x);
- x2 = (transpose ? rect.GetBottom() : rect.GetRight());
+ x1 = (isVertical ? rect.y : rect.x);
+ x2 = (isVertical ? rect.GetBottom() : rect.GetRight());
x3 = (x1-1+c) + sizeArrow;
- y1 = (transpose ? rect.x : rect.y);
- y2 = (transpose ? rect.GetRight() : rect.GetBottom());
+ y1 = (isVertical ? rect.x : rect.y);
+ y2 = (isVertical ? rect.GetRight() : rect.GetBottom());
y3 = (left ? (y1-1+c) + sizeArrow : y1);
y4 = (right ? (y2+1-c) - sizeArrow : y2);
dc.SetPen(m_penBlack);
- if (left) {
- DrawLine(dc, x3+1-c, y1, x2, y3, transpose);
+ if (left)
+ {
+ DrawLine(dc, x3+1-c, y1, x2, y3, isVertical);
}
- DrawLine(dc, x2, y3, x2, y4, transpose);
+ DrawLine(dc, x2, y3, x2, y4, isVertical);
if (right)
{
- DrawLine(dc, x3+1-c, y2, x2, y4, transpose);
+ DrawLine(dc, x3+1-c, y2, x2, y4, isVertical);
}
else
{
- DrawLine(dc, x1, y2, x2, y2, transpose);
+ DrawLine(dc, x1, y2, x2, y2, isVertical);
}
dc.SetPen(m_penDarkGrey);
- DrawLine(dc, x2-1, y3+1, x2-1, y4-1, transpose);
- if (right) {
- DrawLine(dc, x3+1-c, y2-1, x2-1, y4, transpose);
+ DrawLine(dc, x2-1, y3+1, x2-1, y4-1, isVertical);
+ if (right)
+ {
+ DrawLine(dc, x3+1-c, y2-1, x2-1, y4, isVertical);
}
else
{
- DrawLine(dc, x1+1, y2-1, x2-1, y2-1, transpose);
+ DrawLine(dc, x1+1, y2-1, x2-1, y2-1, isVertical);
}
dc.SetPen(m_penHighlight);
if (left)
{
- DrawLine(dc, x1, y3, x3, y1, transpose);
- DrawLine(dc, x3+1-c, y1+1, x2-1, y3, transpose);
+ DrawLine(dc, x1, y3, x3, y1, isVertical);
+ DrawLine(dc, x3+1-c, y1+1, x2-1, y3, isVertical);
}
else
{
- DrawLine(dc, x1, y1, x2, y1, transpose);
+ DrawLine(dc, x1, y1, x2, y1, isVertical);
}
- DrawLine(dc, x1, y3, x1, y4, transpose);
+ DrawLine(dc, x1, y3, x1, y4, isVertical);
if (right)
{
- DrawLine(dc, x1, y4, x3+c, y2+c, transpose);
+ DrawLine(dc, x1, y4, x3+c, y2+c, isVertical);
}
- if (flags & wxCONTROL_PRESSED) {
+ if (flags & wxCONTROL_PRESSED)
+ {
// TODO: MSW fills the entire area inside, not just the rect
wxRect rectInt = rect;
- if ( transpose )
+ if ( isVertical )
{
rectInt.SetLeft(y3);
rectInt.SetRight(y4);
}
rectInt.Deflate(2);
-#if !defined(__WXMGL__)
static const char *stipple_xpm[] = {
/* columns rows colors chars-per-pixel */
"2 2 2 1",
"w ",
" w",
};
-#else
- // VS: MGL can only do 8x8 stipple brushes
- static const char *stipple_xpm[] = {
- /* columns rows colors chars-per-pixel */
- "8 8 2 1",
- " c None",
- "w c white",
- /* pixels */
- "w w w w ",
- " w w w w",
- "w w w w ",
- " w w w w",
- "w w w w ",
- " w w w w",
- "w w w w ",
- " w w w w",
- };
-#endif
dc.SetBrush(wxBrush(stipple_xpm));
dc.SetTextForeground(wxSCHEME_COLOUR(m_scheme, SHADOW_HIGHLIGHT));
*/
// empty slider?
- if (end == start) return;
-
- bool transpose = (orient == wxVERTICAL);
- bool left = ((style & wxSL_AUTOTICKS) != 0) &
- (((style & wxSL_TOP) != 0) & !transpose |
- ((style & wxSL_LEFT) != 0) & transpose |
- ((style & wxSL_BOTH) != 0));
- bool right = ((style & wxSL_AUTOTICKS) != 0) &
- (((style & wxSL_BOTTOM) != 0) & !transpose |
- ((style & wxSL_RIGHT) != 0) & transpose |
- ((style & wxSL_BOTH) != 0));
+ if ( end == start )
+ return;
+
+ bool left, right;
+ GetSliderLabelsSides(orient, style, &left, &right);
+
+ bool isVertical = orient == wxVERTICAL;
// default thumb size
wxSize sizeThumb = GetSliderThumbSize (rect, 0, orient);
- wxCoord defaultLen = (transpose ? sizeThumb.x : sizeThumb.y);
+ wxCoord defaultLen = (isVertical ? sizeThumb.x : sizeThumb.y);
// normal thumb size
sizeThumb = GetSliderThumbSize (rect, lenThumb, orient);
- wxCoord widthThumb = (transpose ? sizeThumb.y : sizeThumb.x);
+ wxCoord widthThumb = (isVertical ? sizeThumb.y : sizeThumb.x);
wxRect rectShaft = GetSliderShaftRect (rect, lenThumb, orient, style);
wxCoord x1, x2, y1, y2, y3, y4 , len;
- x1 = (transpose ? rectShaft.y : rectShaft.x) + widthThumb/2;
- x2 = (transpose ? rectShaft.GetBottom() : rectShaft.GetRight()) - widthThumb/2;
- y1 = (transpose ? rectShaft.x : rectShaft.y) - defaultLen/2;
- y2 = (transpose ? rectShaft.GetRight() : rectShaft.GetBottom()) + defaultLen/2;
- y3 = (transpose ? rect.x : rect.y);
- y4 = (transpose ? rect.GetRight() : rect.GetBottom());
+ x1 = (isVertical ? rectShaft.y : rectShaft.x) + widthThumb/2;
+ x2 = (isVertical ? rectShaft.GetBottom() : rectShaft.GetRight()) - widthThumb/2;
+ y1 = (isVertical ? rectShaft.x : rectShaft.y) - defaultLen/2;
+ y2 = (isVertical ? rectShaft.GetRight() : rectShaft.GetBottom()) + defaultLen/2;
+ y3 = (isVertical ? rect.x : rect.y);
+ y4 = (isVertical ? rect.GetRight() : rect.GetBottom());
len = x2 - x1;
dc.SetPen(m_penBlack);
int range = end - start;
- for ( int n = 0; n < range; n += step ) {
+ for ( int n = 0; n < range; n += step )
+ {
wxCoord x = x1 + (len*n) / range;
- if (left & (y1 > y3)) {
+ if (left & (y1 > y3))
+ {
DrawLine(dc, x, y1, x, y3, orient == wxVERTICAL);
}
- if (right & (y4 > y2)) {
+ if (right & (y4 > y2))
+ {
DrawLine(dc, x, y2, x, y4, orient == wxVERTICAL);
}
}
// always draw the line at the end position
- if (left & (y1 > y3)) {
+ if (left & (y1 > y3))
+ {
DrawLine(dc, x2, y1, x2, y3, orient == wxVERTICAL);
}
- if (right & (y4 > y2)) {
+ if (right & (y4 > y2))
+ {
DrawLine(dc, x2, y2, x2, y4, orient == wxVERTICAL);
}
}
// draw the bitmap: use the bitmap provided or the standard checkmark for
// the checkable items
wxBitmap bmp = bitmap;
- if ( !bmp.Ok() && (flags & wxCONTROL_CHECKED) )
+ if ( !bmp.IsOk() && (flags & wxCONTROL_CHECKED) )
{
bmp = GetIndicator(IndicatorType_Menu, flags);
}
- if ( bmp.Ok() )
+ if ( bmp.IsOk() )
{
rect.SetRight(geometryInfo.GetLabelOffset());
wxControlRenderer::DrawBitmap(dc, bmp, rect);
}
const wxBitmap& bmp = item->GetBitmap();
- if ( bmp.Ok() )
+ if ( bmp.IsOk() )
{
wxCoord widthBmp = bmp.GetWidth();
if ( widthBmp > widthBmpMax )
#if wxUSE_SCROLLBAR
if ( wxDynamicCast(window, wxScrollBar) )
{
- // we only set the width of vert scrollbars and height of the
- // horizontal ones
- if ( window->GetWindowStyle() & wxSB_HORIZONTAL )
- size->y = m_sizeScrollbarArrow.y;
- else
- size->x = m_sizeScrollbarArrow.x;
-
- // skip border width adjustments, they don't make sense for us
+ /*
+ Don't adjust the size for a scrollbar as its DoGetBestClientSize
+ already has the correct size set. Any size changes here would get
+ added to the best size, making the scrollbar larger.
+ Also skip border width adjustments, they don't make sense for us.
+ */
return;
}
#endif // wxUSE_SCROLLBAR
wxBitmap wxWin32Renderer::GetFrameButtonBitmap(FrameButtonType type)
{
wxBitmap& bmp = m_bmpFrameButtons[type];
- if ( !bmp.Ok() )
+ if ( !bmp.IsOk() )
{
bmp = wxBitmap(ms_xpmFrameButtons[type]);
}
if ( window->GetWindowStyle() & wxMAXIMIZE_BOX )
menu.Append(wxID_MAXIMIZE_FRAME , _("Ma&ximize"));
menu.AppendSeparator();
- menu.Append(wxID_CLOSE_FRAME, _("Close\tAlt-F4"));
+ menu.Append(wxID_CLOSE_FRAME, _("&Close") + wxT("\t") + _("Alt+") + wxT("F4"));
if ( window->GetWindowStyle() & wxMAXIMIZE_BOX )
{