1 | #include<stdlib.h>
|
---|
2 | #include<string.h>
|
---|
3 |
|
---|
4 | #include "pisysdep.h"
|
---|
5 | #include PISTDWDG_H
|
---|
6 |
|
---|
7 | // ------- Pb de gestion du focus-keyboard Motif-PIBaseWdg -------
|
---|
8 | // ** Note du 26/02/98 - Reza
|
---|
9 | // Je desactive pour le moment XmNnavigationType et XmNtraversalOn
|
---|
10 | // afin d'ameliorer la gestion du focus-keyboard entre Widget Motif
|
---|
11 | // et objet Peida - Cela semble avoir un effet secondaire -
|
---|
12 | // Il faut que la souris reste dans le widget Text pour taper dedans
|
---|
13 | // ** Note du 30/04/98 - Reza
|
---|
14 | // J'ai modifie le mecanisme de gestion des evenements pour PIBaseWdg
|
---|
15 | // en passant par un EventHandler - Le probleme de gestion du
|
---|
16 | // focus-keyboard n'a pour autant pas ete resolu
|
---|
17 | // Je reactive XmNtraversalOn pour les PIText - Le probleme
|
---|
18 | // d'attribution du focus-keyboard au PIBaseWdg reste si on
|
---|
19 | // met PIText et un PIBaseWdg ds un meme conteneur
|
---|
20 |
|
---|
21 |
|
---|
22 | /************* PILabelX ************/
|
---|
23 | #include <Xm/Label.h>
|
---|
24 |
|
---|
25 |
|
---|
26 | /* --Methode-- */
|
---|
27 | PILabelX::PILabelX(PIContainerGen *par, char *nom,
|
---|
28 | int sx, int sy, int px, int py)
|
---|
29 | : PILabelGen(par, nom, sx, sy, px, py)
|
---|
30 | {
|
---|
31 | Arg warg[3];
|
---|
32 | int n = 0;
|
---|
33 | CreateXtWdg(nom, xmLabelWidgetClass, NULL, sx, sy, px, py);
|
---|
34 | SetBorderWidth(0);
|
---|
35 | XtSetArg(warg[n], XmNrecomputeSize, FALSE); n++;
|
---|
36 | XtSetArg(warg[n],XmNnavigationType,XmNONE); n++;
|
---|
37 | XtSetArg(warg[n],XmNtraversalOn,FALSE); n++;
|
---|
38 | XtSetValues(XtWdg(), warg, n);
|
---|
39 | Manage();
|
---|
40 | }
|
---|
41 |
|
---|
42 | /* --Methode-- */
|
---|
43 | PILabelX::~PILabelX()
|
---|
44 | {}
|
---|
45 |
|
---|
46 |
|
---|
47 | /************* PIButtonX ************/
|
---|
48 | #include <Xm/PushB.h>
|
---|
49 | #include <Xm/ArrowB.h>
|
---|
50 |
|
---|
51 | // Fonctions privees (CallBack)
|
---|
52 | static void button_action(Widget w, XtPointer *usd, XtPointer *calld);
|
---|
53 | static void button_press(Widget w, XtPointer *usd, XmAnyCallbackStruct *calld);
|
---|
54 |
|
---|
55 | /* Nouvelle-Fonction */
|
---|
56 | void button_action(Widget , XtPointer *usd, XtPointer *)
|
---|
57 | {
|
---|
58 | PIButtonX *pib;
|
---|
59 | pib = (PIButtonX *) usd ;
|
---|
60 | pib->Send(pib->Msg(),PIMsg_Click,NULL);
|
---|
61 | return;
|
---|
62 | }
|
---|
63 |
|
---|
64 | /* Nouvelle-Fonction */
|
---|
65 | void button_press(Widget, XtPointer *usd, XmAnyCallbackStruct *calld)
|
---|
66 | {
|
---|
67 | PIButtonX *pib;
|
---|
68 | pib = (PIButtonX *) usd ;
|
---|
69 | pib->Send(pib->Msg(),PIMsg_Press,NULL);
|
---|
70 | pib->myevt = *(calld->event);
|
---|
71 | pib->myevt.type = pib->myevt.xbutton.type = ButtonRelease;
|
---|
72 | pib->myevt.xbutton.serial += 10;
|
---|
73 | PIXSetLastEventTimeSerial(calld->event->xbutton.time, calld->event->xbutton.serial);
|
---|
74 |
|
---|
75 | return;
|
---|
76 | }
|
---|
77 |
|
---|
78 |
|
---|
79 | /* --Methode-- */
|
---|
80 | PIButtonX::PIButtonX(PIContainerGen *par, char *nom, PIMessage msg,
|
---|
81 | int sx, int sy, int px, int py, PIBtnSign bsgn)
|
---|
82 | : PIButtonGen(par, nom, msg, sx, sy, px, py, bsgn)
|
---|
83 | {
|
---|
84 |
|
---|
85 | Arg warg[6];
|
---|
86 | int n = 0;
|
---|
87 |
|
---|
88 | XtSetArg(warg[n],XmNhighlightThickness, 0); n++;
|
---|
89 | XtSetArg(warg[n], XmNrecomputeSize, FALSE); n++;
|
---|
90 | XtSetArg(warg[n],XmNnavigationType,XmNONE); n++;
|
---|
91 | XtSetArg(warg[n],XmNtraversalOn,FALSE); n++;
|
---|
92 |
|
---|
93 | if (bsgn == PIBtn_Label)
|
---|
94 | CreateXtWdg(nom, xmPushButtonWidgetClass, NULL, sx, sy, px, py);
|
---|
95 | else
|
---|
96 | {
|
---|
97 | CreateXtWdg(nom, xmArrowButtonWidgetClass, NULL, sx, sy, px, py);
|
---|
98 | switch (bsgn)
|
---|
99 | {
|
---|
100 | case PIBtn_ArrowUp :
|
---|
101 | XtSetArg(warg[n], XmNarrowDirection, XmARROW_UP); n++;
|
---|
102 | break;
|
---|
103 | case PIBtn_ArrowDown :
|
---|
104 | XtSetArg(warg[n], XmNarrowDirection, XmARROW_DOWN); n++;
|
---|
105 | break;
|
---|
106 | case PIBtn_ArrowLeft :
|
---|
107 | XtSetArg(warg[n], XmNarrowDirection, XmARROW_LEFT); n++;
|
---|
108 | break;
|
---|
109 | case PIBtn_ArrowRight :
|
---|
110 | XtSetArg(warg[n], XmNarrowDirection, XmARROW_RIGHT); n++;
|
---|
111 | break;
|
---|
112 | }
|
---|
113 | }
|
---|
114 |
|
---|
115 | XtSetValues(XtWdg(), warg, n);
|
---|
116 | XtAddCallback(XtWdg(), XmNactivateCallback,
|
---|
117 | (XtCallbackProc)button_action, (XtPointer)this);
|
---|
118 |
|
---|
119 | mAcP = false;
|
---|
120 | SetBorderWidth(0);
|
---|
121 | Manage();
|
---|
122 | }
|
---|
123 |
|
---|
124 | /* --Methode-- */
|
---|
125 | PIButtonX::~PIButtonX()
|
---|
126 | {}
|
---|
127 |
|
---|
128 | /* --Methode-- */
|
---|
129 | void PIButtonX::ActivatePress(bool acp)
|
---|
130 | {
|
---|
131 | if (mAcP == acp) return;
|
---|
132 |
|
---|
133 | if (mAcP)
|
---|
134 | XtRemoveCallback(XtWdg(), XmNarmCallback,
|
---|
135 | (XtCallbackProc)button_press, (XtPointer)this);
|
---|
136 | else
|
---|
137 | XtAddCallback(XtWdg(), XmNarmCallback,
|
---|
138 | (XtCallbackProc)button_press, (XtPointer)this);
|
---|
139 | mAcP = acp;
|
---|
140 | return;
|
---|
141 | }
|
---|
142 |
|
---|
143 | /* --Methode-- */
|
---|
144 | void PIButtonX::ReleaseButton()
|
---|
145 | {
|
---|
146 | XPutBackEvent(myevt.xbutton.display, &myevt);
|
---|
147 | return;
|
---|
148 | }
|
---|
149 |
|
---|
150 |
|
---|
151 | /************* PITextX ************/
|
---|
152 | #include <Xm/Text.h>
|
---|
153 |
|
---|
154 | /* --Methode-- */
|
---|
155 | PITextX::PITextX(PIContainerGen *par, char *nom,
|
---|
156 | int sx, int sy, int px, int py)
|
---|
157 | : PITextGen(par, nom, sx, sy, px, py)
|
---|
158 | {
|
---|
159 | Arg warg[3];
|
---|
160 | int n = 0;
|
---|
161 | CreateXtWdg(nom, xmTextWidgetClass, NULL, sx, sy, px, py);
|
---|
162 | XtSetArg(warg[n],XmNnavigationType,XmNONE); n++;
|
---|
163 | // XtSetArg(warg[n],XmNtraversalOn,FALSE); n++;
|
---|
164 | XtSetValues(XtWdg(), warg, n);
|
---|
165 | SetMutiLineMode(false);
|
---|
166 | SetTextEditable(true);
|
---|
167 | Manage();
|
---|
168 | }
|
---|
169 |
|
---|
170 | /* --Methode-- */
|
---|
171 | PITextX::~PITextX()
|
---|
172 | {}
|
---|
173 |
|
---|
174 | /* --Methode-- */
|
---|
175 | void PITextX::SetText(string const& s)
|
---|
176 | {
|
---|
177 | XmTextSetString(XtWdg(), (char *)s.c_str());
|
---|
178 | return;
|
---|
179 | }
|
---|
180 |
|
---|
181 | /* --Methode-- */
|
---|
182 | string PITextX::GetText() const
|
---|
183 | {
|
---|
184 | char *txtb;
|
---|
185 | txtb = XmTextGetString(XtWdg());
|
---|
186 | string s(txtb);
|
---|
187 | XtFree(txtb);
|
---|
188 | return(s);
|
---|
189 | }
|
---|
190 |
|
---|
191 | /* --Methode-- */
|
---|
192 | void PITextX::SetMutiLineMode(bool mlm)
|
---|
193 | {
|
---|
194 | Arg warg[2];
|
---|
195 | int n = 0;
|
---|
196 |
|
---|
197 | if (mlm)
|
---|
198 | { XtSetArg(warg[n],XmNeditMode, XmMULTI_LINE_EDIT); n++; }
|
---|
199 | else
|
---|
200 | { XtSetArg(warg[n],XmNeditMode, XmSINGLE_LINE_EDIT); n++; }
|
---|
201 |
|
---|
202 | XtSetValues(XtWdg(), warg, n);
|
---|
203 | return;
|
---|
204 | }
|
---|
205 |
|
---|
206 | /* --Methode-- */
|
---|
207 | void PITextX::SetTextEditable(bool te)
|
---|
208 | {
|
---|
209 | Arg warg[2];
|
---|
210 | int n = 0;
|
---|
211 |
|
---|
212 | if (te)
|
---|
213 | { XtSetArg(warg[n],XmNeditable, TRUE); n++; }
|
---|
214 | else
|
---|
215 | { XtSetArg(warg[n],XmNeditable, FALSE); n++; }
|
---|
216 |
|
---|
217 | XtSetValues(XtWdg(), warg, n);
|
---|
218 | return;
|
---|
219 | }
|
---|
220 |
|
---|
221 | // Fonction privee (CallBack)
|
---|
222 | static void text_action(Widget w, XtPointer *usd, XtPointer *calld);
|
---|
223 |
|
---|
224 | void text_action(Widget, XtPointer *usd, XtPointer *)
|
---|
225 | {
|
---|
226 | PIText *pit;
|
---|
227 |
|
---|
228 | pit = (PIText *) usd ;
|
---|
229 | pit->Send(pit->Msg(), PIMsg_DataChanged, NULL);
|
---|
230 | }
|
---|
231 |
|
---|
232 |
|
---|
233 | /* --Methode-- */
|
---|
234 | void PITextX::SetMsg(PIMessage msg)
|
---|
235 | {
|
---|
236 |
|
---|
237 | if (Msg() && !msg)
|
---|
238 | XtRemoveCallback(XtWdg(), XmNactivateCallback,
|
---|
239 | (XtCallbackProc)text_action, (XtPointer)this);
|
---|
240 | if (!Msg() && msg)
|
---|
241 | XtAddCallback(XtWdg(), XmNactivateCallback,
|
---|
242 | (XtCallbackProc)text_action, (XtPointer)this);
|
---|
243 |
|
---|
244 | PIWdg::SetMsg(msg);
|
---|
245 | }
|
---|
246 |
|
---|
247 |
|
---|
248 | /************* PICheckBoxX ************/
|
---|
249 | #include <Xm/ToggleB.h>
|
---|
250 |
|
---|
251 | // Fonction prive (CallBack)
|
---|
252 | static void toggb_action(Widget w, XtPointer *usd, XmToggleButtonCallbackStruct* calld);
|
---|
253 |
|
---|
254 | // Variable globale d'etat de checkbox pour Send(...)
|
---|
255 | static bool toggb_state = false;
|
---|
256 |
|
---|
257 | /* Nouvelle-Fonction */
|
---|
258 | void toggb_action(Widget , XtPointer *usd, XmToggleButtonCallbackStruct* calld)
|
---|
259 | {
|
---|
260 | PICheckBoxX *picb;
|
---|
261 | picb = (PICheckBoxX *) usd ;
|
---|
262 | if (calld->set == True) picb->mSt = true;
|
---|
263 | else picb->mSt = false;
|
---|
264 | toggb_state = picb->mSt;
|
---|
265 | picb->Send(picb->Msg(), PIMsg_DataChanged, (void *)(&toggb_state));
|
---|
266 | return;
|
---|
267 | }
|
---|
268 |
|
---|
269 | /* --Methode-- */
|
---|
270 | PICheckBoxX::PICheckBoxX(PIContainerGen *par, char *nom, PIMessage msg,
|
---|
271 | int sx, int sy, int px, int py)
|
---|
272 | : PICheckBoxGen(par, nom, msg, sx, sy, px, py)
|
---|
273 | {
|
---|
274 | CreateXtWdg(nom, xmToggleButtonWidgetClass, NULL, sx, sy, px, py);
|
---|
275 | XtAddCallback(XtWdg(), XmNvalueChangedCallback,
|
---|
276 | (XtCallbackProc) toggb_action, (XtPointer)this);
|
---|
277 | Arg warg[4];
|
---|
278 | int n = 0;
|
---|
279 | XtSetArg(warg[n],XmNhighlightThickness, 0); n++;
|
---|
280 | XtSetArg(warg[n],XmNnavigationType,XmNONE); n++;
|
---|
281 | XtSetArg(warg[n],XmNtraversalOn,FALSE); n++;
|
---|
282 | XtSetValues(XtWdg(), warg, n);
|
---|
283 | SetState(false);
|
---|
284 | Manage();
|
---|
285 | }
|
---|
286 |
|
---|
287 |
|
---|
288 | /* --Methode-- */
|
---|
289 | PICheckBoxX::~PICheckBoxX()
|
---|
290 | {}
|
---|
291 |
|
---|
292 |
|
---|
293 | /* --Methode-- */
|
---|
294 | void PICheckBoxX::SetState(bool st)
|
---|
295 | {
|
---|
296 | Arg warg[2];
|
---|
297 | mSt = st;
|
---|
298 | if (st) XtSetArg(warg[0],XmNset, True);
|
---|
299 | else XtSetArg(warg[0],XmNset, False);
|
---|
300 | XtSetValues(XtWdg(), warg, 1);
|
---|
301 | return;
|
---|
302 | }
|
---|
303 |
|
---|
304 | /* --Methode-- */
|
---|
305 | bool PICheckBoxX::GetState()
|
---|
306 | {
|
---|
307 | return(mSt);
|
---|
308 | }
|
---|
309 |
|
---|
310 |
|
---|
311 | /************* PIScaleX ************/
|
---|
312 | #include <Xm/Scale.h>
|
---|
313 |
|
---|
314 | // Fonction prive (CallBack)
|
---|
315 | static void scale_action(Widget w, XtPointer *usd,
|
---|
316 | XmScaleCallbackStruct *calld);
|
---|
317 | // Variable globale pour contenir valeur de Scale a l'appel de Send;
|
---|
318 | static int scale_value=0;
|
---|
319 |
|
---|
320 | void scale_action(Widget, XtPointer *usd,
|
---|
321 | XmScaleCallbackStruct *calld)
|
---|
322 | {
|
---|
323 | PIScale *pis;
|
---|
324 |
|
---|
325 | pis = (PIScale *) usd ;
|
---|
326 | pis->CBSetVal(calld->value);
|
---|
327 | scale_value = calld->value;
|
---|
328 | pis->Send(pis->Msg(), PIMsg_DataChanged, (void *)(&scale_value));
|
---|
329 | return;
|
---|
330 | }
|
---|
331 |
|
---|
332 | /* --Methode-- */
|
---|
333 | PIScaleX::PIScaleX(PIContainerGen *par, char *nom, PIMessage msg,
|
---|
334 | int dir, int sx, int sy, int px, int py)
|
---|
335 | : PIScaleGen(par, nom, msg, dir, sx, sy, px, py)
|
---|
336 | {
|
---|
337 | int n=0;
|
---|
338 | Arg warg[8];
|
---|
339 | XtSetArg(warg[n], XmNshowValue, TRUE); n++;
|
---|
340 | XtSetArg(warg[n],XmNnavigationType,XmNONE); n++;
|
---|
341 | XtSetArg(warg[n],XmNtraversalOn,FALSE); n++;
|
---|
342 | if (dir == kSDirLtoR) {
|
---|
343 | XtSetArg(warg[n], XmNorientation, XmHORIZONTAL); n++;
|
---|
344 | XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++;
|
---|
345 | }
|
---|
346 | else if (dir == kSDirRtoL) {
|
---|
347 | XtSetArg(warg[n], XmNorientation, XmHORIZONTAL); n++;
|
---|
348 | XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_LEFT); n++;
|
---|
349 | }
|
---|
350 | else if (dir == kSDirDownUp) {
|
---|
351 | XtSetArg(warg[n], XmNorientation, XmVERTICAL); n++;
|
---|
352 | XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_TOP); n++;
|
---|
353 | }
|
---|
354 | else { // kSDirUpDown
|
---|
355 | XtSetArg(warg[n], XmNorientation, XmVERTICAL); n++;
|
---|
356 | XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_BOTTOM); n++;
|
---|
357 | }
|
---|
358 | // Il ne faut pas attribuer une valeur a XmNscaleWidth et XmNscaleHeight
|
---|
359 | // Elles sont calculees automatiquement et repondent alors correctement aux resize
|
---|
360 | // (Il faut laisser donc leur valeur par defaut=0) Reza 28/10/98
|
---|
361 | // XtSetArg(warg[n], XmNscaleWidth, sx); n++;
|
---|
362 | // XtSetArg(warg[n], XmNscaleHeight, sy); n++;
|
---|
363 | // XtSetArg(warg[n], XmNstringDirection, XmSTRING_DIRECTION_R_TO_L); n++;
|
---|
364 | CreateXtWdg(nom, xmScaleWidgetClass, NULL, sx, sy, px, py, warg, n);
|
---|
365 |
|
---|
366 | SetMinMax(1, 100);
|
---|
367 | SetValue(1);
|
---|
368 |
|
---|
369 | XtAddCallback(XtWdg(), XmNvalueChangedCallback,
|
---|
370 | (XtCallbackProc) scale_action, (XtPointer)this);
|
---|
371 | Manage();
|
---|
372 | }
|
---|
373 |
|
---|
374 | /* --Methode-- */
|
---|
375 | PIScaleX::~PIScaleX()
|
---|
376 | {}
|
---|
377 |
|
---|
378 | /* --Methode-- */
|
---|
379 | void PIScaleX::SetMinMax(int min, int max)
|
---|
380 | {
|
---|
381 | if (min >= max) max = min+10;
|
---|
382 | if (mVal < min) mVal = min;
|
---|
383 | if (mVal > max) mVal = max;
|
---|
384 | int n=0;
|
---|
385 | Arg warg[3];
|
---|
386 | XtSetArg(warg[n], XmNminimum, min); n++;
|
---|
387 | XtSetArg(warg[n], XmNmaximum, max); n++;
|
---|
388 | XtSetArg(warg[n], XmNvalue, mVal); n++;
|
---|
389 | XtSetValues(XtWdg(), warg, n);
|
---|
390 | mMin = min; mMax = max;
|
---|
391 | return;
|
---|
392 | }
|
---|
393 |
|
---|
394 | /* --Methode-- */
|
---|
395 | void PIScaleX::GetMinMax(int& min, int& max)
|
---|
396 | {
|
---|
397 | min = mMin; max = mMax;
|
---|
398 | return;
|
---|
399 | }
|
---|
400 |
|
---|
401 | /* --Methode-- */
|
---|
402 | void PIScaleX::SetValue(int val)
|
---|
403 | {
|
---|
404 | int n=0;
|
---|
405 | if (val < mMin) val = mMin;
|
---|
406 | if (val > mMax) val = mMax;
|
---|
407 | Arg warg[2];
|
---|
408 | XtSetArg(warg[n], XmNvalue, val); n++;
|
---|
409 | XtSetValues(this->sdw, warg, n);
|
---|
410 | return;
|
---|
411 | }
|
---|
412 |
|
---|
413 | /* --Methode-- */
|
---|
414 | int PIScaleX::GetValue()
|
---|
415 | {
|
---|
416 | int val;
|
---|
417 | int n=0;
|
---|
418 | Arg warg[2];
|
---|
419 | XtSetArg(warg[n], XmNvalue, &val); n++;
|
---|
420 | XtGetValues(this->sdw, warg, n);
|
---|
421 | mVal = val;
|
---|
422 | return(mVal);
|
---|
423 | }
|
---|
424 |
|
---|
425 | /* --Methode-- */
|
---|
426 | void PIScaleX::CBSetVal(int val)
|
---|
427 | {
|
---|
428 | mVal = val;
|
---|
429 | return;
|
---|
430 | }
|
---|
431 |
|
---|
432 |
|
---|
433 |
|
---|
434 | /************* PIScrollBarX ************/
|
---|
435 |
|
---|
436 | #include <Xm/ScrollBar.h>
|
---|
437 |
|
---|
438 | // Fonction prive (CallBack)
|
---|
439 | static void scrollbar_action(Widget w, XtPointer *usd,
|
---|
440 | XmScrollBarCallbackStruct *calld);
|
---|
441 | static void scrollbar_drag(Widget w, XtPointer *usd,
|
---|
442 | XmScrollBarCallbackStruct *calld);
|
---|
443 | // Variable globale pour contenir valeur de Scale a l'appel de Send;
|
---|
444 | static int scroll_value=0;
|
---|
445 |
|
---|
446 | void scrollbar_action(Widget, XtPointer *usd,
|
---|
447 | XmScrollBarCallbackStruct *calld)
|
---|
448 | {
|
---|
449 | PIScrollBar *pis;
|
---|
450 |
|
---|
451 | pis = (PIScrollBar *) usd ;
|
---|
452 | pis->CBSetVal(calld->value);
|
---|
453 | pis->Send(pis->Msg(), PIMsg_DataChanged, (void *)(&scroll_value));
|
---|
454 | return;
|
---|
455 | }
|
---|
456 |
|
---|
457 | void scrollbar_drag(Widget, XtPointer *usd,
|
---|
458 | XmScrollBarCallbackStruct *calld)
|
---|
459 | {
|
---|
460 | PIScrollBar *pis;
|
---|
461 |
|
---|
462 | pis = (PIScrollBar *) usd ;
|
---|
463 | pis->CBSetVal(calld->value);
|
---|
464 | pis->Send(pis->Msg(), PIMsg_Drag, (void *)(&scroll_value));
|
---|
465 | return;
|
---|
466 | }
|
---|
467 |
|
---|
468 | /* --Methode-- */
|
---|
469 | PIScrollBarX::PIScrollBarX(PIContainerGen *par, char *nom, PIMessage msg,
|
---|
470 | int dir, int sx, int sy, int px, int py)
|
---|
471 | : PIScrollBarGen(par, nom, msg, dir, sx, sy, px, py)
|
---|
472 | {
|
---|
473 | int n=0;
|
---|
474 | Arg warg[6];
|
---|
475 |
|
---|
476 | XtSetArg(warg[n],XmNnavigationType,XmNONE); n++;
|
---|
477 | XtSetArg(warg[n],XmNtraversalOn,FALSE); n++;
|
---|
478 | if (dir == kSDirLtoR) {
|
---|
479 | XtSetArg(warg[n], XmNorientation, XmHORIZONTAL); n++;
|
---|
480 | XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_RIGHT); n++;
|
---|
481 | }
|
---|
482 | else if (dir == kSDirRtoL) {
|
---|
483 | XtSetArg(warg[n], XmNorientation, XmHORIZONTAL); n++;
|
---|
484 | XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_LEFT); n++;
|
---|
485 | }
|
---|
486 | else if (dir == kSDirDownUp) {
|
---|
487 | XtSetArg(warg[n], XmNorientation, XmVERTICAL); n++;
|
---|
488 | XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_TOP); n++;
|
---|
489 | }
|
---|
490 | else { // kSDirUpDown
|
---|
491 | XtSetArg(warg[n], XmNorientation, XmVERTICAL); n++;
|
---|
492 | XtSetArg(warg[n], XmNprocessingDirection, XmMAX_ON_BOTTOM); n++;
|
---|
493 | }
|
---|
494 | CreateXtWdg(nom, xmScrollBarWidgetClass, NULL, sx, sy, px, py, warg, n);
|
---|
495 | mAcD = false;
|
---|
496 | mVal = -1;
|
---|
497 | mMin = mMax = 0;
|
---|
498 | mSz = 10;
|
---|
499 | mDir = dir;
|
---|
500 | SetMinMax(1, 100);
|
---|
501 | SetSlSize(10);
|
---|
502 | SetValue(1);
|
---|
503 | XtAddCallback(XtWdg(), XmNvalueChangedCallback,
|
---|
504 | (XtCallbackProc) scrollbar_action, (XtPointer)this);
|
---|
505 | Manage();
|
---|
506 | }
|
---|
507 |
|
---|
508 | /* --Methode-- */
|
---|
509 | PIScrollBarX::~PIScrollBarX()
|
---|
510 | {}
|
---|
511 |
|
---|
512 |
|
---|
513 | /* --Methode-- */
|
---|
514 | void PIScrollBarX::ActivateDrag(bool acd)
|
---|
515 | {
|
---|
516 | if (mAcD == acd) return;
|
---|
517 |
|
---|
518 | if (mAcD)
|
---|
519 | XtRemoveCallback(XtWdg(), XmNdragCallback,
|
---|
520 | (XtCallbackProc)scrollbar_drag, (XtPointer)this);
|
---|
521 | else
|
---|
522 | XtAddCallback(XtWdg(), XmNdragCallback,
|
---|
523 | (XtCallbackProc)scrollbar_drag, (XtPointer)this);
|
---|
524 | mAcD = acd;
|
---|
525 | return;
|
---|
526 | }
|
---|
527 |
|
---|
528 | /* --Methode-- */
|
---|
529 | void PIScrollBarX::SetMinMax(int min, int max)
|
---|
530 | {
|
---|
531 | if (min >= max) max = min+100;
|
---|
532 | if (mVal < min) mVal = min;
|
---|
533 | if (mVal > max-mSz) mVal = max-mSz;
|
---|
534 | //DBG printf("PIScrollBarX::SetMinMax(%d %d ) %d Sz=%d \n", min, max, mVal, mSz);
|
---|
535 | int n=0;
|
---|
536 | Arg warg[3];
|
---|
537 | XtSetArg(warg[n], XmNminimum, min); n++;
|
---|
538 | XtSetArg(warg[n], XmNmaximum, max); n++;
|
---|
539 | XtSetArg(warg[n], XmNvalue, mVal); n++;
|
---|
540 | XtSetValues(XtWdg(), warg, n);
|
---|
541 | mMin = min; mMax = max;
|
---|
542 | //DBG printf("--OUT-OF-- PIScrollBarX::SetMinMax(%d %d ) %d Sz=%d \n", min, max, mVal, mSz);
|
---|
543 | return;
|
---|
544 | }
|
---|
545 |
|
---|
546 | /* --Methode-- */
|
---|
547 | void PIScrollBarX::GetMinMax(int& min, int& max)
|
---|
548 | {
|
---|
549 | min = mMin; max = mMax;
|
---|
550 | return;
|
---|
551 | }
|
---|
552 |
|
---|
553 | /* --Methode-- */
|
---|
554 | void PIScrollBarX::SetValue(int val)
|
---|
555 | {
|
---|
556 | int n=0;
|
---|
557 | if (val < mMin) val = mMin;
|
---|
558 | if (val > mMax-mSz) val = mMax-mSz;
|
---|
559 | Arg warg[2];
|
---|
560 | //DBG printf("PIScrollBarX::SetValue(%d -> %d) \n", val, val0);
|
---|
561 | XtSetArg(warg[n], XmNvalue, val); n++;
|
---|
562 | XtSetValues(this->sdw, warg, n);
|
---|
563 | mVal = val;
|
---|
564 | //DBG printf("--OUT-OF---PIScrollBarX::SetValue(%d -> %d) \n", val, val0);
|
---|
565 | return;
|
---|
566 | }
|
---|
567 |
|
---|
568 | /* --Methode-- */
|
---|
569 | int PIScrollBarX::GetValue()
|
---|
570 | {
|
---|
571 | int val;
|
---|
572 | int n=0;
|
---|
573 | Arg warg[2];
|
---|
574 | XtSetArg(warg[n], XmNvalue, &val); n++;
|
---|
575 | XtGetValues(this->sdw, warg, n);
|
---|
576 | mVal = val;
|
---|
577 | return(mVal);
|
---|
578 | }
|
---|
579 |
|
---|
580 | /* --Methode-- */
|
---|
581 | void PIScrollBarX::SetSlSize(int sz)
|
---|
582 | {
|
---|
583 | int n=0;
|
---|
584 | Arg warg[4];
|
---|
585 | int szl;
|
---|
586 |
|
---|
587 | szl = mMax-mMin;
|
---|
588 | if (sz > szl) sz = szl;
|
---|
589 | szl /= 100;
|
---|
590 | if (szl < 1) szl = 1;
|
---|
591 | if (sz < szl) sz = szl;
|
---|
592 | szl = sz/10;
|
---|
593 | if (szl < 1) szl = 1;
|
---|
594 | //DBG printf("PIScrollBarX::SetSlSize(%d ) \n", sz);
|
---|
595 | XtSetArg(warg[n], XmNsliderSize, sz); n++;
|
---|
596 | XtSetArg(warg[n], XmNpageIncrement, sz); n++;
|
---|
597 | XtSetArg(warg[n], XmNincrement, szl); n++;
|
---|
598 | if (mVal < mMin) mVal = mMin;
|
---|
599 | if (mVal > mMax-sz) mVal = mMax-sz;
|
---|
600 | XtSetArg(warg[n], XmNvalue, mVal); n++;
|
---|
601 | XtSetValues(this->sdw, warg, n);
|
---|
602 | //DBG printf("---OUT-OF---PIScrollBarX::SetSlSize(%d ) -> mVal= %d (cv1,2=%d %d)\n", sz,mVal, cv1, cv2);
|
---|
603 | mSz = sz;
|
---|
604 | return;
|
---|
605 | }
|
---|
606 |
|
---|
607 | /* --Methode-- */
|
---|
608 | int PIScrollBarX::GetSlSize()
|
---|
609 | {
|
---|
610 | int sz;
|
---|
611 | int n=0;
|
---|
612 | Arg warg[2];
|
---|
613 | XtSetArg(warg[n], XmNsliderSize, &sz); n++;
|
---|
614 | XtGetValues(this->sdw, warg, n);
|
---|
615 | mSz = sz;
|
---|
616 | return(mSz);
|
---|
617 | }
|
---|
618 |
|
---|
619 |
|
---|
620 | /* --Methode-- */
|
---|
621 | void PIScrollBarX::CBSetVal(int val)
|
---|
622 | {
|
---|
623 | mVal = val;
|
---|
624 | scroll_value = mVal;
|
---|
625 | //DBG printf("PIScrollBarX::CBSetVal(%d) %d -> %d \n", mDir, val, mVal);
|
---|
626 | return;
|
---|
627 | }
|
---|
628 |
|
---|