www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.dwt - How to workaround SWTResourceManager.getImage

reply "samhu" <samhuatgmailnotwork. gmail.com> writes:
Greetings!

I am trying to compile below dummyeclipse project ,but first
encountered the subjected issue.I knew to form a Image object one
can use:
[code]
Image image=new Image(display,imgfilename);//e.g. smile.jpg
[/code]
But I don't know how to load from a resource file(*.res) to form
a image as used in DWT java:
[code]
(new Label).setImage(SWTResourceManager.getImage("PROP_PS",
GIFFILE));
[/code]


dummyeclipse.d
[code]
//: \ SWT dummyeclipse.res -d
module dummyeclipse;

import org.eclipse.swt.all;


public class DummyEclipse : Composite {

	private ToolItem runToolItem;
	private ToolItem debugToolItem;
	private ToolItem newToolItem;
	private MenuItem openMenuItem;

	private Color[3] gradientColors;
	private int[2] percentArray = [50, 100];
	
	static const char[] GIFFILE = "GIFFILE";

	public this(Composite parent, int style) {
		super(parent, style);
		
		Display display = getDisplay();
		//SWTResourceManager.registerResourceUser(this);
		
		// not like java, stores image file in jar file,
		// we load image from compiled resource linked with this app
		gradientColors[0] = display.getSystemColor(SWT.COLOR_DARK_BLUE);
		gradientColors[1] = display.getSystemColor(SWT.COLOR_BLUE);
		gradientColors[2] = null;
		
		this.getShell().setImage(new image(diplay,"SAMPLE.gif"));;
		initGUI();
	}

	public void initGUI() {

		preInitGUI();
		this.setSize(new Point(489, 353));
		GridLayout thisLayout = new GridLayout(1, true);
		with(thisLayout){
			marginWidth = 0;
			marginHeight = 0;
			numColumns = 1;
			makeColumnsEqualWidth = true;
			horizontalSpacing = 0;
			verticalSpacing = 0;
		}
		this.setLayout(thisLayout);	

		createMenuBar();

		// Toolbar
		{
			Label label1 = new Label(this, SWT.HORIZONTAL|SWT.SEPARATOR);
			GridData label1LData = new GridData();
			label1LData.horizontalAlignment = GridData.FILL;
			label1LData.grabExcessHorizontalSpace = true;
			label1.setText("label1");
			label1.setLayoutData(label1LData);
			label1.setBackground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));

			Composite composite_toolBar = new Composite(this, SWT.NONE);
			composite_toolBar.setLayout (new GridLayout ());
			composite_toolBar.setLayoutData (new GridData
(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL |
GridData.VERTICAL_ALIGN_FILL));
			createToolBar(composite_toolBar);
		}
		Composite composite_Main = new Composite(this, SWT.NONE);
		composite_Main.setLayout(new FillLayout());
		GridLayout composite8Layout = new GridLayout();
		composite8Layout.marginWidth = 0;
		composite8Layout.marginHeight = 0;
		composite8Layout.numColumns = 3;
		composite8Layout.verticalSpacing = 0;
		composite8Layout.horizontalSpacing = 1;
		GridData composite8LData = new GridData();
		composite8LData.grabExcessHorizontalSpace = true;
		composite8LData.grabExcessVerticalSpace = true;
		composite8LData.verticalAlignment = GridData.FILL;
		composite8LData.horizontalAlignment = GridData.FILL;
		composite_Main.setLayout(composite8Layout);
		composite_Main.setLayoutData(composite8LData);
		composite_Main.layout();
		
		SashForm sashForm_Main = new SashForm(composite_Main, SWT.NONE);
		GridData sashForm2LData = new GridData();
		sashForm2LData.horizontalAlignment = GridData.FILL;
		sashForm2LData.grabExcessHorizontalSpace = true;
		sashForm2LData.verticalAlignment = GridData.FILL;
		sashForm2LData.grabExcessVerticalSpace = true;
		sashForm_Main.setOrientation(SWT.VERTICAL);
		sashForm_Main.setLayoutData(sashForm2LData);

		SashForm sashForm_top = new SashForm(sashForm_Main, SWT.NONE);
		createTopLeftFolder(sashForm_top);
		createTopRigthFolder(sashForm_top);
		createBottomCFolder(sashForm_Main);
		
		this.layout();
		postInitGUI();
	}	

	/**
	* Auto-generated method to display this
	* %SUPERCLASS_NAME% inside a new Shell.
	*/
	public static void showGUI() {
		Display display = Display.getDefault();
		Shell shell = new Shell(display);
		shell.setText("Dummy Eclipse");
		//Util.trace(shell.getText());
		DummyEclipse inst = new DummyEclipse(shell, SWT.NULL);
		Point size = inst.getSize();
		shell.setLayout(new FillLayout());
		shell.layout();
		if(size.x == 0 && size.y == 0) {
			inst.pack();
			shell.pack();
		} else {
			Rectangle shellBounds = shell.computeTrim(0, 0, size.x,
size.y);
			int MENU_HEIGHT = 22;
			if (shell.getMenuBar() !is null)
				shellBounds.height -= MENU_HEIGHT;
			shell.setSize(shellBounds.width, shellBounds.height);
		}
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}

	private CTabFolder createBottomCFolder(Composite parent){
		CTabFolder cTabFolder_bottom = new CTabFolder(parent,
SWT.BOTTOM | SWT.BORDER | SWT.FLAT);

		CTabItem cTabItem10 = new CTabItem(cTabFolder_bottom, SWT.NONE);
		cTabItem10.setText("  Properties  ");
		
		with(new CTabItem(cTabFolder_bottom, SWT.NONE))
		{
			setText("  Search  ");
			setControl(new Text(cTabFolder_bottom,
SWT.MULTI|SWT.V_SCROLL|SWT.H_SCROLL));
		}

		Composite composite12 = new Composite(cTabFolder_bottom,
SWT.NONE);
		cTabItem10.setControl(composite12);
		GridLayout composite12Layout = new GridLayout();
		composite12Layout.marginWidth = 0;
		composite12Layout.marginHeight = 0;
		composite12Layout.makeColumnsEqualWidth = true;
		composite12Layout.horizontalSpacing = 0;
		composite12Layout.verticalSpacing = 0;
		composite12.setLayout(composite12Layout);
		composite12.layout();

		Composite composite14 = new Composite(composite12, SWT.NONE);
		GridLayout composite14Layout = new GridLayout();
		composite14Layout.marginWidth = 0;
		composite14Layout.marginHeight = 0;
		composite14Layout.numColumns = 2;
		composite14Layout.horizontalSpacing = 0;
		composite14Layout.verticalSpacing = 0;
		GridData composite14LData = new GridData();
		composite14LData.grabExcessHorizontalSpace = true;
		composite14LData.horizontalAlignment = GridData.FILL;
		composite14LData.verticalAlignment = GridData.FILL;
		composite14.setLayout(composite14Layout);
		composite14.layout();
		composite14.setLayoutData(composite14LData);

		Table table1 = new Table(composite12, SWT.CHECK);
		GridData table1LData = new GridData();
		table1LData.grabExcessVerticalSpace = true;
		table1LData.grabExcessHorizontalSpace = true;
		table1LData.horizontalAlignment = GridData.FILL;
		table1LData.verticalAlignment = GridData.FILL;
		table1.setHeaderVisible(true);
		table1.setLinesVisible(true);
		table1.setLayoutData(table1LData);

		with(new TableColumn(table1, SWT.NONE)) {
			setText("Property");
			setWidth(100);
		}
		with(new TableColumn(table1, SWT.NONE)) {
			setText("Value");
			setWidth(100);
		}
		with(new TableItem(table1, SWT.NONE)) {
			setText("tableItem1");
			setChecked(true);
		}
		with(new TableItem(table1, SWT.NONE)) {
			setText("tableItem2");
			setGrayed(true);
		}
		CLabel cLabel7 = new CLabel(composite14, SWT.NONE);
		GridData cLabel7LData = new GridData();
		cLabel7LData.grabExcessHorizontalSpace = true;
		cLabel7LData.horizontalAlignment = GridData.FILL;
		cLabel7LData.verticalAlignment = GridData.FILL;
		cLabel7.setText("Properties");
		//cLabel7.setImage(SWTResourceManager.getImage("PROP_PS",
GIFFILE));
		cLabel7.setForeground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
		cLabel7.setLayoutData(cLabel7LData);
		cLabel7.setBackground(gradientColors, percentArray);

		ToolBar toolBar = new ToolBar(composite14, SWT.FLAT);
		GridData toolBar4LData = new GridData();
		toolBar.setLayoutData(toolBar4LData);

		with(new ToolItem(toolBar, SWT.NONE)) {
			//setImage(SWTResourceManager.getImage("VIEW_MENU", GIFFILE));
		}

		with(new ToolItem(toolBar, SWT.NONE)) {
			//setImage(SWTResourceManager.getImage("CLOSE_VIEW", GIFFILE));
		}

		with(cTabFolder_bottom){
			setTabHeight(24);
			setSelection(0);
			setSimple(false);
			setSelectionForeground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
		}
		cTabFolder_bottom.setSelectionBackground(gradientColors,
percentArray, true);
					
		return cTabFolder_bottom;
	}
	
	/**
	 * Listens to widgetSelected() events on SWT.DROP_DOWN type
CoolItems
	 * and opens/closes a menu when appropriate.
	 */
	public void onCoolItemSelection(SelectionEvent event){
		Menu menu = null;
		/**
		 * A selection event will be fired when the cool item
		 * is selected by its gripper or if the drop down arrow
		 * (or 'chevron') is selected. Examine the event detail
		 * to determine where the widget was selected.
		 */
		if (event.detail == SWT.ARROW) {
			/* If the popup menu is already up (i.e. user pressed arrow
twice),
			 * then dispose it.
			 */
			if (menu !is null) {
				menu.dispose();
				menu = null;
				return;
			}
			
			/* Get the cool item and convert its bounds to display
coordinates. */
			ToolBar toolBar = cast(ToolBar) event.widget;
			Rectangle itemBounds = toolBar.getBounds ();
			Point pt = toolBar.toDisplay(new Point (itemBounds.x,
itemBounds.y));
			itemBounds.x = pt.x;
			itemBounds.y = pt.y;
			
			/* Get the toolbar from the cool item. */
			ToolItem[] tools = toolBar.getItems ();
			int toolCount = tools.length;
							
			/* Convert the bounds of each tool item to display coordinates,
			 * and determine which ones are past the bounds of the cool
item.
			 */
			int i = 0;
			while (i < toolCount) {
				Rectangle toolBounds = tools[i].getBounds ();
				pt = toolBar.toDisplay(new Point(toolBounds.x, toolBounds.y));
				toolBounds.x = pt.x;
				toolBounds.y = pt.y;
		  		Rectangle intersection = itemBounds.intersection
(toolBounds);
		  		if (!intersection.equals (toolBounds)) break;
		  		i++;
			}
			
			/* Create a pop-up menu with items for each of the hidden
buttons. */
			menu = new Menu (toolBar);
			for (int j = i; j < toolCount; j++) {
				ToolItem tool = tools[j];
				Image image = tool.getImage();
				if (image is null) {
					new MenuItem (menu, SWT.SEPARATOR);
				} else {
					if ((tool.getStyle() & SWT.DROP_DOWN) != 0) {
						MenuItem menuItem = new MenuItem (menu, SWT.CASCADE);
						menuItem.setImage(image);
						Menu m = new Menu(menu);
						menuItem.setMenu(m);
//						for (int k = 0; k < 9; ++k) {
//							char[] text = (("DropDownData_") ~ k);
//							if (text.length != 0) {
//								MenuItem mi = new MenuItem(m, SWT.NONE);
//								mi.setText(text);
//								/* Application code to perform the action for the
submenu item would go here. */
//							} else {
//								new MenuItem(m, SWT.SEPARATOR);
//							}
//						}
					} else {
						MenuItem menuItem = new MenuItem (menu, SWT.NONE);
						menuItem.setImage(image);
					}
					/* Application code to perform the action for the menu item
would go here. */

				}
			}
			
			/* Display the pop-up menu at the lower left corner of the
arrow button.
			 * Dispose the menu when the user is done with it.
			 */
			pt = toolBar.toDisplay(new Point(event.x, event.y));
			menu.setLocation (pt.x, pt.y);
			menu.setVisible (true);
			Display display = toolBar.getDisplay ();
			while (menu !is null && !menu.isDisposed() && menu.isVisible
()) {
				if (!display.readAndDispatch ()) display.sleep ();
			}
			if (menu !is null) {
				menu.dispose ();
				menu = null;
			}
		}
	}
	
	private void createToolBar(Composite parent){
		ToolBar toolBar = new ToolBar(parent, SWT.FLAT);
		
		newToolItem = new ToolItem(toolBar, SWT.DROP_DOWN);
		//newToolItem.setImage(SWTResourceManager.getImage("NEW_WIZ",
GIFFILE));
		
		// java like anonymous class, remember to introduce
		// the parent class, here is "DummyEclipse" into
		class NewToolItemSelectionListener : SelectionAdapter {
			private DummyEclipse cData;
			public this(DummyEclipse cData){this.cData = cData;}
			public void widgetSelected(SelectionEvent evt) {
				cData.newToolItemWidgetSelected(evt);
			}
		};
		newToolItem.addSelectionListener(new
NewToolItemSelectionListener(this));
		
		ToolItem toolItem6 = new ToolItem(toolBar, SWT.NONE);
		//toolItem6.setImage(SWTResourceManager.getImage("SAVEAS_EDIT",
GIFFILE));

		ToolItem toolItem5 = new ToolItem(toolBar, SWT.NONE);
		//toolItem5.setImage(SWTResourceManager.getImage("SAVE_EDIT",
GIFFILE));

		ToolItem toolItem8 = new ToolItem(toolBar, SWT.NONE);
		//toolItem8.setImage(SWTResourceManager.getImage("PRINT_EDIT",
GIFFILE));

		new ToolItem(toolBar, SWT.SEPARATOR);

		ToolItem toolItem13 = new ToolItem(toolBar, SWT.NONE);
		//toolItem13.setImage(SWTResourceManager.getImage("BUILD_EXEC",
GIFFILE));
		
		
		debugToolItem = new ToolItem(toolBar, SWT.DROP_DOWN);
		debugToolItem.handleSelection(this,
&debugToolItemWidgetSelected);
		//debugToolItem.setImage(SWTResourceManager.getImage("DEBUG_EXEC",
GIFFILE));
		
		runToolItem = new ToolItem(toolBar, SWT.DROP_DOWN);
		//runToolItem.setImage(SWTResourceManager.getImage("RUN_EXEC",
GIFFILE));
		runToolItem.handleSelection(this,
&runToolItemWidgetSelected);			
	}

	private CTabFolder createTopLeftFolder(Composite parent) {
			
		CTabFolder cTabFolder_topleft = new CTabFolder(parent,
SWT.BOTTOM | SWT.BORDER);
		
		CTabItem cTabItem4 = new CTabItem(cTabFolder_topleft, SWT.NONE);
		cTabItem4.setText("  Package Explorer  ");

		CTabItem cTabItem5 = new CTabItem(cTabFolder_topleft, SWT.NONE);
		cTabItem5.setText("  Hierarchy  ");

		Composite composite10 = new Composite(cTabFolder_topleft,
SWT.NONE);
		cTabItem5.setControl(composite10);
		GridLayout composite10Layout = new GridLayout();
		composite10Layout.marginWidth = 0;
		composite10Layout.marginHeight = 0;
		composite10Layout.makeColumnsEqualWidth = true;
		composite10Layout.horizontalSpacing = 0;
		composite10Layout.verticalSpacing = 0;
		composite10.setLayout(composite10Layout);
		composite10.layout();

		Composite composite7 = new Composite(cTabFolder_topleft,
SWT.NONE);
		cTabItem4.setControl(composite7);
		GridLayout composite7Layout = new GridLayout();
		composite7Layout.marginWidth = 0;
		composite7Layout.marginHeight = 0;
		composite7Layout.makeColumnsEqualWidth = true;
		composite7Layout.horizontalSpacing = 0;
		composite7Layout.verticalSpacing = 0;
		composite7.setLayout(composite7Layout);
		composite7.layout();

		CLabel cLabel5 = new CLabel(composite10, SWT.NONE);
		GridData cLabel5LData = new GridData();
		cLabel5LData.horizontalAlignment = GridData.FILL;
		cLabel5LData.verticalAlignment = GridData.FILL;
		cLabel5LData.grabExcessHorizontalSpace = true;
		cLabel5.setBackground(getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
		cLabel5.setText("Hierarchy Test");
		//cLabel5.setImage(SWTResourceManager.getImage("SAMPLE",
GIFFILE));
		cLabel5.setLayoutData(cLabel5LData);

		Tree tree4 = new Tree(composite10, SWT.NONE);
		GridData tree4LData = new GridData();
		tree4LData.grabExcessHorizontalSpace = true;
		tree4LData.grabExcessVerticalSpace = true;
		tree4LData.horizontalAlignment = GridData.FILL;
		tree4LData.verticalAlignment = GridData.FILL;
		tree4.setLayoutData(tree4LData);

		TreeItem treeItem10 = new TreeItem(tree4, SWT.NONE);
		treeItem10.setText("Composite");
		treeItem10.setExpanded(true);

		TreeItem treeItem12 = new TreeItem(treeItem10, SWT.NONE);
		treeItem12.setText("Canvas");

		TreeItem treeItem11 = new TreeItem(treeItem10, SWT.NONE);
		treeItem11.setText("SashForm");

		Composite composite9 = new Composite(composite7, SWT.NONE);
		GridLayout composite9Layout = new GridLayout();
		composite9Layout.marginWidth = 0;
		composite9Layout.marginHeight = 0;
		composite9Layout.numColumns = 2;
		composite9Layout.horizontalSpacing = 0;
		composite9Layout.verticalSpacing = 0;
		GridData composite9LData = new GridData();
		composite9LData.heightHint = 24;
		composite9LData.grabExcessHorizontalSpace = true;
		composite9LData.horizontalAlignment = GridData.FILL;
		composite9.setLayout(composite9Layout);
		composite9.layout();
		composite9.setLayoutData(composite9LData);

		Tree tree3 = new Tree(composite7, SWT.NONE);
		GridData tree3LData = new GridData();
		tree3LData.grabExcessHorizontalSpace = true;
		tree3LData.grabExcessVerticalSpace = true;
		tree3LData.horizontalAlignment = GridData.FILL;
		tree3LData.verticalAlignment = GridData.FILL;
		tree3.setLayoutData(tree3LData);

		TreeItem treeItem7 = new TreeItem(tree3, SWT.NONE);
		treeItem7.setText("testPackage");
		//treeItem7.setImage(SWTResourceManager.getImage("PACKAGE",
GIFFILE));
		treeItem7.setExpanded(true);

		TreeItem treeItem8 = new TreeItem(treeItem7, SWT.NONE);
		treeItem8.setText("Class1");
		//treeItem8.setImage(SWTResourceManager.getImage("JCU_OBJ",
GIFFILE));

		TreeItem treeItem9 = new TreeItem(treeItem7, SWT.NONE);
		treeItem9.setText("Class2");
		//treeItem9.setImage(SWTResourceManager.getImage("JCU_OBJ",
GIFFILE));

		CLabel cLabel4 = new CLabel(composite9, SWT.NONE);
		GridData cLabel4LData = new GridData();
		cLabel4LData.verticalAlignment = GridData.FILL;
		cLabel4LData.horizontalAlignment = GridData.FILL;
		cLabel4LData.grabExcessHorizontalSpace = true;
		cLabel4.setText("Package Explorer");
		//cLabel4.setImage(SWTResourceManager.getImage("PACKAGE",
GIFFILE));
		cLabel4.setLayoutData(cLabel4LData);

		ToolBar toolBar5 = new ToolBar(composite9, SWT.FLAT);
		GridData toolBar5LData = new GridData();
		toolBar5.setLayoutData(toolBar5LData);

		ToolItem toolItem3 = new ToolItem(toolBar5, SWT.NONE);
		//toolItem3.setImage(SWTResourceManager.getImage("VIEW_MENU",
GIFFILE));

		ToolItem toolItem4 = new ToolItem(toolBar5, SWT.NONE);
		//toolItem4.setImage(SWTResourceManager.getImage("close_view",
GIFFILE));

		cTabFolder_topleft.setSelection(0);
		
		return cTabFolder_topleft;
	}
	
	private CTabFolder createTopRigthFolder(Composite parent){
			
		CTabFolder cTabFolder_topright = new CTabFolder(parent, SWT.TOP
| SWT.CLOSE | SWT.H_SCROLL | SWT.BORDER);

		CTabItem cTabItem6 = new CTabItem(cTabFolder_topright,
SWT.NONE);
		cTabItem6.setText("  FakeJava.java  ");
		//cTabItem6.setImage(SWTResourceManager.getImage("JCU_OBJ",
GIFFILE));

		CTabItem cTabItem7 = new CTabItem(cTabFolder_topright,
SWT.NONE);
		cTabItem7.setText("  FakeJava.form  ");
		//cTabItem7.setImage(SWTResourceManager.getImage("FORM",
GIFFILE));

		ScrolledComposite scrolledComposite1 = new ScrolledComposite(
			cTabFolder_topright,
			SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
		cTabItem7.setControl(scrolledComposite1);

		Text text2 = new Text(cTabFolder_topright, SWT.MULTI
			| SWT.H_SCROLL
			| SWT.V_SCROLL);
		cTabItem6.setControl(text2);
		text2.setText("package fake;\n\npublic class FakeJava
{\n\n\tpublic FakeJava() {\n\t}\n\n}");

		with(cTabFolder_topright){
			setTabHeight(24);
			setSelection(0);
			setSimple(false);
			setSelectionForeground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
		}
		cTabFolder_topright.setSelectionBackground(gradientColors,
percentArray, true);
		
		return cTabFolder_topright;
	}
	
	private void createMenuBar(){
		Menu menubar = new Menu(getShell(), SWT.BAR);
		getShell().setMenuBar(menubar);

		// file menu
		{
			MenuItem fileMenuItem = new MenuItem(menubar, SWT.CASCADE);
			Menu menu = new Menu(fileMenuItem);
			fileMenuItem.setText("&File");
			fileMenuItem.setMenu(menu);

			// new ...
			MenuItem newMenuItem = new MenuItem(menu, SWT.CASCADE);
			Menu items = new Menu(newMenuItem);
			newMenuItem.setMenu(items);
			newMenuItem.setText("&New");
			with(new MenuItem(items, SWT.PUSH)){
				setText("Project");
			};
			new MenuItem(items, SWT.SEPARATOR);
			with(new MenuItem(items, SWT.PUSH)){
				setText("Package");
			};
		
			new MenuItem(menu, SWT.SEPARATOR);

			// open
			openMenuItem = new MenuItem(menu, SWT.PUSH);
			with(openMenuItem){
				setText("&Open Dir");
				// handle anonymous delegate
				handleEvent(this, SWT.Selection, delegate(Event e){
					DummyEclipse d = cast(DummyEclipse)e.cData;
					auto DirectoryDialog dlg = new DirectoryDialog(d.getShell());
					dlg.setMessage("Find the dir ");
					char[] fullpath = dlg.open();
					if(fullpath !is null){
						MessageBox.showMsg(fullpath, ("You selected"), d.getShell()
);
					}
				});
			}

			// open multiple
			with(openMenuItem = new MenuItem(menu, SWT.PUSH)){
				setText("&Open Multiple");
				handleEvent(this, SWT.Selection, &onOpenMultiple);
			}
			
			// close
			with(new MenuItem(menu, SWT.PUSH)){
				setText("&Close");
				handleSelection(this, &onMenuSelected);
			}
			// save
			with(new MenuItem(menu, SWT.PUSH)){
				setText("&Save");
				handleSelection(this, &onMenuSelected);
				//setImage(SWTResourceManager.getImage("SAVE", GIFFILE));
			}
			// exit
			with(new MenuItem(menu, SWT.PUSH)){
				setText("&Exit");
				handleEvent(this, SWT.Selection, &onExit);
			}		
		}
		
		
		// edit menu
		{
			MenuItem editMenuItem = new MenuItem(menubar, SWT.CASCADE);
			Menu menu = new Menu(editMenuItem);
			editMenuItem.setText("&Edit");
			editMenuItem.setMenu(menu);
			with(new MenuItem(menu, SWT.PUSH)){setText("Undo");}
			with(new MenuItem(menu, SWT.PUSH)){setText("Redo");}
			new MenuItem(menu, SWT.SEPARATOR);
			with(new MenuItem(menu, SWT.PUSH)){setText("Cut");}
			with(new MenuItem(menu, SWT.PUSH)){setText("Paste");}
			with(new MenuItem(menu, SWT.PUSH)){setText("Copy");}
		}
		
		// create help menu
		{
			MenuItem helpMenuItem = new MenuItem(menubar, SWT.CASCADE);
			Menu menu = new Menu(helpMenuItem);
			helpMenuItem.setText("&Help");
			helpMenuItem.setMenu(menu);	
			MenuItem item = new MenuItem(menu, SWT.PUSH);
			item.setText("&About");
			// call Widget.handleEvent(int eventType, delegate()) to
			// handle a event
			item.handleEvent(this, SWT.Selection, &onHelpAbout);
		}

	}

	/**
	 * Add your pre-init code in here
	 */
	public void preInitGUI() {
	}

	/**
	 * Add your post-init code in here
	 */
	public void postInitGUI() {
	}

	/** Auto-generated event handler method */
	public void newToolItemWidgetSelected(SelectionEvent evt) {
		if (evt.detail == SWT.ARROW) {
			Menu menu = new Menu(getShell(), SWT.POP_UP);
			MenuItem mi = new MenuItem(menu, SWT.PUSH);
			mi.setText("New...");
			Rectangle b = newToolItem.getBounds();
			Point pt = new Point(b.x, b.y + b.height);
			pt = newToolItem.getParent().toDisplay(pt);
			menu.setLocation(pt.x, pt.y);
			menu.setVisible(true);
			mi.handleSelection(this, &onMenuSelected);
		}
	}

	/** Auto-generated event handler method */
	public void runToolItemWidgetSelected(SelectionEvent evt) {
		if (evt.detail == SWT.ARROW) {
			Menu menu = new Menu(getShell(), SWT.POP_UP);
			MenuItem mi = new MenuItem(menu, SWT.PUSH);
			mi.setText("Run...");
			Rectangle b = runToolItem.getBounds();
			Point pt = new Point(b.x, b.y + b.height);
			pt = runToolItem.getParent().toDisplay(pt);
			menu.setLocation(pt.x, pt.y);
			menu.setVisible(true);
		}
	}

	/** Auto-generated event handler method */
	public void debugToolItemWidgetSelected(SelectionEvent evt) {
		if (evt.detail == SWT.ARROW) {
			Menu menu = new Menu(getShell(), SWT.POP_UP);
			MenuItem mi = new MenuItem(menu, SWT.PUSH);
			mi.setText("Debug...");
			Rectangle b = debugToolItem.getBounds();
			Point pt = new Point(b.x, b.y + b.height);
			pt = debugToolItem.getParent().toDisplay(pt);
			menu.setLocation(pt.x, pt.y);
			menu.setVisible(true);
		}
	}
	
	private void onExit(Event e){
		MessageBox msg = new MessageBox(getShell(), SWT.OK |
SWT.CANCEL|SWT.ICON_QUESTION);
		msg.setText("Question");
		msg.setMessage("Are you sure you want to quit ?");
		if(msg.open() == SWT.OK){
			getShell().dispose();
		}
	}
	
	private void onHelpAbout(Event e){
		char[] str = (" === Dummy Eclipse Sample ===\r\n\r\n");
		str ~= "         Used to test SWT\r\n";
		str ~= "        Author : Shawn Liu\r\n\r\n\r\n";
		str ~= " http://www.dsource.org/projects/SWT     \r\n";
		
		Util.trace(str);

		MessageBox.showMsg(str, ("About DummyEclipse"), getShell());
	}
	
	void onOpenMultiple(Event e){
		auto FileDialog dlg = new FileDialog(getShell(),
SWT.MULTI|SWT.OPEN);
		dlg.setText("Multiple Selection Test");
		char[][] a;
		a ~= "*.txt;*.d";
		a ~= "*.*";
		dlg.setFilterExtensions(a);
		char[] fullpath = dlg.open();
		if(fullpath !is null){
			char[] str = "";
			str ~= fullpath ~"\r\n";
			char[][] names = dlg.getFileNames();
			if(names.length > 1){
				foreach(char[] s; names)
					str ~= s~"\r\n";
			}
			MessageBox.showMsg(str, ("You selected"), getShell());
		}
	}
	
	private void onMenuSelected (SelectionEvent e) {		
		MenuItem w = cast(MenuItem)e.widget;
		assert(w);
		Widget i = e.item;
		if(i !is null)
			Util.trace("e.item is ", i);
			
		char[] text = w.getText() ;
		
		// proccess event by item text
		switch( text ){
			case "Save":		
				auto FileDialog dlg = new FileDialog(getShell());
				char[][] a;
				a ~= "*.txt;*.d";
				a ~= "*.*";
				dlg.setFilterExtensions(a);
				char[] fullpath = dlg.open();
				if(fullpath !is null){
					MessageBox.showMsg(fullpath, ("You selected"), getShell());
				}
				break;
			case "CLOSE":
				break;
			case "ABOUT":
				break;
			default:
				break;
		}
	}


}

/** Auto-generated main method */
void main() {
	try{
		DummyEclipse.showGUI();
	}catch(Object o){
		MessageBox.showMsg(o.toString());
	}
}

[/code]
Help would be much appreciated.

Regards,
Sam
Oct 05 2013
parent reply Jacob Carlborg <doob me.com> writes:
On 2013-10-06 08:35, samhu wrote:
 Greetings!

 I am trying to compile below dummyeclipse project ,but first
 encountered the subjected issue.I knew to form a Image object one
 can use:
 [code]
 Image image=new Image(display,imgfilename);//e.g. smile.jpg
 [/code]
 But I don't know how to load from a resource file(*.res) to form
 a image as used in DWT java:
 [code]
 (new Label).setImage(SWTResourceManager.getImage("PROP_PS",
 GIFFILE));
 [/code]
I really don't see the difference between "SWTResourceManager.getImage" and "new Image". The only thing that SWTResourceManager does in addition is cache the image. SWTResourceManager is not part of standard SWT, it a part of WindowBuilder. You can also port it do D : http://dev.eclipse.org/svnroot/tools/org.eclipse.windowbuilder/trunk/org.eclipse.wb.rcp/resources/1.5/org/eclipse/wb/swt/SWTResourceManager.java -- /Jacob Carlborg
Oct 06 2013
parent reply "samhu" <samhuatgmailnotwork. gmail.com> writes:
On Sunday, 6 October 2013 at 08:52:39 UTC, Jacob Carlborg wrote:
 On 2013-10-06 08:35, samhu wrote:
 Greetings!

 I am trying to compile below dummyeclipse project ,but first
 encountered the subjected issue.I knew to form a Image object 
 one
 can use:
 [code]
 Image image=new Image(display,imgfilename);//e.g. smile.jpg
 [/code]
 But I don't know how to load from a resource file(*.res) to 
 form
 a image as used in DWT java:
 [code]
 (new Label).setImage(SWTResourceManager.getImage("PROP_PS",
 GIFFILE));
 [/code]
I really don't see the difference between "SWTResourceManager.getImage" and "new Image". The only thing that SWTResourceManager does in addition is cache the image. SWTResourceManager is not part of standard SWT, it a part of WindowBuilder. You can also port it do D : http://dev.eclipse.org/svnroot/tools/org.eclipse.windowbuilder/trunk/org.eclipse.wb.rcp/resources/1.5/org/eclipse/wb/swt/SWTResourceManager.java
Sorry.But do you mean with new Image can also work on *.res file? There is only one resource.res file which contains the above mentioned PROP_PS_GIFFILE ,please note there is no somefile.gif or somefile.jpg for the project.
Oct 06 2013
parent reply Jacob Carlborg <doob me.com> writes:
On 2013-10-06 11:46, samhu wrote:

 Sorry.But do you mean with new Image can also work on *.res file?
 There is only one resource.res file which contains the above mentioned
 PROP_PS_GIFFILE ,please note there is no somefile.gif or somefile.jpg
 for the project.
I don't know which SWTResourceManager you're using. I can't find any matching signature for SWTResourceManager.getImage here: http://code.google.com/p/goclipse/source/browse/trunk/goclipse-n/src/org/eclipse/wb/swt/SWTResourceManager.java or here: http://dev.eclipse.org/svnroot/tools/org.eclipse.windowbuilder/trunk/org.eclipse.wb.rcp/resources/1.5/org/eclipse/wb/swt/SWTResourceManager.java -- /Jacob Carlborg
Oct 06 2013
parent reply "samhu" <samhuatgmailnotwork. gmail.com> writes:
On Monday, 7 October 2013 at 06:31:54 UTC, Jacob Carlborg wrote:
 On 2013-10-06 11:46, samhu wrote:

 Sorry.But do you mean with new Image can also work on *.res 
 file?
 There is only one resource.res file which contains the above 
 mentioned
 PROP_PS_GIFFILE ,please note there is no somefile.gif or 
 somefile.jpg
 for the project.
I don't know which SWTResourceManager you're using. I can't find any matching signature for SWTResourceManager.getImage here: http://code.google.com/p/goclipse/source/browse/trunk/goclipse-n/src/org/eclipse/wb/swt/SWTResourceManager.java or here: http://dev.eclipse.org/svnroot/tools/org.eclipse.windowbuilder/trunk/org.eclipse.wb.rcp/resources/1.5/org/eclipse/wb/swt/SWTResourceManager.java
Sorry,It is from internet ,could be someone's own modification version.Thank you so much for the attention.
Oct 07 2013
parent reply Jacob Carlborg <doob me.com> writes:
On 2013-10-07 12:46, samhu wrote:

 Sorry,It is from internet ,could be someone's own modification
 version.Thank you so much for the attention.
You can also port it to D. You're the second person in short time that asks about it. -- /Jacob Carlborg
Oct 07 2013
parent reply Bruno Medeiros <brunodomedeiros+dng gmail.com> writes:
On 07/10/2013 15:57, Jacob Carlborg wrote:
 On 2013-10-07 12:46, samhu wrote:

 Sorry,It is from internet ,could be someone's own modification
 version.Thank you so much for the attention.
You can also port it to D. You're the second person in short time that asks about it.
Samhu, if you're just using SWTResourceManager for resource management (caching, disposal, etc) , does your SWTResourceManager even provide any functionality not covered with the ImageRegistry, FontRegistry, ColorRegistry from JFace? If not, better to use the standard JFace Resource classes, not only they are more standard and up to date code, they are ported in DWT already. -- Bruno Medeiros - Software Engineer
Oct 08 2013
parent reply "samhu" <samhuatgmailnotwork gmail.com> writes:
On Tuesday, 8 October 2013 at 10:10:42 UTC, Bruno Medeiros wrote:
 On 07/10/2013 15:57, Jacob Carlborg wrote:
 On 2013-10-07 12:46, samhu wrote:

 Sorry,It is from internet ,could be someone's own modification
 version.Thank you so much for the attention.
You can also port it to D. You're the second person in short time that asks about it.
Samhu, if you're just using SWTResourceManager for resource management (caching, disposal, etc) , does your SWTResourceManager even provide any functionality not covered with the ImageRegistry, FontRegistry, ColorRegistry from JFace? If not, better to use the standard JFace Resource classes, not only they are more standard and up to date code, they are ported in DWT already.
Sorry is below the right place the JFace for D porting ? [url]https://github.com/search?l=D&q=jface&ref=searchresults&type=Repositories[/url] Seems they are 2 years ago. Thanks and best regards, Sam
Oct 08 2013
parent Jacob Carlborg <doob me.com> writes:
On 2013-10-08 13:26, samhu wrote:

 Sorry is below the right place the JFace for D porting ?
 [url]https://github.com/search?l=D&q=jface&ref=searchresults&type=Repositories[/url]


 Seems they are 2 years ago.
Yeah, the JFace port hasn't really been updated in a quite a while. Any help is welcome :) -- /Jacob Carlborg
Oct 08 2013