]> git.saurik.com Git - wxWidgets.git/blame - src/os2/spinctrl.cpp
[gtk] fixed bug that caused segfaults in wxYield when wxToolBar has non-button contr...
[wxWidgets.git] / src / os2 / spinctrl.cpp
CommitLineData
409c9842
DW
1/////////////////////////////////////////////////////////////////////////////
2// Name: msw/spinctrl.cpp
3// Purpose: wxSpinCtrl class implementation for Win32
4// Author: David Webster
5// Modified by:
6// Created: 10/15/99
7// RCS-ID: $Id$
8// Copyright: (c) David Webster
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16
17// ----------------------------------------------------------------------------
18// headers
19// ----------------------------------------------------------------------------
20
21// for compilers that support precompilation, includes "wx.h".
22#include "wx/wxprec.h"
23
24
25#ifndef WX_PRECOMP
26 #include "wx/wx.h"
27#endif
28
29#include "wx/spinctrl.h"
30#include "wx/os2/private.h"
31
32// ----------------------------------------------------------------------------
33// macros
34// ----------------------------------------------------------------------------
35
36#if !USE_SHARED_LIBRARY
37 IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl, wxControl)
38#endif
39
40// ----------------------------------------------------------------------------
41// constants
42// ----------------------------------------------------------------------------
43
44// the margin between the up-down control and its buddy
45static const int MARGIN_BETWEEN = 5;
46
47// ============================================================================
48// implementation
49// ============================================================================
50
51// ----------------------------------------------------------------------------
52// construction
53// ----------------------------------------------------------------------------
54
55bool wxSpinCtrl::Create(wxWindow *parent,
56 wxWindowID id,
3e7fb41b 57 const wxString& value,
409c9842
DW
58 const wxPoint& pos,
59 const wxSize& size,
60 long style,
61 int min, int max, int initial,
62 const wxString& name)
63{
64 // TODO:
65/*
66 // before using DoGetBestSize(), have to set style to let the base class
67 // know whether this is a horizontal or vertical control (we're always
68 // vertical)
69 SetWindowStyle(style | wxSP_VERTICAL);
70
71 // calculate the sizes: the size given is the toal size for both controls
72 // and we need to fit them both in the given width (height is the same)
73 wxSize sizeText(size), sizeBtn(size);
74 sizeBtn.x = wxSpinButton::DoGetBestSize().x;
75 sizeText.x -= sizeBtn.x + MARGIN_BETWEEN;
76 if ( sizeText.x <= 0 )
77 {
78 wxLogDebug(_T("not enough space for wxSpinCtrl!"));
79 }
80
81 wxPoint posBtn(pos);
82 posBtn.x += sizeText.x + MARGIN_BETWEEN;
83
84 // create the spin button
85 if ( !wxSpinButton::Create(parent, id, posBtn, sizeBtn, style, name) )
86 {
87 return FALSE;
88 }
89
90 SetRange(min, max);
91 SetValue(initial);
92
93 // create the text window
94 if ( sizeText.y <= 0 )
95 {
96 // make it the same height as the button then
97 int x, y;
98 wxSpinButton::DoGetSize(&x, &y);
99
100 sizeText.y = y;
101 }
102
103 m_hwndBuddy = (WXHWND)::CreateWindowEx
104 (
105 WS_EX_CLIENTEDGE, // sunken border
106 _T("EDIT"), // window class
107 NULL, // no window title
108 WS_CHILD | WS_VISIBLE | WS_BORDER, // style
109 pos.x, pos.y, // position
110 sizeText.x, sizeText.y, // size
111 GetHwndOf(parent), // parent
112 (HMENU)-1, // control id
113 wxGetInstance(), // app instance
114 NULL // unused client data
115 );
116
117 if ( !m_hwndBuddy )
118 {
119 wxLogLastError("CreateWindow(buddy text window)");
120
121 return FALSE;
122 }
123
124 // should have the same font as the other controls
125 WXHANDLE hFont = GetParent()->GetFont().GetResourceHandle();
126 ::SendMessage((HWND)m_hwndBuddy, WM_SETFONT, (WPARAM)hFont, TRUE);
127
128 // associate the text window with the spin button
129 (void)SendMessage(GetHwnd(), UDM_SETBUDDY, (WPARAM)m_hwndBuddy, 0);
130*/
131 return FALSE;
132}
133
134// ----------------------------------------------------------------------------
135// size calculations
136// ----------------------------------------------------------------------------
137
138void wxSpinCtrl::DoMoveWindow(int x, int y, int width, int height)
139{
140 int widthBtn = DoGetBestSize().x;
141 int widthText = width - widthBtn - MARGIN_BETWEEN;
142 if ( widthText <= 0 )
143 {
144 wxLogDebug(_T("not enough space for wxSpinCtrl!"));
145 }
146// TODO:
147/*
148 if ( !::MoveWindow((HWND)m_hwndBuddy, x, y, widthText, height, TRUE) )
149 {
150 wxLogLastError("MoveWindow(buddy)");
151 }
152
153 x += widthText + MARGIN_BETWEEN;
154 if ( !::MoveWindow(GetHwnd(), x, y, widthBtn, height, TRUE) )
155 {
156 wxLogLastError("MoveWindow");
157 }
158*/
159}