source: trunk/Lucide/SOURCE/gui/toolbar.cpp @ 26

Last change on this file since 26 was 2, checked in by Eugene Romanenko, 16 years ago

First import

File size: 10.4 KB
Line 
1#define INCL_WIN
2#include <os2.h>
3
4#include <stdio.h>
5#include <string>
6
7#include <tb_spl.h>
8
9#include "lucide.h"
10#include "Lucide_res.h"
11#include "luutils.h"
12#include "messages.h"
13
14
15PFNWP pOldTbProc;
16
17
18static MRESULT EXPENTRY tbProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 )
19{
20    switch ( msg )
21    {
22        case WM_CONTROL:
23            {
24                SHORT controlId = SHORT1FROMMP( mp1 );
25                SHORT notifyCode = SHORT2FROMMP( mp1 );
26
27                if ( ( controlId == TBID_PAGENUM ) && ( notifyCode == SPBN_CHANGE )
28                     && !Lucide::dontSwitchPage )
29                {
30                    LONG spbmValue = 0;
31                    BOOL rc = (BOOL)WinSendDlgItemMsg( hwnd, TBID_PAGENUM, SPBM_QUERYVALUE,
32                                       MPFROMP( &spbmValue ),
33                                       MPFROM2SHORT( 0, SPBQ_UPDATEIFVALID ) );
34
35                    if ( rc && ( spbmValue > 0 ) ) {
36                        Lucide::goToPage( spbmValue - 1 );
37                    }
38                }
39
40                if ( ( controlId == TBID_ZOOM ) && ( notifyCode == CBN_ENTER ) )
41                {
42                    SHORT rc = (SHORT)WinSendDlgItemMsg( hwnd, TBID_ZOOM, LM_QUERYSELECTION,
43                                            MPFROMSHORT( LIT_CURSOR ), MPVOID );
44                    if ( rc != LIT_NONE )
45                    {
46                        switch ( rc )
47                        {
48                            case 0:   Lucide::setZoom( 1 );      break;
49                            case 1:   Lucide::setZoom( -2 );     break;
50                            case 2:   Lucide::setZoom( -1 );     break;
51                            case 3:   Lucide::setZoom( 0.125 );  break;
52                            case 4:   Lucide::setZoom( 0.25 );   break;
53                            case 5:   Lucide::setZoom( 0.5 );    break;
54                            case 6:   Lucide::setZoom( 1 );      break;
55                            case 7:   Lucide::setZoom( 1.25 );   break;
56                            case 8:   Lucide::setZoom( 1.5 );    break;
57                            case 9:   Lucide::setZoom( 2 );      break;
58                            case 10:  Lucide::setZoom( 3 );      break;
59                            case 11:  Lucide::setZoom( 4 );      break;
60                            case 12:  Lucide::setZoom( 8 );      break;
61                            case 13:  Lucide::setZoom( 16 );     break;
62                        }
63                    }
64                }
65            }
66            break;
67    }
68    return pOldTbProc( hwnd, msg, mp1, mp2 );
69}
70
71
72HWND createToolbar( HWND hwnd )
73{
74    HWND hToolBar = WinCreateWindow( hwnd, WC_ER_TOOLBAR, "",
75                                WS_VISIBLE, 0, 0, 0, 0, hwnd, HWND_TOP,
76                                0, NULL, NULL );
77    pOldTbProc = WinSubclassWindow( hToolBar, tbProc );
78
79    AddBtnStruct bs;
80
81    bs.cmd = CM_OPEN;
82    bs.bubbleText = newstrdupL( TBHINT_OPEN );
83    bs.bubbleRes = 0;
84    bs.bubbleHmod = NULLHANDLE;
85    bs.pictRes = IDB_OPEN;
86    bs.pictHmod = NULLHANDLE;
87    bs.menuRes = 0;
88    bs.menuHmod = NULLHANDLE;
89    bs.checked = FALSE;
90    bs.enabled = TRUE;
91    WinSendMsg( hToolBar, TBM_ADDBUTTON, (MPARAM)&bs, MPVOID );
92
93    bs.cmd = CM_PRINT;
94    bs.bubbleText = newstrdupL( TBHINT_PRINT );
95    bs.bubbleRes = 0;
96    bs.bubbleHmod = NULLHANDLE;
97    bs.pictRes = IDB_PRINT;
98    bs.pictHmod = NULLHANDLE;
99    bs.menuRes = 0;
100    bs.menuHmod = NULLHANDLE;
101    bs.checked = FALSE;
102    bs.enabled = TRUE;
103    WinSendMsg( hToolBar, TBM_ADDBUTTON, (MPARAM)&bs, MPVOID );
104
105    WinSendMsg( hToolBar, TBM_ADDSEPARATOR, MPVOID, MPVOID );
106
107    bs.cmd = CM_NAVPANE;
108    bs.bubbleText = newstrdupL( TBHINT_SHOW_NAV_PANE );
109    bs.bubbleRes = 0;
110    bs.bubbleHmod = NULLHANDLE;
111    bs.pictRes = IDB_NAVPANE;
112    bs.pictHmod = NULLHANDLE;
113    bs.menuRes = 0;
114    bs.menuHmod = NULLHANDLE;
115    bs.checked = FALSE;
116    bs.enabled = TRUE;
117    WinSendMsg( hToolBar, TBM_ADDBUTTON, (MPARAM)&bs, MPVOID );
118
119    WinSendMsg( hToolBar, TBM_ADDSEPARATOR, MPVOID, MPVOID );
120
121    bs.cmd = CM_FIRSTPAGE;
122    bs.bubbleText = newstrdupL( TBHINT_FIRST_PAGE );
123    bs.bubbleRes = 0;
124    bs.bubbleHmod = NULLHANDLE;
125    bs.pictRes = IDB_FIRSTPAGE;
126    bs.pictHmod = NULLHANDLE;
127    bs.menuRes = 0;
128    bs.menuHmod = NULLHANDLE;
129    bs.checked = FALSE;
130    bs.enabled = TRUE;
131    WinSendMsg( hToolBar, TBM_ADDBUTTON, (MPARAM)&bs, MPVOID );
132
133    bs.cmd = CM_PREVPAGE;
134    bs.bubbleText = newstrdupL( TBHINT_PREV_PAGE );
135    bs.bubbleRes = 0;
136    bs.bubbleHmod = NULLHANDLE;
137    bs.pictRes = IDB_PREVPAGE;
138    bs.pictHmod = NULLHANDLE;
139    bs.menuRes = 0;
140    bs.menuHmod = NULLHANDLE;
141    bs.checked = FALSE;
142    bs.enabled = TRUE;
143    WinSendMsg( hToolBar, TBM_ADDBUTTON, (MPARAM)&bs, MPVOID );
144
145    // pages spin
146    AddCtrlStruct cs;
147    cs.ctrlHandle = WinCreateWindow( hToolBar, WC_SPINBUTTON, NULL,
148                                     WS_VISIBLE|SPBS_MASTER|SPBS_NUMERICONLY|SPBS_JUSTCENTER,
149                                     0,0,0,0, hToolBar, HWND_TOP, TBID_PAGENUM, NULL, NULL );
150    WinSendMsg( cs.ctrlHandle, SPBM_SETLIMITS, (MPARAM)0, (MPARAM)0 );
151    WinSetPresParam( cs.ctrlHandle, PP_FONTNAMESIZE, deffontlen, deffont );
152    cs.cx = 50;
153    cs.cy = 0;
154    cs.bubbleText = NULL;
155    WinSendMsg( hToolBar, TBM_ADDCONTROL, (MPARAM)&cs, MPVOID );
156
157    cs.ctrlHandle = WinCreateWindow( hToolBar, WC_STATIC, NULL,
158                                     WS_VISIBLE | SS_TEXT | DT_CENTER | DT_VCENTER,
159                                     0,0,0,0, hToolBar, HWND_TOP, TBID_OFPAGES, NULL, NULL );
160    WinSetPresParam( cs.ctrlHandle, PP_FONTNAMESIZE, deffontlen, deffont );
161    ULONG syscmenu = SYSCLR_MENU;
162    WinSetPresParam( cs.ctrlHandle, PP_BACKGROUNDCOLORINDEX, sizeof( ULONG ), &syscmenu );
163    char *pgfrm = newstrdupL( TB_PAGENUM );
164    char pgnum[ 32 ];
165    snprintf( pgnum, sizeof( pgnum ), pgfrm, 9999 );
166    delete pgfrm;
167    HPS hps = WinGetPS( cs.ctrlHandle );
168    cs.cx = getStringPixSize( hps, pgnum ) + 4;
169    WinReleasePS( hps );
170    cs.cy = 0;
171    cs.bubbleText = NULL;
172    WinSendMsg( hToolBar, TBM_ADDCONTROL, (MPARAM)&cs, MPVOID );
173
174    bs.cmd = CM_NEXTPAGE;
175    bs.bubbleText = newstrdupL( TBHINT_NEXT_PAGE );
176    bs.bubbleRes = 0;
177    bs.bubbleHmod = NULLHANDLE;
178    bs.pictRes = IDB_NEXTPAGE;
179    bs.pictHmod = NULLHANDLE;
180    bs.menuRes = 0;
181    bs.menuHmod = NULLHANDLE;
182    bs.checked = FALSE;
183    bs.enabled = TRUE;
184    WinSendMsg( hToolBar, TBM_ADDBUTTON, (MPARAM)&bs, MPVOID );
185
186    bs.cmd = CM_LASTPAGE;
187    bs.bubbleText = newstrdupL( TBHINT_LAST_PAGE );
188    bs.bubbleRes = 0;
189    bs.bubbleHmod = NULLHANDLE;
190    bs.pictRes = IDB_LASTPAGE;
191    bs.pictHmod = NULLHANDLE;
192    bs.menuRes = 0;
193    bs.menuHmod = NULLHANDLE;
194    bs.checked = FALSE;
195    bs.enabled = TRUE;
196    WinSendMsg( hToolBar, TBM_ADDBUTTON, (MPARAM)&bs, MPVOID );
197
198    WinSendMsg( hToolBar, TBM_ADDSEPARATOR, MPVOID, MPVOID );
199
200    bs.cmd = CM_ACTSIZE;
201    bs.bubbleText = newstrdupL( TBHINT_ACTUAL_SIZE );
202    bs.bubbleRes = 0;
203    bs.bubbleHmod = NULLHANDLE;
204    bs.pictRes = IDB_100PERC;
205    bs.pictHmod = NULLHANDLE;
206    bs.menuRes = 0;
207    bs.menuHmod = NULLHANDLE;
208    bs.checked = FALSE;
209    bs.enabled = TRUE;
210    WinSendMsg( hToolBar, TBM_ADDBUTTON, (MPARAM)&bs, MPVOID );
211
212    bs.cmd = CM_FITWINDOW;
213    bs.bubbleText = newstrdupL( TBHINT_FIT_WINDOW );
214    bs.bubbleRes = 0;
215    bs.bubbleHmod = NULLHANDLE;
216    bs.pictRes = IDB_FITPAGE;
217    bs.pictHmod = NULLHANDLE;
218    bs.menuRes = 0;
219    bs.menuHmod = NULLHANDLE;
220    bs.checked = FALSE;
221    bs.enabled = TRUE;
222    WinSendMsg( hToolBar, TBM_ADDBUTTON, (MPARAM)&bs, MPVOID );
223
224    bs.cmd = CM_FITWIDTH;
225    bs.bubbleText = newstrdupL( TBHINT_FIT_WIDTH );
226    bs.bubbleRes = 0;
227    bs.bubbleHmod = NULLHANDLE;
228    bs.pictRes = IDB_FITWIDTH;
229    bs.pictHmod = NULLHANDLE;
230    bs.menuRes = 0;
231    bs.menuHmod = NULLHANDLE;
232    bs.checked = FALSE;
233    bs.enabled = TRUE;
234    WinSendMsg( hToolBar, TBM_ADDBUTTON, (MPARAM)&bs, MPVOID );
235
236    cs.ctrlHandle = WinCreateWindow( hToolBar, WC_COMBOBOX, NULL,
237                                     WS_VISIBLE | CBS_DROPDOWNLIST,
238                                     0,0,0,0, hToolBar, HWND_TOP, TBID_ZOOM, NULL, NULL );
239    WinSetPresParam( cs.ctrlHandle, PP_FONTNAMESIZE, deffontlen, deffont );
240    std::string actsizetext = getLocalizedString( TBHINT_ACTUAL_SIZE );
241    WinSetWindowText( cs.ctrlHandle, actsizetext.c_str() );
242    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END),
243                MPFROMP( actsizetext.c_str() ) );
244    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END),
245                MPFROMP( getLocalizedString( TBHINT_FIT_WINDOW ).c_str() ) );
246    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END),
247                MPFROMP( getLocalizedString( TBHINT_FIT_WIDTH ).c_str() ) );
248    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP( "12.5%" ) );
249    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP( "25%" ) );
250    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP( "50%" ) );
251    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP( "100%" ) );
252    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP( "125%" ) );
253    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP( "150%" ) );
254    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP( "200%" ) );
255    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP( "300%" ) );
256    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP( "400%" ) );
257    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP( "800%" ) );
258    WinSendMsg( cs.ctrlHandle, LM_INSERTITEM, MPFROMSHORT(LIT_END), MPFROMP( "1600%" ) );
259    cs.cx = 80;
260    cs.cy = -100;
261    cs.bubbleText = NULL;
262    WinSendMsg( hToolBar, TBM_ADDCONTROL, (MPARAM)&cs, MPVOID );
263
264    WinSendMsg( hToolBar, TBM_ADDSEPARATOR, MPVOID, MPVOID );
265
266    bs.cmd = CM_FIND;
267    bs.bubbleText = newstrdupL( TBHINT_FIND );
268    bs.bubbleRes = 0;
269    bs.bubbleHmod = NULLHANDLE;
270    bs.pictRes = IDB_FIND;
271    bs.pictHmod = NULLHANDLE;
272    bs.menuRes = 0;
273    bs.menuHmod = NULLHANDLE;
274    bs.checked = FALSE;
275    bs.enabled = TRUE;
276    WinSendMsg( hToolBar, TBM_ADDBUTTON, (MPARAM)&bs, MPVOID );
277
278    return hToolBar;
279}
Note: See TracBrowser for help on using the repository browser.