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 {