Rev 9628 | Rev 9659 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 9628 | Rev 9648 | ||
---|---|---|---|
Line 42... | Line 42... | ||
42 | disBackColor = backColor; |
42 | disBackColor = backColor; |
43 | disForeColor = 808080H; |
43 | disForeColor = 808080H; |
44 | disSelBackColor = 0E4E4E4H; |
44 | disSelBackColor = 0E4E4E4H; |
45 | disSelForeColor = disForeColor; |
45 | disSelForeColor = disForeColor; |
Line -... | Line 46... | ||
- | 46 | ||
- | 47 | SHIFT* = 256; |
|
- | 48 | CTRL* = 512; |
|
Line 46... | Line 49... | ||
46 | 49 | ||
Line 47... | Line 50... | ||
47 | 50 | ||
Line 62... | Line 65... | ||
62 | selItem, cliItem: INTEGER; |
65 | selItem, cliItem: INTEGER; |
Line 63... | Line 66... | ||
63 | 66 | ||
64 | font: G.tFont; |
67 | font: G.tFont; |
Line 65... | Line 68... | ||
65 | canvas: G.tCanvas; |
68 | canvas: G.tCanvas; |
66 | - | ||
67 | items: List.tList; |
- | |
68 | click: PROCEDURE (menu: tMenu; id: INTEGER); |
69 | |
Line 69... | Line 70... | ||
69 | key: PROCEDURE (menu: tMenu; key: INTEGER): BOOLEAN |
70 | items: List.tList |
70 | END; |
71 | END; |
71 | 72 | ||
Line 81... | Line 82... | ||
81 | text: ARRAY 32 OF WCHAR; |
82 | text: ARRAY 32 OF WCHAR; |
82 | menu*: tMenu; |
83 | menu*: tMenu; |
83 | main: tMain |
84 | main: tMain |
84 | END; |
85 | END; |
Line -... | Line 86... | ||
- | 86 | ||
- | 87 | tShortcut = POINTER TO RECORD (List.tItem) |
|
- | 88 | key, MenuItem: INTEGER |
|
- | 89 | END; |
|
85 | 90 | ||
86 | tClick = PROCEDURE (menu: tMenu; id: INTEGER); |
- | |
87 | tKey = PROCEDURE (menu: tMenu; key: INTEGER): BOOLEAN; |
91 | tClick = PROCEDURE (menu: tMenu; id: INTEGER); |
Line 88... | Line 92... | ||
88 | tProc = PROCEDURE; |
92 | tProc = PROCEDURE; |
- | 93 | ||
89 | 94 | VAR |
|
90 | VAR |
95 | MenuItem*: INTEGER; |
91 | stack: ARRAY maxLEVEL + 1, 2500 OF INTEGER; |
96 | stack: ARRAY maxLEVEL + 1, 2500 OF INTEGER; |
92 | TIDs: ARRAY maxLEVEL + 1 OF INTEGER; |
97 | TIDs: ARRAY maxLEVEL + 1 OF INTEGER; |
- | 98 | resetTimer: tProc; |
|
93 | resetTimer: tProc; |
99 | _open: PROCEDURE (m: tMenu; x, y: INTEGER); |
94 | _open: PROCEDURE (m: tMenu; x, y: INTEGER); |
100 | shortcuts: List.tList; |
95 | (* |
101 | (* |
96 | backColor, foreColor, selBackColor, selForeColor, |
102 | backColor, foreColor, selBackColor, selForeColor, |
Line 320... | Line 326... | ||
320 | m.active := FALSE |
326 | m.active := FALSE |
321 | END |
327 | END |
322 | END close; |
328 | END close; |
Line -... | Line 329... | ||
- | 329 | ||
- | 330 | ||
- | 331 | PROCEDURE SetItem* (id: INTEGER); |
|
- | 332 | BEGIN |
|
- | 333 | MenuItem := id |
|
- | 334 | END SetItem; |
|
323 | 335 | ||
324 | 336 | ||
325 | PROCEDURE click (m: tMenu; i: INTEGER); |
337 | PROCEDURE click (m: tMenu; i: INTEGER); |
326 | VAR |
338 | VAR |
327 | item: List.tItem; |
339 | item: List.tItem; |
Line 336... | Line 348... | ||
336 | IF (item # NIL) & item(tItem).enabled & (item(tItem).child = NIL) THEN |
348 | IF (item # NIL) & item(tItem).enabled & (item(tItem).child = NIL) THEN |
337 | id := item(tItem).id |
349 | id := item(tItem).id |
338 | END |
350 | END |
339 | END; |
351 | END; |
340 | IF id # -1 THEN |
352 | IF id # -1 THEN |
341 | m.click(m, id); |
353 | SetItem(id); |
342 | p := m.parent; |
354 | p := m.parent; |
343 | WHILE p # NIL DO |
355 | WHILE p # NIL DO |
344 | p.child := NIL; |
356 | p.child := NIL; |
345 | close(p); |
357 | close(p); |
346 | p := p.parent |
358 | p := p.parent |
Line 389... | Line 401... | ||
389 | END |
401 | END |
390 | RETURN res |
402 | RETURN res |
391 | END submenu; |
403 | END submenu; |
Line -... | Line 404... | ||
- | 404 | ||
- | 405 | ||
- | 406 | PROCEDURE getShortcut (key: INTEGER): BOOLEAN; |
|
- | 407 | VAR |
|
- | 408 | item: tShortcut; |
|
- | 409 | res: INTEGER; |
|
- | 410 | BEGIN |
|
- | 411 | item := shortcuts.first(tShortcut); |
|
- | 412 | WHILE (item # NIL) & (item.key # key) DO |
|
- | 413 | item := item.next(tShortcut) |
|
- | 414 | END; |
|
- | 415 | IF item # NIL THEN |
|
- | 416 | res := item.MenuItem |
|
- | 417 | ELSE |
|
- | 418 | res := 0 |
|
- | 419 | END; |
|
- | 420 | SetItem(res) |
|
- | 421 | RETURN res # 0 |
|
- | 422 | END getShortcut; |
|
392 | 423 | ||
393 | 424 | ||
394 | PROCEDURE [stdcall] window (m: tMenu); |
425 | PROCEDURE [stdcall] window (m: tMenu); |
395 | VAR |
426 | VAR |
396 | x, y: INTEGER; |
427 | x, y: INTEGER; |
Line 407... | Line 438... | ||
407 | |0: |
438 | |0: |
408 | |1: |
439 | |1: |
409 | draw_window(m) |
440 | draw_window(m) |
410 | |2: |
441 | |2: |
411 | K.getKBState(shift, ctrl); |
442 | K.getKBState(shift, ctrl); |
412 | key := K.GetKey(); |
443 | key := K.GetKey() DIV 65536; |
413 | IF ~shift & ~ ctrl THEN |
444 | IF shift THEN |
- | 445 | INC(key, SHIFT) |
|
- | 446 | END; |
|
- | 447 | IF ctrl THEN |
|
- | 448 | INC(key, CTRL) |
|
- | 449 | END; |
|
- | 450 | ||
414 | IF key DIV 65536 = 72 THEN |
451 | CASE key OF |
- | 452 | |72: |
|
415 | m.selItem := (m.selItem - 1) MOD m.items.count |
453 | m.selItem := (m.selItem - 1) MOD m.items.count |
416 | ELSIF key DIV 65536 = 80 THEN |
454 | |80: |
417 | m.selItem := (m.selItem + 1) MOD m.items.count |
455 | m.selItem := (m.selItem + 1) MOD m.items.count |
418 | ELSIF key DIV 65536 = 28 THEN |
456 | |28: |
419 | IF m.selItem >= 0 THEN |
457 | IF m.selItem >= 0 THEN |
420 | click(m, m.selItem) |
458 | click(m, m.selItem) |
421 | END; |
459 | END; |
422 | m.cliItem := -1 |
460 | m.cliItem := -1 |
423 | ELSIF key DIV 65536 = 77 THEN |
461 | |77: |
424 | IF ~submenu(m, TRUE) THEN |
462 | IF ~submenu(m, TRUE) THEN |
425 | click(m, -(getMainID(m) + 1)) |
463 | click(m, -(getMainID(m) + 1)) |
426 | END; |
464 | END; |
427 | m.cliItem := -1 |
465 | m.cliItem := -1 |
428 | ELSIF key DIV 65536 = 75 THEN |
466 | |75: |
429 | IF m.parent # NIL THEN |
467 | IF m.parent # NIL THEN |
430 | escape(m) |
468 | escape(m) |
431 | ELSE |
469 | ELSE |
432 | click(m, -(getMainID(m) - 1)) |
470 | click(m, -(getMainID(m) - 1)) |
433 | END; |
471 | END; |
434 | m.cliItem := -1 |
472 | m.cliItem := -1 |
435 | ELSIF key DIV 65536 = 1 THEN |
473 | |1: |
436 | escape(m) |
474 | escape(m) |
437 | ELSE |
475 | ELSE |
438 | IF m.key(m, key) THEN |
476 | IF getShortcut(key) THEN |
439 | IF m.parent # NIL THEN |
- | |
440 | temp := m.parent.tid; |
- | |
441 | m.parent.tid := 0; |
- | |
442 | K.ExitID(temp) |
- | |
443 | END; |
- | |
444 | exit(m) |
- | |
445 | END |
- | |
446 | END |
- | |
447 | ELSE |
- | |
448 | IF m.key(m, key) THEN |
- | |
449 | IF m.parent # NIL THEN |
477 | IF m.parent # NIL THEN |
450 | temp := m.parent.tid; |
478 | temp := m.parent.tid; |
451 | m.parent.tid := 0; |
479 | m.parent.tid := 0; |
452 | K.ExitID(temp) |
480 | K.ExitID(temp) |
453 | END; |
481 | END; |
Line 591... | Line 619... | ||
591 | item := getItem(m, id) |
619 | item := getItem(m, id) |
592 | RETURN (item # NIL) & item.enabled |
620 | RETURN (item # NIL) & item.enabled |
593 | END isEnabled; |
621 | END isEnabled; |
Line 594... | Line 622... | ||
594 | 622 | ||
595 | 623 | ||
596 | PROCEDURE create* (items: List.tList; click: tClick; key: tKey): tMenu; |
624 | PROCEDURE create* (items: List.tList): tMenu; |
597 | VAR |
625 | VAR |
598 | m: tMenu; |
626 | m: tMenu; |
599 | maxLength: INTEGER; |
627 | maxLength: INTEGER; |
Line 604... | Line 632... | ||
604 | m.active := FALSE; |
632 | m.active := FALSE; |
605 | m.parent := NIL; |
633 | m.parent := NIL; |
606 | m.child := NIL; |
634 | m.child := NIL; |
607 | m.mainID := 0; |
635 | m.mainID := 0; |
608 | m.items := items; |
636 | m.items := items; |
609 | m.click := click; |
- | |
610 | m.key := key; |
- | |
611 | maxLength := 0; |
637 | maxLength := 0; |
612 | item := items.first(tItem); |
638 | item := items.first(tItem); |
613 | WHILE item # NIL DO |
639 | WHILE item # NIL DO |
614 | maxLength := MAX(maxLength, LENGTH(item.text)); |
640 | maxLength := MAX(maxLength, LENGTH(item.text)); |
615 | item := item.next(tItem) |
641 | item := item.next(tItem) |
Line 621... | Line 647... | ||
621 | G.SetFont(m.canvas, m.font); |
647 | G.SetFont(m.canvas, m.font); |
622 | RETURN m |
648 | RETURN m |
623 | END create; |
649 | END create; |
Line -... | Line 650... | ||
- | 650 | ||
- | 651 | ||
- | 652 | PROCEDURE AddShortcut* (key, MenuItem: INTEGER); |
|
- | 653 | VAR |
|
- | 654 | item: tShortcut; |
|
- | 655 | BEGIN |
|
- | 656 | NEW(item); |
|
- | 657 | item.key := key; |
|
- | 658 | item.MenuItem := MenuItem; |
|
- | 659 | List.append(shortcuts, item) |
|
- | 660 | END AddShortcut; |
|
624 | 661 | ||
625 | 662 | ||
626 | PROCEDURE init* (_resetTimer: tProc); |
663 | PROCEDURE init* (_resetTimer: tProc); |
627 | VAR |
664 | VAR |
- | 665 | i: INTEGER; |
|
- | 666 | BEGIN |
|
628 | i: INTEGER; |
667 | SetItem(0); |
629 | BEGIN |
668 | shortcuts := List.create(NIL); |
630 | resetTimer := _resetTimer; |
669 | resetTimer := _resetTimer; |
631 | _open := open; |
670 | _open := open; |
632 | FOR i := 0 TO maxLEVEL DO |
671 | FOR i := 0 TO maxLEVEL DO |