Mercurial > projects > dwt-addons
comparison dwtx/jface/action/MenuManager.d @ 104:04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
These new wrappers now use the tango.util.containers instead of the tango.util.collections.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Thu, 07 Aug 2008 15:01:33 +0200 |
parents | 7ffeace6c47f |
children |
comparison
equal
deleted
inserted
replaced
103:2d6540440fe6 | 104:04b47443bb01 |
---|---|
22 import dwtx.jface.action.IContributionItem; | 22 import dwtx.jface.action.IContributionItem; |
23 import dwtx.jface.action.SubContributionItem; | 23 import dwtx.jface.action.SubContributionItem; |
24 import dwtx.jface.action.IAction; | 24 import dwtx.jface.action.IAction; |
25 import dwtx.jface.action.ExternalActionManager; | 25 import dwtx.jface.action.ExternalActionManager; |
26 | 26 |
27 import tango.util.collection.ArraySeq; | |
28 import tango.util.collection.model.Seq; | |
29 | 27 |
30 import dwt.DWT; | 28 import dwt.DWT; |
31 import dwt.events.MenuAdapter; | 29 import dwt.events.MenuAdapter; |
32 import dwt.events.MenuEvent; | 30 import dwt.events.MenuEvent; |
33 import dwt.widgets.Composite; | 31 import dwt.widgets.Composite; |
43 import dwtx.jface.resource.ImageDescriptor; | 41 import dwtx.jface.resource.ImageDescriptor; |
44 import dwtx.jface.resource.JFaceResources; | 42 import dwtx.jface.resource.JFaceResources; |
45 import dwtx.jface.resource.LocalResourceManager; | 43 import dwtx.jface.resource.LocalResourceManager; |
46 | 44 |
47 import dwt.dwthelper.utils; | 45 import dwt.dwthelper.utils; |
46 import dwtx.dwtxhelper.Collection; | |
48 | 47 |
49 | 48 |
50 /** | 49 /** |
51 * A menu manager is a contribution manager which realizes itself and its items | 50 * A menu manager is a contribution manager which realizes itself and its items |
52 * in a menu control; either as a menu bar, a sub-menu, or a context menu. | 51 * in a menu control; either as a menu bar, a sub-menu, or a context menu. |
332 } else { | 331 } else { |
333 return super.find(path); | 332 return super.find(path); |
334 } | 333 } |
335 | 334 |
336 IContributionItem item = super.find(id); | 335 IContributionItem item = super.find(id); |
337 if (auto mm = cast(IMenuManager)item ) { | 336 if (auto manager = cast(IMenuManager)item ) { |
338 return mm.findUsingPath(rest); | 337 return manager.findUsingPath(rest); |
339 } | 338 } |
340 return null; | 339 return null; |
341 } | 340 } |
342 | 341 |
343 /** | 342 /** |
428 */ | 427 */ |
429 public override IContributionManagerOverrides getOverrides() { | 428 public override IContributionManagerOverrides getOverrides() { |
430 if (overrides is null) { | 429 if (overrides is null) { |
431 if (parent is null) { | 430 if (parent is null) { |
432 overrides = new class IContributionManagerOverrides { | 431 overrides = new class IContributionManagerOverrides { |
433 public ValueWrapperInt getAccelerator(IContributionItem item) { | 432 public Integer getAccelerator(IContributionItem item) { |
434 return null; | 433 return null; |
435 } | 434 } |
436 | 435 |
437 public String getAcceleratorText(IContributionItem item) { | 436 public String getAcceleratorText(IContributionItem item) { |
438 return null; | 437 return null; |
762 protected void update(bool force, bool recursive) { | 761 protected void update(bool force, bool recursive) { |
763 if (isDirty() || force) { | 762 if (isDirty() || force) { |
764 if (menuExist()) { | 763 if (menuExist()) { |
765 // clean contains all active items without double separators | 764 // clean contains all active items without double separators |
766 IContributionItem[] items = getItems(); | 765 IContributionItem[] items = getItems(); |
767 auto clean = new ArraySeq!(IContributionItem); | 766 List clean = new ArrayList(items.length); |
768 clean.capacity(items.length); | |
769 IContributionItem separator = null; | 767 IContributionItem separator = null; |
770 for (int i = 0; i < items.length; ++i) { | 768 for (int i = 0; i < items.length; ++i) { |
771 IContributionItem ci = items[i]; | 769 IContributionItem ci = items[i]; |
772 if (!ci.isVisible()) { | 770 if (!ci.isVisible()) { |
773 continue; | 771 continue; |
777 // (handles both adjacent separators, and separator at end) | 775 // (handles both adjacent separators, and separator at end) |
778 separator = ci; | 776 separator = ci; |
779 } else { | 777 } else { |
780 if (separator !is null) { | 778 if (separator !is null) { |
781 if (clean.size() > 0) { | 779 if (clean.size() > 0) { |
782 clean.append(separator); | 780 clean.add(cast(Object)separator); |
783 } | 781 } |
784 separator = null; | 782 separator = null; |
785 } | 783 } |
786 clean.append(ci); | 784 clean.add(cast(Object)ci); |
787 } | 785 } |
788 } | 786 } |
789 | 787 |
790 // remove obsolete (removed or non active) | 788 // remove obsolete (removed or non active) |
791 Item[] mi = getMenuItems(); | 789 Item[] mi = getMenuItems(); |
792 | 790 |
793 for (int i = 0; i < mi.length; i++) { | 791 for (int i = 0; i < mi.length; i++) { |
794 Object data = mi[i].getData(); | 792 Object data = mi[i].getData(); |
795 | 793 |
796 bool clean_contains = false; | 794 if (data is null || !clean.contains(data)) { |
797 foreach( ci; clean ){ | |
798 if( cast(Object)ci == data ) clean_contains = true; | |
799 } | |
800 if (data is null || !clean_contains) { | |
801 mi[i].dispose(); | 795 mi[i].dispose(); |
802 } else if (cast(IContributionItem)data | 796 } else if (cast(IContributionItem)data |
803 && (cast(IContributionItem) data).isDynamic() | 797 && (cast(IContributionItem) data).isDynamic() |
804 && (cast(IContributionItem) data).isDirty()) { | 798 && (cast(IContributionItem) data).isDirty()) { |
805 mi[i].dispose(); | 799 mi[i].dispose(); |
809 // add new | 803 // add new |
810 mi = getMenuItems(); | 804 mi = getMenuItems(); |
811 int srcIx = 0; | 805 int srcIx = 0; |
812 int destIx = 0; | 806 int destIx = 0; |
813 | 807 |
814 foreach( src; clean ){ | 808 for (Iterator e = clean.iterator(); e.hasNext();) { |
809 IContributionItem src = cast(IContributionItem) e.next(); | |
815 IContributionItem dest; | 810 IContributionItem dest; |
816 | 811 |
817 // get corresponding item in DWT widget | 812 // get corresponding item in DWT widget |
818 if (srcIx < mi.length) { | 813 if (srcIx < mi.length) { |
819 dest = cast(IContributionItem) mi[srcIx].getData(); | 814 dest = cast(IContributionItem) mi[srcIx].getData(); |
902 if (text !is null) { | 897 if (text !is null) { |
903 ExternalActionManager.ICallback callback = ExternalActionManager | 898 ExternalActionManager.ICallback callback = ExternalActionManager |
904 .getInstance().getCallback(); | 899 .getInstance().getCallback(); |
905 | 900 |
906 if (callback !is null) { | 901 if (callback !is null) { |
907 int index = dwt.dwthelper.utils.indexOf( text, '&' ); | 902 int index = .indexOf( text, '&' ); // DWT collision with local indexOf |
908 | 903 |
909 if (index >= 0 && index < text.length - 1) { | 904 if (index >= 0 && index < text.length - 1) { |
910 char character = CharacterToUpper(text | 905 |
911 .charAt(index + 1)); | 906 dchar character = CharacterToUpper(text |
907 [index + 1 .. $].firstCodePoint()); | |
912 | 908 |
913 if (callback.isAcceleratorInUse(DWT.ALT | character)) { | 909 if (callback.isAcceleratorInUse(DWT.ALT | character)) { |
914 if (index is 0) { | 910 if (index is 0) { |
915 text = text.substring(1); | 911 text = text.substring(1); |
916 } else { | 912 } else { |