comparison dwt/widgets/Control.d @ 49:9dd4a17513f9

Updated Scrollabe to 3.514
author Jacob Carlborg <doob@me.com>
date Sun, 07 Dec 2008 20:41:40 +0100
parents cfa563df4fdd
children 62202ce0039f
comparison
equal deleted inserted replaced
48:34237ae5156a 49:9dd4a17513f9
63 63
64 import tango.core.Thread; 64 import tango.core.Thread;
65 65
66 import dwt.dwthelper.utils; 66 import dwt.dwthelper.utils;
67 import dwt.dwthelper.System; 67 import dwt.dwthelper.System;
68 import dwt.internal.c.Carbon;
69 import dwt.internal.objc.cocoa.Cocoa;
68 import objc = dwt.internal.objc.runtime; 70 import objc = dwt.internal.objc.runtime;
69 import dwt.widgets.Composite; 71 import dwt.widgets.Composite;
70 import dwt.widgets.Decorations; 72 import dwt.widgets.Decorations;
71 import dwt.widgets.Display; 73 import dwt.widgets.Display;
72 import dwt.widgets.Event; 74 import dwt.widgets.Event;
236 238
237 return super.accessibilityParameterizedAttributeNames(id, sel); 239 return super.accessibilityParameterizedAttributeNames(id, sel);
238 } 240 }
239 241
240 242
241 bool accessibilityIsAttributeSettable(objc.id id, objc.SEL sel, int /*long*/ arg0) { 243 bool accessibilityIsAttributeSettable(objc.id id, objc.SEL sel, objc.id arg0) {
242 244
243 // TODO: Carbon didn't support setting attributes, so for now Cocoa doesn't as well. 245 // TODO: Carbon didn't support setting attributes, so for now Cocoa doesn't as well.
244 // NSString attribute = new NSString(arg0); 246 // NSString attribute = new NSString(arg0);
245 // 247 //
246 // if (accessible !is null) { 248 // if (accessible !is null) {
848 NSView view = topView (); 850 NSView view = topView ();
849 view.removeFromSuperview (); 851 view.removeFromSuperview ();
850 releaseHandle (); 852 releaseHandle ();
851 } 853 }
852 854
853 void doCommandBySelector (objc.id id, objc.SEL sel, int /*long*/ selector) { 855 void doCommandBySelector (objc.id id, objc.SEL sel, objc.SEL selector) {
854 if (view.window ().firstResponder ().id is id) { 856 if (view.window ().firstResponder ().id is id) {
855 NSEvent nsEvent = NSApplication.sharedApplication ().currentEvent (); 857 NSEvent nsEvent = NSApplication.sharedApplication ().currentEvent ();
856 if (nsEvent !is null && nsEvent.type () is OS.NSKeyDown) { 858 if (nsEvent !is null && nsEvent.type () is OS.NSKeyDown) {
857 // TODO is this workaround ok? 859 // TODO is this workaround ok?
858 /* 860 /*
1056 shell.setSavedFocus (focusControl); 1058 shell.setSavedFocus (focusControl);
1057 // int window = OS.GetControlOwner (handle); 1059 // int window = OS.GetControlOwner (handle);
1058 // OS.ClearKeyboardFocus (window); 1060 // OS.ClearKeyboardFocus (window);
1059 } 1061 }
1060 1062
1061 void flagsChanged (objc.id id, objc.SEL sel, int /*long*/ theEvent) { 1063 void flagsChanged (objc.id id, objc.SEL sel, objc.id theEvent) {
1062 if (view.window ().firstResponder ().id is id) { 1064 if (view.window ().firstResponder ().id is id) {
1063 if ((state & SAFARI_EVENTS_FIX) is 0) { 1065 if ((state & SAFARI_EVENTS_FIX) is 0) {
1064 int mask = 0; 1066 int mask = 0;
1065 NSEvent nsEvent = new NSEvent (theEvent); 1067 NSEvent nsEvent = new NSEvent (theEvent);
1066 int /*long*/ modifiers = nsEvent.modifierFlags (); 1068 NSUInteger modifiers = nsEvent.modifierFlags ();
1067 int keyCode = Display.translateKey (nsEvent.keyCode ()); 1069 int keyCode = Display.translateKey (nsEvent.keyCode ());
1068 switch (keyCode) { 1070 switch (keyCode) {
1069 case DWT.ALT: mask = OS.NSAlternateKeyMask; break; 1071 case DWT.ALT: mask = OS.NSAlternateKeyMask; break;
1070 case DWT.CONTROL: mask = OS.NSControlKeyMask; break; 1072 case DWT.CONTROL: mask = OS.NSControlKeyMask; break;
1071 case DWT.COMMAND: mask = OS.NSCommandKeyMask; break; 1073 case DWT.COMMAND: mask = OS.NSCommandKeyMask; break;
1076 setInputState (event, nsEvent, DWT.KeyDown); 1078 setInputState (event, nsEvent, DWT.KeyDown);
1077 sendKeyEvent (DWT.KeyDown, event); 1079 sendKeyEvent (DWT.KeyDown, event);
1078 setInputState (event, nsEvent, DWT.KeyUp); 1080 setInputState (event, nsEvent, DWT.KeyUp);
1079 sendKeyEvent (DWT.KeyUp, event); 1081 sendKeyEvent (DWT.KeyUp, event);
1080 break; 1082 break;
1083 default:
1084 assert(false);
1081 } 1085 }
1082 if (mask !is 0) { 1086 if (mask !is 0) {
1083 int type = (mask & modifiers) !is 0 ? DWT.KeyDown : DWT.KeyUp; 1087 int type = (mask & modifiers) !is 0 ? DWT.KeyDown : DWT.KeyUp;
1084 Event event = new Event(); 1088 Event event = new Event();
1085 event.keyCode = keyCode; 1089 event.keyCode = keyCode;
1553 1557
1554 bool hasFocus () { 1558 bool hasFocus () {
1555 return (view.window().firstResponder().id is view.id); 1559 return (view.window().firstResponder().id is view.id);
1556 } 1560 }
1557 1561
1558 int /*long*/ hitTest (objc.id id, objc.SEL sel, NSPoint point) { 1562 objc.id hitTest (objc.id id, objc.SEL sel, NSPoint point) {
1559 if ((state & DISABLED) !is 0) return 0; 1563 if ((state & DISABLED) !is 0) return null;
1560 return super.hitTest(id, sel, point); 1564 return super.hitTest(id, sel, point);
1561 } 1565 }
1562 1566
1563 bool insertText (objc.id id, objc.SEL sel, int /*long*/ string) { 1567 bool insertText (objc.id id, objc.SEL sel, objc.id string) {
1564 if (view.window ().firstResponder ().id is id) { 1568 if (view.window ().firstResponder ().id is id) {
1565 NSEvent nsEvent = NSApplication.sharedApplication ().currentEvent (); 1569 NSEvent nsEvent = NSApplication.sharedApplication ().currentEvent ();
1566 if (nsEvent !is null && nsEvent.type () is OS.NSKeyDown) { 1570 if (nsEvent !is null && nsEvent.type () is OS.NSKeyDown) {
1567 NSString str = new NSString (string); 1571 NSString str = new NSString (string);
1568 if (str.isKindOfClass (OS.objc_getClass ("NSAttributedString"))) { 1572 if (str.isKindOfClass (cast(objc.Class)OS.objc_getClass ("NSAttributedString"))) {
1569 str = new NSAttributedString (string).string (); 1573 str = (new NSAttributedString (string)).string ();
1570 } 1574 }
1571 int length = (int)/*64*/str.length (); 1575 NSUInteger length = str.length ();
1572 char[] buffer = new char [length]; 1576 wchar[] buffer = new wchar [length];
1573 str.getCharacters(buffer); 1577 str.getCharacters(buffer.ptr);
1574 for (int i = 0; i < buffer.length; i++) { 1578 for (int i = 0; i < buffer.length; i++) {
1575 Event event = new Event (); 1579 Event event = new Event ();
1576 if (length is 1) setKeyState (event, DWT.KeyDown, nsEvent); 1580 if (length is 1) setKeyState (event, DWT.KeyDown, nsEvent);
1577 event.character = buffer [i]; 1581 event.character = buffer [i];
1578 if (!sendKeyEvent (nsEvent, DWT.KeyDown)) return false; 1582 if (!sendKeyEvent (nsEvent, DWT.KeyDown)) return false;
1789 } 1793 }
1790 } 1794 }
1791 super.keyDown (id, sel, theEvent); 1795 super.keyDown (id, sel, theEvent);
1792 } 1796 }
1793 1797
1794 void keyUp (objc.id id, objc.SEL sel, int /*long*/ theEvent) { 1798 void keyUp (objc.id id, objc.SEL sel, objc.id theEvent) {
1795 if (view.window ().firstResponder ().id is id) { 1799 if (view.window ().firstResponder ().id is id) {
1796 NSEvent nsEvent = new NSEvent (theEvent); 1800 NSEvent nsEvent = new NSEvent (theEvent);
1797 if (!sendKeyEvent (nsEvent, DWT.KeyUp)) return; 1801 if (!sendKeyEvent (nsEvent, DWT.KeyUp)) return;
1798 } 1802 }
1799 super.keyUp (id, sel, theEvent); 1803 super.keyUp (id, sel, theEvent);
1801 1805
1802 void markLayout (bool changed, bool all) { 1806 void markLayout (bool changed, bool all) {
1803 /* Do nothing */ 1807 /* Do nothing */
1804 } 1808 }
1805 1809
1806 int /*long*/ menuForEvent (objc.id id, objc.SEL sel, int /*long*/ theEvent) { 1810 objc.id menuForEvent (objc.id id, objc.SEL sel, objc.id theEvent) {
1807 NSPoint pt = NSEvent.mouseLocation(); 1811 NSPoint pt = NSEvent.mouseLocation();
1808 pt.y = (int) (display.getPrimaryFrame().height - pt.y); 1812 pt.y = cast(int) (display.getPrimaryFrame().height - pt.y);
1809 int x = cast(int) pt.x; 1813 int x = cast(int) pt.x;
1810 int y = cast(int) pt.y; 1814 int y = cast(int) pt.y;
1811 Event event = new Event (); 1815 Event event = new Event ();
1812 event.x = x; 1816 event.x = x;
1813 event.y = y; 1817 event.y = y;
1825 1829
1826 Decorations menuShell () { 1830 Decorations menuShell () {
1827 return parent.menuShell (); 1831 return parent.menuShell ();
1828 } 1832 }
1829 1833
1830 void scrollWheel (objc.id id, objc.SEL sel, int /*long*/ theEvent) { 1834 void scrollWheel (objc.id id, objc.SEL sel, objc.id theEvent) {
1831 if (id is view.id) { 1835 if (id is view.id) {
1832 if (hooks (DWT.MouseWheel) || filters (DWT.MouseWheel)) { 1836 if (hooks (DWT.MouseWheel) || filters (DWT.MouseWheel)) {
1833 NSEvent nsEvent = new NSEvent(theEvent); 1837 NSEvent nsEvent = new NSEvent(theEvent);
1834 if (nsEvent.deltaY() !is 0) { 1838 if (nsEvent.deltaY() !is 0) {
1835 if (!sendMouseEvent(nsEvent, DWT.MouseWheel, true)) { 1839 if (!sendMouseEvent(nsEvent, DWT.MouseWheel, true)) {
1839 } 1843 }
1840 } 1844 }
1841 super.scrollWheel(id, sel, theEvent); 1845 super.scrollWheel(id, sel, theEvent);
1842 } 1846 }
1843 1847
1844 void mouseDown(objc.id id, objc.SEL sel, int /*long*/ theEvent) { 1848 void mouseDown(objc.id id, objc.SEL sel, objc.id theEvent) {
1845 Display display = this.display; 1849 Display display = this.display;
1846 display.trackingControl = this; 1850 display.trackingControl = this;
1847 super.mouseDown(id, sel, theEvent); 1851 super.mouseDown(id, sel, theEvent);
1848 display.trackingControl = null; 1852 display.trackingControl = null;
1849 } 1853 }
2461 case DWT.MouseDown: 2465 case DWT.MouseDown:
2462 shell = getShell (); 2466 shell = getShell ();
2463 //FALL THROUGH 2467 //FALL THROUGH
2464 case DWT.MouseUp: 2468 case DWT.MouseUp:
2465 case DWT.MouseDoubleClick: 2469 case DWT.MouseDoubleClick:
2466 int button = (int)/*64*/nsEvent.buttonNumber(); 2470 int button = cast(int)/*64*/nsEvent.buttonNumber();
2467 switch (button) { 2471 switch (button) {
2468 case 0: event.button = 1; break; 2472 case 0: event.button = 1; break;
2469 case 1: event.button = 3; break; 2473 case 1: event.button = 3; break;
2470 case 2: event.button = 2; break; 2474 case 2: event.button = 2; break;
2471 case 3: event.button = 4; break; 2475 case 3: event.button = 4; break;
2472 case 4: event.button = 5; break; 2476 case 4: event.button = 5; break;
2473 } 2477 }
2474 break; 2478 break;
2475 case DWT.MouseWheel: 2479 case DWT.MouseWheel:
2476 event.detail = DWT.SCROLL_LINE; 2480 event.detail = DWT.SCROLL_LINE;
2477 float /*double*/ delta = nsEvent.deltaY(); 2481 CGFloat delta = nsEvent.deltaY();
2478 event.count = delta > 0 ? Math.max (1, (int)delta) : Math.min (-1, (int)delta); 2482 event.count = delta > 0 ? Math.max (1, cast(int)delta) : Math.min (-1, cast(int)delta);
2479 break; 2483 break;
2480 } 2484 }
2481 if (event.button !is 0) event.count = (int)/*64*/nsEvent.clickCount(); 2485 if (event.button !is 0) event.count = cast(int)/*64*/nsEvent.clickCount();
2482 NSPoint windowPoint; 2486 NSPoint windowPoint;
2483 if (nsEvent is null || nsEvent.type() is OS.NSMouseMoved) { 2487 if (nsEvent is null || nsEvent.type() is OS.NSMouseMoved) {
2484 windowPoint = view.window().convertScreenToBase(NSEvent.mouseLocation()); 2488 windowPoint = view.window().convertScreenToBase(NSEvent.mouseLocation());
2485 } else { 2489 } else {
2486 windowPoint = nsEvent.locationInWindow(); 2490 windowPoint = nsEvent.locationInWindow();
2487 } 2491 }
2488 NSPoint point = view.convertPoint_fromView_(windowPoint, null); 2492 NSPoint point = view.convertPoint_fromView_(windowPoint, null);
2489 event.x = (int) point.x; 2493 event.x = cast(int) point.x;
2490 event.y = (int) point.y; 2494 event.y = cast(int) point.y;
2491 setInputState (event, nsEvent, type); 2495 setInputState (event, nsEvent, type);
2492 if (send) { 2496 if (send) {
2493 sendEvent (type, event); 2497 sendEvent (type, event);
2494 if (isDisposed ()) return false; 2498 if (isDisposed ()) return false;
2495 } else { 2499 } else {
3345 all = true; 3349 all = true;
3346 detail = DWT.TRAVERSE_RETURN; 3350 detail = DWT.TRAVERSE_RETURN;
3347 break; 3351 break;
3348 } 3352 }
3349 case 48: /* Tab */ { 3353 case 48: /* Tab */ {
3350 int /*long*/ modifiers = theEvent.modifierFlags (); 3354 NSUInteger modifiers = theEvent.modifierFlags ();
3351 bool next = (modifiers & OS.NSShiftKeyMask) is 0; 3355 bool next = (modifiers & OS.NSShiftKeyMask) is 0;
3352 detail = next ? DWT.TRAVERSE_TAB_NEXT : DWT.TRAVERSE_TAB_PREVIOUS; 3356 detail = next ? DWT.TRAVERSE_TAB_NEXT : DWT.TRAVERSE_TAB_PREVIOUS;
3353 break; 3357 break;
3354 } 3358 }
3355 case 126: /* Up arrow */ 3359 case 126: /* Up arrow */
3361 break; 3365 break;
3362 } 3366 }
3363 case 116: /* Page up */ 3367 case 116: /* Page up */
3364 case 121: /* Page down */ { 3368 case 121: /* Page down */ {
3365 all = true; 3369 all = true;
3366 int /*long*/ modifiers = theEvent.modifierFlags (); 3370 NSUInteger modifiers = theEvent.modifierFlags ();
3367 if ((modifiers & OS.NSControlKeyMask) is 0) return false; 3371 if ((modifiers & OS.NSControlKeyMask) is 0) return false;
3368 detail = key is 121 /* Page down */ ? DWT.TRAVERSE_PAGE_NEXT : DWT.TRAVERSE_PAGE_PREVIOUS; 3372 detail = key is 121 /* Page down */ ? DWT.TRAVERSE_PAGE_NEXT : DWT.TRAVERSE_PAGE_PREVIOUS;
3369 break; 3373 break;
3370 } 3374 }
3371 default: 3375 default: