Mercurial > projects > dwt-mac
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: |