# HG changeset patch # User Frank Benoit # Date 1201898786 -3600 # Node ID 052c3aebd1d3b16a78cfe19c14c5b0c0403d0361 initial import diff -r 000000000000 -r 052c3aebd1d3 .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,21 @@ +syntax: glob + +*.a +*.swp + +syntax: regexp + +^dsss_objs +^dsss.last +^dsss_imports +^dwtexamples/simple$ +^dwtexamples/helloworld/HelloWorld1$ +^dwtexamples/helloworld/HelloWorld2$ +^dwtexamples/helloworld/HelloWorld3$ +^dwtexamples/helloworld/HelloWorld4$ +^dwtexamples/helloworld/HelloWorld5$ +^dwtexamples/addressbook/AddressBook$ + + + + diff -r 000000000000 -r 052c3aebd1d3 dsss.conf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dsss.conf Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,25 @@ + +[*] +buildflags+=-g -gc + +[dwtexamples/simple.d] +[dwtexamples/helloworld/HelloWorld1.d] +[dwtexamples/helloworld/HelloWorld2.d] +[dwtexamples/helloworld/HelloWorld3.d] +[dwtexamples/helloworld/HelloWorld4.d] +[dwtexamples/helloworld/HelloWorld5.d] + + +[dwtexamples/addressbook/AddressBook.d] +buildflags+=-g -gc +buildflags+=-Jdwtexamples/addressbook + +[dwtexamples/controlexample/ControlExample.d] +buildflags+=-g -gc +buildflags+=-Jdwtexamples/controlexample +buildflags+=-version=CONTROL_EXAMPLE_MAIN + +[dwtexamples/controlexample/CustomControlExample.d] +buildflags+=-g -gc +buildflags+=-Jdwtexamples/controlexample +buildflags+=-version=CUSTOM_CONTROL_EXAMPLE_MAIN diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/addressbook/AddressBook.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/addressbook/AddressBook.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,908 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.addressbook.AddressBook; + +import dwt.DWT; +import dwt.events.MenuAdapter; +import dwt.events.MenuEvent; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.ShellAdapter; +import dwt.events.ShellEvent; +import dwt.graphics.Cursor; +import dwt.layout.FillLayout; +import dwt.widgets.Display; +import dwt.widgets.FileDialog; +import dwt.widgets.Menu; +import dwt.widgets.MenuItem; +import dwt.widgets.MessageBox; +import dwt.widgets.Shell; +import dwt.widgets.Table; +import dwt.widgets.TableColumn; +import dwt.widgets.TableItem; + +import dwtexamples.addressbook.SearchDialog; +import dwtexamples.addressbook.DataEntryDialog; +import dwtexamples.addressbook.FindListener; + +import dwt.dwthelper.ResourceBundle; + +import tango.core.Exception; +import tango.io.FilePath; +import tango.io.File; +import tango.io.FileConduit; +import tango.io.stream.FileStream; +import TextUtil = tango.text.Util; +import Unicode = tango.text.Unicode; + +/*** Linker workaround start ***/ +import tango.io.Stdout; +import tango.math.Math; +import tango.text.convert.Format; +import tango.util.Convert; +import tango.util.PathUtil; +/*** Linker workaround end ***/ + +void main() { + Display display = new Display(); + auto application = new AddressBook(); + Shell shell = application.open(display); + while(!shell.isDisposed()){ + if(!display.readAndDispatch()){ + display.sleep(); + } + } + display.dispose(); +} + +/** + * AddressBookExample is an example that uses org.eclipse.swt + * libraries to implement a simple address book. This application has + * save, load, sorting, and searching functions common + * to basic address books. + */ +public class AddressBook { + + private static ResourceBundle resAddressBook; + private static const char[] resAddressBookData = cast(char[]) import( "addressbook.properties" ); + private Shell shell; + + private Table table; + private SearchDialog searchDialog; + + private FilePath file; + private bool isModified; + + private char[][] copyBuffer; + + private int lastSortColumn= -1; + + private static const char[] DELIMITER = "\t"; + private static char[][] columnNames; + +public this(){ + if( resAddressBook is null ){ + resAddressBook = ResourceBundle.getBundleFromData(resAddressBookData); + columnNames = [ + resAddressBook.getString("Last_name"), + resAddressBook.getString("First_name"), + resAddressBook.getString("Business_phone"), + resAddressBook.getString("Home_phone"), + resAddressBook.getString("Email"), + resAddressBook.getString("Fax") ]; + } +} + + +public Shell open(Display display) { + shell = new Shell(display); + shell.setLayout(new FillLayout()); + + shell.addShellListener( new class() ShellAdapter { + public void shellClosed(ShellEvent e) { + e.doit = closeAddressBook(); + } + }); + + createMenuBar(); + + searchDialog = new SearchDialog(shell); + searchDialog.setSearchAreaNames(columnNames); + searchDialog.setSearchAreaLabel(resAddressBook.getString("Column")); + searchDialog.addFindListener(new class() FindListener { + public bool find() { + return findEntry(); + } + }); + + table = new Table(shell, DWT.SINGLE | DWT.BORDER | DWT.FULL_SELECTION); + table.setHeaderVisible(true); + table.setMenu(createPopUpMenu()); + table.addSelectionListener(new class() SelectionAdapter { + public void widgetDefaultSelected(SelectionEvent e) { + TableItem[] items = table.getSelection(); + if (items.length > 0) editEntry(items[0]); + } + }); + for(int i = 0; i < columnNames.length; i++) { + TableColumn column = new TableColumn(table, DWT.NONE); + column.setText(columnNames[i]); + column.setWidth(150); + int columnIndex = i; + column.addSelectionListener(new class(columnIndex) SelectionAdapter { + int c; + this( int c ){ this.c = c; } + public void widgetSelected(SelectionEvent e) { + sort(c); + } + }); + } + + newAddressBook(); + + shell.setSize(table.computeSize(DWT.DEFAULT, DWT.DEFAULT).x, 300); + shell.open(); + return shell; +} + +private bool closeAddressBook() { + if(isModified) { + //ask user if they want to save current address book + MessageBox box = new MessageBox(shell, DWT.ICON_WARNING | DWT.YES | DWT.NO | DWT.CANCEL); + box.setText(shell.getText()); + box.setMessage(resAddressBook.getString("Close_save")); + + int choice = box.open(); + if(choice is DWT.CANCEL) { + return false; + } else if(choice is DWT.YES) { + if (!save()) return false; + } + } + + TableItem[] items = table.getItems(); + for (int i = 0; i < items.length; i ++) { + items[i].dispose(); + } + + return true; +} +/** + * Creates the menu at the top of the shell where most + * of the programs functionality is accessed. + * + * @return The Menu widget that was created + */ +private Menu createMenuBar() { + Menu menuBar = new Menu(shell, DWT.BAR); + shell.setMenuBar(menuBar); + + //create each header and subMenu for the menuBar + createFileMenu(menuBar); + createEditMenu(menuBar); + createSearchMenu(menuBar); + createHelpMenu(menuBar); + + return menuBar; +} + +/** + * Converts an encoded char[] to a char[] array representing a table entry. + */ +private char[][] decodeLine(char[] line) { + char[][] toks = TextUtil.split( line, DELIMITER ); + while( toks.length < table.getColumnCount() ){ + toks ~= ""; + } + return toks[ 0 .. table.getColumnCount() ]; +} +private void displayError(char[] msg) { + MessageBox box = new MessageBox(shell, DWT.ICON_ERROR); + box.setMessage(msg); + box.open(); +} +private void editEntry(TableItem item) { + DataEntryDialog dialog = new DataEntryDialog(shell); + dialog.setLabels(columnNames); + char[][] values = new char[][table.getColumnCount()]; + for (int i = 0; i < values.length; i++) { + values[i] = item.getText(i); + } + dialog.setValues(values); + values = dialog.open(); + if (values !is null) { + item.setText(values); + isModified = true; + } +} +private char[] encodeLine(char[][] tableItems) { + char[] line = ""; + for (int i = 0; i < tableItems.length - 1; i++) { + line ~= tableItems[i] ~ DELIMITER; + } + line ~= tableItems[tableItems.length - 1] ~ "\n"; + + return line; +} +private bool findEntry() { + Cursor waitCursor = new Cursor(shell.getDisplay(), DWT.CURSOR_WAIT); + shell.setCursor(waitCursor); + + bool matchCase = searchDialog.getMatchCase(); + bool matchWord = searchDialog.getMatchWord(); + char[] searchString = searchDialog.getSearchString(); + int column = searchDialog.getSelectedSearchArea(); + + searchString = matchCase ? searchString : Unicode.toLower( searchString ); + + bool found = false; + if (searchDialog.getSearchDown()) { + for(int i = table.getSelectionIndex() + 1; i < table.getItemCount(); i++) { + found = findMatch(searchString, table.getItem(i), column, matchWord, matchCase); + if ( found ){ + table.setSelection(i); + break; + } + } + } else { + for(int i = table.getSelectionIndex() - 1; i > -1; i--) { + found = findMatch(searchString, table.getItem(i), column, matchWord, matchCase); + if ( found ){ + table.setSelection(i); + break; + } + } + } + + shell.setCursor(cast(Cursor)null); + waitCursor.dispose(); + + return found; +} +private bool findMatch(char[] searchString, TableItem item, int column, bool matchWord, bool matchCase) { + + char[] tableText = matchCase ? item.getText(column) : Unicode.toLower( item.getText(column)); + if (matchWord) { + if (tableText !is null && tableText==searchString) { + return true; + } + + } else { + if(tableText!is null && TextUtil.containsPattern( tableText, searchString)) { + return true; + } + } + return false; +} +private void newAddressBook() { + shell.setText(resAddressBook.getString("Title_bar") ~ resAddressBook.getString("New_title")); + *(cast(Object*)&file) = null; + ///cast(Object)file = null; + isModified = false; +} +private void newEntry() { + DataEntryDialog dialog = new DataEntryDialog(shell); + dialog.setLabels(columnNames); + char[][] data = dialog.open(); + if (data !is null) { + TableItem item = new TableItem(table, DWT.NONE); + item.setText(data); + isModified = true; + } +} + +private void openAddressBook() { + FileDialog fileDialog = new FileDialog(shell, DWT.OPEN); + + fileDialog.setFilterExtensions(["*.adr;", "*.*"]); + fileDialog.setFilterNames([ + resAddressBook.getString("Book_filter_name") ~ " (*.adr)", + resAddressBook.getString("All_filter_name") ~ " (*.*)"]); + char[] name = fileDialog.open(); + + if(name is null) return; + FilePath file = new FilePath(name); + if (!file.exists()) { + displayError(resAddressBook.getString("File")~file.toString()~" "~resAddressBook.getString("Does_not_exist")); + return; + } + + Cursor waitCursor = new Cursor(shell.getDisplay(), DWT.CURSOR_WAIT); + shell.setCursor(waitCursor); + + char[][] data; + try { + scope ioFile = new File (file); + data = TextUtil.splitLines (cast(char[]) ioFile.read); + } catch (IOException e ) { + displayError(resAddressBook.getString("IO_error_read") ~ "\n" ~ file.toString()); + return; + } finally { + + shell.setCursor(cast(Cursor)null); + waitCursor.dispose(); + } + + char[][][] tableInfo = new char[][][](data.length,table.getColumnCount()); + foreach( idx, line; data ){ + char[][] linetoks = decodeLine(line); + tableInfo[ idx ] = linetoks; + } + /+ + int writeIndex = 0; + for (int i = 0; i < data.length; i++) { + char[][] line = decodeLine(data[i]); + if (line !is null) tableInfo[writeIndex++] = line; + } + if (writeIndex !is data.length) { + char[][][] result = new char[][writeIndex][table.getColumnCount()]; + System.arraycopy(tableInfo, 0, result, 0, writeIndex); + tableInfo = result; + } + +/ + tango.core.Array.sort( tableInfo, new RowComparator(0)); + + for (int i = 0; i < tableInfo.length; i++) { + TableItem item = new TableItem(table, DWT.NONE); + item.setText(tableInfo[i]); + } + shell.setText(resAddressBook.getString("Title_bar")~fileDialog.getFileName()); + isModified = false; + this.file = file; +} +private bool save() { + if(file is null) return saveAs(); + + Cursor waitCursor = new Cursor(shell.getDisplay(), DWT.CURSOR_WAIT); + shell.setCursor(waitCursor); + + TableItem[] items = table.getItems(); + char[][] lines = new char[][items.length]; + for(int i = 0; i < items.length; i++) { + char[][] itemText = new char[][table.getColumnCount()]; + for (int j = 0; j < itemText.length; j++) { + itemText[j] = items[i].getText(j); + } + lines[i] = encodeLine(itemText); + } + + FileOutput fileOutput; + bool result = true; + try { + fileOutput = new FileOutput( file.toString ); + for (int i = 0; i < lines.length; i++) { + fileOutput.write(lines[i]); + } + } catch(IOException e ) { + displayError(resAddressBook.getString("IO_error_write") ~ "\n" ~ file.toString()); + result = false; + } catch(TracedException e2 ) { + displayError(resAddressBook.getString("error_write") ~ "\n" ~ e2.toString()); + result = false; + } finally { + shell.setCursor(null); + waitCursor.dispose(); + + } + + if(fileOutput !is null) { + try { + fileOutput.close(); + } catch(IOException e) { + displayError(resAddressBook.getString("IO_error_close") ~ "\n" ~ file.toString()); + return false; + } + } + if( !result ){ + return false; + } + + shell.setText(resAddressBook.getString("Title_bar")~file.toString()); + isModified = false; + return true; +} +private bool saveAs() { + + FileDialog saveDialog = new FileDialog(shell, DWT.SAVE); + saveDialog.setFilterExtensions(["*.adr;", "*.*"]); + saveDialog.setFilterNames(["Address Books (*.adr)", "All Files "]); + + saveDialog.open(); + char[] name = saveDialog.getFileName(); + if(!name) return false; + + if( TextUtil.locatePatternPrior( name, ".adr" ) !is name.length - 4) { + name ~= ".adr"; + } + + FilePath file = new FilePath(saveDialog.getFilterPath() ); + file.append( name ); + if(file.exists()) { + MessageBox box = new MessageBox(shell, DWT.ICON_WARNING | DWT.YES | DWT.NO); + box.setText(resAddressBook.getString("Save_as_title")); + box.setMessage(resAddressBook.getString("File") ~ file.toString()~" "~resAddressBook.getString("Query_overwrite")); + if(box.open() !is DWT.YES) { + return false; + } + } + this.file = file; + return save(); +} +private void sort(int column) { + if(table.getItemCount() <= 1) return; + + TableItem[] items = table.getItems(); + char[][][] data = new char[][][](items.length, table.getColumnCount()); + for(int i = 0; i < items.length; i++) { + for(int j = 0; j < table.getColumnCount(); j++) { + data[i][j] = items[i].getText(j); + } + } + + tango.core.Array.sort(data, new RowComparator(column)); + + if (lastSortColumn !is column) { + table.setSortColumn(table.getColumn(column)); + table.setSortDirection(DWT.DOWN); + for (int i = 0; i < data.length; i++) { + items[i].setText(data[i]); + } + lastSortColumn = column; + } else { + // reverse order if the current column is selected again + table.setSortDirection(DWT.UP); + int j = data.length -1; + for (int i = 0; i < data.length; i++) { + items[i].setText(data[j--]); + } + lastSortColumn = -1; + } + +} +/** + * Creates all the items located in the File submenu and + * associate all the menu items with their appropriate + * functions. + * + * @param menuBar Menu + * the Menu that file contain + * the File submenu. + */ +private void createFileMenu(Menu menuBar) { + //File menu. + MenuItem item = new MenuItem(menuBar, DWT.CASCADE); + item.setText(resAddressBook.getString("File_menu_title")); + Menu menu = new Menu(shell, DWT.DROP_DOWN); + item.setMenu(menu); + /** + * Adds a listener to handle enabling and disabling + * some items in the Edit submenu. + */ + menu.addMenuListener(new class() MenuAdapter { + public void menuShown(MenuEvent e) { + Menu menu = cast(Menu)e.widget; + MenuItem[] items = menu.getItems(); + items[1].setEnabled(table.getSelectionCount() !is 0); // edit contact + items[5].setEnabled((file !is null) && isModified); // save + items[6].setEnabled(table.getItemCount() !is 0); // save as + } + }); + + + //File -> New Contact + MenuItem subItem = new MenuItem(menu, DWT.NONE); + subItem.setText(resAddressBook.getString("New_contact")); + subItem.setAccelerator(DWT.MOD1 + 'N'); + subItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + newEntry(); + } + }); + subItem = new MenuItem(menu, DWT.NONE); + subItem.setText(resAddressBook.getString("Edit_contact")); + subItem.setAccelerator(DWT.MOD1 + 'E'); + subItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + TableItem[] items = table.getSelection(); + if (items.length is 0) return; + editEntry(items[0]); + } + }); + + + new MenuItem(menu, DWT.SEPARATOR); + + //File -> New Address Book + subItem = new MenuItem(menu, DWT.NONE); + subItem.setText(resAddressBook.getString("New_address_book")); + subItem.setAccelerator(DWT.MOD1 + 'B'); + subItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + if (closeAddressBook()) { + newAddressBook(); + } + } + }); + + //File -> Open + subItem = new MenuItem(menu, DWT.NONE); + subItem.setText(resAddressBook.getString("Open_address_book")); + subItem.setAccelerator(DWT.MOD1 + 'O'); + subItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + if (closeAddressBook()) { + openAddressBook(); + } + } + }); + + //File -> Save. + subItem = new MenuItem(menu, DWT.NONE); + subItem.setText(resAddressBook.getString("Save_address_book")); + subItem.setAccelerator(DWT.MOD1 + 'S'); + subItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + save(); + } + }); + + //File -> Save As. + subItem = new MenuItem(menu, DWT.NONE); + subItem.setText(resAddressBook.getString("Save_book_as")); + subItem.setAccelerator(DWT.MOD1 + 'A'); + subItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + saveAs(); + } + }); + + + new MenuItem(menu, DWT.SEPARATOR); + + //File -> Exit. + subItem = new MenuItem(menu, DWT.NONE); + subItem.setText(resAddressBook.getString("Exit")); + subItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + shell.close(); + } + }); +} + +/** + * Creates all the items located in the Edit submenu and + * associate all the menu items with their appropriate + * functions. + * + * @param menuBar Menu + * the Menu that file contain + * the Edit submenu. + * + * @see #createSortMenu() + */ +private MenuItem createEditMenu(Menu menuBar) { + //Edit menu. + MenuItem item = new MenuItem(menuBar, DWT.CASCADE); + item.setText(resAddressBook.getString("Edit_menu_title")); + Menu menu = new Menu(shell, DWT.DROP_DOWN); + item.setMenu(menu); + + /** + * Add a listener to handle enabling and disabling + * some items in the Edit submenu. + */ + menu.addMenuListener(new class() MenuAdapter { + public void menuShown(MenuEvent e) { + Menu menu = cast(Menu)e.widget; + MenuItem[] items = menu.getItems(); + int count = table.getSelectionCount(); + items[0].setEnabled(count !is 0); // edit + items[1].setEnabled(count !is 0); // copy + items[2].setEnabled(copyBuffer !is null); // paste + items[3].setEnabled(count !is 0); // delete + items[5].setEnabled(table.getItemCount() !is 0); // sort + } + }); + + //Edit -> Edit + MenuItem subItem = new MenuItem(menu, DWT.PUSH); + subItem.setText(resAddressBook.getString("Edit")); + subItem.setAccelerator(DWT.MOD1 + 'E'); + subItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + TableItem[] items = table.getSelection(); + if (items.length is 0) return; + editEntry(items[0]); + } + }); + + //Edit -> Copy + subItem = new MenuItem(menu, DWT.NONE); + subItem.setText(resAddressBook.getString("Copy")); + subItem.setAccelerator(DWT.MOD1 + 'C'); + subItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + TableItem[] items = table.getSelection(); + if (items.length is 0) return; + copyBuffer = new char[][table.getColumnCount()]; + for (int i = 0; i < copyBuffer.length; i++) { + copyBuffer[i] = items[0].getText(i); + } + } + }); + + //Edit -> Paste + subItem = new MenuItem(menu, DWT.NONE); + subItem.setText(resAddressBook.getString("Paste")); + subItem.setAccelerator(DWT.MOD1 + 'V'); + subItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + if (copyBuffer is null) return; + TableItem item = new TableItem(table, DWT.NONE); + item.setText(copyBuffer); + isModified = true; + } + }); + + //Edit -> Delete + subItem = new MenuItem(menu, DWT.NONE); + subItem.setText(resAddressBook.getString("Delete")); + subItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + TableItem[] items = table.getSelection(); + if (items.length is 0) return; + items[0].dispose(); + isModified = true; } + }); + + new MenuItem(menu, DWT.SEPARATOR); + + //Edit -> Sort(Cascade) + subItem = new MenuItem(menu, DWT.CASCADE); + subItem.setText(resAddressBook.getString("Sort")); + Menu submenu = createSortMenu(); + subItem.setMenu(submenu); + + return item; + +} + +/** + * Creates all the items located in the Sort cascading submenu and + * associate all the menu items with their appropriate + * functions. + * + * @return Menu + * The cascading menu with all the sort menu items on it. + */ +private Menu createSortMenu() { + Menu submenu = new Menu(shell, DWT.DROP_DOWN); + MenuItem subitem; + for(int i = 0; i < columnNames.length; i++) { + subitem = new MenuItem (submenu, DWT.NONE); + subitem.setText(columnNames [i]); + int column = i; + subitem.addSelectionListener(new class(column) SelectionAdapter { + int c; + this(int c){ this.c = c; } + public void widgetSelected(SelectionEvent e) { + sort(c); + } + }); + } + + return submenu; +} + +/** + * Creates all the items located in the Search submenu and + * associate all the menu items with their appropriate + * functions. + * + * @param menuBar Menu + * the Menu that file contain + * the Search submenu. + */ +private void createSearchMenu(Menu menuBar) { + //Search menu. + MenuItem item = new MenuItem(menuBar, DWT.CASCADE); + item.setText(resAddressBook.getString("Search_menu_title")); + Menu searchMenu = new Menu(shell, DWT.DROP_DOWN); + item.setMenu(searchMenu); + + //Search -> Find... + item = new MenuItem(searchMenu, DWT.NONE); + item.setText(resAddressBook.getString("Find")); + item.setAccelerator(DWT.MOD1 + 'F'); + item.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + searchDialog.setMatchCase(false); + searchDialog.setMatchWord(false); + searchDialog.setSearchDown(true); + searchDialog.setSearchString(""); + searchDialog.setSelectedSearchArea(0); + searchDialog.open(); + } + }); + + //Search -> Find Next + item = new MenuItem(searchMenu, DWT.NONE); + item.setText(resAddressBook.getString("Find_next")); + item.setAccelerator(DWT.F3); + item.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + searchDialog.open(); + } + }); +} + +/** + * Creates all items located in the popup menu and associates + * all the menu items with their appropriate functions. + * + * @return Menu + * The created popup menu. + */ +private Menu createPopUpMenu() { + Menu popUpMenu = new Menu(shell, DWT.POP_UP); + + /** + * Adds a listener to handle enabling and disabling + * some items in the Edit submenu. + */ + popUpMenu.addMenuListener(new class() MenuAdapter { + public void menuShown(MenuEvent e) { + Menu menu = cast(Menu)e.widget; + MenuItem[] items = menu.getItems(); + int count = table.getSelectionCount(); + items[2].setEnabled(count !is 0); // edit + items[3].setEnabled(count !is 0); // copy + items[4].setEnabled(copyBuffer !is null); // paste + items[5].setEnabled(count !is 0); // delete + items[7].setEnabled(table.getItemCount() !is 0); // find + } + }); + + //New + MenuItem item = new MenuItem(popUpMenu, DWT.PUSH); + item.setText(resAddressBook.getString("Pop_up_new")); + item.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + newEntry(); + } + }); + + new MenuItem(popUpMenu, DWT.SEPARATOR); + + //Edit + item = new MenuItem(popUpMenu, DWT.PUSH); + item.setText(resAddressBook.getString("Pop_up_edit")); + item.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + TableItem[] items = table.getSelection(); + if (items.length is 0) return; + editEntry(items[0]); + } + }); + + //Copy + item = new MenuItem(popUpMenu, DWT.PUSH); + item.setText(resAddressBook.getString("Pop_up_copy")); + item.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + TableItem[] items = table.getSelection(); + if (items.length is 0) return; + copyBuffer = new char[][table.getColumnCount()]; + for (int i = 0; i < copyBuffer.length; i++) { + copyBuffer[i] = items[0].getText(i); + } + } + }); + + //Paste + item = new MenuItem(popUpMenu, DWT.PUSH); + item.setText(resAddressBook.getString("Pop_up_paste")); + item.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + if (copyBuffer is null) return; + TableItem item = new TableItem(table, DWT.NONE); + item.setText(copyBuffer); + isModified = true; + } + }); + + //Delete + item = new MenuItem(popUpMenu, DWT.PUSH); + item.setText(resAddressBook.getString("Pop_up_delete")); + item.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + TableItem[] items = table.getSelection(); + if (items.length is 0) return; + items[0].dispose(); + isModified = true; + } + }); + + new MenuItem(popUpMenu, DWT.SEPARATOR); + + //Find... + item = new MenuItem(popUpMenu, DWT.PUSH); + item.setText(resAddressBook.getString("Pop_up_find")); + item.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + searchDialog.open(); + } + }); + + return popUpMenu; +} + +/** + * Creates all the items located in the Help submenu and + * associate all the menu items with their appropriate + * functions. + * + * @param menuBar Menu + * the Menu that file contain + * the Help submenu. + */ +private void createHelpMenu(Menu menuBar) { + + //Help Menu + MenuItem item = new MenuItem(menuBar, DWT.CASCADE); + item.setText(resAddressBook.getString("Help_menu_title")); + Menu menu = new Menu(shell, DWT.DROP_DOWN); + item.setMenu(menu); + + //Help -> About Text Editor + MenuItem subItem = new MenuItem(menu, DWT.NONE); + subItem.setText(resAddressBook.getString("About")); + subItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + MessageBox box = new MessageBox(shell, DWT.NONE); + box.setText(resAddressBook.getString("About_1") ~ shell.getText()); + box.setMessage(shell.getText() ~ resAddressBook.getString("About_2")); + box.open(); + } + }); +} + + +/** + * To compare entries (rows) by the given column + */ +private class RowComparator /*: Comparator*/ { + private int column; + + /** + * Constructs a RowComparator given the column index + * @param col The index (starting at zero) of the column + */ + public this(int col) { + column = col; + } + + /** + * Compares two rows (type char[][]) using the specified + * column entry. + * @param obj1 First row to compare + * @param obj2 Second row to compare + * @return negative if obj1 less than obj2, positive if + * obj1 greater than obj2, and zero if equal. + */ + public bool compare(char[][] row1, char[][] row2) { + return row1[column] < row2[column]; + } + + alias compare opCall; +} + +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/addressbook/DataEntryDialog.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/addressbook/DataEntryDialog.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,177 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.addressbook.DataEntryDialog; + +import dwt.DWT; +import dwt.events.ModifyEvent; +import dwt.events.ModifyListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Composite; +import dwt.widgets.Display; +import dwt.widgets.Label; +import dwt.widgets.Shell; +import dwt.widgets.Text; + +import dwt.dwthelper.ResourceBundle; +import dwt.dwthelper.Integer; + +/** + * DataEntryDialog class uses org.eclipse.swt + * libraries to implement a dialog that accepts basic personal information that + * is added to a Table widget or edits a TableItem entry + * to represent the entered data. + */ +public class DataEntryDialog { + + private static ResourceBundle resAddressBook; + + Shell shell; + char[][] values; + char[][] labels; + +public this(Shell parent) { + if( resAddressBook is null ){ + resAddressBook = ResourceBundle.getBundle("examples_addressbook"); + } + shell = new Shell(parent, DWT.DIALOG_TRIM | DWT.PRIMARY_MODAL); + shell.setLayout(new GridLayout()); +} + +private void addTextListener(Text text) { + text.addModifyListener(new class(text) ModifyListener { + Text text; + this( Text text ){ this.text = text; } + public void modifyText(ModifyEvent e){ + Integer index = cast(Integer)(this.text.getData("index")); + values[index.intValue()] = this.text.getText(); + } + }); +} +private void createControlButtons() { + Composite composite = new Composite(shell, DWT.NONE); + composite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER)); + GridLayout layout = new GridLayout(); + layout.numColumns = 2; + composite.setLayout(layout); + + Button okButton = new Button(composite, DWT.PUSH); + okButton.setText(resAddressBook.getString("OK")); + okButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + shell.close(); + } + }); + + Button cancelButton = new Button(composite, DWT.PUSH); + cancelButton.setText(resAddressBook.getString("Cancel")); + cancelButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + values = null; + shell.close(); + } + }); + + shell.setDefaultButton(okButton); +} + +private void createTextWidgets() { + if (labels is null) return; + + Composite composite = new Composite(shell, DWT.NONE); + composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + GridLayout layout= new GridLayout(); + layout.numColumns = 2; + composite.setLayout(layout); + + if (values is null) + values = new char[][labels.length]; + + for (int i = 0; i < labels.length; i++) { + Label label = new Label(composite, DWT.RIGHT); + label.setText(labels[i]); + Text text = new Text(composite, DWT.BORDER); + GridData gridData = new GridData(); + gridData.widthHint = 400; + text.setLayoutData(gridData); + if (values[i] !is null) { + text.setText(values[i]); + } + text.setData("index", new Integer(i)); + addTextListener(text); + } +} + +public char[][] getLabels() { + return labels; +} +public char[] getTitle() { + return shell.getText(); +} +/** + * Returns the contents of the Text widgets in the dialog in a + * char[] array. + * + * @return char[][] + * The contents of the text widgets of the dialog. + * May return null if all text widgets are empty. + */ +public char[][] getValues() { + return values; +} +/** + * Opens the dialog in the given state. Sets Text widget contents + * and dialog behaviour accordingly. + * + * @param dialogState int + * The state the dialog should be opened in. + */ +public char[][] open() { + createTextWidgets(); + createControlButtons(); + shell.pack(); + shell.open(); + Display display = shell.getDisplay(); + while(!shell.isDisposed()){ + if(!display.readAndDispatch()) + display.sleep(); + } + + return getValues(); +} +public void setLabels(char[][] labels) { + this.labels = labels; +} +public void setTitle(char[] title) { + shell.setText(title); +} +/** + * Sets the values of the Text widgets of the dialog to + * the values supplied in the parameter array. + * + * @param itemInfo char[][] + * The values to which the dialog contents will be set. + */ +public void setValues(char[][] itemInfo) { + if (labels is null) return; + + if (values is null) + values = new char[][labels.length]; + + int numItems = Math.min(values.length, itemInfo.length); + for(int i = 0; i < numItems; i++) { + values[i] = itemInfo[i]; + } +} +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/addressbook/FindListener.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/addressbook/FindListener.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,18 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.addressbook.FindListener; + + +public interface FindListener { + +public bool find(); + +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/addressbook/SearchDialog.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/addressbook/SearchDialog.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,221 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.addressbook.SearchDialog; + + +import dwt.DWT; +import dwt.events.ModifyEvent; +import dwt.events.ModifyListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.ShellAdapter; +import dwt.events.ShellEvent; +import dwt.layout.FillLayout; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Combo; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.Label; +import dwt.widgets.MessageBox; +import dwt.widgets.Shell; +import dwt.widgets.Text; + +import dwtexamples.addressbook.FindListener; + +import dwt.dwthelper.ResourceBundle; + +/** + * SearchDialog is a simple class that uses org.eclipse.swt + * libraries to implement a basic search dialog. + */ +public class SearchDialog { + + private static ResourceBundle resAddressBook; + + Shell shell; + Text searchText; + Combo searchArea; + Label searchAreaLabel; + Button matchCase; + Button matchWord; + Button findButton; + Button down; + FindListener findHandler; + +/** + * Class constructor that sets the parent shell and the table widget that + * the dialog will search. + * + * @param parent Shell + * The shell that is the parent of the dialog. + */ +public this(Shell parent) { + if( resAddressBook is null ){ + resAddressBook = ResourceBundle.getBundle("examples_addressbook"); + } + shell = new Shell(parent, DWT.CLOSE | DWT.BORDER | DWT.TITLE); + GridLayout layout = new GridLayout(); + layout.numColumns = 2; + shell.setLayout(layout); + shell.setText(resAddressBook.getString("Search_dialog_title")); + shell.addShellListener(new class() ShellAdapter{ + public void shellClosed(ShellEvent e) { + // don't dispose of the shell, just hide it for later use + e.doit = false; + shell.setVisible(false); + } + }); + + Label label = new Label(shell, DWT.LEFT); + label.setText(resAddressBook.getString("Dialog_find_what")); + searchText = new Text(shell, DWT.BORDER); + GridData gridData = new GridData(GridData.FILL_HORIZONTAL); + gridData.widthHint = 200; + searchText.setLayoutData(gridData); + searchText.addModifyListener(new class() ModifyListener { + public void modifyText(ModifyEvent e) { + bool enableFind = (searchText.getCharCount() !is 0); + findButton.setEnabled(enableFind); + } + }); + + searchAreaLabel = new Label(shell, DWT.LEFT); + searchArea = new Combo(shell, DWT.DROP_DOWN | DWT.READ_ONLY); + gridData = new GridData(GridData.FILL_HORIZONTAL); + gridData.widthHint = 200; + searchArea.setLayoutData(gridData); + + matchCase = new Button(shell, DWT.CHECK); + matchCase.setText(resAddressBook.getString("Dialog_match_case")); + gridData = new GridData(); + gridData.horizontalSpan = 2; + matchCase.setLayoutData(gridData); + + matchWord = new Button(shell, DWT.CHECK); + matchWord.setText(resAddressBook.getString("Dialog_match_word")); + gridData = new GridData(); + gridData.horizontalSpan = 2; + matchWord.setLayoutData(gridData); + + Group direction = new Group(shell, DWT.NONE); + gridData = new GridData(); + gridData.horizontalSpan = 2; + direction.setLayoutData(gridData); + direction.setLayout (new FillLayout ()); + direction.setText(resAddressBook.getString("Dialog_direction")); + + Button up = new Button(direction, DWT.RADIO); + up.setText(resAddressBook.getString("Dialog_dir_up")); + up.setSelection(false); + + down = new Button(direction, DWT.RADIO); + down.setText(resAddressBook.getString("Dialog_dir_down")); + down.setSelection(true); + + Composite composite = new Composite(shell, DWT.NONE); + gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + gridData.horizontalSpan = 2; + composite.setLayoutData(gridData); + layout = new GridLayout(); + layout.numColumns = 2; + layout.makeColumnsEqualWidth = true; + composite.setLayout(layout); + + findButton = new Button(composite, DWT.PUSH); + findButton.setText(resAddressBook.getString("Dialog_find")); + findButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); + findButton.setEnabled(false); + findButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + if (!findHandler.find()){ + MessageBox box = new MessageBox(shell, DWT.ICON_INFORMATION | DWT.OK | DWT.PRIMARY_MODAL); + box.setText(shell.getText()); + box.setMessage(resAddressBook.getString("Cannot_find") ~ "\"" ~ searchText.getText() ~ "\""); + box.open(); + } + } + }); + + Button cancelButton = new Button(composite, DWT.PUSH); + cancelButton.setText(resAddressBook.getString("Cancel")); + cancelButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); + cancelButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + shell.setVisible(false); + } + }); + + shell.pack(); +} +public char[] getSearchAreaLabel(char[] label) { + return searchAreaLabel.getText(); +} + +public char[][] getsearchAreaNames() { + return searchArea.getItems(); +} +public bool getMatchCase() { + return matchCase.getSelection(); +} +public bool getMatchWord() { + return matchWord.getSelection(); +} +public char[] getSearchString() { + return searchText.getText(); +} +public bool getSearchDown(){ + return down.getSelection(); +} +public int getSelectedSearchArea() { + return searchArea.getSelectionIndex(); +} +public void open() { + if (shell.isVisible()) { + shell.setFocus(); + } else { + shell.open(); + } + searchText.setFocus(); +} +public void setSearchAreaNames(char[][] names) { + for (int i = 0; i < names.length; i++) { + searchArea.add(names[i]); + } + searchArea.select(0); +} +public void setSearchAreaLabel(char[] label) { + searchAreaLabel.setText(label); +} +public void setMatchCase(bool match) { + matchCase.setSelection(match); +} +public void setMatchWord(bool match) { + matchWord.setSelection(match); +} +public void setSearchDown(bool searchDown){ + down.setSelection(searchDown); +} +public void setSearchString(char[] searchString) { + searchText.setText(searchString); +} + +public void setSelectedSearchArea(int index) { + searchArea.select(index); +} +public void addFindListener(FindListener listener) { + this.findHandler = listener; +} +public void removeFindListener(FindListener listener) { + this.findHandler = null; +} +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/addressbook/addressbook.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/addressbook/addressbook.properties Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,69 @@ +############################################################################### +# Copyright (c) 2000, 2003 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +Last_name = Last Name +First_name = First Name +Business_phone = Business Phone +Home_phone = Home Phone +Email = Email +Fax = Fax +Close_save = The address book contents have changed.\nDo you want to save the changes? +New_title = Untitled +Column = Column: +Book_extension = .adr +Book_filter_name = Address Books +All_filter_name = All Files +File = File +Does_not_exist = does not exist. +File_not_found = File not found: +IO_error_read = IO error reading text file: +IO_error_write = IO error writing text file: +IO_error_close = IO error closing text file: +Title_bar = Address Book - +Save_as_title = Save As +Query_overwrite = already exists.\nDo you want to replace it? +File_menu_title = &File +New_contact = &New Contact...\tCtrl+N +Edit_contact = &Edit Contact...\tCtrl+E +New_address_book = New Address &Book\tCtrl+B +Open_address_book = &Open Address Book...\tCtrl+O +Save_address_book = &Save Address Book\tCtrl+S +Save_book_as = Save &Address Book As...\tCtrl+A +Exit = E&xit +Edit_menu_title = &Edit +Edit = &Edit...\tCtrl+E +Copy = &Copy\tCtrl+C +Paste = &Paste\tCtrl+V +Delete = De&lete\tDel +Sort = &Sort +Search_menu_title = &Search +Find = &Find...\tCtrl+F +Find_next = Find &Next...\tF3 +Pop_up_new = &New... +Pop_up_edit = &Edit... +Pop_up_copy = &Copy +Pop_up_paste = &Paste +Pop_up_delete = &Delete +Pop_up_find = &Find... +Help_menu_title = &Help +About = &About Address Book... +About_1 = About +About_2 = \nversion 1.0 +OK = OK +Cancel = Cancel +Search_dialog_title = Find +Dialog_find_what = Fi&nd what: +Dialog_match_case = Match &case +Dialog_match_word = Match &whole word +Dialog_direction = Direction +Dialog_dir_up = &Up +Dialog_dir_down = &Down +Dialog_find = &Find +Cannot_find = Cannot find \ No newline at end of file diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/AlignableTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/AlignableTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,100 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.AlignableTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + +/** + * AlignableTab is the abstract + * superclass of example controls that can be + * aligned. + */ +abstract class AlignableTab : Tab { + + /* Alignment Controls */ + Button leftButton, rightButton, centerButton; + + /* Alignment Group */ + Group alignmentGroup; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Other" group. + */ + void createOtherGroup () { + super.createOtherGroup (); + + /* Create the group */ + alignmentGroup = new Group (otherGroup, DWT.NONE); + alignmentGroup.setLayout (new GridLayout ()); + alignmentGroup.setLayoutData (new GridData(GridData.HORIZONTAL_ALIGN_FILL | + GridData.VERTICAL_ALIGN_FILL)); + alignmentGroup.setText (ControlExample.getResourceString("Alignment")); + + /* Create the controls */ + leftButton = new Button (alignmentGroup, DWT.RADIO); + leftButton.setText (ControlExample.getResourceString("Left")); + centerButton = new Button (alignmentGroup, DWT.RADIO); + centerButton.setText(ControlExample.getResourceString("Center")); + rightButton = new Button (alignmentGroup, DWT.RADIO); + rightButton.setText (ControlExample.getResourceString("Right")); + + /* Add the listeners */ + SelectionListener selectionListener = new class() SelectionAdapter { + public void widgetSelected(SelectionEvent event) { + if (!(cast(Button) event.widget).getSelection ()) return; + setExampleWidgetAlignment (); + } + }; + leftButton.addSelectionListener (selectionListener); + centerButton.addSelectionListener (selectionListener); + rightButton.addSelectionListener (selectionListener); + } + + /** + * Sets the alignment of the "Example" widgets. + */ + abstract void setExampleWidgetAlignment (); + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + Widget [] widgets = getExampleWidgets (); + if (widgets.length !is 0) { + leftButton.setSelection ((widgets [0].getStyle () & DWT.LEFT) !is 0); + centerButton.setSelection ((widgets [0].getStyle () & DWT.CENTER) !is 0); + rightButton.setSelection ((widgets [0].getStyle () & DWT.RIGHT) !is 0); + } + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/ButtonTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ButtonTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,244 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.ButtonTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.AlignableTab; +import dwtexamples.controlexample.ControlExample; + +/** + * ButtonTab is the class that + * demonstrates DWT buttons. + */ +class ButtonTab : AlignableTab { + + /* Example widgets and groups that contain them */ + Button button1, button2, button3, button4, button5, button6, button7, button8, button9; + Group textButtonGroup, imageButtonGroup, imagetextButtonGroup; + + /* Alignment widgets added to the "Control" group */ + Button upButton, downButton; + + /* Style widgets added to the "Style" group */ + Button pushButton, checkButton, radioButton, toggleButton, arrowButton, flatButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Control" group. + */ + void createControlGroup () { + super.createControlGroup (); + + /* Create the controls */ + upButton = new Button (alignmentGroup, DWT.RADIO); + upButton.setText (ControlExample.getResourceString("Up")); + downButton = new Button (alignmentGroup, DWT.RADIO); + downButton.setText (ControlExample.getResourceString("Down")); + + /* Add the listeners */ + SelectionListener selectionListener = new class() SelectionAdapter { + public void widgetSelected(SelectionEvent event) { + if (!(cast(Button) event.widget).getSelection()) return; + setExampleWidgetAlignment (); + } + }; + upButton.addSelectionListener(selectionListener); + downButton.addSelectionListener(selectionListener); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for text buttons */ + textButtonGroup = new Group(exampleGroup, DWT.NONE); + GridLayout gridLayout = new GridLayout (); + textButtonGroup.setLayout(gridLayout); + gridLayout.numColumns = 3; + textButtonGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + textButtonGroup.setText (ControlExample.getResourceString("Text_Buttons")); + + /* Create a group for the image buttons */ + imageButtonGroup = new Group(exampleGroup, DWT.NONE); + gridLayout = new GridLayout(); + imageButtonGroup.setLayout(gridLayout); + gridLayout.numColumns = 3; + imageButtonGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + imageButtonGroup.setText (ControlExample.getResourceString("Image_Buttons")); + + /* Create a group for the image and text buttons */ + imagetextButtonGroup = new Group(exampleGroup, DWT.NONE); + gridLayout = new GridLayout(); + imagetextButtonGroup.setLayout(gridLayout); + gridLayout.numColumns = 3; + imagetextButtonGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + imagetextButtonGroup.setText (ControlExample.getResourceString("Image_Text_Buttons")); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (pushButton.getSelection()) style |= DWT.PUSH; + if (checkButton.getSelection()) style |= DWT.CHECK; + if (radioButton.getSelection()) style |= DWT.RADIO; + if (toggleButton.getSelection()) style |= DWT.TOGGLE; + if (flatButton.getSelection()) style |= DWT.FLAT; + if (borderButton.getSelection()) style |= DWT.BORDER; + if (leftButton.getSelection()) style |= DWT.LEFT; + if (rightButton.getSelection()) style |= DWT.RIGHT; + if (arrowButton.getSelection()) { + style |= DWT.ARROW; + if (upButton.getSelection()) style |= DWT.UP; + if (downButton.getSelection()) style |= DWT.DOWN; + } else { + if (centerButton.getSelection()) style |= DWT.CENTER; + } + + /* Create the example widgets */ + button1 = new Button(textButtonGroup, style); + button1.setText(ControlExample.getResourceString("One")); + button2 = new Button(textButtonGroup, style); + button2.setText(ControlExample.getResourceString("Two")); + button3 = new Button(textButtonGroup, style); + button3.setText(ControlExample.getResourceString("Three")); + button4 = new Button(imageButtonGroup, style); + button4.setImage(instance.images[ControlExample.ciClosedFolder]); + button5 = new Button(imageButtonGroup, style); + button5.setImage(instance.images[ControlExample.ciOpenFolder]); + button6 = new Button(imageButtonGroup, style); + button6.setImage(instance.images[ControlExample.ciTarget]); + button7 = new Button(imagetextButtonGroup, style); + button7.setText(ControlExample.getResourceString("One")); + button7.setImage(instance.images[ControlExample.ciClosedFolder]); + button8 = new Button(imagetextButtonGroup, style); + button8.setText(ControlExample.getResourceString("Two")); + button8.setImage(instance.images[ControlExample.ciOpenFolder]); + button9 = new Button(imagetextButtonGroup, style); + button9.setText(ControlExample.getResourceString("Three")); + button9.setImage(instance.images[ControlExample.ciTarget]); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + pushButton = new Button (styleGroup, DWT.RADIO); + pushButton.setText("DWT.PUSH"); + checkButton = new Button (styleGroup, DWT.RADIO); + checkButton.setText ("DWT.CHECK"); + radioButton = new Button (styleGroup, DWT.RADIO); + radioButton.setText ("DWT.RADIO"); + toggleButton = new Button (styleGroup, DWT.RADIO); + toggleButton.setText ("DWT.TOGGLE"); + arrowButton = new Button (styleGroup, DWT.RADIO); + arrowButton.setText ("DWT.ARROW"); + flatButton = new Button (styleGroup, DWT.CHECK); + flatButton.setText ("DWT.FLAT"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) button1, button2, button3, button4, button5, button6, button7, button8, button9 ]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return [ cast(char[])"Selection", "Text", "ToolTipText" ]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Button"; + } + + /** + * Sets the alignment of the "Example" widgets. + */ + void setExampleWidgetAlignment () { + int alignment = 0; + if (leftButton.getSelection ()) alignment = DWT.LEFT; + if (centerButton.getSelection ()) alignment = DWT.CENTER; + if (rightButton.getSelection ()) alignment = DWT.RIGHT; + if (upButton.getSelection ()) alignment = DWT.UP; + if (downButton.getSelection ()) alignment = DWT.DOWN; + button1.setAlignment (alignment); + button2.setAlignment (alignment); + button3.setAlignment (alignment); + button4.setAlignment (alignment); + button5.setAlignment (alignment); + button6.setAlignment (alignment); + button7.setAlignment (alignment); + button8.setAlignment (alignment); + button9.setAlignment (alignment); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + if (arrowButton.getSelection ()) { + upButton.setEnabled (true); + centerButton.setEnabled (false); + downButton.setEnabled (true); + } else { + upButton.setEnabled (false); + centerButton.setEnabled (true); + downButton.setEnabled (false); + } + upButton.setSelection ((button1.getStyle () & DWT.UP) !is 0); + downButton.setSelection ((button1.getStyle () & DWT.DOWN) !is 0); + pushButton.setSelection ((button1.getStyle () & DWT.PUSH) !is 0); + checkButton.setSelection ((button1.getStyle () & DWT.CHECK) !is 0); + radioButton.setSelection ((button1.getStyle () & DWT.RADIO) !is 0); + toggleButton.setSelection ((button1.getStyle () & DWT.TOGGLE) !is 0); + arrowButton.setSelection ((button1.getStyle () & DWT.ARROW) !is 0); + flatButton.setSelection ((button1.getStyle () & DWT.FLAT) !is 0); + borderButton.setSelection ((button1.getStyle () & DWT.BORDER) !is 0); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/CComboTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/CComboTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,136 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.CComboTab; + + + +import dwt.DWT; +import dwt.custom.CCombo; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + +class CComboTab : Tab { + + /* Example widgets and groups that contain them */ + CCombo combo1; + Group comboGroup; + + /* Style widgets added to the "Style" group */ + Button flatButton, readOnlyButton; + + static char[] [] ListData; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + if( ListData is null ){ + ListData = [ + ControlExample.getResourceString("ListData1_0"), + ControlExample.getResourceString("ListData1_1"), + ControlExample.getResourceString("ListData1_2"), + ControlExample.getResourceString("ListData1_3"), + ControlExample.getResourceString("ListData1_4"), + ControlExample.getResourceString("ListData1_5"), + ControlExample.getResourceString("ListData1_6"), + ControlExample.getResourceString("ListData1_7"), + ControlExample.getResourceString("ListData1_8")]; + } + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the combo box */ + comboGroup = new Group (exampleGroup, DWT.NONE); + comboGroup.setLayout (new GridLayout ()); + comboGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + comboGroup.setText (ControlExample.getResourceString("Custom_Combo")); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (flatButton.getSelection ()) style |= DWT.FLAT; + if (readOnlyButton.getSelection ()) style |= DWT.READ_ONLY; + if (borderButton.getSelection ()) style |= DWT.BORDER; + + /* Create the example widgets */ + combo1 = new CCombo (comboGroup, style); + combo1.setItems (ListData); + if (ListData.length >= 3) { + combo1.setText(ListData [2]); + } + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + super.createStyleGroup (); + + /* Create the extra widgets */ + readOnlyButton = new Button (styleGroup, DWT.CHECK); + readOnlyButton.setText ("DWT.READ_ONLY"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + flatButton = new Button (styleGroup, DWT.CHECK); + flatButton.setText ("DWT.FLAT"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [cast(Widget) combo1]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["Editable", "Items", "Selection", "Text", "TextLimit", "ToolTipText", "VisibleItemCount"]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "CCombo"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + flatButton.setSelection ((combo1.getStyle () & DWT.FLAT) !is 0); + readOnlyButton.setSelection ((combo1.getStyle () & DWT.READ_ONLY) !is 0); + borderButton.setSelection ((combo1.getStyle () & DWT.BORDER) !is 0); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/CLabelTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/CLabelTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,147 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.CLabelTab; + + + +import dwt.DWT; +import dwt.custom.CLabel; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Widget; + + +import dwtexamples.controlexample.AlignableTab; +import dwtexamples.controlexample.ControlExample; + +import tango.text.convert.Format; + +class CLabelTab : AlignableTab { + /* Example widgets and groups that contain them */ + CLabel label1, label2, label3; + Group textLabelGroup; + + /* Style widgets added to the "Style" group */ + Button shadowInButton, shadowOutButton, shadowNoneButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the text labels */ + textLabelGroup = new Group(exampleGroup, DWT.NONE); + GridLayout gridLayout = new GridLayout (); + textLabelGroup.setLayout (gridLayout); + gridLayout.numColumns = 3; + textLabelGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + textLabelGroup.setText (ControlExample.getResourceString("Custom_Labels")); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (shadowInButton.getSelection ()) style |= DWT.SHADOW_IN; + if (shadowNoneButton.getSelection ()) style |= DWT.SHADOW_NONE; + if (shadowOutButton.getSelection ()) style |= DWT.SHADOW_OUT; + if (leftButton.getSelection ()) style |= DWT.LEFT; + if (centerButton.getSelection ()) style |= DWT.CENTER; + if (rightButton.getSelection ()) style |= DWT.RIGHT; + + /* Create the example widgets */ + label1 = new CLabel (textLabelGroup, style); + label1.setText(ControlExample.getResourceString("One")); + label1.setImage (instance.images[ControlExample.ciClosedFolder]); + label2 = new CLabel (textLabelGroup, style); + label2.setImage (instance.images[ControlExample.ciTarget]); + label3 = new CLabel (textLabelGroup, style); + label3.setText(Format( "{}\n{}", ControlExample.getResourceString("Example_string"), ControlExample.getResourceString("One_Two_Three"))); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + shadowNoneButton = new Button (styleGroup, DWT.RADIO); + shadowNoneButton.setText ("DWT.SHADOW_NONE"); + shadowInButton = new Button (styleGroup, DWT.RADIO); + shadowInButton.setText ("DWT.SHADOW_IN"); + shadowOutButton = new Button (styleGroup, DWT.RADIO); + shadowOutButton.setText ("DWT.SHADOW_OUT"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) label1, label2, label3]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["Text", "ToolTipText"]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "CLabel"; + } + + /** + * Sets the alignment of the "Example" widgets. + */ + void setExampleWidgetAlignment () { + int alignment = 0; + if (leftButton.getSelection ()) alignment = DWT.LEFT; + if (centerButton.getSelection ()) alignment = DWT.CENTER; + if (rightButton.getSelection ()) alignment = DWT.RIGHT; + label1.setAlignment (alignment); + label2.setAlignment (alignment); + label3.setAlignment (alignment); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + leftButton.setSelection ((label1.getStyle () & DWT.LEFT) !is 0); + centerButton.setSelection ((label1.getStyle () & DWT.CENTER) !is 0); + rightButton.setSelection ((label1.getStyle () & DWT.RIGHT) !is 0); + shadowInButton.setSelection ((label1.getStyle () & DWT.SHADOW_IN) !is 0); + shadowOutButton.setSelection ((label1.getStyle () & DWT.SHADOW_OUT) !is 0); + shadowNoneButton.setSelection ((label1.getStyle () & (DWT.SHADOW_IN | DWT.SHADOW_OUT)) is 0); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/CTabFolderTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/CTabFolderTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,478 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.CTabFolderTab; + + + +import dwt.DWT; +import dwt.custom.CTabFolder; +import dwt.custom.CTabFolder2Adapter; +import dwt.custom.CTabFolderEvent; +import dwt.custom.CTabItem; +import dwt.events.DisposeEvent; +import dwt.events.DisposeListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.graphics.Color; +import dwt.graphics.Font; +import dwt.graphics.FontData; +import dwt.graphics.Image; +import dwt.graphics.RGB; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Event; +import dwt.widgets.Group; +import dwt.widgets.Item; +import dwt.widgets.Listener; +import dwt.widgets.TableItem; +import dwt.widgets.Text; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + +import tango.text.convert.Format; + +class CTabFolderTab : Tab { + int lastSelectedTab = 0; + + /* Example widgets and groups that contain them */ + CTabFolder tabFolder1; + Group tabFolderGroup, itemGroup; + + /* Style widgets added to the "Style" group */ + Button topButton, bottomButton, flatButton, closeButton; + + static char[] [] CTabItems1; + + /* Controls and resources added to the "Fonts" group */ + static const int SELECTION_FOREGROUND_COLOR = 3; + static const int SELECTION_BACKGROUND_COLOR = 4; + static const int ITEM_FONT = 5; + Color selectionForegroundColor, selectionBackgroundColor; + Font itemFont; + + /* Other widgets added to the "Other" group */ + Button simpleTabButton, singleTabButton, imageButton, showMinButton, showMaxButton, unselectedCloseButton, unselectedImageButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + if( CTabItems1 is null ){ + CTabItems1 = [ + ControlExample.getResourceString("CTabItem1_0"), + ControlExample.getResourceString("CTabItem1_1"), + ControlExample.getResourceString("CTabItem1_2")]; + } + } + + /** + * Creates the "Colors and Fonts" group. + */ + void createColorAndFontGroup () { + super.createColorAndFontGroup(); + + TableItem item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Selection_Foreground_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Selection_Background_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Item_Font")); + + shell.addDisposeListener(new class() DisposeListener { + public void widgetDisposed(DisposeEvent event) { + if (selectionBackgroundColor !is null) selectionBackgroundColor.dispose(); + if (selectionForegroundColor !is null) selectionForegroundColor.dispose(); + if (itemFont !is null) itemFont.dispose(); + selectionBackgroundColor = null; + selectionForegroundColor = null; + itemFont = null; + } + }); + } + + void changeFontOrColor(int index) { + switch (index) { + case SELECTION_FOREGROUND_COLOR: { + Color oldColor = selectionForegroundColor; + if (oldColor is null) oldColor = tabFolder1.getSelectionForeground(); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = selectionForegroundColor; + selectionForegroundColor = new Color (display, rgb); + setSelectionForeground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case SELECTION_BACKGROUND_COLOR: { + Color oldColor = selectionBackgroundColor; + if (oldColor is null) oldColor = tabFolder1.getSelectionBackground(); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = selectionBackgroundColor; + selectionBackgroundColor = new Color (display, rgb); + setSelectionBackground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case ITEM_FONT: { + Font oldFont = itemFont; + if (oldFont is null) oldFont = tabFolder1.getItem (0).getFont (); + fontDialog.setFontList(oldFont.getFontData()); + FontData fontData = fontDialog.open (); + if (fontData is null) return; + oldFont = itemFont; + itemFont = new Font (display, fontData); + setItemFont (); + setExampleWidgetSize (); + if (oldFont !is null) oldFont.dispose (); + } + break; + default: + super.changeFontOrColor(index); + } + } + + /** + * Creates the "Other" group. + */ + void createOtherGroup () { + super.createOtherGroup (); + + /* Create display controls specific to this example */ + simpleTabButton = new Button (otherGroup, DWT.CHECK); + simpleTabButton.setText (ControlExample.getResourceString("Set_Simple_Tabs")); + simpleTabButton.setSelection(true); + simpleTabButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setSimpleTabs(); + } + }); + + singleTabButton = new Button (otherGroup, DWT.CHECK); + singleTabButton.setText (ControlExample.getResourceString("Set_Single_Tabs")); + singleTabButton.setSelection(false); + singleTabButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setSingleTabs(); + } + }); + + showMinButton = new Button (otherGroup, DWT.CHECK); + showMinButton.setText (ControlExample.getResourceString("Set_Min_Visible")); + showMinButton.setSelection(false); + showMinButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setMinimizeVisible(); + } + }); + + showMaxButton = new Button (otherGroup, DWT.CHECK); + showMaxButton.setText (ControlExample.getResourceString("Set_Max_Visible")); + showMaxButton.setSelection(false); + showMaxButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setMaximizeVisible(); + } + }); + + imageButton = new Button (otherGroup, DWT.CHECK); + imageButton.setText (ControlExample.getResourceString("Set_Image")); + imageButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setImages(); + } + }); + + unselectedImageButton = new Button (otherGroup, DWT.CHECK); + unselectedImageButton.setText (ControlExample.getResourceString("Set_Unselected_Image_Visible")); + unselectedImageButton.setSelection(true); + unselectedImageButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setUnselectedImageVisible(); + } + }); + unselectedCloseButton = new Button (otherGroup, DWT.CHECK); + unselectedCloseButton.setText (ControlExample.getResourceString("Set_Unselected_Close_Visible")); + unselectedCloseButton.setSelection(true); + unselectedCloseButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setUnselectedCloseVisible(); + } + }); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the CTabFolder */ + tabFolderGroup = new Group (exampleGroup, DWT.NONE); + tabFolderGroup.setLayout (new GridLayout ()); + tabFolderGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + tabFolderGroup.setText ("CTabFolder"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (topButton.getSelection ()) style |= DWT.TOP; + if (bottomButton.getSelection ()) style |= DWT.BOTTOM; + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (flatButton.getSelection ()) style |= DWT.FLAT; + if (closeButton.getSelection ()) style |= DWT.CLOSE; + + /* Create the example widgets */ + tabFolder1 = new CTabFolder (tabFolderGroup, style); + for (int i = 0; i < CTabItems1.length; i++) { + CTabItem item = new CTabItem(tabFolder1, DWT.NONE); + item.setText(CTabItems1[i]); + Text text = new Text(tabFolder1, DWT.READ_ONLY); + text.setText(Format( "{}: {}", ControlExample.getResourceString("CTabItem_content"), i)); + item.setControl(text); + } + tabFolder1.addListener(DWT.Selection, new class() Listener { + public void handleEvent(Event event) { + lastSelectedTab = tabFolder1.getSelectionIndex(); + } + }); + tabFolder1.setSelection(lastSelectedTab); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + topButton = new Button (styleGroup, DWT.RADIO); + topButton.setText ("DWT.TOP"); + topButton.setSelection(true); + bottomButton = new Button (styleGroup, DWT.RADIO); + bottomButton.setText ("DWT.BOTTOM"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + flatButton = new Button (styleGroup, DWT.CHECK); + flatButton.setText ("DWT.FLAT"); + closeButton = new Button (styleGroup, DWT.CHECK); + closeButton.setText ("DWT.CLOSE"); + } + + /** + * Gets the list of custom event names. + * + * @return an array containing custom event names + */ + char[] [] getCustomEventNames () { + return ["CTabFolderEvent"]; + } + + /** + * Gets the "Example" widget children's items, if any. + * + * @return an array containing the example widget children's items + */ + Item [] getExampleWidgetItems () { + return tabFolder1.getItems(); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) tabFolder1]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "CTabFolder"; + } + + /** + * Hooks the custom listener specified by eventName. + */ + void hookCustomListener (char[] eventName) { + if (eventName is "CTabFolderEvent") { + tabFolder1.addCTabFolder2Listener (new class(eventName) CTabFolder2Adapter { + char[] name; + this( char[] name ){ this.name = name; } + public void close (CTabFolderEvent event) { + log (name, event); + } + }); + } + } + + /** + * Sets the foreground color, background color, and font + * of the "Example" widgets to their default settings. + * Also sets foreground and background color of the Node 1 + * TreeItems to default settings. + */ + void resetColorsAndFonts () { + super.resetColorsAndFonts (); + Color oldColor = selectionForegroundColor; + selectionForegroundColor = null; + setSelectionForeground (); + if (oldColor !is null) oldColor.dispose(); + oldColor = selectionBackgroundColor; + selectionBackgroundColor = null; + setSelectionBackground (); + if (oldColor !is null) oldColor.dispose(); + Font oldFont = itemFont; + itemFont = null; + setItemFont (); + if (oldFont !is null) oldFont.dispose(); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState(); + setSimpleTabs(); + setSingleTabs(); + setImages(); + setMinimizeVisible(); + setMaximizeVisible(); + setUnselectedCloseVisible(); + setUnselectedImageVisible(); + setSelectionBackground (); + setSelectionForeground (); + setItemFont (); + setExampleWidgetSize(); + } + + /** + * Sets the shape that the CTabFolder will use to render itself. + */ + void setSimpleTabs () { + tabFolder1.setSimple (simpleTabButton.getSelection ()); + setExampleWidgetSize(); + } + + /** + * Sets the number of tabs that the CTabFolder should display. + */ + void setSingleTabs () { + tabFolder1.setSingle (singleTabButton.getSelection ()); + setExampleWidgetSize(); + } + /** + * Sets an image into each item of the "Example" widgets. + */ + void setImages () { + bool setImage = imageButton.getSelection (); + CTabItem items[] = tabFolder1.getItems (); + for (int i = 0; i < items.length; i++) { + if (setImage) { + items[i].setImage (instance.images[ControlExample.ciClosedFolder]); + } else { + items[i].setImage (null); + } + } + setExampleWidgetSize (); + } + /** + * Sets the visibility of the minimize button + */ + void setMinimizeVisible () { + tabFolder1.setMinimizeVisible(showMinButton.getSelection ()); + setExampleWidgetSize(); + } + /** + * Sets the visibility of the maximize button + */ + void setMaximizeVisible () { + tabFolder1.setMaximizeVisible(showMaxButton.getSelection ()); + setExampleWidgetSize(); + } + /** + * Sets the visibility of the close button on unselected tabs + */ + void setUnselectedCloseVisible () { + tabFolder1.setUnselectedCloseVisible(unselectedCloseButton.getSelection ()); + setExampleWidgetSize(); + } + /** + * Sets the visibility of the image on unselected tabs + */ + void setUnselectedImageVisible () { + tabFolder1.setUnselectedImageVisible(unselectedImageButton.getSelection ()); + setExampleWidgetSize(); + } + /** + * Sets the background color of CTabItem 0. + */ + void setSelectionBackground () { + if (!instance.startup) { + tabFolder1.setSelectionBackground(selectionBackgroundColor); + } + // Set the selection background item's image to match the background color of the selection. + Color color = selectionBackgroundColor; + if (color is null) color = tabFolder1.getSelectionBackground (); + TableItem item = colorAndFontTable.getItem(SELECTION_BACKGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the foreground color of CTabItem 0. + */ + void setSelectionForeground () { + if (!instance.startup) { + tabFolder1.setSelectionForeground(selectionForegroundColor); + } + // Set the selection foreground item's image to match the foreground color of the selection. + Color color = selectionForegroundColor; + if (color is null) color = tabFolder1.getSelectionForeground (); + TableItem item = colorAndFontTable.getItem(SELECTION_FOREGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the font of CTabItem 0. + */ + void setItemFont () { + if (!instance.startup) { + tabFolder1.getItem (0).setFont (itemFont); + setExampleWidgetSize(); + } + /* Set the font item's image to match the font of the item. */ + Font ft = itemFont; + if (ft is null) ft = tabFolder1.getItem (0).getFont (); + TableItem item = colorAndFontTable.getItem(ITEM_FONT); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (fontImage(ft)); + item.setFont(ft); + colorAndFontTable.layout (); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/CanvasTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/CanvasTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,335 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.CanvasTab; + + + +import dwt.DWT; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.events.PaintEvent; +import dwt.events.PaintListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.graphics.Color; +import dwt.graphics.Font; +import dwt.graphics.GC; +import dwt.graphics.Point; +import dwt.graphics.Rectangle; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Canvas; +import dwt.widgets.Caret; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.ScrollBar; +import dwt.widgets.TabFolder; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + +class CanvasTab : Tab { + static const int colors [] = [ + DWT.COLOR_RED, + DWT.COLOR_GREEN, + DWT.COLOR_BLUE, + DWT.COLOR_MAGENTA, + DWT.COLOR_YELLOW, + DWT.COLOR_CYAN, + DWT.COLOR_DARK_RED, + DWT.COLOR_DARK_GREEN, + DWT.COLOR_DARK_BLUE, + DWT.COLOR_DARK_MAGENTA, + DWT.COLOR_DARK_YELLOW, + DWT.COLOR_DARK_CYAN + ]; + static final char[] canvasString = "Canvas"; //$NON-NLS-1$ + + /* Example widgets and groups that contain them */ + Canvas canvas; + Group canvasGroup; + + /* Style widgets added to the "Style" group */ + Button horizontalButton, verticalButton, noBackgroundButton, noFocusButton, + noMergePaintsButton, noRedrawResizeButton, doubleBufferedButton; + + /* Other widgets added to the "Other" group */ + Button caretButton, fillDamageButton; + + int paintCount; + int cx, cy; + int maxX, maxY; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Other" group. + */ + void createOtherGroup () { + super.createOtherGroup (); + + /* Create display controls specific to this example */ + caretButton = new Button (otherGroup, DWT.CHECK); + caretButton.setText (ControlExample.getResourceString("Caret")); + fillDamageButton = new Button (otherGroup, DWT.CHECK); + fillDamageButton.setText (ControlExample.getResourceString("FillDamage")); + + /* Add the listeners */ + caretButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setCaret (); + } + }); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the canvas widget */ + canvasGroup = new Group (exampleGroup, DWT.NONE); + canvasGroup.setLayout (new GridLayout ()); + canvasGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + canvasGroup.setText ("Canvas"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (horizontalButton.getSelection ()) style |= DWT.H_SCROLL; + if (verticalButton.getSelection ()) style |= DWT.V_SCROLL; + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (noBackgroundButton.getSelection ()) style |= DWT.NO_BACKGROUND; + if (noFocusButton.getSelection ()) style |= DWT.NO_FOCUS; + if (noMergePaintsButton.getSelection ()) style |= DWT.NO_MERGE_PAINTS; + if (noRedrawResizeButton.getSelection ()) style |= DWT.NO_REDRAW_RESIZE; + if (doubleBufferedButton.getSelection ()) style |= DWT.DOUBLE_BUFFERED; + + /* Create the example widgets */ + paintCount = 0; cx = 0; cy = 0; + canvas = new Canvas (canvasGroup, style); + canvas.addPaintListener(new class() PaintListener { + public void paintControl(PaintEvent e) { + paintCount++; + GC gc = e.gc; + if (fillDamageButton.getSelection ()) { + Color color = e.display.getSystemColor (colors [paintCount % colors.length]); + gc.setBackground(color); + gc.fillRectangle(e.x, e.y, e.width, e.height); + } + Point size = canvas.getSize (); + gc.drawArc(cx + 1, cy + 1, size.x - 2, size.y - 2, 0, 360); + gc.drawRectangle(cx + (size.x - 10) / 2, cy + (size.y - 10) / 2, 10, 10); + Point extent = gc.textExtent(canvasString); + gc.drawString(canvasString, cx + (size.x - extent.x) / 2, cy - extent.y + (size.y - 10) / 2, true); + } + }); + canvas.addControlListener(new class() ControlAdapter { + public void controlResized(ControlEvent event) { + Point size = canvas.getSize (); + maxX = size.x * 3 / 2; maxY = size.y * 3 / 2; + resizeScrollBars (); + } + }); + ScrollBar bar = canvas.getHorizontalBar(); + if (bar !is null) { + hookListeners (bar); + bar.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent event) { + scrollHorizontal (cast(ScrollBar)event.widget); + } + }); + } + bar = canvas.getVerticalBar(); + if (bar !is null) { + hookListeners (bar); + bar.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent event) { + scrollVertical (cast(ScrollBar)event.widget); + } + }); + } + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + horizontalButton = new Button (styleGroup, DWT.CHECK); + horizontalButton.setText ("DWT.H_SCROLL"); + horizontalButton.setSelection(true); + verticalButton = new Button (styleGroup, DWT.CHECK); + verticalButton.setText ("DWT.V_SCROLL"); + verticalButton.setSelection(true); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + noBackgroundButton = new Button (styleGroup, DWT.CHECK); + noBackgroundButton.setText ("DWT.NO_BACKGROUND"); + noFocusButton = new Button (styleGroup, DWT.CHECK); + noFocusButton.setText ("DWT.NO_FOCUS"); + noMergePaintsButton = new Button (styleGroup, DWT.CHECK); + noMergePaintsButton.setText ("DWT.NO_MERGE_PAINTS"); + noRedrawResizeButton = new Button (styleGroup, DWT.CHECK); + noRedrawResizeButton.setText ("DWT.NO_REDRAW_RESIZE"); + doubleBufferedButton = new Button (styleGroup, DWT.CHECK); + doubleBufferedButton.setText ("DWT.DOUBLE_BUFFERED"); + } + + /** + * Creates the tab folder page. + * + * @param tabFolder org.eclipse.swt.widgets.TabFolder + * @return the new page for the tab folder + */ + Composite createTabFolderPage (TabFolder tabFolder) { + super.createTabFolderPage (tabFolder); + + /* + * Add a resize listener to the tabFolderPage so that + * if the user types into the example widget to change + * its preferred size, and then resizes the shell, we + * recalculate the preferred size correctly. + */ + tabFolderPage.addControlListener(new class() ControlAdapter { + public void controlResized(ControlEvent e) { + setExampleWidgetSize (); + } + }); + + return tabFolderPage; + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) canvas ]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["ToolTipText"]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Canvas"; + } + + /** + * Resizes the maximum and thumb of both scrollbars. + */ + void resizeScrollBars () { + Rectangle clientArea = canvas.getClientArea(); + ScrollBar bar = canvas.getHorizontalBar(); + if (bar !is null) { + bar.setMaximum(maxX); + bar.setThumb(clientArea.width); + bar.setPageIncrement(clientArea.width); + } + bar = canvas.getVerticalBar(); + if (bar !is null) { + bar.setMaximum(maxY); + bar.setThumb(clientArea.height); + bar.setPageIncrement(clientArea.height); + } + } + + /** + * Scrolls the canvas horizontally. + * + * @param scrollBar + */ + void scrollHorizontal (ScrollBar scrollBar) { + Rectangle bounds = canvas.getClientArea(); + int x = -scrollBar.getSelection(); + if (x + maxX < bounds.width) { + x = bounds.width - maxX; + } + canvas.scroll(x, cy, cx, cy, maxX, maxY, false); + cx = x; + } + + /** + * Scrolls the canvas vertically. + * + * @param scrollBar + */ + void scrollVertical (ScrollBar scrollBar) { + Rectangle bounds = canvas.getClientArea(); + int y = -scrollBar.getSelection(); + if (y + maxY < bounds.height) { + y = bounds.height - maxY; + } + canvas.scroll(cx, y, cx, cy, maxX, maxY, false); + cy = y; + } + + /** + * Sets or clears the caret in the "Example" widget. + */ + void setCaret () { + Caret oldCaret = canvas.getCaret (); + if (caretButton.getSelection ()) { + Caret newCaret = new Caret(canvas, DWT.NONE); + Font font = canvas.getFont(); + newCaret.setFont(font); + GC gc = new GC(canvas); + gc.setFont(font); + newCaret.setBounds(1, 1, 1, gc.getFontMetrics().getHeight()); + gc.dispose(); + canvas.setCaret (newCaret); + canvas.setFocus(); + } else { + canvas.setCaret (null); + } + if (oldCaret !is null) oldCaret.dispose (); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + horizontalButton.setSelection ((canvas.getStyle () & DWT.H_SCROLL) !is 0); + verticalButton.setSelection ((canvas.getStyle () & DWT.V_SCROLL) !is 0); + borderButton.setSelection ((canvas.getStyle () & DWT.BORDER) !is 0); + noBackgroundButton.setSelection ((canvas.getStyle () & DWT.NO_BACKGROUND) !is 0); + noFocusButton.setSelection ((canvas.getStyle () & DWT.NO_FOCUS) !is 0); + noMergePaintsButton.setSelection ((canvas.getStyle () & DWT.NO_MERGE_PAINTS) !is 0); + noRedrawResizeButton.setSelection ((canvas.getStyle () & DWT.NO_REDRAW_RESIZE) !is 0); + doubleBufferedButton.setSelection ((canvas.getStyle () & DWT.DOUBLE_BUFFERED) !is 0); + if (!instance.startup) setCaret (); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/ComboTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ComboTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,164 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.ComboTab; + + + +import dwt.DWT; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Combo; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.TabFolder; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + +class ComboTab : Tab { + + /* Example widgets and groups that contain them */ + Combo combo1; + Group comboGroup; + + /* Style widgets added to the "Style" group */ + Button dropDownButton, readOnlyButton, simpleButton; + + static char[] [] ListData; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + if( ListData.length is 0 ){ + ListData = [ControlExample.getResourceString("ListData0_0"), + ControlExample.getResourceString("ListData0_1"), + ControlExample.getResourceString("ListData0_2"), + ControlExample.getResourceString("ListData0_3"), + ControlExample.getResourceString("ListData0_4"), + ControlExample.getResourceString("ListData0_5"), + ControlExample.getResourceString("ListData0_6"), + ControlExample.getResourceString("ListData0_7"), + ControlExample.getResourceString("ListData0_8")]; + } + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the combo box */ + comboGroup = new Group (exampleGroup, DWT.NONE); + comboGroup.setLayout (new GridLayout ()); + comboGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + comboGroup.setText ("Combo"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (dropDownButton.getSelection ()) style |= DWT.DROP_DOWN; + if (readOnlyButton.getSelection ()) style |= DWT.READ_ONLY; + if (simpleButton.getSelection ()) style |= DWT.SIMPLE; + + /* Create the example widgets */ + combo1 = new Combo (comboGroup, style); + combo1.setItems (ListData); + if (ListData.length >= 3) { + combo1.setText(ListData [2]); + } + } + + /** + * Creates the tab folder page. + * + * @param tabFolder org.eclipse.swt.widgets.TabFolder + * @return the new page for the tab folder + */ + Composite createTabFolderPage (TabFolder tabFolder) { + super.createTabFolderPage (tabFolder); + + /* + * Add a resize listener to the tabFolderPage so that + * if the user types into the example widget to change + * its preferred size, and then resizes the shell, we + * recalculate the preferred size correctly. + */ + tabFolderPage.addControlListener(new class() ControlAdapter { + public void controlResized(ControlEvent e) { + setExampleWidgetSize (); + } + }); + + return tabFolderPage; + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + super.createStyleGroup (); + + /* Create the extra widgets */ + dropDownButton = new Button (styleGroup, DWT.RADIO); + dropDownButton.setText ("DWT.DROP_DOWN"); + simpleButton = new Button (styleGroup, DWT.RADIO); + simpleButton.setText("DWT.SIMPLE"); + readOnlyButton = new Button (styleGroup, DWT.CHECK); + readOnlyButton.setText ("DWT.READ_ONLY"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) combo1]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["Items", "Orientation", "Selection", "Text", "TextLimit", "ToolTipText", "VisibleItemCount"]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Combo"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + dropDownButton.setSelection ((combo1.getStyle () & DWT.DROP_DOWN) !is 0); + simpleButton.setSelection ((combo1.getStyle () & DWT.SIMPLE) !is 0); + readOnlyButton.setSelection ((combo1.getStyle () & DWT.READ_ONLY) !is 0); + readOnlyButton.setEnabled(!simpleButton.getSelection()); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/ControlExample.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ControlExample.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,322 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit +*******************************************************************************/ +module dwtexamples.controlexample.ControlExample; + +import dwt.DWT; +import dwt.graphics.Image; +import dwt.graphics.ImageData; +import dwt.graphics.Point; +import dwt.graphics.Rectangle; +import dwt.layout.FillLayout; +import dwt.widgets.Composite; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.widgets.TabFolder; +import dwt.widgets.TabItem; +import dwt.dwthelper.ResourceBundle; +import dwt.dwthelper.ByteArrayInputStream; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ButtonTab; +import dwtexamples.controlexample.CanvasTab; +import dwtexamples.controlexample.ComboTab; +import dwtexamples.controlexample.CoolBarTab; +//import dwtexamples.controlexample.DateTimeTab; +import dwtexamples.controlexample.DialogTab; +import dwtexamples.controlexample.ExpandBarTab; +import dwtexamples.controlexample.GroupTab; +import dwtexamples.controlexample.LabelTab; +import dwtexamples.controlexample.LinkTab; +import dwtexamples.controlexample.ListTab; +import dwtexamples.controlexample.MenuTab; +import dwtexamples.controlexample.ProgressBarTab; +import dwtexamples.controlexample.SashTab; +import dwtexamples.controlexample.ScaleTab; +import dwtexamples.controlexample.ShellTab; +import dwtexamples.controlexample.SliderTab; +import dwtexamples.controlexample.SpinnerTab; +import dwtexamples.controlexample.TabFolderTab; +import dwtexamples.controlexample.TableTab; +import dwtexamples.controlexample.TextTab; +import dwtexamples.controlexample.ToolBarTab; +import dwtexamples.controlexample.ToolTipTab; +import dwtexamples.controlexample.TreeTab; + + +import tango.core.Exception; +import tango.text.convert.Format; +import tango.io.Stdout; +import Math = tango.math.Math; + + +/*** Linker workaround start ***/ +import tango.io.Stdout; +import tango.math.Math; +import tango.text.convert.Format; +import tango.util.Convert; +import tango.util.PathUtil; +/*** Linker workaround end ***/ + +version(JIVE){ + import jive.stacktrace; +} + +version( CONTROL_EXAMPLE_MAIN ){ + void main(){ + Stdout.formatln( "The ControlExample: still work left" ); + Stdout.formatln( "todo: search for //PORTING_LEFT" ); + Stdout.formatln( "todo: Implement Get/Set API reflection" ); + Stdout.formatln( "todo: DateTimeTab not implemented" ); + Stdout.formatln( "todo: ExpandBarTab looks strange" ); + Stdout.formatln( "todo: ProgressBarTab crash on vertical" ); + Stdout.formatln( "todo: SliderTab horizontal arrow buttons are too high" ); + Stdout.formatln( "please report problems" ); + ControlExample.main( null ); + } +} + +public class ControlExample { + private static ResourceBundle resourceBundle; + private static const char[] resourceData = import( "controlexample.properties" ); + + private ShellTab shellTab; + private TabFolder tabFolder; + private Tab [] tabs; + Image images[]; + + static const int ciClosedFolder = 0, ciOpenFolder = 1, ciTarget = 2, ciBackground = 3, ciParentBackground = 4; + + static const byte[][] imageData = [ + cast(byte[]) import( "closedFolder.gif" ), + cast(byte[]) import( "openFolder.gif" ), + cast(byte[]) import( "target.gif" ), + cast(byte[]) import( "backgroundImage.png" ), + cast(byte[]) import( "parentBackgroundImage.png" ) + ]; + static const int[] imageTypes = [ + DWT.ICON, + DWT.ICON, + DWT.ICON, + DWT.BITMAP, + DWT.BITMAP]; + + bool startup = true; + + static this(){ + resourceBundle = ResourceBundle.getBundleFromData( resourceData ); //$NON-NLS-1$ + } + + /** + * Creates an instance of a ControlExample embedded inside + * the supplied parent Composite. + * + * @param parent the container of the example + */ + public this(Composite parent) { + initResources(); + tabFolder = new TabFolder (parent, DWT.NONE); + tabs = createTabs(); + for (int i=0; i monitorArea.width && DWT.getPlatform()=="carbon") { + TabItem [] tabItems = instance.tabFolder.getItems(); + for (int i=0; i + *******************************************************************************/ +module dwtexamples.controlexample.CoolBarTab; + + + +import dwt.DWT; +import dwt.events.MenuAdapter; +import dwt.events.MenuEvent; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.graphics.Image; +import dwt.graphics.Point; +import dwt.graphics.Rectangle; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Control; +import dwt.widgets.CoolBar; +import dwt.widgets.CoolItem; +import dwt.widgets.Event; +import dwt.widgets.Group; +import dwt.widgets.Item; +import dwt.widgets.Listener; +import dwt.widgets.Menu; +import dwt.widgets.MenuItem; +import dwt.widgets.Text; +import dwt.widgets.ToolBar; +import dwt.widgets.ToolItem; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import tango.util.Convert; + +class CoolBarTab : Tab { + /* Example widgets and group that contains them */ + CoolBar coolBar; + CoolItem pushItem, dropDownItem, radioItem, checkItem, textItem; + Group coolBarGroup; + + /* Style widgets added to the "Style" group */ + Button horizontalButton, verticalButton; + Button dropDownButton, flatButton; + + /* Other widgets added to the "Other" group */ + Button lockedButton; + + Point[] sizes; + int[] wrapIndices; + int[] order; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Other" group. + */ + void createOtherGroup () { + super.createOtherGroup (); + + /* Create display controls specific to this example */ + lockedButton = new Button (otherGroup, DWT.CHECK); + lockedButton.setText (ControlExample.getResourceString("Locked")); + + /* Add the listeners */ + lockedButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setWidgetLocked (); + } + }); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + coolBarGroup = new Group (exampleGroup, DWT.NONE); + coolBarGroup.setLayout (new GridLayout ()); + coolBarGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + coolBarGroup.setText ("CoolBar"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + int style = getDefaultStyle(), itemStyle = 0; + + /* Compute the widget, item, and item toolBar styles */ + int toolBarStyle = DWT.FLAT; + bool vertical = false; + if (horizontalButton.getSelection ()) { + style |= DWT.HORIZONTAL; + toolBarStyle |= DWT.HORIZONTAL; + } + if (verticalButton.getSelection ()) { + style |= DWT.VERTICAL; + toolBarStyle |= DWT.VERTICAL; + vertical = true; + } + if (borderButton.getSelection()) style |= DWT.BORDER; + if (flatButton.getSelection()) style |= DWT.FLAT; + if (dropDownButton.getSelection()) itemStyle |= DWT.DROP_DOWN; + + /* + * Create the example widgets. + */ + coolBar = new CoolBar (coolBarGroup, style); + + /* Create the push button toolbar cool item */ + ToolBar toolBar = new ToolBar (coolBar, toolBarStyle); + ToolItem item = new ToolItem (toolBar, DWT.PUSH); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText ("DWT.PUSH"); + item = new ToolItem (toolBar, DWT.PUSH); + item.setImage (instance.images[ControlExample.ciOpenFolder]); + item.setToolTipText ("DWT.PUSH"); + item = new ToolItem (toolBar, DWT.PUSH); + item.setImage (instance.images[ControlExample.ciTarget]); + item.setToolTipText ("DWT.PUSH"); + item = new ToolItem (toolBar, DWT.SEPARATOR); + item = new ToolItem (toolBar, DWT.PUSH); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText ("DWT.PUSH"); + item = new ToolItem (toolBar, DWT.PUSH); + item.setImage (instance.images[ControlExample.ciOpenFolder]); + item.setToolTipText ("DWT.PUSH"); + pushItem = new CoolItem (coolBar, itemStyle); + pushItem.setControl (toolBar); + pushItem.addSelectionListener (new CoolItemSelectionListener()); + + /* Create the dropdown toolbar cool item */ + toolBar = new ToolBar (coolBar, toolBarStyle); + item = new ToolItem (toolBar, DWT.DROP_DOWN); + item.setImage (instance.images[ControlExample.ciOpenFolder]); + item.setToolTipText ("DWT.DROP_DOWN"); + item.addSelectionListener (new DropDownSelectionListener()); + item = new ToolItem (toolBar, DWT.DROP_DOWN); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText ("DWT.DROP_DOWN"); + item.addSelectionListener (new DropDownSelectionListener()); + dropDownItem = new CoolItem (coolBar, itemStyle); + dropDownItem.setControl (toolBar); + dropDownItem.addSelectionListener (new CoolItemSelectionListener()); + + /* Create the radio button toolbar cool item */ + toolBar = new ToolBar (coolBar, toolBarStyle); + item = new ToolItem (toolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText ("DWT.RADIO"); + item = new ToolItem (toolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText ("DWT.RADIO"); + item = new ToolItem (toolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText ("DWT.RADIO"); + radioItem = new CoolItem (coolBar, itemStyle); + radioItem.setControl (toolBar); + radioItem.addSelectionListener (new CoolItemSelectionListener()); + + /* Create the check button toolbar cool item */ + toolBar = new ToolBar (coolBar, toolBarStyle); + item = new ToolItem (toolBar, DWT.CHECK); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText ("DWT.CHECK"); + item = new ToolItem (toolBar, DWT.CHECK); + item.setImage (instance.images[ControlExample.ciTarget]); + item.setToolTipText ("DWT.CHECK"); + item = new ToolItem (toolBar, DWT.CHECK); + item.setImage (instance.images[ControlExample.ciOpenFolder]); + item.setToolTipText ("DWT.CHECK"); + item = new ToolItem (toolBar, DWT.CHECK); + item.setImage (instance.images[ControlExample.ciTarget]); + item.setToolTipText ("DWT.CHECK"); + checkItem = new CoolItem (coolBar, itemStyle); + checkItem.setControl (toolBar); + checkItem.addSelectionListener (new CoolItemSelectionListener()); + + /* Create the text cool item */ + if (!vertical) { + Text text = new Text (coolBar, DWT.BORDER | DWT.SINGLE); + textItem = new CoolItem (coolBar, itemStyle); + textItem.setControl (text); + textItem.addSelectionListener (new CoolItemSelectionListener()); + Point textSize = text.computeSize(DWT.DEFAULT, DWT.DEFAULT); + textSize = textItem.computeSize(textSize.x, textSize.y); + textItem.setMinimumSize(textSize); + textItem.setPreferredSize(textSize); + textItem.setSize(textSize); + } + + /* Set the sizes after adding all cool items */ + CoolItem[] coolItems = coolBar.getItems(); + for (int i = 0; i < coolItems.length; i++) { + CoolItem coolItem = coolItems[i]; + Control control = coolItem.getControl(); + Point size = control.computeSize(DWT.DEFAULT, DWT.DEFAULT); + Point coolSize = coolItem.computeSize(size.x, size.y); + if ( auto bar = cast(ToolBar)control ) { + if (bar.getItemCount() > 0) { + if (vertical) { + size.y = bar.getItem(0).getBounds().height; + } else { + size.x = bar.getItem(0).getWidth(); + } + } + } + coolItem.setMinimumSize(size); + coolItem.setPreferredSize(coolSize); + coolItem.setSize(coolSize); + } + + /* If we have saved state, restore it */ + if (order !is null && order.length is coolBar.getItemCount()) { + coolBar.setItemLayout(order, wrapIndices, sizes); + } else { + coolBar.setWrapIndices([1, 3]); + } + + /* Add a listener to resize the group box to match the coolbar */ + coolBar.addListener(DWT.Resize, new class() Listener { + public void handleEvent(Event event) { + exampleGroup.layout(); + } + }); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + horizontalButton = new Button (styleGroup, DWT.RADIO); + horizontalButton.setText ("DWT.HORIZONTAL"); + verticalButton = new Button (styleGroup, DWT.RADIO); + verticalButton.setText ("DWT.VERTICAL"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + flatButton = new Button (styleGroup, DWT.CHECK); + flatButton.setText ("DWT.FLAT"); + Group itemGroup = new Group(styleGroup, DWT.NONE); + itemGroup.setLayout (new GridLayout ()); + itemGroup.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + itemGroup.setText(ControlExample.getResourceString("Item_Styles")); + dropDownButton = new Button (itemGroup, DWT.CHECK); + dropDownButton.setText ("DWT.DROP_DOWN"); + } + + /** + * Disposes the "Example" widgets. + */ + void disposeExampleWidgets () { + /* store the state of the toolbar if applicable */ + if (coolBar !is null) { + sizes = coolBar.getItemSizes(); + wrapIndices = coolBar.getWrapIndices(); + order = coolBar.getItemOrder(); + } + super.disposeExampleWidgets(); + } + + /** + * Gets the "Example" widget children's items, if any. + * + * @return an array containing the example widget children's items + */ + Item [] getExampleWidgetItems () { + return coolBar.getItems(); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) coolBar]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["ToolTipText"]; + } + + /** + * Gets the short text for the tab folder item. + */ + public char[] getShortTabText() { + return "CB"; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "CoolBar"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + horizontalButton.setSelection ((coolBar.getStyle () & DWT.HORIZONTAL) !is 0); + verticalButton.setSelection ((coolBar.getStyle () & DWT.VERTICAL) !is 0); + borderButton.setSelection ((coolBar.getStyle () & DWT.BORDER) !is 0); + flatButton.setSelection ((coolBar.getStyle () & DWT.FLAT) !is 0); + dropDownButton.setSelection ((coolBar.getItem(0).getStyle () & DWT.DROP_DOWN) !is 0); + lockedButton.setSelection(coolBar.getLocked()); + if (!instance.startup) setWidgetLocked (); + } + + /** + * Sets the header visible state of the "Example" widgets. + */ + void setWidgetLocked () { + coolBar.setLocked (lockedButton.getSelection ()); + } + + /** + * Listens to widgetSelected() events on DWT.DROP_DOWN type ToolItems + * and opens/closes a menu when appropriate. + */ + class DropDownSelectionListener : SelectionAdapter { + private Menu menu = null; + private bool visible = false; + + public void widgetSelected(SelectionEvent event) { + // Create the menu if it has not already been created + if (menu is null) { + // Lazy create the menu. + menu = new Menu(shell); + menu.addMenuListener(new class() MenuAdapter { + public void menuHidden(MenuEvent e) { + visible = false; + } + }); + for (int i = 0; i < 9; ++i) { + final char[] text = ControlExample.getResourceString("DropDownData_" ~ to!(char[])(i)); + if (text.length !is 0) { + MenuItem menuItem = new MenuItem(menu, DWT.NONE); + menuItem.setText(text); + /* + * Add a menu selection listener so that the menu is hidden + * when the user selects an item from the drop down menu. + */ + menuItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + setMenuVisible(false); + } + }); + } else { + new MenuItem(menu, DWT.SEPARATOR); + } + } + } + + /** + * A selection event will be fired when a drop down tool + * item is selected in the main area and in the drop + * down arrow. Examine the event detail to determine + * where the widget was selected. + */ + if (event.detail is DWT.ARROW) { + /* + * The drop down arrow was selected. + */ + if (visible) { + // Hide the menu to give the Arrow the appearance of being a toggle button. + setMenuVisible(false); + } else { + // Position the menu below and vertically aligned with the the drop down tool button. + ToolItem toolItem = cast(ToolItem) event.widget; + ToolBar toolBar = toolItem.getParent(); + + Rectangle toolItemBounds = toolItem.getBounds(); + Point point = toolBar.toDisplay(new Point(toolItemBounds.x, toolItemBounds.y)); + menu.setLocation(point.x, point.y + toolItemBounds.height); + setMenuVisible(true); + } + } else { + /* + * Main area of drop down tool item selected. + * An application would invoke the code to perform the action for the tool item. + */ + } + } + private void setMenuVisible(bool visible) { + menu.setVisible(visible); + this.visible = visible; + } + } + + /** + * Listens to widgetSelected() events on DWT.DROP_DOWN type CoolItems + * and opens/closes a menu when appropriate. + */ + class CoolItemSelectionListener : SelectionAdapter { + private Menu menu = null; + + public void widgetSelected(SelectionEvent event) { + /** + * 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 is DWT.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. */ + CoolItem coolItem = cast(CoolItem) event.widget; + Rectangle itemBounds = coolItem.getBounds (); + itemBounds.width = event.x - itemBounds.x; + Point pt = coolBar.toDisplay(new Point (itemBounds.x, itemBounds.y)); + itemBounds.x = pt.x; + itemBounds.y = pt.y; + + /* Get the toolbar from the cool item. */ + ToolBar toolBar = cast(ToolBar) coolItem.getControl (); + 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!=toolBounds) break; + i++; + } + + /* Create a pop-up menu with items for each of the hidden buttons. */ + menu = new Menu (coolBar); + for (int j = i; j < toolCount; j++) { + ToolItem tool = tools[j]; + Image image = tool.getImage(); + if (image is null) { + new MenuItem (menu, DWT.SEPARATOR); + } else { + if ((tool.getStyle() & DWT.DROP_DOWN) !is 0) { + MenuItem menuItem = new MenuItem (menu, DWT.CASCADE); + menuItem.setImage(image); + char[] text = tool.getToolTipText(); + if (text !is null) menuItem.setText(text); + Menu m = new Menu(menu); + menuItem.setMenu(m); + for (int k = 0; k < 9; ++k) { + text = ControlExample.getResourceString("DropDownData_" ~ to!(char[])(k)); + if (text.length !is 0) { + MenuItem mi = new MenuItem(m, DWT.NONE); + mi.setText(text); + /* Application code to perform the action for the submenu item would go here. */ + } else { + new MenuItem(m, DWT.SEPARATOR); + } + } + } else { + MenuItem menuItem = new MenuItem (menu, DWT.NONE); + menuItem.setImage(image); + char[] text = tool.getToolTipText(); + if (text !is null) menuItem.setText(text); + } + /* 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 = coolBar.toDisplay(new Point(event.x, event.y)); + menu.setLocation (pt.x, pt.y); + menu.setVisible (true); + while (menu !is null && !menu.isDisposed() && menu.isVisible ()) { + if (!display.readAndDispatch ()) display.sleep (); + } + if (menu !is null) { + menu.dispose (); + menu = null; + } + } + } + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/CustomControlExample.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/CustomControlExample.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,83 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.CustomControlExample; + + +import dwt.layout.FillLayout; +import dwt.widgets.Composite; +import dwt.widgets.Display; +import dwt.widgets.Shell; + +import dwtexamples.controlexample.ControlExample; +import dwtexamples.controlexample.CComboTab; +import dwtexamples.controlexample.CLabelTab; +import dwtexamples.controlexample.CTabFolderTab; +import dwtexamples.controlexample.SashFormTab; +import dwtexamples.controlexample.StyledTextTab; + +import dwtexamples.controlexample.Tab; +import tango.io.Stdout; + +version( CUSTOM_CONTROL_EXAMPLE_MAIN ){ + void main(){ + Stdout.formatln( "The CustomControlExample: still work left" ); + Stdout.formatln( "warning in Control:setBounds() line=695 gtk_widget_size_allocate()" ); + Stdout.formatln( "Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -5 and height 15" ); + Stdout.formatln( "for the CTabFolder widget. Params are OK. Further bugtracking needed." ); + Stdout.formatln( "please report problems" ); + CustomControlExample.main( null ); + } +} + +public class CustomControlExample : ControlExample { + + /** + * Creates an instance of a CustomControlExample embedded + * inside the supplied parent Composite. + * + * @param parent the container of the example + */ + public this(Composite parent) { + super (parent); + } + + /** + * Answers the set of example Tabs + */ + Tab[] createTabs() { + return [ cast(Tab) + new CComboTab (this), + new CLabelTab (this), + new CTabFolderTab (this), + new SashFormTab (this), + new StyledTextTab (this) + ]; + } + + /** + * Invokes as a standalone program. + */ + public static void main(char[][] args) { + Display display = new Display(); + Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + CustomControlExample instance = new CustomControlExample(shell); + shell.setText(getResourceString("custom.window.title")); + setShellSize(instance, shell); + shell.open(); + while (! shell.isDisposed()) { + if (! display.readAndDispatch()) display.sleep(); + } + instance.dispose(); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/DateTimeTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/DateTimeTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,132 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.DateTimeTab; + + + +import dwt.DWT; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.DateTime; +import dwt.widgets.Group; +import dwt.widgets.Widget; + +class DateTimeTab : Tab { + /* Example widgets and groups that contain them */ + DateTime dateTime1; + Group dateTimeGroup; + + /* Style widgets added to the "Style" group */ + Button dateButton, timeButton, calendarButton, shortButton, mediumButton, longButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the list */ + dateTimeGroup = new Group (exampleGroup, DWT.NONE); + dateTimeGroup.setLayout (new GridLayout ()); + dateTimeGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + dateTimeGroup.setText ("DateTime"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (dateButton.getSelection ()) style |= DWT.DATE; + if (timeButton.getSelection ()) style |= DWT.TIME; + if (calendarButton.getSelection ()) style |= DWT.CALENDAR; + if (shortButton.getSelection ()) style |= DWT.SHORT; + if (mediumButton.getSelection ()) style |= DWT.MEDIUM; + if (longButton.getSelection ()) style |= DWT.LONG; + if (borderButton.getSelection ()) style |= DWT.BORDER; + + /* Create the example widgets */ + dateTime1 = new DateTime (dateTimeGroup, style); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + dateButton = new Button(styleGroup, DWT.RADIO); + dateButton.setText("DWT.DATE"); + timeButton = new Button(styleGroup, DWT.RADIO); + timeButton.setText("DWT.TIME"); + calendarButton = new Button(styleGroup, DWT.RADIO); + calendarButton.setText("DWT.CALENDAR"); + Group formatGroup = new Group(styleGroup, DWT.NONE); + formatGroup.setLayout(new GridLayout()); + shortButton = new Button(formatGroup, DWT.RADIO); + shortButton.setText("DWT.SHORT"); + mediumButton = new Button(formatGroup, DWT.RADIO); + mediumButton.setText("DWT.MEDIUM"); + longButton = new Button(formatGroup, DWT.RADIO); + longButton.setText("DWT.LONG"); + borderButton = new Button(styleGroup, DWT.CHECK); + borderButton.setText("DWT.BORDER"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return new Widget [] {dateTime1}; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + String[] getMethodNames() { + return new String[] {"Day", "Hours", "Minutes", "Month", "Seconds", "Year"}; + } + + /** + * Gets the text for the tab folder item. + */ + String getTabText () { + return "DateTime"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + dateButton.setSelection ((dateTime1.getStyle () & DWT.DATE) !is 0); + timeButton.setSelection ((dateTime1.getStyle () & DWT.TIME) !is 0); + calendarButton.setSelection ((dateTime1.getStyle () & DWT.CALENDAR) !is 0); + shortButton.setSelection ((dateTime1.getStyle () & DWT.SHORT) !is 0); + mediumButton.setSelection ((dateTime1.getStyle () & DWT.MEDIUM) !is 0); + longButton.setSelection ((dateTime1.getStyle () & DWT.LONG) !is 0); + borderButton.setSelection ((dateTime1.getStyle () & DWT.BORDER) !is 0); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/DialogTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/DialogTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,512 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.DialogTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.graphics.FontData; +import dwt.graphics.RGB; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.printing.PrintDialog; +import dwt.printing.PrinterData; +import dwt.widgets.Button; +import dwt.widgets.ColorDialog; +import dwt.widgets.Combo; +import dwt.widgets.DirectoryDialog; +import dwt.widgets.FileDialog; +import dwt.widgets.FontDialog; +import dwt.widgets.Group; +import dwt.widgets.MessageBox; +import dwt.widgets.Text; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import tango.text.convert.Format; + +class DialogTab : Tab { + /* Example widgets and groups that contain them */ + Group dialogStyleGroup, resultGroup; + Text textWidget; + + /* Style widgets added to the "Style" group */ + Combo dialogCombo; + Button createButton; + Button okButton, cancelButton; + Button yesButton, noButton; + Button retryButton; + Button abortButton, ignoreButton; + Button iconErrorButton, iconInformationButton, iconQuestionButton; + Button iconWarningButton, iconWorkingButton, noIconButton; + Button primaryModalButton, applicationModalButton, systemModalButton; + Button saveButton, openButton, multiButton; + + static const char[] [] FilterExtensions = ["*.txt", "*.bat", "*.doc", "*"]; + static char[] [] FilterNames; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + if( FilterNames.length is 0 ){ + FilterNames = [ ControlExample.getResourceString("FilterName_0"), + ControlExample.getResourceString("FilterName_1"), + ControlExample.getResourceString("FilterName_2"), + ControlExample.getResourceString("FilterName_3")]; + } + } + + /** + * Handle a button style selection event. + * + * @param event the selection event + */ + void buttonStyleSelected(SelectionEvent event) { + /* + * Only certain combinations of button styles are + * supported for various dialogs. Make sure the + * control widget reflects only valid combinations. + */ + bool ok = okButton.getSelection (); + bool cancel = cancelButton.getSelection (); + bool yes = yesButton.getSelection (); + bool no = noButton.getSelection (); + bool abort = abortButton.getSelection (); + bool retry = retryButton.getSelection (); + bool ignore = ignoreButton.getSelection (); + + okButton.setEnabled (!(yes || no || retry || abort || ignore)); + cancelButton.setEnabled (!(abort || ignore || (yes !is no))); + yesButton.setEnabled (!(ok || retry || abort || ignore || (cancel && !yes && !no))); + noButton.setEnabled (!(ok || retry || abort || ignore || (cancel && !yes && !no))); + retryButton.setEnabled (!(ok || yes || no)); + abortButton.setEnabled (!(ok || cancel || yes || no)); + ignoreButton.setEnabled (!(ok || cancel || yes || no)); + + createButton.setEnabled ( + !(ok || cancel || yes || no || retry || abort || ignore) || + ok || + (ok && cancel) || + (yes && no) || + (yes && no && cancel) || + (retry && cancel) || + (abort && retry && ignore)); + + + } + + /** + * Handle the create button selection event. + * + * @param event org.eclipse.swt.events.SelectionEvent + */ + void createButtonSelected(SelectionEvent event) { + + /* Compute the appropriate dialog style */ + int style = getDefaultStyle(); + if (okButton.getEnabled () && okButton.getSelection ()) style |= DWT.OK; + if (cancelButton.getEnabled () && cancelButton.getSelection ()) style |= DWT.CANCEL; + if (yesButton.getEnabled () && yesButton.getSelection ()) style |= DWT.YES; + if (noButton.getEnabled () && noButton.getSelection ()) style |= DWT.NO; + if (retryButton.getEnabled () && retryButton.getSelection ()) style |= DWT.RETRY; + if (abortButton.getEnabled () && abortButton.getSelection ()) style |= DWT.ABORT; + if (ignoreButton.getEnabled () && ignoreButton.getSelection ()) style |= DWT.IGNORE; + if (iconErrorButton.getEnabled () && iconErrorButton.getSelection ()) style |= DWT.ICON_ERROR; + if (iconInformationButton.getEnabled () && iconInformationButton.getSelection ()) style |= DWT.ICON_INFORMATION; + if (iconQuestionButton.getEnabled () && iconQuestionButton.getSelection ()) style |= DWT.ICON_QUESTION; + if (iconWarningButton.getEnabled () && iconWarningButton.getSelection ()) style |= DWT.ICON_WARNING; + if (iconWorkingButton.getEnabled () && iconWorkingButton.getSelection ()) style |= DWT.ICON_WORKING; + if (primaryModalButton.getEnabled () && primaryModalButton.getSelection ()) style |= DWT.PRIMARY_MODAL; + if (applicationModalButton.getEnabled () && applicationModalButton.getSelection ()) style |= DWT.APPLICATION_MODAL; + if (systemModalButton.getEnabled () && systemModalButton.getSelection ()) style |= DWT.SYSTEM_MODAL; + if (saveButton.getEnabled () && saveButton.getSelection ()) style |= DWT.SAVE; + if (openButton.getEnabled () && openButton.getSelection ()) style |= DWT.OPEN; + if (multiButton.getEnabled () && multiButton.getSelection ()) style |= DWT.MULTI; + + /* Open the appropriate dialog type */ + char[] name = dialogCombo.getText (); + + if (name == ControlExample.getResourceString("ColorDialog")) { + ColorDialog dialog = new ColorDialog (shell ,style); + dialog.setRGB (new RGB (100, 100, 100)); + dialog.setText (ControlExample.getResourceString("Title")); + RGB result = dialog.open (); + textWidget.append (Format( ControlExample.getResourceString("ColorDialog")~"{}", Text.DELIMITER)); + textWidget.append (Format( ControlExample.getResourceString("Result")~"{}{}", result, Text.DELIMITER, Text.DELIMITER)); + return; + } + + if (name == ControlExample.getResourceString("DirectoryDialog")) { + DirectoryDialog dialog = new DirectoryDialog (shell, style); + dialog.setMessage (ControlExample.getResourceString("Example_string")); + dialog.setText (ControlExample.getResourceString("Title")); + char[] result = dialog.open (); + textWidget.append (ControlExample.getResourceString("DirectoryDialog") ~ Text.DELIMITER); + textWidget.append (Format( ControlExample.getResourceString("Result"), result ) ~ Text.DELIMITER ~ Text.DELIMITER); + return; + } + + if (name== ControlExample.getResourceString("FileDialog")) { + FileDialog dialog = new FileDialog (shell, style); + dialog.setFileName (ControlExample.getResourceString("readme_txt")); + dialog.setFilterNames (FilterNames); + dialog.setFilterExtensions (FilterExtensions); + dialog.setText (ControlExample.getResourceString("Title")); + char[] result = dialog.open(); + textWidget.append (ControlExample.getResourceString("FileDialog") ~ Text.DELIMITER); + textWidget.append (Format( ControlExample.getResourceString("Result"), result ) ~ Text.DELIMITER); + if ((dialog.getStyle () & DWT.MULTI) !is 0) { + char[] [] files = dialog.getFileNames (); + for (int i=0; i + *******************************************************************************/ +module dwtexamples.controlexample.ExpandBarTab; + + + +import dwt.DWT; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Composite; +import dwt.widgets.ExpandBar; +import dwt.widgets.ExpandItem; +import dwt.widgets.Group; +import dwt.widgets.Label; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + +class ExpandBarTab : Tab { + /* Example widgets and groups that contain them */ + ExpandBar expandBar1; + Group expandBarGroup; + + /* Style widgets added to the "Style" group */ + Button verticalButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the list */ + expandBarGroup = new Group (exampleGroup, DWT.NONE); + expandBarGroup.setLayout (new GridLayout ()); + expandBarGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + expandBarGroup.setText ("ExpandBar"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (verticalButton.getSelection()) style |= DWT.V_SCROLL; + + /* Create the example widgets */ + expandBar1 = new ExpandBar (expandBarGroup, style); + + // First item + Composite composite = new Composite (expandBar1, DWT.NONE); + composite.setLayout(new GridLayout ()); + (new Button (composite, DWT.PUSH)).setText("DWT.PUSH"); + (new Button (composite, DWT.RADIO)).setText("DWT.RADIO"); + (new Button (composite, DWT.CHECK)).setText("DWT.CHECK"); + (new Button (composite, DWT.TOGGLE)).setText("DWT.TOGGLE"); + ExpandItem item = new ExpandItem (expandBar1, DWT.NONE, 0); + item.setText(ControlExample.getResourceString("Item1_Text")); + item.setHeight(composite.computeSize(DWT.DEFAULT, DWT.DEFAULT).y); + item.setControl(composite); + item.setImage(instance.images[ControlExample.ciClosedFolder]); + + // Second item + composite = new Composite (expandBar1, DWT.NONE); + composite.setLayout(new GridLayout (2, false)); + (new Label (composite, DWT.NONE)).setImage(display.getSystemImage(DWT.ICON_ERROR)); + (new Label (composite, DWT.NONE)).setText("DWT.ICON_ERROR"); + (new Label (composite, DWT.NONE)).setImage(display.getSystemImage(DWT.ICON_INFORMATION)); + (new Label (composite, DWT.NONE)).setText("DWT.ICON_INFORMATION"); + (new Label (composite, DWT.NONE)).setImage(display.getSystemImage(DWT.ICON_WARNING)); + (new Label (composite, DWT.NONE)).setText("DWT.ICON_WARNING"); + (new Label (composite, DWT.NONE)).setImage(display.getSystemImage(DWT.ICON_QUESTION)); + (new Label (composite, DWT.NONE)).setText("DWT.ICON_QUESTION"); + item = new ExpandItem (expandBar1, DWT.NONE, 1); + item.setText(ControlExample.getResourceString("Item2_Text")); + item.setHeight(composite.computeSize(DWT.DEFAULT, DWT.DEFAULT).y); + item.setControl(composite); + item.setImage(instance.images[ControlExample.ciOpenFolder]); + item.setExpanded(true); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + verticalButton = new Button (styleGroup, DWT.CHECK); + verticalButton.setText ("DWT.V_SCROLL"); + verticalButton.setSelection(true); + borderButton = new Button(styleGroup, DWT.CHECK); + borderButton.setText("DWT.BORDER"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) expandBar1]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["Spacing"]; + } + + /** + * Gets the short text for the tab folder item. + */ + public char[] getShortTabText() { + return "EB"; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "ExpandBar"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + Widget [] widgets = getExampleWidgets (); + if (widgets.length !is 0){ + verticalButton.setSelection ((widgets [0].getStyle () & DWT.V_SCROLL) !is 0); + borderButton.setSelection ((widgets [0].getStyle () & DWT.BORDER) !is 0); + } + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/GroupTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/GroupTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,164 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.GroupTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + +class GroupTab : Tab { + Button titleButton; + + /* Example widgets and groups that contain them */ + Group group1; + Group groupGroup; + + /* Style widgets added to the "Style" group */ + Button shadowEtchedInButton, shadowEtchedOutButton, shadowInButton, shadowOutButton, shadowNoneButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Other" group. + */ + void createOtherGroup () { + super.createOtherGroup (); + + /* Create display controls specific to this example */ + titleButton = new Button (otherGroup, DWT.CHECK); + titleButton.setText (ControlExample.getResourceString("Title_Text")); + + /* Add the listeners */ + titleButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setTitleText (); + } + }); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the Group */ + groupGroup = new Group (exampleGroup, DWT.NONE); + groupGroup.setLayout (new GridLayout ()); + groupGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + groupGroup.setText ("Group"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (shadowEtchedInButton.getSelection ()) style |= DWT.SHADOW_ETCHED_IN; + if (shadowEtchedOutButton.getSelection ()) style |= DWT.SHADOW_ETCHED_OUT; + if (shadowInButton.getSelection ()) style |= DWT.SHADOW_IN; + if (shadowOutButton.getSelection ()) style |= DWT.SHADOW_OUT; + if (shadowNoneButton.getSelection ()) style |= DWT.SHADOW_NONE; + if (borderButton.getSelection ()) style |= DWT.BORDER; + + /* Create the example widgets */ + group1 = new Group (groupGroup, style); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + shadowEtchedInButton = new Button (styleGroup, DWT.RADIO); + shadowEtchedInButton.setText ("DWT.SHADOW_ETCHED_IN"); + shadowEtchedInButton.setSelection(true); + shadowEtchedOutButton = new Button (styleGroup, DWT.RADIO); + shadowEtchedOutButton.setText ("DWT.SHADOW_ETCHED_OUT"); + shadowInButton = new Button (styleGroup, DWT.RADIO); + shadowInButton.setText ("DWT.SHADOW_IN"); + shadowOutButton = new Button (styleGroup, DWT.RADIO); + shadowOutButton.setText ("DWT.SHADOW_OUT"); + shadowNoneButton = new Button (styleGroup, DWT.RADIO); + shadowNoneButton.setText ("DWT.SHADOW_NONE"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) group1]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["ToolTipText"]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Group"; + } + + /** + * Sets the title text of the "Example" widgets. + */ + void setTitleText () { + if (titleButton.getSelection ()) { + group1.setText (ControlExample.getResourceString("Title_Text")); + } else { + group1.setText (""); + } + setExampleWidgetSize (); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + shadowEtchedInButton.setSelection ((group1.getStyle () & DWT.SHADOW_ETCHED_IN) !is 0); + shadowEtchedOutButton.setSelection ((group1.getStyle () & DWT.SHADOW_ETCHED_OUT) !is 0); + shadowInButton.setSelection ((group1.getStyle () & DWT.SHADOW_IN) !is 0); + shadowOutButton.setSelection ((group1.getStyle () & DWT.SHADOW_OUT) !is 0); + shadowNoneButton.setSelection ((group1.getStyle () & DWT.SHADOW_NONE) !is 0); + borderButton.setSelection ((group1.getStyle () & DWT.BORDER) !is 0); + if (!instance.startup) setTitleText (); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/LabelTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/LabelTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,195 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.LabelTab; + + + +import dwt.DWT; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Label; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import dwtexamples.controlexample.AlignableTab; + +class LabelTab : AlignableTab { + /* Example widgets and groups that contain them */ + Label label1, label2, label3, label4, label5, label6; + Group textLabelGroup, imageLabelGroup; + + /* Style widgets added to the "Style" group */ + Button wrapButton, separatorButton, horizontalButton, verticalButton, shadowInButton, shadowOutButton, shadowNoneButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the text labels */ + textLabelGroup = new Group(exampleGroup, DWT.NONE); + GridLayout gridLayout = new GridLayout (); + textLabelGroup.setLayout (gridLayout); + gridLayout.numColumns = 3; + textLabelGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + textLabelGroup.setText (ControlExample.getResourceString("Text_Labels")); + + /* Create a group for the image labels */ + imageLabelGroup = new Group (exampleGroup, DWT.SHADOW_NONE); + gridLayout = new GridLayout (); + imageLabelGroup.setLayout (gridLayout); + gridLayout.numColumns = 3; + imageLabelGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + imageLabelGroup.setText (ControlExample.getResourceString("Image_Labels")); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (wrapButton.getSelection ()) style |= DWT.WRAP; + if (separatorButton.getSelection ()) style |= DWT.SEPARATOR; + if (horizontalButton.getSelection ()) style |= DWT.HORIZONTAL; + if (verticalButton.getSelection ()) style |= DWT.VERTICAL; + if (shadowInButton.getSelection ()) style |= DWT.SHADOW_IN; + if (shadowOutButton.getSelection ()) style |= DWT.SHADOW_OUT; + if (shadowNoneButton.getSelection ()) style |= DWT.SHADOW_NONE; + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (leftButton.getSelection ()) style |= DWT.LEFT; + if (centerButton.getSelection ()) style |= DWT.CENTER; + if (rightButton.getSelection ()) style |= DWT.RIGHT; + + /* Create the example widgets */ + label1 = new Label (textLabelGroup, style); + label1.setText(ControlExample.getResourceString("One")); + label2 = new Label (textLabelGroup, style); + label2.setText(ControlExample.getResourceString("Two")); + label3 = new Label (textLabelGroup, style); + if (wrapButton.getSelection ()) { + label3.setText (ControlExample.getResourceString("Wrap_Text")); + } else { + label3.setText (ControlExample.getResourceString("Three")); + } + label4 = new Label (imageLabelGroup, style); + label4.setImage (instance.images[ControlExample.ciClosedFolder]); + label5 = new Label (imageLabelGroup, style); + label5.setImage (instance.images[ControlExample.ciOpenFolder]); + label6 = new Label(imageLabelGroup, style); + label6.setImage (instance.images[ControlExample.ciTarget]); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + wrapButton = new Button (styleGroup, DWT.CHECK); + wrapButton.setText ("DWT.WRAP"); + separatorButton = new Button (styleGroup, DWT.CHECK); + separatorButton.setText ("DWT.SEPARATOR"); + horizontalButton = new Button (styleGroup, DWT.RADIO); + horizontalButton.setText ("DWT.HORIZONTAL"); + verticalButton = new Button (styleGroup, DWT.RADIO); + verticalButton.setText ("DWT.VERTICAL"); + Group styleSubGroup = new Group (styleGroup, DWT.NONE); + styleSubGroup.setLayout (new GridLayout ()); + shadowInButton = new Button (styleSubGroup, DWT.RADIO); + shadowInButton.setText ("DWT.SHADOW_IN"); + shadowOutButton = new Button (styleSubGroup, DWT.RADIO); + shadowOutButton.setText ("DWT.SHADOW_OUT"); + shadowNoneButton = new Button (styleSubGroup, DWT.RADIO); + shadowNoneButton.setText ("DWT.SHADOW_NONE"); + borderButton = new Button(styleGroup, DWT.CHECK); + borderButton.setText("DWT.BORDER"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) label1, label2, label3, label4, label5, label6 ]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["Text", "ToolTipText"]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Label"; + } + + /** + * Sets the alignment of the "Example" widgets. + */ + void setExampleWidgetAlignment () { + int alignment = 0; + if (leftButton.getSelection ()) alignment = DWT.LEFT; + if (centerButton.getSelection ()) alignment = DWT.CENTER; + if (rightButton.getSelection ()) alignment = DWT.RIGHT; + label1.setAlignment (alignment); + label2.setAlignment (alignment); + label3.setAlignment (alignment); + label4.setAlignment (alignment); + label5.setAlignment (alignment); + label6.setAlignment (alignment); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + bool isSeparator = (label1.getStyle () & DWT.SEPARATOR) !is 0; + wrapButton.setSelection (!isSeparator && (label1.getStyle () & DWT.WRAP) !is 0); + leftButton.setSelection (!isSeparator && (label1.getStyle () & DWT.LEFT) !is 0); + centerButton.setSelection (!isSeparator && (label1.getStyle () & DWT.CENTER) !is 0); + rightButton.setSelection (!isSeparator && (label1.getStyle () & DWT.RIGHT) !is 0); + shadowInButton.setSelection (isSeparator && (label1.getStyle () & DWT.SHADOW_IN) !is 0); + shadowOutButton.setSelection (isSeparator && (label1.getStyle () & DWT.SHADOW_OUT) !is 0); + shadowNoneButton.setSelection (isSeparator && (label1.getStyle () & DWT.SHADOW_NONE) !is 0); + horizontalButton.setSelection (isSeparator && (label1.getStyle () & DWT.HORIZONTAL) !is 0); + verticalButton.setSelection (isSeparator && (label1.getStyle () & DWT.VERTICAL) !is 0); + wrapButton.setEnabled (!isSeparator); + leftButton.setEnabled (!isSeparator); + centerButton.setEnabled (!isSeparator); + rightButton.setEnabled (!isSeparator); + shadowInButton.setEnabled (isSeparator); + shadowOutButton.setEnabled (isSeparator); + shadowNoneButton.setEnabled (isSeparator); + horizontalButton.setEnabled (isSeparator); + verticalButton.setEnabled (isSeparator); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/LinkTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/LinkTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,110 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.LinkTab; + + + +import dwt.DWT; +import dwt.DWTError; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Label; +import dwt.widgets.Link; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + +class LinkTab : Tab { + /* Example widgets and groups that contain them */ + Link link1; + Group linkGroup; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + override void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the list */ + linkGroup = new Group (exampleGroup, DWT.NONE); + linkGroup.setLayout (new GridLayout ()); + linkGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + linkGroup.setText ("Link"); + } + + /** + * Creates the "Example" widgets. + */ + override void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (borderButton.getSelection ()) style |= DWT.BORDER; + + /* Create the example widgets */ + try { + link1 = new Link (linkGroup, style); + link1.setText (ControlExample.getResourceString("LinkText")); + } catch (DWTError e) { + // temporary code for photon + Label label = new Label (linkGroup, DWT.CENTER | DWT.WRAP); + label.setText ("Link widget not suported"); + } + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + borderButton = new Button(styleGroup, DWT.CHECK); + borderButton.setText("DWT.BORDER"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { +// temporary code for photon + if (link1 !is null) return [ cast(Widget) link1 ]; + return null; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["Text", "ToolTipText"]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Link"; + } + +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/ListTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ListTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,107 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.ListTab; + + + +import dwt.DWT; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Group; +import dwt.widgets.List; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import dwtexamples.controlexample.ScrollableTab; + +class ListTab : ScrollableTab { + + /* Example widgets and groups that contain them */ + List list1; + Group listGroup; + + static char[] [] ListData1; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + if( ListData1.length is 0 ){ + ListData1 = [ + ControlExample.getResourceString("ListData1_0"), + ControlExample.getResourceString("ListData1_1"), + ControlExample.getResourceString("ListData1_2"), + ControlExample.getResourceString("ListData1_3"), + ControlExample.getResourceString("ListData1_4"), + ControlExample.getResourceString("ListData1_5"), + ControlExample.getResourceString("ListData1_6"), + ControlExample.getResourceString("ListData1_7"), + ControlExample.getResourceString("ListData1_8")]; + } + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the list */ + listGroup = new Group (exampleGroup, DWT.NONE); + listGroup.setLayout (new GridLayout ()); + listGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + listGroup.setText ("List"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (singleButton.getSelection ()) style |= DWT.SINGLE; + if (multiButton.getSelection ()) style |= DWT.MULTI; + if (horizontalButton.getSelection ()) style |= DWT.H_SCROLL; + if (verticalButton.getSelection ()) style |= DWT.V_SCROLL; + if (borderButton.getSelection ()) style |= DWT.BORDER; + + /* Create the example widgets */ + list1 = new List (listGroup, style); + list1.setItems (ListData1); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [cast(Widget) list1]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["Items", "Selection", "ToolTipText", "TopIndex" ]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "List"; + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/MenuTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/MenuTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,326 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.MenuTab; + + + +import dwt.DWT; +import dwt.events.PaintEvent; +import dwt.events.PaintListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Label; +import dwt.widgets.Menu; +import dwt.widgets.MenuItem; +import dwt.widgets.Shell; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import tango.util.Convert; + +class MenuTab : Tab { + /* Widgets added to the "Menu Style", "MenuItem Style" and "Other" groups */ + Button barButton, dropDownButton, popUpButton, noRadioGroupButton, leftToRightButton, rightToLeftButton; + Button checkButton, cascadeButton, pushButton, radioButton, separatorButton; + Button imagesButton, acceleratorsButton, mnemonicsButton, subMenuButton, subSubMenuButton; + Button createButton, closeAllButton; + Group menuItemStyleGroup; + + /* Variables used to track the open shells */ + int shellCount = 0; + Shell [] shells; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + shells = new Shell [4]; + } + + /** + * Close all the example shells. + */ + void closeAllShells() { + for (int i = 0; i= shells.length) { + Shell [] newShells = new Shell [shells.length + 4]; + System.arraycopy (shells, 0, newShells, 0, shells.length); + shells = newShells; + } + + int orientation = 0; + if (leftToRightButton.getSelection()) orientation |= DWT.LEFT_TO_RIGHT; + if (rightToLeftButton.getSelection()) orientation |= DWT.RIGHT_TO_LEFT; + int radioBehavior = 0; + if (noRadioGroupButton.getSelection()) radioBehavior |= DWT.NO_RADIO_GROUP; + + /* Create the shell and menu(s) */ + Shell shell = new Shell (DWT.SHELL_TRIM | orientation); + shells [shellCount] = shell; + if (barButton.getSelection ()) { + /* Create menu bar. */ + Menu menuBar = new Menu(shell, DWT.BAR | radioBehavior); + shell.setMenuBar(menuBar); + hookListeners(menuBar); + + if (dropDownButton.getSelection() && cascadeButton.getSelection()) { + /* Create cascade button and drop-down menu in menu bar. */ + MenuItem item = new MenuItem(menuBar, DWT.CASCADE); + item.setText(getMenuItemText("Cascade")); + if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciOpenFolder]); + hookListeners(item); + Menu dropDownMenu = new Menu(shell, DWT.DROP_DOWN | radioBehavior); + item.setMenu(dropDownMenu); + hookListeners(dropDownMenu); + + /* Create various menu items, depending on selections. */ + createMenuItems(dropDownMenu, subMenuButton.getSelection(), subSubMenuButton.getSelection()); + } + } + + if (popUpButton.getSelection()) { + /* Create pop-up menu. */ + Menu popUpMenu = new Menu(shell, DWT.POP_UP | radioBehavior); + shell.setMenu(popUpMenu); + hookListeners(popUpMenu); + + /* Create various menu items, depending on selections. */ + createMenuItems(popUpMenu, subMenuButton.getSelection(), subSubMenuButton.getSelection()); + } + + /* Set the size, title and open the shell. */ + shell.setSize (300, 100); + shell.setText (ControlExample.getResourceString("Title") ~ to!(char[])(shellCount)); + shell.addPaintListener(new class() PaintListener { + public void paintControl(PaintEvent e) { + e.gc.drawString(ControlExample.getResourceString("PopupMenuHere"), 20, 20); + } + }); + shell.open (); + shellCount++; + } + + /** + * Creates the "Control" group. + */ + void createControlGroup () { + /* + * Create the "Control" group. This is the group on the + * right half of each example tab. For MenuTab, it consists of + * the Menu style group, the MenuItem style group and the 'other' group. + */ + controlGroup = new Group (tabFolderPage, DWT.NONE); + controlGroup.setLayout (new GridLayout (2, true)); + controlGroup.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + controlGroup.setText (ControlExample.getResourceString("Parameters")); + + /* Create a group for the menu style controls */ + styleGroup = new Group (controlGroup, DWT.NONE); + styleGroup.setLayout (new GridLayout ()); + styleGroup.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + styleGroup.setText (ControlExample.getResourceString("Menu_Styles")); + + /* Create a group for the menu item style controls */ + menuItemStyleGroup = new Group (controlGroup, DWT.NONE); + menuItemStyleGroup.setLayout (new GridLayout ()); + menuItemStyleGroup.setLayoutData (new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + menuItemStyleGroup.setText (ControlExample.getResourceString("MenuItem_Styles")); + + /* Create a group for the 'other' controls */ + otherGroup = new Group (controlGroup, DWT.NONE); + otherGroup.setLayout (new GridLayout ()); + otherGroup.setLayoutData (new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + otherGroup.setText (ControlExample.getResourceString("Other")); + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + + /* Create the menu style buttons */ + barButton = new Button (styleGroup, DWT.CHECK); + barButton.setText ("DWT.BAR"); + dropDownButton = new Button (styleGroup, DWT.CHECK); + dropDownButton.setText ("DWT.DROP_DOWN"); + popUpButton = new Button (styleGroup, DWT.CHECK); + popUpButton.setText ("DWT.POP_UP"); + noRadioGroupButton = new Button (styleGroup, DWT.CHECK); + noRadioGroupButton.setText ("DWT.NO_RADIO_GROUP"); + leftToRightButton = new Button (styleGroup, DWT.RADIO); + leftToRightButton.setText ("DWT.LEFT_TO_RIGHT"); + leftToRightButton.setSelection(true); + rightToLeftButton = new Button (styleGroup, DWT.RADIO); + rightToLeftButton.setText ("DWT.RIGHT_TO_LEFT"); + + /* Create the menu item style buttons */ + cascadeButton = new Button (menuItemStyleGroup, DWT.CHECK); + cascadeButton.setText ("DWT.CASCADE"); + checkButton = new Button (menuItemStyleGroup, DWT.CHECK); + checkButton.setText ("DWT.CHECK"); + pushButton = new Button (menuItemStyleGroup, DWT.CHECK); + pushButton.setText ("DWT.PUSH"); + radioButton = new Button (menuItemStyleGroup, DWT.CHECK); + radioButton.setText ("DWT.RADIO"); + separatorButton = new Button (menuItemStyleGroup, DWT.CHECK); + separatorButton.setText ("DWT.SEPARATOR"); + + /* Create the 'other' buttons */ + imagesButton = new Button (otherGroup, DWT.CHECK); + imagesButton.setText (ControlExample.getResourceString("Images")); + acceleratorsButton = new Button (otherGroup, DWT.CHECK); + acceleratorsButton.setText (ControlExample.getResourceString("Accelerators")); + mnemonicsButton = new Button (otherGroup, DWT.CHECK); + mnemonicsButton.setText (ControlExample.getResourceString("Mnemonics")); + subMenuButton = new Button (otherGroup, DWT.CHECK); + subMenuButton.setText (ControlExample.getResourceString("SubMenu")); + subSubMenuButton = new Button (otherGroup, DWT.CHECK); + subSubMenuButton.setText (ControlExample.getResourceString("SubSubMenu")); + + /* Create the "create" and "closeAll" buttons (and a 'filler' label to place them) */ + new Label(controlGroup, DWT.NONE); + createButton = new Button (controlGroup, DWT.NONE); + createButton.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_END)); + createButton.setText (ControlExample.getResourceString("Create_Shell")); + closeAllButton = new Button (controlGroup, DWT.NONE); + closeAllButton.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_BEGINNING)); + closeAllButton.setText (ControlExample.getResourceString("Close_All_Shells")); + + /* Add the listeners */ + createButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + createButtonSelected(e); + } + }); + closeAllButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + closeAllShells (); + } + }); + subMenuButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + subSubMenuButton.setEnabled (subMenuButton.getSelection ()); + } + }); + + /* Set the default state */ + barButton.setSelection (true); + dropDownButton.setSelection (true); + popUpButton.setSelection (true); + cascadeButton.setSelection (true); + checkButton.setSelection (true); + pushButton.setSelection (true); + radioButton.setSelection (true); + separatorButton.setSelection (true); + subSubMenuButton.setEnabled (subMenuButton.getSelection ()); + } + + /* Create various menu items, depending on selections. */ + void createMenuItems(Menu menu, bool createSubMenu, bool createSubSubMenu) { + MenuItem item; + if (pushButton.getSelection()) { + item = new MenuItem(menu, DWT.PUSH); + item.setText(getMenuItemText("Push")); + if (acceleratorsButton.getSelection()) item.setAccelerator(DWT.MOD1 + DWT.MOD2 + 'P'); + if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciClosedFolder]); + hookListeners(item); + } + + if (separatorButton.getSelection()) { + new MenuItem(menu, DWT.SEPARATOR); + } + + if (checkButton.getSelection()) { + item = new MenuItem(menu, DWT.CHECK); + item.setText(getMenuItemText("Check")); + if (acceleratorsButton.getSelection()) item.setAccelerator(DWT.MOD1 + DWT.MOD2 + 'C'); + if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciOpenFolder]); + hookListeners(item); + } + + if (radioButton.getSelection()) { + item = new MenuItem(menu, DWT.RADIO); + item.setText(getMenuItemText("1Radio")); + if (acceleratorsButton.getSelection()) item.setAccelerator(DWT.MOD1 + DWT.MOD2 + '1'); + if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciTarget]); + item.setSelection(true); + hookListeners(item); + + item = new MenuItem(menu, DWT.RADIO); + item.setText(getMenuItemText("2Radio")); + if (acceleratorsButton.getSelection()) item.setAccelerator(DWT.MOD1 + DWT.MOD2 + '2'); + if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciTarget]); + hookListeners(item); + } + + if (createSubMenu && cascadeButton.getSelection()) { + /* Create cascade button and drop-down menu for the sub-menu. */ + item = new MenuItem(menu, DWT.CASCADE); + item.setText(getMenuItemText("Cascade")); + if (imagesButton.getSelection()) item.setImage(instance.images[ControlExample.ciOpenFolder]); + hookListeners(item); + Menu subMenu = new Menu(menu.getShell(), DWT.DROP_DOWN); + item.setMenu(subMenu); + hookListeners(subMenu); + + createMenuItems(subMenu, createSubSubMenu, false); + } + } + + char[] getMenuItemText(char[] item) { + bool cascade = ( item == "Cascade"); + bool mnemonic = mnemonicsButton.getSelection(); + bool accelerator = acceleratorsButton.getSelection(); + char acceleratorKey = item[0]; + if (mnemonic && accelerator && !cascade) { + return ControlExample.getResourceString(item ~ "WithMnemonic") ~ "\tCtrl+Shift+" ~ acceleratorKey; + } + if (accelerator && !cascade) { + return ControlExample.getResourceString(item) ~ "\tCtrl+Shift+" ~ acceleratorKey; + } + if (mnemonic) { + return ControlExample.getResourceString(item ~ "WithMnemonic"); + } + return ControlExample.getResourceString(item); + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Menu"; + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/ProgressBarTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ProgressBarTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,189 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.ProgressBarTab; + + + +import dwt.DWT; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.ProgressBar; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import dwtexamples.controlexample.RangeTab; + +class ProgressBarTab : RangeTab { + /* Example widgets and groups that contain them */ + ProgressBar progressBar1; + Group progressBarGroup; + + /* Style widgets added to the "Style" group */ + Button smoothButton; + Button indeterminateButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup() { + super.createExampleGroup (); + + /* Create a group for the progress bar */ + progressBarGroup = new Group (exampleGroup, DWT.NONE); + progressBarGroup.setLayout (new GridLayout ()); + progressBarGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + progressBarGroup.setText ("ProgressBar"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (horizontalButton.getSelection ()) style |= DWT.HORIZONTAL; + if (verticalButton.getSelection ()) style |= DWT.VERTICAL; + if (smoothButton.getSelection ()) style |= DWT.SMOOTH; + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (indeterminateButton.getSelection ()) style |= DWT.INDETERMINATE; + + /* Create the example widgets */ + progressBar1 = new ProgressBar (progressBarGroup, style); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + super.createStyleGroup (); + + /* Create the extra widgets */ + smoothButton = new Button (styleGroup, DWT.CHECK); + smoothButton.setText ("DWT.SMOOTH"); + indeterminateButton = new Button (styleGroup, DWT.CHECK); + indeterminateButton.setText ("DWT.INDETERMINATE"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) progressBar1]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["Selection", "ToolTipText"]; + } + + /** + * Gets the short text for the tab folder item. + */ + public char[] getShortTabText() { + return "PB"; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "ProgressBar"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + if (indeterminateButton.getSelection ()) { + selectionSpinner.setEnabled (false); + minimumSpinner.setEnabled (false); + maximumSpinner.setEnabled (false); + } else { + selectionSpinner.setEnabled (true); + minimumSpinner.setEnabled (true); + maximumSpinner.setEnabled (true); + } + smoothButton.setSelection ((progressBar1.getStyle () & DWT.SMOOTH) !is 0); + indeterminateButton.setSelection ((progressBar1.getStyle () & DWT.INDETERMINATE) !is 0); + } + + /** + * Gets the default maximum of the "Example" widgets. + */ + int getDefaultMaximum () { + return progressBar1.getMaximum(); + } + + /** + * Gets the default minimim of the "Example" widgets. + */ + int getDefaultMinimum () { + return progressBar1.getMinimum(); + } + + /** + * Gets the default selection of the "Example" widgets. + */ + int getDefaultSelection () { + return progressBar1.getSelection(); + } + + /** + * Sets the maximum of the "Example" widgets. + */ + void setWidgetMaximum () { + progressBar1.setMaximum (maximumSpinner.getSelection ()); + updateSpinners (); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMinimum () { + progressBar1.setMinimum (minimumSpinner.getSelection ()); + updateSpinners (); + } + + /** + * Sets the selection of the "Example" widgets. + */ + void setWidgetSelection () { + progressBar1.setSelection (selectionSpinner.getSelection ()); + updateSpinners (); + } + + /** + * Update the Spinner widgets to reflect the actual value set + * on the "Example" widget. + */ + void updateSpinners () { + minimumSpinner.setSelection (progressBar1.getMinimum ()); + selectionSpinner.setSelection (progressBar1.getSelection ()); + maximumSpinner.setSelection (progressBar1.getMaximum ()); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/RangeTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/RangeTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,208 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.RangeTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Spinner; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + +abstract class RangeTab : Tab { + /* Style widgets added to the "Style" group */ + Button horizontalButton, verticalButton; + bool orientationButtons = true; + + /* Scale widgets added to the "Control" group */ + Spinner minimumSpinner, selectionSpinner, maximumSpinner; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + /* Create controls specific to this example */ + createMinimumGroup (); + createMaximumGroup (); + createSelectionGroup (); + } + + /** + * Create a group of widgets to control the maximum + * attribute of the example widget. + */ + void createMaximumGroup() { + + /* Create the group */ + Group maximumGroup = new Group (controlGroup, DWT.NONE); + maximumGroup.setLayout (new GridLayout ()); + maximumGroup.setText (ControlExample.getResourceString("Maximum")); + maximumGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create a Spinner widget */ + maximumSpinner = new Spinner (maximumGroup, DWT.BORDER); + maximumSpinner.setMaximum (100000); + maximumSpinner.setSelection (getDefaultMaximum()); + maximumSpinner.setPageIncrement (100); + maximumSpinner.setIncrement (1); + maximumSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + maximumSpinner.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setWidgetMaximum (); + } + }); + } + + /** + * Create a group of widgets to control the minimum + * attribute of the example widget. + */ + void createMinimumGroup() { + + /* Create the group */ + Group minimumGroup = new Group (controlGroup, DWT.NONE); + minimumGroup.setLayout (new GridLayout ()); + minimumGroup.setText (ControlExample.getResourceString("Minimum")); + minimumGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create a Spinner widget */ + minimumSpinner = new Spinner (minimumGroup, DWT.BORDER); + minimumSpinner.setMaximum (100000); + minimumSpinner.setSelection(getDefaultMinimum()); + minimumSpinner.setPageIncrement (100); + minimumSpinner.setIncrement (1); + minimumSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + minimumSpinner.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setWidgetMinimum (); + } + }); + + } + + /** + * Create a group of widgets to control the selection + * attribute of the example widget. + */ + void createSelectionGroup() { + + /* Create the group */ + Group selectionGroup = new Group(controlGroup, DWT.NONE); + selectionGroup.setLayout(new GridLayout()); + GridData gridData = new GridData(DWT.FILL, DWT.BEGINNING, false, false); + selectionGroup.setLayoutData(gridData); + selectionGroup.setText(ControlExample.getResourceString("Selection")); + + /* Create a Spinner widget */ + selectionSpinner = new Spinner (selectionGroup, DWT.BORDER); + selectionSpinner.setMaximum (100000); + selectionSpinner.setSelection (getDefaultSelection()); + selectionSpinner.setPageIncrement (100); + selectionSpinner.setIncrement (1); + selectionSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + selectionSpinner.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent event) { + setWidgetSelection (); + } + }); + + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + super.createStyleGroup (); + + /* Create the extra widgets */ + if (orientationButtons) { + horizontalButton = new Button (styleGroup, DWT.RADIO); + horizontalButton.setText ("DWT.HORIZONTAL"); + verticalButton = new Button (styleGroup, DWT.RADIO); + verticalButton.setText ("DWT.VERTICAL"); + } + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + if (!instance.startup) { + setWidgetMinimum (); + setWidgetMaximum (); + setWidgetSelection (); + } + Widget [] widgets = getExampleWidgets (); + if (widgets.length !is 0) { + if (orientationButtons) { + horizontalButton.setSelection ((widgets [0].getStyle () & DWT.HORIZONTAL) !is 0); + verticalButton.setSelection ((widgets [0].getStyle () & DWT.VERTICAL) !is 0); + } + borderButton.setSelection ((widgets [0].getStyle () & DWT.BORDER) !is 0); + } + } + + /** + * Gets the default maximum of the "Example" widgets. + */ + abstract int getDefaultMaximum (); + + /** + * Gets the default minimim of the "Example" widgets. + */ + abstract int getDefaultMinimum (); + + /** + * Gets the default selection of the "Example" widgets. + */ + abstract int getDefaultSelection (); + + /** + * Sets the maximum of the "Example" widgets. + */ + abstract void setWidgetMaximum (); + + /** + * Sets the minimim of the "Example" widgets. + */ + abstract void setWidgetMinimum (); + + /** + * Sets the selection of the "Example" widgets. + */ + abstract void setWidgetSelection (); +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/SashFormTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/SashFormTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,142 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.SashFormTab; + + + +import dwt.DWT; +import dwt.custom.SashForm; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.List; +import dwt.widgets.Text; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + + +class SashFormTab : Tab { + /* Example widgets and groups that contain them */ + Group sashFormGroup; + SashForm form; + List list1, list2; + Text text; + + /* Style widgets added to the "Style" group */ + Button horizontalButton, verticalButton, smoothButton; + + static char[] [] ListData0; + static char[] [] ListData1; + + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + if( ListData0 is null ){ + ListData0 = [ + ControlExample.getResourceString("ListData0_0"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_1"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_2"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_3"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_4"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_5"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_6"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData0_7")]; //$NON-NLS-1$ + + } + if( ListData1 is null ){ + ListData1 = [ + ControlExample.getResourceString("ListData1_0"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_1"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_2"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_3"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_4"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_5"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_6"), //$NON-NLS-1$ + ControlExample.getResourceString("ListData1_7")]; //$NON-NLS-1$ + } + } + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the sashform widget */ + sashFormGroup = new Group (exampleGroup, DWT.NONE); + sashFormGroup.setLayout (new GridLayout ()); + sashFormGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + sashFormGroup.setText ("SashForm"); + } + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (horizontalButton.getSelection ()) style |= DWT.H_SCROLL; + if (verticalButton.getSelection ()) style |= DWT.V_SCROLL; + if (smoothButton.getSelection ()) style |= DWT.SMOOTH; + + /* Create the example widgets */ + form = new SashForm (sashFormGroup, style); + list1 = new List (form, DWT.V_SCROLL | DWT.H_SCROLL | DWT.BORDER); + list1.setItems (ListData0); + list2 = new List (form, DWT.V_SCROLL | DWT.H_SCROLL | DWT.BORDER); + list2.setItems (ListData1); + text = new Text (form, DWT.MULTI | DWT.BORDER); + text.setText (ControlExample.getResourceString("Multi_line")); //$NON-NLS-1$ + form.setWeights([1, 1, 1]); + } + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + horizontalButton = new Button (styleGroup, DWT.RADIO); + horizontalButton.setText ("DWT.HORIZONTAL"); + horizontalButton.setSelection(true); + verticalButton = new Button (styleGroup, DWT.RADIO); + verticalButton.setText ("DWT.VERTICAL"); + verticalButton.setSelection(false); + smoothButton = new Button (styleGroup, DWT.CHECK); + smoothButton.setText ("DWT.SMOOTH"); + smoothButton.setSelection(false); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) form]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "SashForm"; //$NON-NLS-1$ + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + horizontalButton.setSelection ((form.getStyle () & DWT.H_SCROLL) !is 0); + verticalButton.setSelection ((form.getStyle () & DWT.V_SCROLL) !is 0); + smoothButton.setSelection ((form.getStyle () & DWT.SMOOTH) !is 0); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/SashTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/SashTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,264 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.SashTab; + + + +import dwt.DWT; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.graphics.Rectangle; +import dwt.layout.FillLayout; +import dwt.layout.GridData; +import dwt.widgets.Button; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.List; +import dwt.widgets.Sash; +import dwt.widgets.Text; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + +class SashTab : Tab { + /* Example widgets and groups that contain them */ + Sash hSash, vSash; + Composite sashComp; + Group sashGroup; + List list1, list2, list3; + Text text; + Button smoothButton; + + static char[] [] ListData0; + static char[] [] ListData1; + + /* Constants */ + static final int SASH_WIDTH = 3; + static final int SASH_LIMIT = 20; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + if( ListData0.length is 0 ){ + ListData0 = [ + ControlExample.getResourceString("ListData0_0"), + ControlExample.getResourceString("ListData0_1"), + ControlExample.getResourceString("ListData0_2"), + ControlExample.getResourceString("ListData0_3"), + ControlExample.getResourceString("ListData0_4"), + ControlExample.getResourceString("ListData0_5"), + ControlExample.getResourceString("ListData0_6"), + ControlExample.getResourceString("ListData0_7"), + ControlExample.getResourceString("ListData0_8")]; + } + if( ListData1.length is 0 ){ + ListData1 = [ + ControlExample.getResourceString("ListData1_0"), + ControlExample.getResourceString("ListData1_1"), + ControlExample.getResourceString("ListData1_2"), + ControlExample.getResourceString("ListData1_3"), + ControlExample.getResourceString("ListData1_4"), + ControlExample.getResourceString("ListData1_5"), + ControlExample.getResourceString("ListData1_6"), + ControlExample.getResourceString("ListData1_7"), + ControlExample.getResourceString("ListData1_8")]; + } + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + exampleGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + exampleGroup.setLayout(new FillLayout()); + + /* Create a group for the sash widgets */ + sashGroup = new Group (exampleGroup, DWT.NONE); + FillLayout layout = new FillLayout(); + layout.marginHeight = layout.marginWidth = 5; + sashGroup.setLayout(layout); + sashGroup.setText ("Sash"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + /* + * Create the page. This example does not use layouts. + */ + sashComp = new Composite(sashGroup, DWT.BORDER); + + /* Create the list and text widgets */ + list1 = new List (sashComp, DWT.V_SCROLL | DWT.H_SCROLL | DWT.BORDER); + list1.setItems (ListData0); + list2 = new List (sashComp, DWT.V_SCROLL | DWT.H_SCROLL | DWT.BORDER); + list2.setItems (ListData1); + text = new Text (sashComp, DWT.MULTI | DWT.BORDER); + text.setText (ControlExample.getResourceString("Multi_line")); + + /* Create the sashes */ + int style = getDefaultStyle(); + if (smoothButton.getSelection()) style |= DWT.SMOOTH; + vSash = new Sash (sashComp, DWT.VERTICAL | style); + hSash = new Sash (sashComp, DWT.HORIZONTAL | style); + + /* Add the listeners */ + hSash.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + Rectangle rect = vSash.getParent().getClientArea(); + event.y = Math.min (Math.max (event.y, SASH_LIMIT), rect.height - SASH_LIMIT); + if (event.detail !is DWT.DRAG) { + hSash.setBounds (event.x, event.y, event.width, event.height); + layout (); + } + } + }); + vSash.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + Rectangle rect = vSash.getParent().getClientArea(); + event.x = Math.min (Math.max (event.x, SASH_LIMIT), rect.width - SASH_LIMIT); + if (event.detail !is DWT.DRAG) { + vSash.setBounds (event.x, event.y, event.width, event.height); + layout (); + } + } + }); + sashComp.addControlListener (new class() ControlAdapter { + public void controlResized (ControlEvent event) { + resized (); + } + }); + } + + /** + * Creates the "Size" group. The "Size" group contains + * controls that allow the user to change the size of + * the example widgets. + */ + void createSizeGroup () { + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + smoothButton = new Button (styleGroup, DWT.CHECK); + smoothButton.setText("DWT.SMOOTH"); + } + + void disposeExampleWidgets () { + sashComp.dispose(); + sashComp = null; + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) hSash, vSash ]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["ToolTipText"]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Sash"; + } + + /** + * Layout the list and text widgets according to the new + * positions of the sashes..events.SelectionEvent + */ + void layout () { + + Rectangle clientArea = sashComp.getClientArea (); + Rectangle hSashBounds = hSash.getBounds (); + Rectangle vSashBounds = vSash.getBounds (); + + list1.setBounds (0, 0, vSashBounds.x, hSashBounds.y); + list2.setBounds (vSashBounds.x + vSashBounds.width, 0, clientArea.width - (vSashBounds.x + vSashBounds.width), hSashBounds.y); + text.setBounds (0, hSashBounds.y + hSashBounds.height, clientArea.width, clientArea.height - (hSashBounds.y + hSashBounds.height)); + + /** + * If the horizontal sash has been moved then the vertical + * sash is either too long or too short and its size must + * be adjusted. + */ + vSashBounds.height = hSashBounds.y; + vSash.setBounds (vSashBounds); + } + /** + * Sets the size of the "Example" widgets. + */ + void setExampleWidgetSize () { + sashGroup.layout (true); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + smoothButton.setSelection ((hSash.getStyle () & DWT.SMOOTH) !is 0); + } + + /** + * Handle the shell resized event. + */ + void resized () { + + /* Get the client area for the shell */ + Rectangle clientArea = sashComp.getClientArea (); + + /* + * Make list 1 half the width and half the height of the tab leaving room for the sash. + * Place list 1 in the top left quadrant of the tab. + */ + Rectangle list1Bounds = new Rectangle (0, 0, (clientArea.width - SASH_WIDTH) / 2, (clientArea.height - SASH_WIDTH) / 2); + list1.setBounds (list1Bounds); + + /* + * Make list 2 half the width and half the height of the tab leaving room for the sash. + * Place list 2 in the top right quadrant of the tab. + */ + list2.setBounds (list1Bounds.width + SASH_WIDTH, 0, clientArea.width - (list1Bounds.width + SASH_WIDTH), list1Bounds.height); + + /* + * Make the text area the full width and half the height of the tab leaving room for the sash. + * Place the text area in the bottom half of the tab. + */ + text.setBounds (0, list1Bounds.height + SASH_WIDTH, clientArea.width, clientArea.height - (list1Bounds.height + SASH_WIDTH)); + + /* Position the sashes */ + vSash.setBounds (list1Bounds.width, 0, SASH_WIDTH, list1Bounds.height); + hSash.setBounds (0, list1Bounds.height, clientArea.width, SASH_WIDTH); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/ScaleTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ScaleTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,243 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.ScaleTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Group; +import dwt.widgets.Scale; +import dwt.widgets.Spinner; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import dwtexamples.controlexample.RangeTab; + + +class ScaleTab : RangeTab { + /* Example widgets and groups that contain them */ + Scale scale1; + Group scaleGroup; + + /* Spinner widgets added to the "Control" group */ + Spinner incrementSpinner, pageIncrementSpinner; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + super.createControlWidgets (); + createIncrementGroup (); + createPageIncrementGroup (); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the scale */ + scaleGroup = new Group (exampleGroup, DWT.NONE); + scaleGroup.setLayout (new GridLayout ()); + scaleGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + scaleGroup.setText ("Scale"); + + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (horizontalButton.getSelection ()) style |= DWT.HORIZONTAL; + if (verticalButton.getSelection ()) style |= DWT.VERTICAL; + if (borderButton.getSelection ()) style |= DWT.BORDER; + + /* Create the example widgets */ + scale1 = new Scale (scaleGroup, style); + } + + /** + * Create a group of widgets to control the increment + * attribute of the example widget. + */ + void createIncrementGroup() { + + /* Create the group */ + Group incrementGroup = new Group (controlGroup, DWT.NONE); + incrementGroup.setLayout (new GridLayout ()); + incrementGroup.setText (ControlExample.getResourceString("Increment")); + incrementGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + incrementSpinner = new Spinner (incrementGroup, DWT.BORDER); + incrementSpinner.setMaximum (100000); + incrementSpinner.setSelection (getDefaultIncrement()); + incrementSpinner.setPageIncrement (100); + incrementSpinner.setIncrement (1); + incrementSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + incrementSpinner.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent e) { + setWidgetIncrement (); + } + }); + } + + /** + * Create a group of widgets to control the page increment + * attribute of the example widget. + */ + void createPageIncrementGroup() { + + /* Create the group */ + Group pageIncrementGroup = new Group (controlGroup, DWT.NONE); + pageIncrementGroup.setLayout (new GridLayout ()); + pageIncrementGroup.setText (ControlExample.getResourceString("Page_Increment")); + pageIncrementGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + pageIncrementSpinner = new Spinner (pageIncrementGroup, DWT.BORDER); + pageIncrementSpinner.setMaximum (100000); + pageIncrementSpinner.setSelection (getDefaultPageIncrement()); + pageIncrementSpinner.setPageIncrement (100); + pageIncrementSpinner.setIncrement (1); + pageIncrementSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + pageIncrementSpinner.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setWidgetPageIncrement (); + } + }); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) scale1]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["Selection", "ToolTipText"]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Scale"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + if (!instance.startup) { + setWidgetIncrement (); + setWidgetPageIncrement (); + } + } + + /** + * Gets the default maximum of the "Example" widgets. + */ + int getDefaultMaximum () { + return scale1.getMaximum(); + } + + /** + * Gets the default minimim of the "Example" widgets. + */ + int getDefaultMinimum () { + return scale1.getMinimum(); + } + + /** + * Gets the default selection of the "Example" widgets. + */ + int getDefaultSelection () { + return scale1.getSelection(); + } + + /** + * Gets the default increment of the "Example" widgets. + */ + int getDefaultIncrement () { + return scale1.getIncrement(); + } + + /** + * Gets the default page increment of the "Example" widgets. + */ + int getDefaultPageIncrement () { + return scale1.getPageIncrement(); + } + + /** + * Sets the increment of the "Example" widgets. + */ + void setWidgetIncrement () { + scale1.setIncrement (incrementSpinner.getSelection ()); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMaximum () { + scale1.setMaximum (maximumSpinner.getSelection ()); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMinimum () { + scale1.setMinimum (minimumSpinner.getSelection ()); + } + + /** + * Sets the page increment of the "Example" widgets. + */ + void setWidgetPageIncrement () { + scale1.setPageIncrement (pageIncrementSpinner.getSelection ()); + } + + /** + * Sets the selection of the "Example" widgets. + */ + void setWidgetSelection () { + scale1.setSelection (selectionSpinner.getSelection ()); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/ScrollableTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ScrollableTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,70 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.ScrollableTab; + + + +import dwt.DWT; +import dwt.widgets.Button; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + +abstract class ScrollableTab : Tab { + /* Style widgets added to the "Style" group */ + Button singleButton, multiButton, horizontalButton, verticalButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + super.createStyleGroup (); + + /* Create the extra widgets */ + singleButton = new Button (styleGroup, DWT.RADIO); + singleButton.setText ("DWT.SINGLE"); + multiButton = new Button (styleGroup, DWT.RADIO); + multiButton.setText ("DWT.MULTI"); + horizontalButton = new Button (styleGroup, DWT.CHECK); + horizontalButton.setText ("DWT.H_SCROLL"); + horizontalButton.setSelection(true); + verticalButton = new Button (styleGroup, DWT.CHECK); + verticalButton.setText ("DWT.V_SCROLL"); + verticalButton.setSelection(true); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + Widget [] widgets = getExampleWidgets (); + if (widgets.length !is 0){ + singleButton.setSelection ((widgets [0].getStyle () & DWT.SINGLE) !is 0); + multiButton.setSelection ((widgets [0].getStyle () & DWT.MULTI) !is 0); + horizontalButton.setSelection ((widgets [0].getStyle () & DWT.H_SCROLL) !is 0); + verticalButton.setSelection ((widgets [0].getStyle () & DWT.V_SCROLL) !is 0); + borderButton.setSelection ((widgets [0].getStyle () & DWT.BORDER) !is 0); + } + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/ShellTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ShellTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,310 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit +*******************************************************************************/ +module dwtexamples.controlexample.ShellTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Event; +import dwt.widgets.Group; +import dwt.widgets.Listener; +import dwt.widgets.Shell; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import tango.util.Convert; + +class ShellTab : Tab { + /* Style widgets added to the "Style" groups, and "Other" group */ + Button noParentButton, parentButton; + Button noTrimButton, closeButton, titleButton, minButton, maxButton, borderButton, resizeButton, onTopButton, toolButton; + Button createButton, closeAllButton; + Button modelessButton, primaryModalButton, applicationModalButton, systemModalButton; + Button imageButton; + Group parentStyleGroup, modalStyleGroup; + + /* Variables used to track the open shells */ + int shellCount = 0; + Shell [] shells; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Close all the example shells. + */ + void closeAllShells() { + for (int i = 0; i= shells.length) { + Shell [] newShells = new Shell [shells.length + 4]; + System.arraycopy (shells, 0, newShells, 0, shells.length); + shells = newShells; + } + + /* Compute the shell style */ + int style = DWT.NONE; + if (noTrimButton.getSelection()) style |= DWT.NO_TRIM; + if (closeButton.getSelection()) style |= DWT.CLOSE; + if (titleButton.getSelection()) style |= DWT.TITLE; + if (minButton.getSelection()) style |= DWT.MIN; + if (maxButton.getSelection()) style |= DWT.MAX; + if (borderButton.getSelection()) style |= DWT.BORDER; + if (resizeButton.getSelection()) style |= DWT.RESIZE; + if (onTopButton.getSelection()) style |= DWT.ON_TOP; + if (toolButton.getSelection()) style |= DWT.TOOL; + if (modelessButton.getSelection()) style |= DWT.MODELESS; + if (primaryModalButton.getSelection()) style |= DWT.PRIMARY_MODAL; + if (applicationModalButton.getSelection()) style |= DWT.APPLICATION_MODAL; + if (systemModalButton.getSelection()) style |= DWT.SYSTEM_MODAL; + + /* Create the shell with or without a parent */ + if (noParentButton.getSelection ()) { + shells [shellCount] = new Shell (style); + } else { + shells [shellCount] = new Shell (shell, style); + } + Shell currentShell = shells [shellCount]; + Button button = new Button(currentShell, DWT.PUSH); + button.setBounds(20, 20, 120, 30); + Button closeButton = new Button(currentShell, DWT.PUSH); + closeButton.setBounds(160, 20, 120, 30); + closeButton.setText(ControlExample.getResourceString("Close")); + closeButton.addListener(DWT.Selection, new class(currentShell) Listener { + Shell s; + this( Shell s ){ this.s = s; } + public void handleEvent(Event event) { + s.dispose(); + } + }); + + /* Set the size, title, and image, and open the shell */ + currentShell.setSize (300, 100); + currentShell.setText (ControlExample.getResourceString("Title") ~ to!(char[])(shellCount)); + if (imageButton.getSelection()) currentShell.setImage(instance.images[ControlExample.ciTarget]); + if (backgroundImageButton.getSelection()) currentShell.setBackgroundImage(instance.images[ControlExample.ciBackground]); + hookListeners (currentShell); + currentShell.open (); + shellCount++; + } + + /** + * Creates the "Control" group. + */ + void createControlGroup () { + /* + * Create the "Control" group. This is the group on the + * right half of each example tab. It consists of the + * style group, the 'other' group and the size group. + */ + controlGroup = new Group (tabFolderPage, DWT.NONE); + controlGroup.setLayout (new GridLayout (2, true)); + controlGroup.setLayoutData (new GridData (GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + controlGroup.setText (ControlExample.getResourceString("Parameters")); + + /* Create a group for the decoration style controls */ + styleGroup = new Group (controlGroup, DWT.NONE); + styleGroup.setLayout (new GridLayout ()); + styleGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false, 1, 3)); + styleGroup.setText (ControlExample.getResourceString("Decoration_Styles")); + + /* Create a group for the modal style controls */ + modalStyleGroup = new Group (controlGroup, DWT.NONE); + modalStyleGroup.setLayout (new GridLayout ()); + modalStyleGroup.setLayoutData (new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + modalStyleGroup.setText (ControlExample.getResourceString("Modal_Styles")); + + /* Create a group for the 'other' controls */ + otherGroup = new Group (controlGroup, DWT.NONE); + otherGroup.setLayout (new GridLayout ()); + otherGroup.setLayoutData (new GridData(DWT.FILL, DWT.FILL, false, false)); + otherGroup.setText (ControlExample.getResourceString("Other")); + + /* Create a group for the parent style controls */ + parentStyleGroup = new Group (controlGroup, DWT.NONE); + parentStyleGroup.setLayout (new GridLayout ()); + GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + parentStyleGroup.setLayoutData (gridData); + parentStyleGroup.setText (ControlExample.getResourceString("Parent")); + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + + /* Create the parent style buttons */ + noParentButton = new Button (parentStyleGroup, DWT.RADIO); + noParentButton.setText (ControlExample.getResourceString("No_Parent")); + parentButton = new Button (parentStyleGroup, DWT.RADIO); + parentButton.setText (ControlExample.getResourceString("Parent")); + + /* Create the decoration style buttons */ + noTrimButton = new Button (styleGroup, DWT.CHECK); + noTrimButton.setText ("DWT.NO_TRIM"); + closeButton = new Button (styleGroup, DWT.CHECK); + closeButton.setText ("DWT.CLOSE"); + titleButton = new Button (styleGroup, DWT.CHECK); + titleButton.setText ("DWT.TITLE"); + minButton = new Button (styleGroup, DWT.CHECK); + minButton.setText ("DWT.MIN"); + maxButton = new Button (styleGroup, DWT.CHECK); + maxButton.setText ("DWT.MAX"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + resizeButton = new Button (styleGroup, DWT.CHECK); + resizeButton.setText ("DWT.RESIZE"); + onTopButton = new Button (styleGroup, DWT.CHECK); + onTopButton.setText ("DWT.ON_TOP"); + toolButton = new Button (styleGroup, DWT.CHECK); + toolButton.setText ("DWT.TOOL"); + + /* Create the modal style buttons */ + modelessButton = new Button (modalStyleGroup, DWT.RADIO); + modelessButton.setText ("DWT.MODELESS"); + primaryModalButton = new Button (modalStyleGroup, DWT.RADIO); + primaryModalButton.setText ("DWT.PRIMARY_MODAL"); + applicationModalButton = new Button (modalStyleGroup, DWT.RADIO); + applicationModalButton.setText ("DWT.APPLICATION_MODAL"); + systemModalButton = new Button (modalStyleGroup, DWT.RADIO); + systemModalButton.setText ("DWT.SYSTEM_MODAL"); + + /* Create the 'other' buttons */ + imageButton = new Button (otherGroup, DWT.CHECK); + imageButton.setText (ControlExample.getResourceString("Image")); + backgroundImageButton = new Button(otherGroup, DWT.CHECK); + backgroundImageButton.setText(ControlExample.getResourceString("BackgroundImage")); + + /* Create the "create" and "closeAll" buttons */ + createButton = new Button (controlGroup, DWT.NONE); + GridData gridData = new GridData (GridData.HORIZONTAL_ALIGN_END); + createButton.setLayoutData (gridData); + createButton.setText (ControlExample.getResourceString("Create_Shell")); + closeAllButton = new Button (controlGroup, DWT.NONE); + gridData = new GridData (GridData.HORIZONTAL_ALIGN_BEGINNING); + closeAllButton.setText (ControlExample.getResourceString("Close_All_Shells")); + closeAllButton.setLayoutData (gridData); + + /* Add the listeners */ + createButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + createButtonSelected(e); + } + }); + closeAllButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + closeAllShells (); + } + }); + SelectionListener decorationButtonListener = new class() SelectionAdapter { + public void widgetSelected(SelectionEvent event) { + decorationButtonSelected(event); + } + }; + noTrimButton.addSelectionListener (decorationButtonListener); + closeButton.addSelectionListener (decorationButtonListener); + titleButton.addSelectionListener (decorationButtonListener); + minButton.addSelectionListener (decorationButtonListener); + maxButton.addSelectionListener (decorationButtonListener); + borderButton.addSelectionListener (decorationButtonListener); + resizeButton.addSelectionListener (decorationButtonListener); + applicationModalButton.addSelectionListener (decorationButtonListener); + systemModalButton.addSelectionListener (decorationButtonListener); + + /* Set the default state */ + noParentButton.setSelection (true); + modelessButton.setSelection (true); + backgroundImageButton.setSelection(false); + } + + /** + * Handle a decoration button selection event. + * + * @param event org.eclipse.swt.events.SelectionEvent + */ + public void decorationButtonSelected(SelectionEvent event) { + + /* Make sure if the modal style is DWT.APPLICATION_MODAL or + * DWT.SYSTEM_MODAL the style DWT.CLOSE is also selected. + * This is to make sure the user can close the shell. + */ + Button widget = cast(Button) event.widget; + if (widget is applicationModalButton || widget is systemModalButton) { + if (widget.getSelection()) { + closeButton.setSelection (true); + noTrimButton.setSelection (false); + } + return; + } + if (widget is closeButton) { + if (applicationModalButton.getSelection() || systemModalButton.getSelection()) { + closeButton.setSelection (true); + } + } + /* + * Make sure if the No Trim button is selected then + * all other decoration buttons are deselected. + */ + if (widget.getSelection() && widget !is noTrimButton) { + noTrimButton.setSelection (false); + return; + } + if (widget.getSelection() && widget is noTrimButton) { + if (applicationModalButton.getSelection() || systemModalButton.getSelection()) { + noTrimButton.setSelection (false); + return; + } + closeButton.setSelection (false); + titleButton.setSelection (false); + minButton.setSelection (false); + maxButton.setSelection (false); + borderButton.setSelection (false); + resizeButton.setSelection (false); + return; + } + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Shell"; + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/SliderTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/SliderTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,285 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.SliderTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Group; +import dwt.widgets.Slider; +import dwt.widgets.Spinner; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import dwtexamples.controlexample.RangeTab; + +class SliderTab : RangeTab { + /* Example widgets and groups that contain them */ + Slider slider1; + Group sliderGroup; + + /* Spinner widgets added to the "Control" group */ + Spinner incrementSpinner, pageIncrementSpinner, thumbSpinner; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + super.createControlWidgets (); + createThumbGroup (); + createIncrementGroup (); + createPageIncrementGroup (); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the slider */ + sliderGroup = new Group (exampleGroup, DWT.NONE); + sliderGroup.setLayout (new GridLayout ()); + sliderGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + sliderGroup.setText ("Slider"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (horizontalButton.getSelection ()) style |= DWT.HORIZONTAL; + if (verticalButton.getSelection ()) style |= DWT.VERTICAL; + if (borderButton.getSelection ()) style |= DWT.BORDER; + + /* Create the example widgets */ + slider1 = new Slider(sliderGroup, style); + } + + /** + * Create a group of widgets to control the increment + * attribute of the example widget. + */ + void createIncrementGroup() { + + /* Create the group */ + Group incrementGroup = new Group (controlGroup, DWT.NONE); + incrementGroup.setLayout (new GridLayout ()); + incrementGroup.setText (ControlExample.getResourceString("Increment")); + incrementGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + incrementSpinner = new Spinner (incrementGroup, DWT.BORDER); + incrementSpinner.setMaximum (100000); + incrementSpinner.setSelection (getDefaultIncrement()); + incrementSpinner.setPageIncrement (100); + incrementSpinner.setIncrement (1); + incrementSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + incrementSpinner.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent e) { + setWidgetIncrement (); + } + }); + } + + /** + * Create a group of widgets to control the page increment + * attribute of the example widget. + */ + void createPageIncrementGroup() { + + /* Create the group */ + Group pageIncrementGroup = new Group (controlGroup, DWT.NONE); + pageIncrementGroup.setLayout (new GridLayout ()); + pageIncrementGroup.setText (ControlExample.getResourceString("Page_Increment")); + pageIncrementGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + pageIncrementSpinner = new Spinner (pageIncrementGroup, DWT.BORDER); + pageIncrementSpinner.setMaximum (100000); + pageIncrementSpinner.setSelection (getDefaultPageIncrement()); + pageIncrementSpinner.setPageIncrement (100); + pageIncrementSpinner.setIncrement (1); + pageIncrementSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + pageIncrementSpinner.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setWidgetPageIncrement (); + } + }); + } + + /** + * Create a group of widgets to control the thumb + * attribute of the example widget. + */ + void createThumbGroup() { + + /* Create the group */ + Group thumbGroup = new Group (controlGroup, DWT.NONE); + thumbGroup.setLayout (new GridLayout ()); + thumbGroup.setText (ControlExample.getResourceString("Thumb")); + thumbGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + thumbSpinner = new Spinner (thumbGroup, DWT.BORDER); + thumbSpinner.setMaximum (100000); + thumbSpinner.setSelection (getDefaultThumb()); + thumbSpinner.setPageIncrement (100); + thumbSpinner.setIncrement (1); + thumbSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + thumbSpinner.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setWidgetThumb (); + } + }); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) slider1 ]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["Selection", "ToolTipText"]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Slider"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + if (!instance.startup) { + setWidgetIncrement (); + setWidgetPageIncrement (); + setWidgetThumb (); + } + } + + /** + * Gets the default maximum of the "Example" widgets. + */ + int getDefaultMaximum () { + return slider1.getMaximum(); + } + + /** + * Gets the default minimim of the "Example" widgets. + */ + int getDefaultMinimum () { + return slider1.getMinimum(); + } + + /** + * Gets the default selection of the "Example" widgets. + */ + int getDefaultSelection () { + return slider1.getSelection(); + } + + /** + * Gets the default increment of the "Example" widgets. + */ + int getDefaultIncrement () { + return slider1.getIncrement(); + } + + /** + * Gets the default page increment of the "Example" widgets. + */ + int getDefaultPageIncrement () { + return slider1.getPageIncrement(); + } + + /** + * Gets the default thumb of the "Example" widgets. + */ + int getDefaultThumb () { + return slider1.getThumb(); + } + + /** + * Sets the increment of the "Example" widgets. + */ + void setWidgetIncrement () { + slider1.setIncrement (incrementSpinner.getSelection ()); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMaximum () { + slider1.setMaximum (maximumSpinner.getSelection ()); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMinimum () { + slider1.setMinimum (minimumSpinner.getSelection ()); + } + + /** + * Sets the page increment of the "Example" widgets. + */ + void setWidgetPageIncrement () { + slider1.setPageIncrement (pageIncrementSpinner.getSelection ()); + } + + /** + * Sets the selection of the "Example" widgets. + */ + void setWidgetSelection () { + slider1.setSelection (selectionSpinner.getSelection ()); + } + + /** + * Sets the thumb of the "Example" widgets. + */ + void setWidgetThumb () { + slider1.setThumb (thumbSpinner.getSelection ()); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/SpinnerTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/SpinnerTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,333 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.SpinnerTab; + + + +import dwt.DWT; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.Spinner; +import dwt.widgets.TabFolder; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import dwtexamples.controlexample.RangeTab; + +class SpinnerTab : RangeTab { + + /* Example widgets and groups that contain them */ + Spinner spinner1; + Group spinnerGroup; + + /* Style widgets added to the "Style" group */ + Button readOnlyButton, wrapButton; + + /* Spinner widgets added to the "Control" group */ + Spinner incrementSpinner, pageIncrementSpinner, digitsSpinner; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + super.createControlWidgets (); + createIncrementGroup (); + createPageIncrementGroup (); + createDigitsGroup (); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the spinner */ + spinnerGroup = new Group (exampleGroup, DWT.NONE); + spinnerGroup.setLayout (new GridLayout ()); + spinnerGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + spinnerGroup.setText ("Spinner"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (readOnlyButton.getSelection ()) style |= DWT.READ_ONLY; + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (wrapButton.getSelection ()) style |= DWT.WRAP; + + /* Create the example widgets */ + spinner1 = new Spinner (spinnerGroup, style); + } + + /** + * Create a group of widgets to control the increment + * attribute of the example widget. + */ + void createIncrementGroup() { + + /* Create the group */ + Group incrementGroup = new Group (controlGroup, DWT.NONE); + incrementGroup.setLayout (new GridLayout ()); + incrementGroup.setText (ControlExample.getResourceString("Increment")); + incrementGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + incrementSpinner = new Spinner (incrementGroup, DWT.BORDER); + incrementSpinner.setMaximum (100000); + incrementSpinner.setSelection (getDefaultIncrement()); + incrementSpinner.setPageIncrement (100); + incrementSpinner.setIncrement (1); + incrementSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + incrementSpinner.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent e) { + setWidgetIncrement (); + } + }); + } + + /** + * Create a group of widgets to control the page increment + * attribute of the example widget. + */ + void createPageIncrementGroup() { + + /* Create the group */ + Group pageIncrementGroup = new Group (controlGroup, DWT.NONE); + pageIncrementGroup.setLayout (new GridLayout ()); + pageIncrementGroup.setText (ControlExample.getResourceString("Page_Increment")); + pageIncrementGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + pageIncrementSpinner = new Spinner (pageIncrementGroup, DWT.BORDER); + pageIncrementSpinner.setMaximum (100000); + pageIncrementSpinner.setSelection (getDefaultPageIncrement()); + pageIncrementSpinner.setPageIncrement (100); + pageIncrementSpinner.setIncrement (1); + pageIncrementSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + pageIncrementSpinner.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setWidgetPageIncrement (); + } + }); + } + + /** + * Create a group of widgets to control the digits + * attribute of the example widget. + */ + void createDigitsGroup() { + + /* Create the group */ + Group digitsGroup = new Group (controlGroup, DWT.NONE); + digitsGroup.setLayout (new GridLayout ()); + digitsGroup.setText (ControlExample.getResourceString("Digits")); + digitsGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL)); + + /* Create the Spinner widget */ + digitsSpinner = new Spinner (digitsGroup, DWT.BORDER); + digitsSpinner.setMaximum (100000); + digitsSpinner.setSelection (getDefaultDigits()); + digitsSpinner.setPageIncrement (100); + digitsSpinner.setIncrement (1); + digitsSpinner.setLayoutData (new GridData (DWT.FILL, DWT.CENTER, true, false)); + + /* Add the listeners */ + digitsSpinner.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent e) { + setWidgetDigits (); + } + }); + } + + /** + * Creates the tab folder page. + * + * @param tabFolder org.eclipse.swt.widgets.TabFolder + * @return the new page for the tab folder + */ + Composite createTabFolderPage (TabFolder tabFolder) { + super.createTabFolderPage (tabFolder); + + /* + * Add a resize listener to the tabFolderPage so that + * if the user types into the example widget to change + * its preferred size, and then resizes the shell, we + * recalculate the preferred size correctly. + */ + tabFolderPage.addControlListener(new class() ControlAdapter { + public void controlResized(ControlEvent e) { + setExampleWidgetSize (); + } + }); + + return tabFolderPage; + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + orientationButtons = false; + super.createStyleGroup (); + + /* Create the extra widgets */ + readOnlyButton = new Button (styleGroup, DWT.CHECK); + readOnlyButton.setText ("DWT.READ_ONLY"); + wrapButton = new Button (styleGroup, DWT.CHECK); + wrapButton.setText ("DWT.WRAP"); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) spinner1 ]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["Selection", "ToolTipText"]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Spinner"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + readOnlyButton.setSelection ((spinner1.getStyle () & DWT.READ_ONLY) !is 0); + wrapButton.setSelection ((spinner1.getStyle () & DWT.WRAP) !is 0); + if (!instance.startup) { + setWidgetIncrement (); + setWidgetPageIncrement (); + setWidgetDigits (); + } + } + + /** + * Gets the default maximum of the "Example" widgets. + */ + int getDefaultMaximum () { + return spinner1.getMaximum(); + } + + /** + * Gets the default minimim of the "Example" widgets. + */ + int getDefaultMinimum () { + return spinner1.getMinimum(); + } + + /** + * Gets the default selection of the "Example" widgets. + */ + int getDefaultSelection () { + return spinner1.getSelection(); + } + + /** + * Gets the default increment of the "Example" widgets. + */ + int getDefaultIncrement () { + return spinner1.getIncrement(); + } + + /** + * Gets the default page increment of the "Example" widgets. + */ + int getDefaultPageIncrement () { + return spinner1.getPageIncrement(); + } + + /** + * Gets the default digits of the "Example" widgets. + */ + int getDefaultDigits () { + return spinner1.getDigits(); + } + + /** + * Sets the increment of the "Example" widgets. + */ + void setWidgetIncrement () { + spinner1.setIncrement (incrementSpinner.getSelection ()); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMaximum () { + spinner1.setMaximum (maximumSpinner.getSelection ()); + } + + /** + * Sets the minimim of the "Example" widgets. + */ + void setWidgetMinimum () { + spinner1.setMinimum (minimumSpinner.getSelection ()); + } + + /** + * Sets the page increment of the "Example" widgets. + */ + void setWidgetPageIncrement () { + spinner1.setPageIncrement (pageIncrementSpinner.getSelection ()); + } + + /** + * Sets the digits of the "Example" widgets. + */ + void setWidgetDigits () { + spinner1.setDigits (digitsSpinner.getSelection ()); + } + + /** + * Sets the selection of the "Example" widgets. + */ + void setWidgetSelection () { + spinner1.setSelection (selectionSpinner.getSelection ()); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/StyledTextTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/StyledTextTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,356 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.StyledTextTab; + + +import dwt.dwthelper.ByteArrayInputStream; + + +import dwt.DWT; +import dwt.custom.StyleRange; +import dwt.custom.StyledText; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.events.DisposeEvent; +import dwt.events.DisposeListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.graphics.Color; +import dwt.graphics.Image; +import dwt.graphics.ImageData; +import dwt.graphics.Point; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Composite; +import dwt.widgets.Display; +import dwt.widgets.Group; +import dwt.widgets.Label; +import dwt.widgets.TabFolder; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.ScrollableTab; +import dwtexamples.controlexample.ControlExample; +import tango.core.Exception; +import tango.io.Stdout; + +class StyledTextTab : ScrollableTab { + /* Example widgets and groups that contain them */ + StyledText styledText; + Group styledTextGroup, styledTextStyleGroup; + + /* Style widgets added to the "Style" group */ + Button wrapButton, readOnlyButton, fullSelectionButton; + + /* Buttons for adding StyleRanges to StyledText */ + Button boldButton, italicButton, redButton, yellowButton, underlineButton, strikeoutButton; + Image boldImage, italicImage, redImage, yellowImage, underlineImage, strikeoutImage; + + /* Variables for saving state. */ + char[] text; + StyleRange[] styleRanges; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates a bitmap image. + */ + Image createBitmapImage (Display display, void[] sourceData, void[] maskData ) { + InputStream sourceStream = new ByteArrayInputStream ( cast(byte[])sourceData ); + InputStream maskStream = new ByteArrayInputStream ( cast(byte[])maskData ); + ImageData source = new ImageData (sourceStream); + ImageData mask = new ImageData (maskStream); + Image result = new Image (display, source, mask); + try { + sourceStream.close (); + maskStream.close (); + } catch (IOException e) { + Stderr.formatln( "Stacktrace: {}", e ); + } + return result; + } + + /** + * Creates the "Control" widget children. + */ + void createControlWidgets () { + super.createControlWidgets (); + + /* Add a group for modifying the StyledText widget */ + createStyledTextStyleGroup (); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the styled text widget */ + styledTextGroup = new Group (exampleGroup, DWT.NONE); + styledTextGroup.setLayout (new GridLayout ()); + styledTextGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + styledTextGroup.setText ("StyledText"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (singleButton.getSelection ()) style |= DWT.SINGLE; + if (multiButton.getSelection ()) style |= DWT.MULTI; + if (horizontalButton.getSelection ()) style |= DWT.H_SCROLL; + if (verticalButton.getSelection ()) style |= DWT.V_SCROLL; + if (wrapButton.getSelection ()) style |= DWT.WRAP; + if (readOnlyButton.getSelection ()) style |= DWT.READ_ONLY; + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (fullSelectionButton.getSelection ()) style |= DWT.FULL_SELECTION; + + /* Create the example widgets */ + styledText = new StyledText (styledTextGroup, style); + styledText.setText (ControlExample.getResourceString("Example_string")); + styledText.append ("\n"); + styledText.append (ControlExample.getResourceString("One_Two_Three")); + + if (text !is null) { + styledText.setText(text); + text = null; + } + if (styleRanges !is null) { + styledText.setStyleRanges(styleRanges); + styleRanges = null; + } + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + wrapButton = new Button (styleGroup, DWT.CHECK); + wrapButton.setText ("DWT.WRAP"); + readOnlyButton = new Button (styleGroup, DWT.CHECK); + readOnlyButton.setText ("DWT.READ_ONLY"); + fullSelectionButton = new Button (styleGroup, DWT.CHECK); + fullSelectionButton.setText ("DWT.FULL_SELECTION"); + } + + /** + * Creates the "StyledText Style" group. + */ + void createStyledTextStyleGroup () { + styledTextStyleGroup = new Group (controlGroup, DWT.NONE); + styledTextStyleGroup.setText (ControlExample.getResourceString ("StyledText_Styles")); + styledTextStyleGroup.setLayout (new GridLayout(6, false)); + GridData data = new GridData (GridData.HORIZONTAL_ALIGN_FILL); + data.horizontalSpan = 2; + styledTextStyleGroup.setLayoutData (data); + + /* Get images */ + boldImage = createBitmapImage (display, import("bold.bmp"), import("bold_mask.bmp")); + italicImage = createBitmapImage (display, import("italic.bmp"), import("italic_mask.bmp")); + redImage = createBitmapImage (display, import("red.bmp"), import("red_mask.bmp")); + yellowImage = createBitmapImage (display, import("yellow.bmp"), import("yellow_mask.bmp")); + underlineImage = createBitmapImage (display, import("underline.bmp"), import("underline_mask.bmp")); + strikeoutImage = createBitmapImage (display, import("strikeout.bmp"), import("strikeout_mask.bmp")); + + /* Create controls to modify the StyledText */ + Label label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("StyledText_Style_Instructions")); + label.setLayoutData(new GridData(DWT.FILL, DWT.CENTER, false, false, 6, 1)); + label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("Bold")); + label.setLayoutData(new GridData(DWT.END, DWT.CENTER, true, false)); + boldButton = new Button (styledTextStyleGroup, DWT.PUSH); + boldButton.setImage (boldImage); + label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("Underline")); + label.setLayoutData(new GridData(DWT.END, DWT.CENTER, true, false)); + underlineButton = new Button (styledTextStyleGroup, DWT.PUSH); + underlineButton.setImage (underlineImage); + label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("Foreground_Style")); + label.setLayoutData(new GridData(DWT.END, DWT.CENTER, true, false)); + redButton = new Button (styledTextStyleGroup, DWT.PUSH); + redButton.setImage (redImage); + label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("Italic")); + label.setLayoutData(new GridData(DWT.END, DWT.CENTER, true, false)); + italicButton = new Button (styledTextStyleGroup, DWT.PUSH); + italicButton.setImage (italicImage); + label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("Strikeout")); + label.setLayoutData(new GridData(DWT.END, DWT.CENTER, true, false)); + strikeoutButton = new Button (styledTextStyleGroup, DWT.PUSH); + strikeoutButton.setImage (strikeoutImage); + label = new Label (styledTextStyleGroup, DWT.NONE); + label.setText (ControlExample.getResourceString ("Background_Style")); + label.setLayoutData(new GridData(DWT.END, DWT.CENTER, true, false)); + yellowButton = new Button (styledTextStyleGroup, DWT.PUSH); + yellowButton.setImage (yellowImage); + SelectionListener styleListener = new class() SelectionAdapter { + public void widgetSelected (SelectionEvent e) { + Point sel = styledText.getSelectionRange(); + if ((sel is null) || (sel.y is 0)) return; + StyleRange style; + for (int i = sel.x; i + *******************************************************************************/ +module dwtexamples.controlexample.Tab; + + + +import dwt.DWT; +import dwt.events.ArmEvent; +import dwt.events.ControlEvent; +import dwt.events.DisposeEvent; +import dwt.events.DisposeListener; +import dwt.events.FocusEvent; +import dwt.events.HelpEvent; +import dwt.events.KeyAdapter; +import dwt.events.KeyEvent; +import dwt.events.MenuEvent; +import dwt.events.ModifyEvent; +import dwt.events.MouseEvent; +import dwt.events.PaintEvent; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.events.ShellEvent; +import dwt.events.TraverseEvent; +import dwt.events.TreeEvent; +import dwt.events.TypedEvent; +import dwt.events.VerifyEvent; +import dwt.graphics.Color; +import dwt.graphics.Font; +import dwt.graphics.FontData; +import dwt.graphics.GC; +import dwt.graphics.Image; +import dwt.graphics.Point; +import dwt.graphics.RGB; +import dwt.graphics.Rectangle; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.ColorDialog; +import dwt.widgets.Combo; +import dwt.widgets.Composite; +import dwt.widgets.Control; +import dwt.widgets.Display; +import dwt.widgets.Event; +import dwt.widgets.FontDialog; +import dwt.widgets.Group; +import dwt.widgets.Item; +import dwt.widgets.Label; +import dwt.widgets.Link; +import dwt.widgets.List; +import dwt.widgets.Listener; +import dwt.widgets.Menu; +import dwt.widgets.MenuItem; +import dwt.widgets.ProgressBar; +import dwt.widgets.Sash; +import dwt.widgets.Scale; +import dwt.widgets.Shell; +import dwt.widgets.Slider; +import dwt.widgets.Spinner; +import dwt.widgets.TabFolder; +import dwt.widgets.Table; +import dwt.widgets.TableItem; +import dwt.widgets.Text; +import dwt.widgets.Tree; +import dwt.widgets.TreeItem; +import dwt.widgets.ToolTip; +import dwt.widgets.Widget; +import dwt.widgets.Canvas; +import dwt.widgets.CoolBar; +import dwt.widgets.ExpandBar; + +import dwtexamples.controlexample.ControlExample; +import tango.text.convert.Format; + +import tango.io.Stdout; + +/** + * Tab is the abstract superclass of every page + * in the example's tab folder. Each page in the tab folder + * describes a control. + * + * A Tab itself is not a control but instead provides a + * hierarchy with which to share code that is common to + * every page in the folder. + * + * A typical page in a Tab contains a two column composite. + * The left column contains the "Example" group. The right + * column contains "Control" group. The "Control" group + * contains controls that allow the user to interact with + * the example control. The "Control" group typically + * contains a "Style", "Other" and "Size" group. Subclasses + * can override these defaults to augment a group or stop + * a group from being created. + */ + struct EventName { + char[] name; + int id; + } +abstract class Tab { + Shell shell; + Display display; + + /* Common control buttons */ + Button borderButton, enabledButton, visibleButton, backgroundImageButton, popupMenuButton; + Button preferredButton, tooSmallButton, smallButton, largeButton, fillHButton, fillVButton; + + /* Common groups and composites */ + Composite tabFolderPage; + Group exampleGroup, controlGroup, listenersGroup, otherGroup, sizeGroup, styleGroup, colorGroup, backgroundModeGroup; + + /* Controlling instance */ + const ControlExample instance; + + /* Sizing constants for the "Size" group */ + static const int TOO_SMALL_SIZE = 10; + static const int SMALL_SIZE = 50; + static const int LARGE_SIZE = 100; + + /* Right-to-left support */ + static const bool RTL_SUPPORT_ENABLE = false; + Group orientationGroup; + Button rtlButton, ltrButton, defaultOrietationButton; + + /* Controls and resources for the "Colors & Fonts" group */ + static const int IMAGE_SIZE = 12; + static const int FOREGROUND_COLOR = 0; + static const int BACKGROUND_COLOR = 1; + static const int FONT = 2; + Table colorAndFontTable; + ColorDialog colorDialog; + FontDialog fontDialog; + Color foregroundColor, backgroundColor; + Font font; + + /* Controls and resources for the "Background Mode" group */ + Combo backgroundModeCombo; + Button backgroundModeImageButton, backgroundModeColorButton; + + /* Event logging variables and controls */ + Text eventConsole; + bool logging = false; + bool [] eventsFilter; + + /* Set/Get API controls */ + Combo nameCombo; + Label returnTypeLabel; + Button getButton, setButton; + Text setText, getText; + + static EventName[] EVENT_NAMES = [ + {"Activate"[], DWT.Activate}, + {"Arm", DWT.Arm}, + {"Close", DWT.Close}, + {"Collapse", DWT.Collapse}, + {"Deactivate", DWT.Deactivate}, + {"DefaultSelection", DWT.DefaultSelection}, + {"Deiconify", DWT.Deiconify}, + {"Dispose", DWT.Dispose}, + {"DragDetect", DWT.DragDetect}, + {"EraseItem", DWT.EraseItem}, + {"Expand", DWT.Expand}, + {"FocusIn", DWT.FocusIn}, + {"FocusOut", DWT.FocusOut}, + {"HardKeyDown", DWT.HardKeyDown}, + {"HardKeyUp", DWT.HardKeyUp}, + {"Help", DWT.Help}, + {"Hide", DWT.Hide}, + {"Iconify", DWT.Iconify}, + {"KeyDown", DWT.KeyDown}, + {"KeyUp", DWT.KeyUp}, + {"MeasureItem", DWT.MeasureItem}, + {"MenuDetect", DWT.MenuDetect}, + {"Modify", DWT.Modify}, + {"MouseDoubleClick", DWT.MouseDoubleClick}, + {"MouseDown", DWT.MouseDown}, + {"MouseEnter", DWT.MouseEnter}, + {"MouseExit", DWT.MouseExit}, + {"MouseHover", DWT.MouseHover}, + {"MouseMove", DWT.MouseMove}, + {"MouseUp", DWT.MouseUp}, + {"MouseWheel", DWT.MouseWheel}, + {"Move", DWT.Move}, + {"Paint", DWT.Paint}, + {"PaintItem", DWT.PaintItem}, + {"Resize", DWT.Resize}, + {"Selection", DWT.Selection}, + {"SetData", DWT.SetData}, +// {"Settings", DWT.Settings}, // note: this event only goes to Display + {"Show", DWT.Show}, + {"Traverse", DWT.Traverse}, + {"Verify", DWT.Verify} + ]; + + bool samplePopup = false; + + + struct ReflectTypeInfo{ + ReflectMethodInfo[ char[] ] methods; + } + struct ReflectMethodInfo{ + TypeInfo returnType; + TypeInfo[] argumentTypes; + } + static ReflectTypeInfo[ ClassInfo ] reflectTypeInfos; + + static ReflectMethodInfo createMethodInfo( TypeInfo ret, TypeInfo[] args ... ){ + ReflectMethodInfo res; + res.returnType = ret; + foreach( arg; args ){ + res.argumentTypes ~= arg; + } + return res; + } + static void createSetterGetter( ref ReflectTypeInfo ti, char[] name, TypeInfo type ){ + ti.methods[ "get" ~ name ] = createMethodInfo( type ); + ti.methods[ "set" ~ name ] = createMethodInfo( typeid(void), type ); + } + + static void registerTypes(){ + if( reflectTypeInfos.length > 0 ){ + return; + } + + { + ReflectTypeInfo ti; + createSetterGetter( ti, "Selection", typeid(bool) ); + createSetterGetter( ti, "Text", typeid(char[]) ); + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + reflectTypeInfos[ Button.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + reflectTypeInfos[ Canvas.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "Orientation", typeid(int) ); + createSetterGetter( ti, "Items", typeid(char[]) ); + createSetterGetter( ti, "Selection", typeid(Point) ); + createSetterGetter( ti, "Text", typeid(char[]) ); + createSetterGetter( ti, "TextLimit", typeid(int) ); + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + createSetterGetter( ti, "VisibleItemCount", typeid(int) ); + reflectTypeInfos[ Combo.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + reflectTypeInfos[ CoolBar.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "Spacing", typeid(int) ); + reflectTypeInfos[ ExpandBar.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + reflectTypeInfos[ Group.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "Text", typeid(char[]) ); + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + reflectTypeInfos[ Label.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "Text", typeid(char[]) ); + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + reflectTypeInfos[ Link.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "Items", typeid(char[][]) ); + createSetterGetter( ti, "Selection", typeid(char[]) ); + createSetterGetter( ti, "TopIndex", typeid(int) ); + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + reflectTypeInfos[ List.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "Selection", typeid(char[]) ); + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + reflectTypeInfos[ ProgressBar.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + reflectTypeInfos[ Sash.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "Selection", typeid(int) ); + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + reflectTypeInfos[ Scale.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "Selection", typeid(int) ); + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + reflectTypeInfos[ Slider.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "Selection", typeid(int) ); + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + reflectTypeInfos[ Spinner.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "DoubleClickEnabled", typeid(bool) ); + createSetterGetter( ti, "EchoChar", typeid(wchar) ); + createSetterGetter( ti, "Editable", typeid(bool) ); + createSetterGetter( ti, "Orientation", typeid(int) ); + createSetterGetter( ti, "Selection", typeid(Point) ); + createSetterGetter( ti, "Tabs", typeid(int) ); + createSetterGetter( ti, "Text", typeid(char[]) ); + createSetterGetter( ti, "TextLimit", typeid(int) ); + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + createSetterGetter( ti, "TopIndex", typeid(int) ); + reflectTypeInfos[ Text.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "Message", typeid(int) ); + createSetterGetter( ti, "Text", typeid(char[]) ); + reflectTypeInfos[ ToolTip.classinfo ] = ti; + } + { + ReflectTypeInfo ti; + createSetterGetter( ti, "ColumnOrder", typeid(int[]) ); + createSetterGetter( ti, "Selection", typeid(TreeItem[]) ); + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + createSetterGetter( ti, "TopItem", typeid(int) ); + reflectTypeInfos[ Tree.classinfo ] = ti; + } + + /+{ + ReflectTypeInfo ti; + createSetterGetter( ti, "Editable", typeid(bool) ); + createSetterGetter( ti, "Items", typeid(char[]) ); + createSetterGetter( ti, "Selection", typeid(Point) ); + createSetterGetter( ti, "Text", typeid(char[]) ); + createSetterGetter( ti, "TextLimit", typeid(int) ); + createSetterGetter( ti, "ToolTipText", typeid(char[]) ); + createSetterGetter( ti, "VisibleItemCount", typeid(int) ); + reflectTypeInfos[ CCombo.classinfo ] = ti; + }+/ + } + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + this.instance = instance; + registerTypes(); + } + + /** + * Creates the "Control" group. The "Control" group + * is typically the right hand column in the tab. + */ + void createControlGroup () { + + /* + * Create the "Control" group. This is the group on the + * right half of each example tab. It consists of the + * "Style" group, the "Other" group and the "Size" group. + */ + controlGroup = new Group (tabFolderPage, DWT.NONE); + controlGroup.setLayout (new GridLayout (2, true)); + controlGroup.setLayoutData (new GridData(DWT.FILL, DWT.FILL, false, false)); + controlGroup.setText (ControlExample.getResourceString("Parameters")); + + /* Create individual groups inside the "Control" group */ + createStyleGroup (); + createOtherGroup (); + createSetGetGroup(); + createSizeGroup (); + createColorAndFontGroup (); + if (RTL_SUPPORT_ENABLE) { + createOrientationGroup (); + } + + /* + * For each Button child in the style group, add a selection + * listener that will recreate the example controls. If the + * style group button is a RADIO button, ensure that the radio + * button is selected before recreating the example controls. + * When the user selects a RADIO button, the current RADIO + * button in the group is deselected and the new RADIO button + * is selected automatically. The listeners are notified for + * both these operations but typically only do work when a RADIO + * button is selected. + */ + SelectionListener selectionListener = new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + if ((event.widget.getStyle () & DWT.RADIO) !is 0) { + if (!(cast(Button) event.widget).getSelection ()) return; + } + recreateExampleWidgets (); + } + }; + Control [] children = styleGroup.getChildren (); + for (int i=0; i 0) oldColor = controls [0].getForeground (); + } + if (oldColor !is null) colorDialog.setRGB(oldColor.getRGB()); // seed dialog with current color + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = foregroundColor; // save old foreground color to dispose when done + foregroundColor = new Color (display, rgb); + setExampleWidgetForeground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case BACKGROUND_COLOR: { + Color oldColor = backgroundColor; + if (oldColor is null) { + Control [] controls = getExampleControls (); + if (controls.length > 0) oldColor = controls [0].getBackground (); // seed dialog with current color + } + if (oldColor !is null) colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = backgroundColor; // save old background color to dispose when done + backgroundColor = new Color (display, rgb); + setExampleWidgetBackground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case FONT: { + Font oldFont = font; + if (oldFont is null) { + Control [] controls = getExampleControls (); + if (controls.length > 0) oldFont = controls [0].getFont (); + } + if (oldFont !is null) fontDialog.setFontList(oldFont.getFontData()); // seed dialog with current font + FontData fontData = fontDialog.open (); + if (fontData is null) return; + oldFont = font; // dispose old font when done + font = new Font (display, fontData); + setExampleWidgetFont (); + setExampleWidgetSize (); + if (oldFont !is null) oldFont.dispose (); + } + break; + default: + } + } + + /** + * Creates the "Other" group. This is typically + * a child of the "Control" group. + */ + void createOtherGroup () { + /* Create the group */ + otherGroup = new Group (controlGroup, DWT.NONE); + otherGroup.setLayout (new GridLayout ()); + otherGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false)); + otherGroup.setText (ControlExample.getResourceString("Other")); + + /* Create the controls */ + enabledButton = new Button(otherGroup, DWT.CHECK); + enabledButton.setText(ControlExample.getResourceString("Enabled")); + visibleButton = new Button(otherGroup, DWT.CHECK); + visibleButton.setText(ControlExample.getResourceString("Visible")); + backgroundImageButton = new Button(otherGroup, DWT.CHECK); + backgroundImageButton.setText(ControlExample.getResourceString("BackgroundImage")); + popupMenuButton = new Button(otherGroup, DWT.CHECK); + popupMenuButton.setText(ControlExample.getResourceString("PopupMenu")); + + /* Add the listeners */ + enabledButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetEnabled (); + } + }); + visibleButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetVisibility (); + } + }); + backgroundImageButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetBackgroundImage (); + } + }); + popupMenuButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetPopupMenu (); + } + }); + + /* Set the default state */ + enabledButton.setSelection(true); + visibleButton.setSelection(true); + backgroundImageButton.setSelection(false); + popupMenuButton.setSelection(false); + } + + /** + * Creates the "Background Mode" group. + */ + void createBackgroundModeGroup () { + // note that this method must be called after createExampleWidgets + if (getExampleControls ().length is 0) return; + + /* Create the group */ + backgroundModeGroup = new Group (controlGroup, DWT.NONE); + backgroundModeGroup.setLayout (new GridLayout ()); + backgroundModeGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false)); + backgroundModeGroup.setText (ControlExample.getResourceString("Background_Mode")); + + /* Create the controls */ + backgroundModeCombo = new Combo(backgroundModeGroup, DWT.READ_ONLY); + backgroundModeCombo.setItems(["DWT.INHERIT_NONE", "DWT.INHERIT_DEFAULT", "DWT.INHERIT_FORCE"]); + backgroundModeImageButton = new Button(backgroundModeGroup, DWT.CHECK); + backgroundModeImageButton.setText(ControlExample.getResourceString("BackgroundImage")); + backgroundModeColorButton = new Button(backgroundModeGroup, DWT.CHECK); + backgroundModeColorButton.setText(ControlExample.getResourceString("BackgroundColor")); + + /* Add the listeners */ + backgroundModeCombo.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleGroupBackgroundMode (); + } + }); + backgroundModeImageButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleGroupBackgroundImage (); + } + }); + backgroundModeColorButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleGroupBackgroundColor (); + } + }); + + /* Set the default state */ + backgroundModeCombo.setText(backgroundModeCombo.getItem(0)); + backgroundModeImageButton.setSelection(false); + backgroundModeColorButton.setSelection(false); + } + + /** + * Create the event console popup menu. + */ + void createEventConsolePopup () { + Menu popup = new Menu (shell, DWT.POP_UP); + eventConsole.setMenu (popup); + + MenuItem cut = new MenuItem (popup, DWT.PUSH); + cut.setText (ControlExample.getResourceString("MenuItem_Cut")); + cut.addListener (DWT.Selection, new class() Listener { + public void handleEvent (Event event) { + eventConsole.cut (); + } + }); + MenuItem copy = new MenuItem (popup, DWT.PUSH); + copy.setText (ControlExample.getResourceString("MenuItem_Copy")); + copy.addListener (DWT.Selection, new class() Listener { + public void handleEvent (Event event) { + eventConsole.copy (); + } + }); + MenuItem paste = new MenuItem (popup, DWT.PUSH); + paste.setText (ControlExample.getResourceString("MenuItem_Paste")); + paste.addListener (DWT.Selection, new class() Listener { + public void handleEvent (Event event) { + eventConsole.paste (); + } + }); + new MenuItem (popup, DWT.SEPARATOR); + MenuItem selectAll = new MenuItem (popup, DWT.PUSH); + selectAll.setText(ControlExample.getResourceString("MenuItem_SelectAll")); + selectAll.addListener (DWT.Selection, new class() Listener { + public void handleEvent (Event event) { + eventConsole.selectAll (); + } + }); + } + + /** + * Creates the "Example" group. The "Example" group + * is typically the left hand column in the tab. + */ + void createExampleGroup () { + exampleGroup = new Group (tabFolderPage, DWT.NONE); + exampleGroup.setLayout (new GridLayout ()); + exampleGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + } + + /** + * Creates the "Example" widget children of the "Example" group. + * Subclasses override this method to create the particular + * example control. + */ + void createExampleWidgets () { + /* Do nothing */ + } + + /** + * Creates and opens the "Listener selection" dialog. + */ + void createListenerSelectionDialog () { + Shell dialog = new Shell (shell, DWT.DIALOG_TRIM | DWT.APPLICATION_MODAL); + dialog.setText (ControlExample.getResourceString ("Select_Listeners")); + dialog.setLayout (new GridLayout (2, false)); + Table table = new Table (dialog, DWT.BORDER | DWT.V_SCROLL | DWT.CHECK); + GridData data = new GridData(GridData.FILL_BOTH); + data.verticalSpan = 2; + table.setLayoutData(data); + for (int i = 0; i < EVENT_NAMES.length; i++) { + TableItem item = new TableItem (table, DWT.NONE); + item.setText( EVENT_NAMES[i].name ); + item.setChecked (eventsFilter[i]); + } + char[] [] customNames = getCustomEventNames (); + for (int i = 0; i < customNames.length; i++) { + TableItem item = new TableItem (table, DWT.NONE); + item.setText (customNames[i]); + item.setChecked (eventsFilter[EVENT_NAMES.length + i]); + } + Button selectAll = new Button (dialog, DWT.PUSH); + selectAll.setText(ControlExample.getResourceString ("Select_All")); + selectAll.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); + selectAll.addSelectionListener (new class(table, customNames) SelectionAdapter { + Table tbl; + char[][] cn; + this( Table tbl, char[][] cn ){ this.tbl = tbl; this.cn = cn; } + public void widgetSelected(SelectionEvent e) { + TableItem [] items = tbl.getItems(); + for (int i = 0; i < EVENT_NAMES.length; i++) { + items[i].setChecked(true); + } + for (int i = 0; i < cn.length; i++) { + items[EVENT_NAMES.length + i].setChecked(true); + } + } + }); + Button deselectAll = new Button (dialog, DWT.PUSH); + deselectAll.setText(ControlExample.getResourceString ("Deselect_All")); + deselectAll.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING)); + deselectAll.addSelectionListener (new class(table, customNames) SelectionAdapter { + Table tbl; + char[][] cn; + this( Table tbl, char[][] cn ){ this.tbl = tbl; this.cn = cn; } + public void widgetSelected(SelectionEvent e) { + TableItem [] items = tbl.getItems(); + for (int i = 0; i < EVENT_NAMES.length; i++) { + items[i].setChecked(false); + } + for (int i = 0; i < cn.length; i++) { + items[EVENT_NAMES.length + i].setChecked(false); + } + } + }); + new Label(dialog, DWT.NONE); /* Filler */ + Button ok = new Button (dialog, DWT.PUSH); + ok.setText(ControlExample.getResourceString ("OK")); + dialog.setDefaultButton(ok); + ok.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); + ok.addSelectionListener (new class(dialog, table, customNames ) SelectionAdapter { + Shell dlg; + Table tbl; + char[][] cn; + this( Shell dlg, Table tbl, char[][] cn ){ this.tbl = tbl; this.dlg = dlg; this.cn = cn; } + public void widgetSelected(SelectionEvent e) { + TableItem [] items = tbl.getItems(); + for (int i = 0; i < EVENT_NAMES.length; i++) { + eventsFilter[i] = items[i].getChecked(); + } + for (int i = 0; i < cn.length; i++) { + eventsFilter[EVENT_NAMES.length + i] = items[EVENT_NAMES.length + i].getChecked(); + } + dlg.dispose(); + } + }); + dialog.pack (); + dialog.open (); + while (! dialog.isDisposed()) { + if (! display.readAndDispatch()) display.sleep(); + } + } + + /** + * Creates the "Listeners" group. The "Listeners" group + * goes below the "Example" and "Control" groups. + */ + void createListenersGroup () { + listenersGroup = new Group (tabFolderPage, DWT.NONE); + listenersGroup.setLayout (new GridLayout (3, false)); + listenersGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true, 2, 1)); + listenersGroup.setText (ControlExample.getResourceString ("Listeners")); + + /* + * Create the button to access the 'Listeners' dialog. + */ + Button listenersButton = new Button (listenersGroup, DWT.PUSH); + listenersButton.setText (ControlExample.getResourceString ("Select_Listeners")); + listenersButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent e) { + createListenerSelectionDialog (); + recreateExampleWidgets (); + } + }); + + /* + * Create the checkbox to add/remove listeners to/from the example widgets. + */ + Button listenCheckbox = new Button (listenersGroup, DWT.CHECK); + listenCheckbox.setText (ControlExample.getResourceString ("Listen")); + listenCheckbox.addSelectionListener (new class(listenCheckbox) SelectionAdapter { + Button lcb; + this( Button lcb ){ this.lcb = lcb; } + public void widgetSelected(SelectionEvent e) { + logging = lcb.getSelection (); + recreateExampleWidgets (); + } + }); + + /* + * Create the button to clear the text. + */ + Button clearButton = new Button (listenersGroup, DWT.PUSH); + clearButton.setText (ControlExample.getResourceString ("Clear")); + clearButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); + clearButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent e) { + eventConsole.setText (""); + } + }); + + /* Initialize the eventsFilter to log all events. */ + int customEventCount = getCustomEventNames ().length; + eventsFilter = new bool [EVENT_NAMES.length + customEventCount]; + for (int i = 0; i < EVENT_NAMES.length + customEventCount; i++) { + eventsFilter [i] = true; + } + + /* Create the event console Text. */ + eventConsole = new Text (listenersGroup, DWT.BORDER | DWT.MULTI | DWT.V_SCROLL | DWT.H_SCROLL); + GridData data = new GridData (GridData.FILL_BOTH); + data.horizontalSpan = 3; + data.heightHint = 80; + eventConsole.setLayoutData (data); + createEventConsolePopup (); + eventConsole.addKeyListener (new class() KeyAdapter { + public void keyPressed (KeyEvent e) { + if ((e.keyCode is 'A' || e.keyCode is 'a') && (e.stateMask & DWT.MOD1) !is 0) { + eventConsole.selectAll (); + e.doit = false; + } + } + }); + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return null; + } + + void createSetGetDialog(int x, int y, char[][] methodNames) { + Shell dialog = new Shell(shell, DWT.DIALOG_TRIM | DWT.RESIZE | DWT.MODELESS); + dialog.setLayout(new GridLayout(2, false)); + dialog.setText(getTabText() ~ " " ~ ControlExample.getResourceString ("Set_Get")); + nameCombo = new Combo(dialog, DWT.READ_ONLY); + nameCombo.setItems(methodNames); + nameCombo.setText(methodNames[0]); + nameCombo.setVisibleItemCount(methodNames.length); + nameCombo.setLayoutData(new GridData(DWT.FILL, DWT.CENTER, false, false)); + nameCombo.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + resetLabels(); + } + }); + returnTypeLabel = new Label(dialog, DWT.NONE); + returnTypeLabel.setLayoutData(new GridData(DWT.FILL, DWT.BEGINNING, false, false)); + setButton = new Button(dialog, DWT.PUSH); + setButton.setLayoutData(new GridData(DWT.FILL, DWT.BEGINNING, false, false)); + setButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + setValue(); + setText.selectAll(); + setText.setFocus(); + } + }); + setText = new Text(dialog, DWT.SINGLE | DWT.BORDER); + setText.setLayoutData(new GridData(DWT.FILL, DWT.CENTER, false, false)); + getButton = new Button(dialog, DWT.PUSH); + getButton.setLayoutData(new GridData(DWT.FILL, DWT.BEGINNING, false, false)); + getButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + getValue(); + } + }); + getText = new Text(dialog, DWT.MULTI | DWT.BORDER | DWT.READ_ONLY | DWT.H_SCROLL | DWT.V_SCROLL); + GridData data = new GridData(DWT.FILL, DWT.FILL, true, true); + data.widthHint = 240; + data.heightHint = 200; + getText.setLayoutData(data); + resetLabels(); + dialog.setDefaultButton(setButton); + dialog.pack(); + dialog.setLocation(x, y); + dialog.open(); + } + + void resetLabels() { + char[] methodRoot = nameCombo.getText(); + returnTypeLabel.setText(parameterInfo(methodRoot)); + setButton.setText(setMethodName(methodRoot)); + getButton.setText("get" ~ methodRoot); + setText.setText(""); + getText.setText(""); + getValue(); + setText.setFocus(); + } + + char[] setMethodName(char[] methodRoot) { + return "set" ~ methodRoot; + } + + char[] parameterInfo(char[] methodRoot) { + char[] methodName = "get" ~ methodRoot; + auto mthi = getMethodInfo( methodName ); + char[] typeNameString = mthi.returnType.toString; +//PORTING_LEFT + +// char[] typeName = null; +// ClassInfo returnType = getReturnType(methodRoot); + bool isArray = false; + TypeInfo ti = mthi.returnType; + + if ( auto tia = cast(TypeInfo_Array) mthi.returnType ) { + ti = tia.value; + isArray = true; + } + if ( auto tia = cast(TypeInfo_Class ) ti ) { + } else if ( auto tia = cast(TypeInfo_Interface ) ti ) { + } else { + } + //char[] typeNameString = typeName; + char[] info; +// int index = typeName.lastIndexOf('.'); +// if (index !is -1 && index+1 < typeName.length()) typeNameString = typeName.substring(index+1); +// char[] info = ControlExample.getResourceString("Info_" + typeNameString + (isArray ? "A" : "")); +// if (isArray) { +// typeNameString += "[]"; +// } +// return ControlExample.getResourceString("Parameter_Info", [typeNameString, info]); + + return Format( ControlExample.getResourceString("Parameter_Info"), typeNameString, info ); + } + + void getValue() { +//PORTING_LEFT +/+ + char[] methodName = "get" + nameCombo.getText(); + getText.setText(""); + Widget[] widgets = getExampleWidgets(); + for (int i = 0; i < widgets.length; i++) { + try { + java.lang.reflect.Method method = widgets[i].getClass().getMethod(methodName, null); + Object result = method.invoke(widgets[i], null); + if (result is null) { + getText.append("null"); + } else if (result.getClass().isArray()) { + int length = java.lang.reflect.Array.getLength(result); + if (length is 0) { + getText.append(result.getClass().getComponentType() + "[0]"); + } + for (int j = 0; j < length; j++) { + getText.append(java.lang.reflect.Array.get(result,j).toString() + "\n"); + } + } else { + getText.append(result.toString()); + } + } catch (Exception e) { + getText.append(e.toString()); + } + if (i + 1 < widgets.length) { + getText.append("\n\n"); + } + } ++/ + } + + private ReflectMethodInfo getMethodInfo( char[] methodName ){ + Widget[] widgets = getExampleWidgets(); + if( widgets.length is 0 ){ + Stdout.formatln( "getWidgets returns null in {}", this.classinfo.name ); + } + if( auto rti = widgets[0].classinfo in reflectTypeInfos ){ + if( auto mthi = methodName in rti.methods ){ + return *mthi; + } + else{ + Stdout.formatln( "method unknown {} in type {} in {}", methodName, widgets[0].classinfo.name, this.classinfo.name ); + } + } + else{ + Stdout.formatln( "type unknown {} in {}", widgets[0].classinfo.name, this.classinfo.name ); + } + } + + TypeInfo getReturnType(char[] methodRoot) { + char[] methodName = "get" ~ methodRoot; + auto mthi = getMethodInfo( methodName ); + return mthi.returnType; + } + + void setValue() { +//PORTING_LEFT +/+ + /* The parameter type must be the same as the get method's return type */ + char[] methodRoot = nameCombo.getText(); + Class returnType = getReturnType(methodRoot); + char[] methodName = setMethodName(methodRoot); + char[] value = setText.getText(); + Widget[] widgets = getExampleWidgets(); + for (int i = 0; i < widgets.length; i++) { + try { + java.lang.reflect.Method method = widgets[i].getClass().getMethod(methodName, [returnType]); + char[] typeName = returnType.getName(); + Object[] parameter = null; + if (typeName.equals("int")) { + parameter = [new Integer(value)]; + } else if (typeName.equals("long")) { + parameter = [new Long(value)]; + } else if (typeName.equals("char")) { + parameter = [value.length() is 1 ? new Character(value.charAt(0)) : new Character('\0')]; + } else if (typeName.equals("bool")) { + parameter = [new bool(value)]; + } else if (typeName.equals("java.lang.char[]")) { + parameter = [value]; + } else if (typeName.equals("org.eclipse.swt.graphics.Point")) { + char[] xy[] = split(value, ','); + parameter = [new Point((new Integer(xy[0])).intValue(),(new Integer(xy[1])).intValue())]; + } else if (typeName.equals("[I")) { + char[] strings[] = split(value, ','); + int[] ints = new int[strings.length]; + for (int j = 0; j < strings.length; j++) { + ints[j] = (new Integer(strings[j])).intValue(); + } + parameter = [ints]; + } else if (typeName.equals("[Ljava.lang.char[];")) { + parameter = [split(value, ',')]; + } else { + parameter = parameterForType(typeName, value, widgets[i]); + } + method.invoke(widgets[i], parameter); + } catch (Exception e) { + getText.setText(e.toString()); + } + } ++/ +return null; + } + + Object[] parameterForType(char[] typeName, char[] value, Widget widget) { +//PORTING_LEFT +return null; + //return [value]; + } + + void createOrientationGroup () { + /* Create Orientation group*/ + orientationGroup = new Group (controlGroup, DWT.NONE); + orientationGroup.setLayout (new GridLayout()); + orientationGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false)); + orientationGroup.setText (ControlExample.getResourceString("Orientation")); + defaultOrietationButton = new Button (orientationGroup, DWT.RADIO); + defaultOrietationButton.setText (ControlExample.getResourceString("Default")); + defaultOrietationButton.setSelection (true); + ltrButton = new Button (orientationGroup, DWT.RADIO); + ltrButton.setText ("DWT.LEFT_TO_RIGHT"); + rtlButton = new Button (orientationGroup, DWT.RADIO); + rtlButton.setText ("DWT.RIGHT_TO_LEFT"); + } + + /** + * Creates the "Size" group. The "Size" group contains + * controls that allow the user to change the size of + * the example widgets. + */ + void createSizeGroup () { + /* Create the group */ + sizeGroup = new Group (controlGroup, DWT.NONE); + sizeGroup.setLayout (new GridLayout()); + sizeGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false)); + sizeGroup.setText (ControlExample.getResourceString("Size")); + + /* Create the controls */ + + /* + * The preferred size of a widget is the size returned + * by widget.computeSize (DWT.DEFAULT, DWT.DEFAULT). + * This size is defined on a widget by widget basis. + * Many widgets will attempt to display their contents. + */ + preferredButton = new Button (sizeGroup, DWT.RADIO); + preferredButton.setText (ControlExample.getResourceString("Preferred")); + tooSmallButton = new Button (sizeGroup, DWT.RADIO); + tooSmallButton.setText ( Format( "{} X {}", TOO_SMALL_SIZE, TOO_SMALL_SIZE)); + smallButton = new Button(sizeGroup, DWT.RADIO); + smallButton.setText (Format( "{} X {}", SMALL_SIZE, SMALL_SIZE)); + largeButton = new Button (sizeGroup, DWT.RADIO); + largeButton.setText (Format( "{} X {}", LARGE_SIZE, LARGE_SIZE)); + fillHButton = new Button (sizeGroup, DWT.CHECK); + fillHButton.setText (ControlExample.getResourceString("Fill_X")); + fillVButton = new Button (sizeGroup, DWT.CHECK); + fillVButton.setText (ControlExample.getResourceString("Fill_Y")); + + /* Add the listeners */ + SelectionAdapter selectionListener = new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetSize (); + } + }; + preferredButton.addSelectionListener(selectionListener); + tooSmallButton.addSelectionListener(selectionListener); + smallButton.addSelectionListener(selectionListener); + largeButton.addSelectionListener(selectionListener); + fillHButton.addSelectionListener(selectionListener); + fillVButton.addSelectionListener(selectionListener); + + /* Set the default state */ + preferredButton.setSelection (true); + } + + /** + * Creates the "Style" group. The "Style" group contains + * controls that allow the user to change the style of + * the example widgets. Changing a widget "Style" causes + * the widget to be destroyed and recreated. + */ + void createStyleGroup () { + styleGroup = new Group (controlGroup, DWT.NONE); + styleGroup.setLayout (new GridLayout ()); + styleGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false)); + styleGroup.setText (ControlExample.getResourceString("Styles")); + } + + /** + * Creates the tab folder page. + * + * @param tabFolder org.eclipse.swt.widgets.TabFolder + * @return the new page for the tab folder + */ + Composite createTabFolderPage (TabFolder tabFolder) { + /* Cache the shell and display. */ + shell = tabFolder.getShell (); + display = shell.getDisplay (); + + /* Create a two column page. */ + tabFolderPage = new Composite (tabFolder, DWT.NONE); + tabFolderPage.setLayout (new GridLayout (2, false)); + + /* Create the "Example" and "Control" groups. */ + createExampleGroup (); + createControlGroup (); + + /* Create the "Listeners" group under the "Control" group. */ + createListenersGroup (); + + /* Create and initialize the example and control widgets. */ + createExampleWidgets (); + hookExampleWidgetListeners (); + createControlWidgets (); + createBackgroundModeGroup (); + setExampleWidgetState (); + + return tabFolderPage; + } + + void setExampleWidgetPopupMenu() { + Control[] controls = getExampleControls(); + for (int i = 0; i < controls.length; i++) { + Control control = controls [i]; + control.addListener(DWT.MenuDetect, new class(control) Listener { + Control ctrl; + this( Control ctrl ){ this.ctrl = ctrl; } + public void handleEvent(Event event) { + Menu menu = ctrl.getMenu(); + if (menu !is null && samplePopup) { + menu.dispose(); + menu = null; + } + if (menu is null && popupMenuButton.getSelection()) { + menu = new Menu(shell, DWT.POP_UP); + MenuItem item = new MenuItem(menu, DWT.PUSH); + item.setText("Sample popup menu item"); + specialPopupMenuItems(menu, event); + ctrl.setMenu(menu); + samplePopup = true; + } + } + }); + } + } + + protected void specialPopupMenuItems(Menu menu, Event event) { + } + + /** + * Disposes the "Example" widgets. + */ + void disposeExampleWidgets () { + Widget [] widgets = getExampleWidgets (); + for (int i=0; i + *******************************************************************************/ +module dwtexamples.controlexample.TabFolderTab; + + + +import dwt.DWT; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Group; +import dwt.widgets.Item; +import dwt.widgets.TabFolder; +import dwt.widgets.TabItem; +import dwt.widgets.Text; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import tango.text.convert.Format; + +class TabFolderTab : Tab { + /* Example widgets and groups that contain them */ + TabFolder tabFolder1; + Group tabFolderGroup; + + /* Style widgets added to the "Style" group */ + Button topButton, bottomButton; + + static char[] [] TabItems1; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + if( TabItems1.length is 0 ){ + TabItems1 = [ + ControlExample.getResourceString("TabItem1_0"), + ControlExample.getResourceString("TabItem1_1"), + ControlExample.getResourceString("TabItem1_2")]; + } + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the TabFolder */ + tabFolderGroup = new Group (exampleGroup, DWT.NONE); + tabFolderGroup.setLayout (new GridLayout ()); + tabFolderGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + tabFolderGroup.setText ("TabFolder"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (topButton.getSelection ()) style |= DWT.TOP; + if (bottomButton.getSelection ()) style |= DWT.BOTTOM; + if (borderButton.getSelection ()) style |= DWT.BORDER; + + /* Create the example widgets */ + tabFolder1 = new TabFolder (tabFolderGroup, style); + for (int i = 0; i < TabItems1.length; i++) { + TabItem item = new TabItem(tabFolder1, DWT.NONE); + item.setText(TabItems1[i]); + item.setToolTipText(Format( ControlExample.getResourceString("Tooltip"), TabItems1[i] )); + Text content = new Text(tabFolder1, DWT.WRAP | DWT.MULTI); + content.setText(Format( "{}: {}", ControlExample.getResourceString("TabItem_content"), i)); + item.setControl(content); + } + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup (); + + /* Create the extra widgets */ + topButton = new Button (styleGroup, DWT.RADIO); + topButton.setText ("DWT.TOP"); + topButton.setSelection(true); + bottomButton = new Button (styleGroup, DWT.RADIO); + bottomButton.setText ("DWT.BOTTOM"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + } + + /** + * Gets the "Example" widget children's items, if any. + * + * @return an array containing the example widget children's items + */ + Item [] getExampleWidgetItems () { + return tabFolder1.getItems(); + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [cast(Widget) tabFolder1 ]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["Selection", "SelectionIndex"]; + } + + char[] setMethodName(char[] methodRoot) { + /* Override to handle special case of int getSelectionIndex()/setSelection(int) */ + return (methodRoot == "SelectionIndex") ? "setSelection" : "set" ~ methodRoot; + } + +//PROTING_LEFT +/+ + Object[] parameterForType(char[] typeName, char[] value, Widget widget) { + if (value.length is 0 ) return new Object[] {new TabItem[0]}; + if (typeName.equals("org.eclipse.swt.widgets.TabItem")) { + TabItem item = findItem(value, ((TabFolder) widget).getItems()); + if (item !is null) return new Object[] {item}; + } + if (typeName.equals("[Lorg.eclipse.swt.widgets.TabItem;")) { + char[][] values = split(value, ','); + TabItem[] items = new TabItem[values.length]; + for (int i = 0; i < values.length; i++) { + items[i] = findItem(values[i], ((TabFolder) widget).getItems()); + } + return new Object[] {items}; + } + return super.parameterForType(typeName, value, widget); + } ++/ + TabItem findItem(char[] value, TabItem[] items) { + for (int i = 0; i < items.length; i++) { + TabItem item = items[i]; + if (item.getText() ==/*eq*/ value) return item; + } + return null; + } + + /** + * Gets the short text for the tab folder item. + */ + public char[] getShortTabText() { + return "TF"; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "TabFolder"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + topButton.setSelection ((tabFolder1.getStyle () & DWT.TOP) !is 0); + bottomButton.setSelection ((tabFolder1.getStyle () & DWT.BOTTOM) !is 0); + borderButton.setSelection ((tabFolder1.getStyle () & DWT.BORDER) !is 0); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/TableTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/TableTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,718 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.TableTab; + + + +import dwt.DWT; +import dwt.events.DisposeEvent; +import dwt.events.DisposeListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.graphics.Color; +import dwt.graphics.Font; +import dwt.graphics.FontData; +import dwt.graphics.Image; +import dwt.graphics.Point; +import dwt.graphics.RGB; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Event; +import dwt.widgets.Group; +import dwt.widgets.Item; +import dwt.widgets.Menu; +import dwt.widgets.MenuItem; +import dwt.widgets.Table; +import dwt.widgets.TableColumn; +import dwt.widgets.TableItem; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import dwtexamples.controlexample.ScrollableTab; +import tango.text.convert.Format; +import tango.util.Convert; +import tango.core.Exception; + +class TableTab : ScrollableTab { + /* Example widgets and groups that contain them */ + Table table1; + Group tableGroup; + + /* Size widgets added to the "Size" group */ + Button packColumnsButton; + + /* Style widgets added to the "Style" group */ + Button checkButton, fullSelectionButton, hideSelectionButton; + + /* Other widgets added to the "Other" group */ + Button multipleColumns, moveableColumns, resizableColumns, headerVisibleButton, sortIndicatorButton, headerImagesButton, linesVisibleButton, subImagesButton; + + /* Controls and resources added to the "Colors and Fonts" group */ + static const int ITEM_FOREGROUND_COLOR = 3; + static const int ITEM_BACKGROUND_COLOR = 4; + static const int ITEM_FONT = 5; + static const int CELL_FOREGROUND_COLOR = 6; + static const int CELL_BACKGROUND_COLOR = 7; + static const int CELL_FONT = 8; + Color itemForegroundColor, itemBackgroundColor, cellForegroundColor, cellBackgroundColor; + Font itemFont, cellFont; + + static char[] [] columnTitles; + static char[][][] tableData; + + Point menuMouseCoords; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + if( columnTitles.length is 0 ){ + columnTitles = [ + ControlExample.getResourceString("TableTitle_0"), + ControlExample.getResourceString("TableTitle_1"), + ControlExample.getResourceString("TableTitle_2"), + ControlExample.getResourceString("TableTitle_3")]; + } + if( tableData.length is 0 ){ + tableData = [ + [ ControlExample.getResourceString("TableLine0_0"), + ControlExample.getResourceString("TableLine0_1"), + ControlExample.getResourceString("TableLine0_2"), + ControlExample.getResourceString("TableLine0_3") ], + [ ControlExample.getResourceString("TableLine1_0"), + ControlExample.getResourceString("TableLine1_1"), + ControlExample.getResourceString("TableLine1_2"), + ControlExample.getResourceString("TableLine1_3") ], + [ ControlExample.getResourceString("TableLine2_0"), + ControlExample.getResourceString("TableLine2_1"), + ControlExample.getResourceString("TableLine2_2"), + ControlExample.getResourceString("TableLine2_3") ]]; + } + } + + /** + * Creates the "Colors and Fonts" group. + */ + void createColorAndFontGroup () { + super.createColorAndFontGroup(); + + TableItem item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Item_Foreground_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Item_Background_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Item_Font")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Cell_Foreground_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Cell_Background_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Cell_Font")); + + shell.addDisposeListener(new class() DisposeListener { + public void widgetDisposed(DisposeEvent event) { + if (itemBackgroundColor !is null) itemBackgroundColor.dispose(); + if (itemForegroundColor !is null) itemForegroundColor.dispose(); + if (itemFont !is null) itemFont.dispose(); + if (cellBackgroundColor !is null) cellBackgroundColor.dispose(); + if (cellForegroundColor !is null) cellForegroundColor.dispose(); + if (cellFont !is null) cellFont.dispose(); + itemBackgroundColor = null; + itemForegroundColor = null; + itemFont = null; + cellBackgroundColor = null; + cellForegroundColor = null; + cellFont = null; + } + }); + } + + void changeFontOrColor(int index) { + switch (index) { + case ITEM_FOREGROUND_COLOR: { + Color oldColor = itemForegroundColor; + if (oldColor is null) oldColor = table1.getItem (0).getForeground (); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = itemForegroundColor; + itemForegroundColor = new Color (display, rgb); + setItemForeground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case ITEM_BACKGROUND_COLOR: { + Color oldColor = itemBackgroundColor; + if (oldColor is null) oldColor = table1.getItem (0).getBackground (); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = itemBackgroundColor; + itemBackgroundColor = new Color (display, rgb); + setItemBackground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case ITEM_FONT: { + Font oldFont = itemFont; + if (oldFont is null) oldFont = table1.getItem (0).getFont (); + fontDialog.setFontList(oldFont.getFontData()); + FontData fontData = fontDialog.open (); + if (fontData is null) return; + oldFont = itemFont; + itemFont = new Font (display, fontData); + setItemFont (); + setExampleWidgetSize (); + if (oldFont !is null) oldFont.dispose (); + } + break; + case CELL_FOREGROUND_COLOR: { + Color oldColor = cellForegroundColor; + if (oldColor is null) oldColor = table1.getItem (0).getForeground (1); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = cellForegroundColor; + cellForegroundColor = new Color (display, rgb); + setCellForeground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case CELL_BACKGROUND_COLOR: { + Color oldColor = cellBackgroundColor; + if (oldColor is null) oldColor = table1.getItem (0).getBackground (1); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = cellBackgroundColor; + cellBackgroundColor = new Color (display, rgb); + setCellBackground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case CELL_FONT: { + Font oldFont = cellFont; + if (oldFont is null) oldFont = table1.getItem (0).getFont (1); + fontDialog.setFontList(oldFont.getFontData()); + FontData fontData = fontDialog.open (); + if (fontData is null) return; + oldFont = cellFont; + cellFont = new Font (display, fontData); + setCellFont (); + setExampleWidgetSize (); + if (oldFont !is null) oldFont.dispose (); + } + break; + default: + super.changeFontOrColor(index); + } + } + + /** + * Creates the "Other" group. + */ + void createOtherGroup () { + super.createOtherGroup (); + + /* Create display controls specific to this example */ + linesVisibleButton = new Button (otherGroup, DWT.CHECK); + linesVisibleButton.setText (ControlExample.getResourceString("Lines_Visible")); + multipleColumns = new Button (otherGroup, DWT.CHECK); + multipleColumns.setText (ControlExample.getResourceString("Multiple_Columns")); + multipleColumns.setSelection(true); + headerVisibleButton = new Button (otherGroup, DWT.CHECK); + headerVisibleButton.setText (ControlExample.getResourceString("Header_Visible")); + sortIndicatorButton = new Button (otherGroup, DWT.CHECK); + sortIndicatorButton.setText (ControlExample.getResourceString("Sort_Indicator")); + moveableColumns = new Button (otherGroup, DWT.CHECK); + moveableColumns.setText (ControlExample.getResourceString("Moveable_Columns")); + resizableColumns = new Button (otherGroup, DWT.CHECK); + resizableColumns.setText (ControlExample.getResourceString("Resizable_Columns")); + headerImagesButton = new Button (otherGroup, DWT.CHECK); + headerImagesButton.setText (ControlExample.getResourceString("Header_Images")); + subImagesButton = new Button (otherGroup, DWT.CHECK); + subImagesButton.setText (ControlExample.getResourceString("Sub_Images")); + + /* Add the listeners */ + linesVisibleButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setWidgetLinesVisible (); + } + }); + multipleColumns.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + recreateExampleWidgets (); + } + }); + headerVisibleButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setWidgetHeaderVisible (); + } + }); + sortIndicatorButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setWidgetSortIndicator (); + } + }); + moveableColumns.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setColumnsMoveable (); + } + }); + resizableColumns.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setColumnsResizable (); + } + }); + headerImagesButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + recreateExampleWidgets (); + } + }); + subImagesButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + recreateExampleWidgets (); + } + }); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the table */ + tableGroup = new Group (exampleGroup, DWT.NONE); + tableGroup.setLayout (new GridLayout ()); + tableGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + tableGroup.setText ("Table"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + /* Compute the widget style */ + int style = getDefaultStyle(); + if (singleButton.getSelection ()) style |= DWT.SINGLE; + if (multiButton.getSelection ()) style |= DWT.MULTI; + if (verticalButton.getSelection ()) style |= DWT.V_SCROLL; + if (horizontalButton.getSelection ()) style |= DWT.H_SCROLL; + if (checkButton.getSelection ()) style |= DWT.CHECK; + if (fullSelectionButton.getSelection ()) style |= DWT.FULL_SELECTION; + if (hideSelectionButton.getSelection ()) style |= DWT.HIDE_SELECTION; + if (borderButton.getSelection ()) style |= DWT.BORDER; + + /* Create the table widget */ + table1 = new Table (tableGroup, style); + + /* Fill the table with data */ + bool multiColumn = multipleColumns.getSelection(); + if (multiColumn) { + for (int i = 0; i < columnTitles.length; i++) { + TableColumn tableColumn = new TableColumn(table1, DWT.NONE); + tableColumn.setText(columnTitles[i]); + tableColumn.setToolTipText( Format( ControlExample.getResourceString("Tooltip"), columnTitles[i] )); + if (headerImagesButton.getSelection()) tableColumn.setImage(instance.images [i % 3]); + } + table1.setSortColumn(table1.getColumn(0)); + } + for (int i=0; i<16; i++) { + TableItem item = new TableItem (table1, DWT.NONE); + if (multiColumn && subImagesButton.getSelection()) { + for (int j = 0; j < columnTitles.length; j++) { + item.setImage(j, instance.images [i % 3]); + } + } else { + item.setImage(instance.images [i % 3]); + } + setItemText (item, i, ControlExample.getResourceString("Index") ~ to!(char[])(i)); + } + packColumns(); + } + + void setItemText(TableItem item, int i, char[] node) { + int index = i % 3; + if (multipleColumns.getSelection()) { + tableData [index][0] = node; + item.setText (tableData [index]); + } else { + item.setText (node); + } + } + + /** + * Creates the "Size" group. The "Size" group contains + * controls that allow the user to change the size of + * the example widgets. + */ + void createSizeGroup () { + super.createSizeGroup(); + + packColumnsButton = new Button (sizeGroup, DWT.PUSH); + packColumnsButton.setText (ControlExample.getResourceString("Pack_Columns")); + packColumnsButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + packColumns (); + setExampleWidgetSize (); + } + }); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + super.createStyleGroup (); + + /* Create the extra widgets */ + checkButton = new Button (styleGroup, DWT.CHECK); + checkButton.setText ("DWT.CHECK"); + fullSelectionButton = new Button (styleGroup, DWT.CHECK); + fullSelectionButton.setText ("DWT.FULL_SELECTION"); + hideSelectionButton = new Button (styleGroup, DWT.CHECK); + hideSelectionButton.setText ("DWT.HIDE_SELECTION"); + } + + /** + * Gets the "Example" widget children's items, if any. + * + * @return an array containing the example widget children's items + */ + Item [] getExampleWidgetItems () { + Item [] columns = table1.getColumns(); + Item [] items = table1.getItems(); + Item [] allItems = new Item [columns.length + items.length]; + System.arraycopy(columns, 0, allItems, 0, columns.length); + System.arraycopy(items, 0, allItems, columns.length, items.length); + return allItems; + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) table1 ]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["ColumnOrder", "ItemCount", "Selection", "SelectionIndex", "ToolTipText", "TopIndex"]; + } + + char[] setMethodName(char[] methodRoot) { + /* Override to handle special case of int getSelectionIndex()/setSelection(int) */ + return (methodRoot == "SelectionIndex" ) ? "setSelection" : "set" ~ methodRoot; + } + + void packColumns () { + int columnCount = table1.getColumnCount(); + for (int i = 0; i < columnCount; i++) { + TableColumn tableColumn = table1.getColumn(i); + tableColumn.pack(); + } + } + +//PORTING_LEFT +/+ + Object[] parameterForType(char[] typeName, char[] value, Widget widget) { + if (value.length is 0 ) return [new TableItem[0]]; // bug in Table? + if (typeName.equals("org.eclipse.swt.widgets.TableItem")) { + TableItem item = findItem(value, ((Table) widget).getItems()); + if (item !is null) return new Object[] {item}; + } + if (typeName.equals("[Lorg.eclipse.swt.widgets.TableItem;")) { + char[][] values = split(value, ','); + TableItem[] items = new TableItem[values.length]; + for (int i = 0; i < values.length; i++) { + items[i] = findItem(values[i], ((Table) widget).getItems()); + } + return new Object[] {items}; + } + return super.parameterForType(typeName, value, widget); + } ++/ + TableItem findItem(char[] value, TableItem[] items) { + for (int i = 0; i < items.length; i++) { + TableItem item = items[i]; + if (item.getText() == value ) return item; + } + return null; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Table"; + } + + /** + * Sets the foreground color, background color, and font + * of the "Example" widgets to their default settings. + * Also sets foreground and background color of TableItem [0] + * to default settings. + */ + void resetColorsAndFonts () { + super.resetColorsAndFonts (); + Color oldColor = itemForegroundColor; + itemForegroundColor = null; + setItemForeground (); + if (oldColor !is null) oldColor.dispose(); + oldColor = itemBackgroundColor; + itemBackgroundColor = null; + setItemBackground (); + if (oldColor !is null) oldColor.dispose(); + Font oldFont = font; + itemFont = null; + setItemFont (); + if (oldFont !is null) oldFont.dispose(); + oldColor = cellForegroundColor; + cellForegroundColor = null; + setCellForeground (); + if (oldColor !is null) oldColor.dispose(); + oldColor = cellBackgroundColor; + cellBackgroundColor = null; + setCellBackground (); + if (oldColor !is null) oldColor.dispose(); + oldFont = font; + cellFont = null; + setCellFont (); + if (oldFont !is null) oldFont.dispose(); + } + + /** + * Sets the background color of the Row 0 TableItem in column 1. + */ + void setCellBackground () { + if (!instance.startup) { + table1.getItem (0).setBackground (1, cellBackgroundColor); + } + /* Set the background color item's image to match the background color of the cell. */ + Color color = cellBackgroundColor; + if (color is null) color = table1.getItem (0).getBackground (1); + TableItem item = colorAndFontTable.getItem(CELL_BACKGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the foreground color of the Row 0 TableItem in column 1. + */ + void setCellForeground () { + if (!instance.startup) { + table1.getItem (0).setForeground (1, cellForegroundColor); + } + /* Set the foreground color item's image to match the foreground color of the cell. */ + Color color = cellForegroundColor; + if (color is null) color = table1.getItem (0).getForeground (1); + TableItem item = colorAndFontTable.getItem(CELL_FOREGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the font of the Row 0 TableItem in column 1. + */ + void setCellFont () { + if (!instance.startup) { + table1.getItem (0).setFont (1, cellFont); + } + /* Set the font item's image to match the font of the item. */ + Font ft = cellFont; + if (ft is null) ft = table1.getItem (0).getFont (1); + TableItem item = colorAndFontTable.getItem(CELL_FONT); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (fontImage(ft)); + item.setFont(ft); + colorAndFontTable.layout (); + } + + /** + * Sets the background color of TableItem [0]. + */ + void setItemBackground () { + if (!instance.startup) { + table1.getItem (0).setBackground (itemBackgroundColor); + } + /* Set the background color item's image to match the background color of the item. */ + Color color = itemBackgroundColor; + if (color is null) color = table1.getItem (0).getBackground (); + TableItem item = colorAndFontTable.getItem(ITEM_BACKGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the foreground color of TableItem [0]. + */ + void setItemForeground () { + if (!instance.startup) { + table1.getItem (0).setForeground (itemForegroundColor); + } + /* Set the foreground color item's image to match the foreground color of the item. */ + Color color = itemForegroundColor; + if (color is null) color = table1.getItem (0).getForeground (); + TableItem item = colorAndFontTable.getItem(ITEM_FOREGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the font of TableItem 0. + */ + void setItemFont () { + if (!instance.startup) { + table1.getItem (0).setFont (itemFont); + } + /* Set the font item's image to match the font of the item. */ + Font ft = itemFont; + if (ft is null) ft = table1.getItem (0).getFont (); + TableItem item = colorAndFontTable.getItem(ITEM_FONT); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (fontImage(ft)); + item.setFont(ft); + colorAndFontTable.layout (); + } + + /** + * Sets the moveable columns state of the "Example" widgets. + */ + void setColumnsMoveable () { + bool selection = moveableColumns.getSelection(); + TableColumn[] columns = table1.getColumns(); + for (int i = 0; i < columns.length; i++) { + columns[i].setMoveable(selection); + } + } + + /** + * Sets the resizable columns state of the "Example" widgets. + */ + void setColumnsResizable () { + bool selection = resizableColumns.getSelection(); + TableColumn[] columns = table1.getColumns(); + for (int i = 0; i < columns.length; i++) { + columns[i].setResizable(selection); + } + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + setItemBackground (); + setItemForeground (); + setItemFont (); + setCellBackground (); + setCellForeground (); + setCellFont (); + if (!instance.startup) { + setColumnsMoveable (); + setColumnsResizable (); + setWidgetHeaderVisible (); + setWidgetSortIndicator (); + setWidgetLinesVisible (); + } + super.setExampleWidgetState (); + checkButton.setSelection ((table1.getStyle () & DWT.CHECK) !is 0); + fullSelectionButton.setSelection ((table1.getStyle () & DWT.FULL_SELECTION) !is 0); + hideSelectionButton.setSelection ((table1.getStyle () & DWT.HIDE_SELECTION) !is 0); + try { + TableColumn column = table1.getColumn(0); + moveableColumns.setSelection (column.getMoveable()); + resizableColumns.setSelection (column.getResizable()); + } catch (IllegalArgumentException ex) {} + headerVisibleButton.setSelection (table1.getHeaderVisible()); + linesVisibleButton.setSelection (table1.getLinesVisible()); + } + + /** + * Sets the header visible state of the "Example" widgets. + */ + void setWidgetHeaderVisible () { + table1.setHeaderVisible (headerVisibleButton.getSelection ()); + } + + /** + * Sets the sort indicator state of the "Example" widgets. + */ + void setWidgetSortIndicator () { + if (sortIndicatorButton.getSelection ()) { + /* Reset to known state: 'down' on column 0. */ + table1.setSortDirection (DWT.DOWN); + TableColumn [] columns = table1.getColumns(); + for (int i = 0; i < columns.length; i++) { + TableColumn column = columns[i]; + if (i is 0) table1.setSortColumn(column); + SelectionListener listener = new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + int sortDirection = DWT.DOWN; + if (e.widget is table1.getSortColumn()) { + /* If the sort column hasn't changed, cycle down -> up -> none. */ + switch (table1.getSortDirection ()) { + case DWT.DOWN: sortDirection = DWT.UP; break; + case DWT.UP: sortDirection = DWT.NONE; break; + } + } else { + table1.setSortColumn(cast(TableColumn)e.widget); + } + table1.setSortDirection (sortDirection); + } + }; + column.addSelectionListener(listener); + column.setData("SortListener", cast(Object)listener); //$NON-NLS-1$ + } + } else { + table1.setSortDirection (DWT.NONE); + TableColumn [] columns = table1.getColumns(); + for (int i = 0; i < columns.length; i++) { + SelectionListener listener = cast(SelectionListener)columns[i].getData("SortListener"); //$NON-NLS-1$ + if (listener !is null) columns[i].removeSelectionListener(listener); + } + } + } + + /** + * Sets the lines visible state of the "Example" widgets. + */ + void setWidgetLinesVisible () { + table1.setLinesVisible (linesVisibleButton.getSelection ()); + } + + protected void specialPopupMenuItems(Menu menu, Event event) { + MenuItem item = new MenuItem(menu, DWT.PUSH); + item.setText("getItem(Point) on mouse coordinates"); + menuMouseCoords = table1.toControl(new Point(event.x, event.y)); + item.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + eventConsole.append ("getItem(Point(" ~ menuMouseCoords.toString() ~ ")) returned: " ~ ((table1.getItem(menuMouseCoords))).toString); + eventConsole.append ("\n"); + }; + }); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/TextTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/TextTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,195 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.TextTab; + + + +import dwt.DWT; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.TabFolder; +import dwt.widgets.Text; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import dwtexamples.controlexample.ScrollableTab; + +class TextTab : ScrollableTab { + /* Example widgets and groups that contain them */ + Text text; + Group textGroup; + + /* Style widgets added to the "Style" group */ + Button wrapButton, readOnlyButton, passwordButton, searchButton, cancelButton; + Button leftButton, centerButton, rightButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the text widget */ + textGroup = new Group (exampleGroup, DWT.NONE); + textGroup.setLayout (new GridLayout ()); + textGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + textGroup.setText ("Text"); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (singleButton.getSelection ()) style |= DWT.SINGLE; + if (multiButton.getSelection ()) style |= DWT.MULTI; + if (horizontalButton.getSelection ()) style |= DWT.H_SCROLL; + if (verticalButton.getSelection ()) style |= DWT.V_SCROLL; + if (wrapButton.getSelection ()) style |= DWT.WRAP; + if (readOnlyButton.getSelection ()) style |= DWT.READ_ONLY; + if (passwordButton.getSelection ()) style |= DWT.PASSWORD; + if (searchButton.getSelection ()) style |= DWT.SEARCH; + if (cancelButton.getSelection ()) style |= DWT.CANCEL; + if (borderButton.getSelection ()) style |= DWT.BORDER; + if (leftButton.getSelection ()) style |= DWT.LEFT; + if (centerButton.getSelection ()) style |= DWT.CENTER; + if (rightButton.getSelection ()) style |= DWT.RIGHT; + + /* Create the example widgets */ + text = new Text (textGroup, style); + text.setText (ControlExample.getResourceString("Example_string") ~ Text.DELIMITER ~ ControlExample.getResourceString("One_Two_Three")); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + wrapButton = new Button (styleGroup, DWT.CHECK); + wrapButton.setText ("DWT.WRAP"); + readOnlyButton = new Button (styleGroup, DWT.CHECK); + readOnlyButton.setText ("DWT.READ_ONLY"); + passwordButton = new Button (styleGroup, DWT.CHECK); + passwordButton.setText ("DWT.PASSWORD"); + searchButton = new Button (styleGroup, DWT.CHECK); + searchButton.setText ("DWT.SEARCH"); + cancelButton = new Button (styleGroup, DWT.CHECK); + cancelButton.setText ("DWT.CANCEL"); + + Composite alignmentGroup = new Composite (styleGroup, DWT.NONE); + GridLayout layout = new GridLayout (); + layout.marginWidth = layout.marginHeight = 0; + alignmentGroup.setLayout (layout); + alignmentGroup.setLayoutData (new GridData (GridData.FILL_BOTH)); + leftButton = new Button (alignmentGroup, DWT.RADIO); + leftButton.setText ("DWT.LEFT"); + centerButton = new Button (alignmentGroup, DWT.RADIO); + centerButton.setText ("DWT.CENTER"); + rightButton = new Button (alignmentGroup, DWT.RADIO); + rightButton.setText ("DWT.RIGHT"); + } + + /** + * Creates the tab folder page. + * + * @param tabFolder org.eclipse.swt.widgets.TabFolder + * @return the new page for the tab folder + */ + Composite createTabFolderPage (TabFolder tabFolder) { + super.createTabFolderPage (tabFolder); + + /* + * Add a resize listener to the tabFolderPage so that + * if the user types into the example widget to change + * its preferred size, and then resizes the shell, we + * recalculate the preferred size correctly. + */ + tabFolderPage.addControlListener(new class() ControlAdapter { + public void controlResized(ControlEvent e) { + setExampleWidgetSize (); + } + }); + + return tabFolderPage; + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) text]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["DoubleClickEnabled", "EchoChar", "Editable", "Orientation", "Selection", "Tabs", "Text", "TextLimit", "ToolTipText", "TopIndex"]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Text"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + wrapButton.setSelection ((text.getStyle () & DWT.WRAP) !is 0); + readOnlyButton.setSelection ((text.getStyle () & DWT.READ_ONLY) !is 0); + passwordButton.setSelection ((text.getStyle () & DWT.PASSWORD) !is 0); + searchButton.setSelection ((text.getStyle () & DWT.SEARCH) !is 0); + leftButton.setSelection ((text.getStyle () & DWT.LEFT) !is 0); + centerButton.setSelection ((text.getStyle () & DWT.CENTER) !is 0); + rightButton.setSelection ((text.getStyle () & DWT.RIGHT) !is 0); + + /* Special case: CANCEL and H_SCROLL have the same value, + * so to avoid confusion, only set CANCEL if SEARCH is set. */ + if ((text.getStyle () & DWT.SEARCH) !is 0) { + cancelButton.setSelection ((text.getStyle () & DWT.CANCEL) !is 0); + horizontalButton.setSelection (false); + } else { + cancelButton.setSelection (false); + horizontalButton.setSelection ((text.getStyle () & DWT.H_SCROLL) !is 0); + } + + passwordButton.setEnabled ((text.getStyle () & DWT.SINGLE) !is 0); + searchButton.setEnabled ((text.getStyle () & DWT.SINGLE) !is 0); + cancelButton.setEnabled ((text.getStyle () & DWT.SEARCH) !is 0); + wrapButton.setEnabled ((text.getStyle () & DWT.MULTI) !is 0); + horizontalButton.setEnabled ((text.getStyle () & DWT.MULTI) !is 0); + verticalButton.setEnabled ((text.getStyle () & DWT.MULTI) !is 0); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/ToolBarTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ToolBarTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,397 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.ToolBarTab; + + + +import dwt.DWT; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.graphics.Point; +import dwt.graphics.Rectangle; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Combo; +import dwt.widgets.Group; +import dwt.widgets.Item; +import dwt.widgets.Menu; +import dwt.widgets.MenuItem; +import dwt.widgets.ToolBar; +import dwt.widgets.ToolItem; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import tango.util.Convert; + +class ToolBarTab : Tab { + /* Example widgets and groups that contain them */ + ToolBar imageToolBar, textToolBar, imageTextToolBar; + Group imageToolBarGroup, textToolBarGroup, imageTextToolBarGroup; + + /* Style widgets added to the "Style" group */ + Button horizontalButton, verticalButton, flatButton, shadowOutButton, wrapButton, rightButton; + + /* Other widgets added to the "Other" group */ + Button comboChildButton; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the image tool bar */ + imageToolBarGroup = new Group (exampleGroup, DWT.NONE); + imageToolBarGroup.setLayout (new GridLayout ()); + imageToolBarGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + imageToolBarGroup.setText (ControlExample.getResourceString("Image_ToolBar")); + + /* Create a group for the text tool bar */ + textToolBarGroup = new Group (exampleGroup, DWT.NONE); + textToolBarGroup.setLayout (new GridLayout ()); + textToolBarGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + textToolBarGroup.setText (ControlExample.getResourceString("Text_ToolBar")); + + /* Create a group for the image and text tool bar */ + imageTextToolBarGroup = new Group (exampleGroup, DWT.NONE); + imageTextToolBarGroup.setLayout (new GridLayout ()); + imageTextToolBarGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + imageTextToolBarGroup.setText (ControlExample.getResourceString("ImageText_ToolBar")); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (horizontalButton.getSelection()) style |= DWT.HORIZONTAL; + if (verticalButton.getSelection()) style |= DWT.VERTICAL; + if (flatButton.getSelection()) style |= DWT.FLAT; + if (wrapButton.getSelection()) style |= DWT.WRAP; + if (borderButton.getSelection()) style |= DWT.BORDER; + if (shadowOutButton.getSelection()) style |= DWT.SHADOW_OUT; + if (rightButton.getSelection()) style |= DWT.RIGHT; + + /* + * Create the example widgets. + * + * A tool bar must consist of all image tool + * items or all text tool items but not both. + */ + + /* Create the image tool bar */ + imageToolBar = new ToolBar (imageToolBarGroup, style); + ToolItem item = new ToolItem (imageToolBar, DWT.PUSH); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText("DWT.PUSH"); + item = new ToolItem (imageToolBar, DWT.PUSH); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText ("DWT.PUSH"); + item = new ToolItem (imageToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciOpenFolder]); + item.setToolTipText ("DWT.RADIO"); + item = new ToolItem (imageToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciOpenFolder]); + item.setToolTipText ("DWT.RADIO"); + item = new ToolItem (imageToolBar, DWT.CHECK); + item.setImage (instance.images[ControlExample.ciTarget]); + item.setToolTipText ("DWT.CHECK"); + item = new ToolItem (imageToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText ("DWT.RADIO"); + item = new ToolItem (imageToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setToolTipText ("DWT.RADIO"); + item = new ToolItem (imageToolBar, DWT.SEPARATOR); + item.setToolTipText("DWT.SEPARATOR"); + if (comboChildButton.getSelection ()) { + Combo combo = new Combo (imageToolBar, DWT.NONE); + combo.setItems (["250", "500", "750"]); + combo.setText (combo.getItem (0)); + combo.pack (); + item.setWidth (combo.getSize ().x); + item.setControl (combo); + } + item = new ToolItem (imageToolBar, DWT.DROP_DOWN); + item.setImage (instance.images[ControlExample.ciTarget]); + item.setToolTipText ("DWT.DROP_DOWN"); + item.addSelectionListener(new DropDownSelectionListener()); + + /* Create the text tool bar */ + textToolBar = new ToolBar (textToolBarGroup, style); + item = new ToolItem (textToolBar, DWT.PUSH); + item.setText (ControlExample.getResourceString("Push")); + item.setToolTipText("DWT.PUSH"); + item = new ToolItem (textToolBar, DWT.PUSH); + item.setText (ControlExample.getResourceString("Push")); + item.setToolTipText("DWT.PUSH"); + item = new ToolItem (textToolBar, DWT.RADIO); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (textToolBar, DWT.RADIO); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (textToolBar, DWT.CHECK); + item.setText (ControlExample.getResourceString("Check")); + item.setToolTipText("DWT.CHECK"); + item = new ToolItem (textToolBar, DWT.RADIO); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (textToolBar, DWT.RADIO); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (textToolBar, DWT.SEPARATOR); + item.setToolTipText("DWT.SEPARATOR"); + if (comboChildButton.getSelection ()) { + Combo combo = new Combo (textToolBar, DWT.NONE); + combo.setItems (["250", "500", "750"]); + combo.setText (combo.getItem (0)); + combo.pack (); + item.setWidth (combo.getSize ().x); + item.setControl (combo); + } + item = new ToolItem (textToolBar, DWT.DROP_DOWN); + item.setText (ControlExample.getResourceString("Drop_Down")); + item.setToolTipText("DWT.DROP_DOWN"); + item.addSelectionListener(new DropDownSelectionListener()); + + /* Create the image and text tool bar */ + imageTextToolBar = new ToolBar (imageTextToolBarGroup, style); + item = new ToolItem (imageTextToolBar, DWT.PUSH); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setText (ControlExample.getResourceString("Push")); + item.setToolTipText("DWT.PUSH"); + item = new ToolItem (imageTextToolBar, DWT.PUSH); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setText (ControlExample.getResourceString("Push")); + item.setToolTipText("DWT.PUSH"); + item = new ToolItem (imageTextToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciOpenFolder]); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (imageTextToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciOpenFolder]); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (imageTextToolBar, DWT.CHECK); + item.setImage (instance.images[ControlExample.ciTarget]); + item.setText (ControlExample.getResourceString("Check")); + item.setToolTipText("DWT.CHECK"); + item = new ToolItem (imageTextToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (imageTextToolBar, DWT.RADIO); + item.setImage (instance.images[ControlExample.ciClosedFolder]); + item.setText (ControlExample.getResourceString("Radio")); + item.setToolTipText("DWT.RADIO"); + item = new ToolItem (imageTextToolBar, DWT.SEPARATOR); + item.setToolTipText("DWT.SEPARATOR"); + if (comboChildButton.getSelection ()) { + Combo combo = new Combo (imageTextToolBar, DWT.NONE); + combo.setItems (["250", "500", "750"]); + combo.setText (combo.getItem (0)); + combo.pack (); + item.setWidth (combo.getSize ().x); + item.setControl (combo); + } + item = new ToolItem (imageTextToolBar, DWT.DROP_DOWN); + item.setImage (instance.images[ControlExample.ciTarget]); + item.setText (ControlExample.getResourceString("Drop_Down")); + item.setToolTipText("DWT.DROP_DOWN"); + item.addSelectionListener(new DropDownSelectionListener()); + + /* + * Do not add the selection event for this drop down + * tool item. Without hooking the event, the drop down + * widget does nothing special when the drop down area + * is selected. + */ + } + + /** + * Creates the "Other" group. + */ + void createOtherGroup () { + super.createOtherGroup (); + + /* Create display controls specific to this example */ + comboChildButton = new Button (otherGroup, DWT.CHECK); + comboChildButton.setText (ControlExample.getResourceString("Combo_child")); + + /* Add the listeners */ + comboChildButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + recreateExampleWidgets (); + } + }); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + horizontalButton = new Button (styleGroup, DWT.RADIO); + horizontalButton.setText ("DWT.HORIZONTAL"); + verticalButton = new Button (styleGroup, DWT.RADIO); + verticalButton.setText ("DWT.VERTICAL"); + flatButton = new Button (styleGroup, DWT.CHECK); + flatButton.setText ("DWT.FLAT"); + shadowOutButton = new Button (styleGroup, DWT.CHECK); + shadowOutButton.setText ("DWT.SHADOW_OUT"); + wrapButton = new Button (styleGroup, DWT.CHECK); + wrapButton.setText ("DWT.WRAP"); + rightButton = new Button (styleGroup, DWT.CHECK); + rightButton.setText ("DWT.RIGHT"); + borderButton = new Button (styleGroup, DWT.CHECK); + borderButton.setText ("DWT.BORDER"); + } + + void disposeExampleWidgets () { + super.disposeExampleWidgets (); + } + + /** + * Gets the "Example" widget children's items, if any. + * + * @return an array containing the example widget children's items + */ + Item [] getExampleWidgetItems () { + Item [] imageToolBarItems = imageToolBar.getItems(); + Item [] textToolBarItems = textToolBar.getItems(); + Item [] imageTextToolBarItems = imageTextToolBar.getItems(); + Item [] allItems = new Item [imageToolBarItems.length + textToolBarItems.length + imageTextToolBarItems.length]; + System.arraycopy(imageToolBarItems, 0, allItems, 0, imageToolBarItems.length); + System.arraycopy(textToolBarItems, 0, allItems, imageToolBarItems.length, textToolBarItems.length); + System.arraycopy(imageTextToolBarItems, 0, allItems, imageToolBarItems.length + textToolBarItems.length, imageTextToolBarItems.length); + return allItems; + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) imageToolBar, textToolBar, imageTextToolBar ]; + } + + /** + * Gets the short text for the tab folder item. + */ + public char[] getShortTabText() { + return "TB"; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "ToolBar"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + super.setExampleWidgetState (); + horizontalButton.setSelection ((imageToolBar.getStyle () & DWT.HORIZONTAL) !is 0); + verticalButton.setSelection ((imageToolBar.getStyle () & DWT.VERTICAL) !is 0); + flatButton.setSelection ((imageToolBar.getStyle () & DWT.FLAT) !is 0); + wrapButton.setSelection ((imageToolBar.getStyle () & DWT.WRAP) !is 0); + shadowOutButton.setSelection ((imageToolBar.getStyle () & DWT.SHADOW_OUT) !is 0); + borderButton.setSelection ((imageToolBar.getStyle () & DWT.BORDER) !is 0); + rightButton.setSelection ((imageToolBar.getStyle () & DWT.RIGHT) !is 0); + } + + /** + * Listens to widgetSelected() events on DWT.DROP_DOWN type ToolItems + * and opens/closes a menu when appropriate. + */ + class DropDownSelectionListener : SelectionAdapter { + private Menu menu = null; + private bool visible = false; + + public void widgetSelected(SelectionEvent event) { + // Create the menu if it has not already been created + if (menu is null) { + // Lazy create the menu. + menu = new Menu(shell); + for (int i = 0; i < 9; ++i) { + final char[] text = ControlExample.getResourceString("DropDownData_" ~ to!(char[])(i)); + if (text.length !is 0) { + MenuItem menuItem = new MenuItem(menu, DWT.NONE); + menuItem.setText(text); + /* + * Add a menu selection listener so that the menu is hidden + * when the user selects an item from the drop down menu. + */ + menuItem.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected(SelectionEvent e) { + setMenuVisible(false); + } + }); + } else { + new MenuItem(menu, DWT.SEPARATOR); + } + } + } + + /** + * A selection event will be fired when a drop down tool + * item is selected in the main area and in the drop + * down arrow. Examine the event detail to determine + * where the widget was selected. + */ + if (event.detail is DWT.ARROW) { + /* + * The drop down arrow was selected. + */ + if (visible) { + // Hide the menu to give the Arrow the appearance of being a toggle button. + setMenuVisible(false); + } else { + // Position the menu below and vertically aligned with the the drop down tool button. + final ToolItem toolItem = cast(ToolItem) event.widget; + final ToolBar toolBar = toolItem.getParent(); + + Rectangle toolItemBounds = toolItem.getBounds(); + Point point = toolBar.toDisplay(new Point(toolItemBounds.x, toolItemBounds.y)); + menu.setLocation(point.x, point.y + toolItemBounds.height); + setMenuVisible(true); + } + } else { + /* + * Main area of drop down tool item selected. + * An application would invoke the code to perform the action for the tool item. + */ + } + } + private void setMenuVisible(bool visible) { + menu.setVisible(visible); + this.visible = visible; + } + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/ToolTipTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/ToolTipTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,268 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.ToolTipTab; + + + +import dwt.DWT; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.events.DisposeEvent; +import dwt.events.DisposeListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Composite; +import dwt.widgets.Group; +import dwt.widgets.TabFolder; +import dwt.widgets.ToolTip; +import dwt.widgets.Tray; +import dwt.widgets.TrayItem; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; + +class ToolTipTab : Tab { + + /* Example widgets and groups that contain them */ + ToolTip toolTip1; + Group toolTipGroup; + + /* Style widgets added to the "Style" group */ + Button balloonButton, iconErrorButton, iconInformationButton, iconWarningButton, noIconButton; + + /* Other widgets added to the "Other" group */ + Button autoHideButton, showInTrayButton; + + Tray tray; + TrayItem trayItem; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the tooltip visibility check box */ + toolTipGroup = new Group (exampleGroup, DWT.NONE); + toolTipGroup.setLayout (new GridLayout ()); + toolTipGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + toolTipGroup.setText ("ToolTip"); + visibleButton = new Button(toolTipGroup, DWT.CHECK); + visibleButton.setText(ControlExample.getResourceString("Visible")); + visibleButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetVisibility (); + } + }); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + + /* Compute the widget style */ + int style = getDefaultStyle(); + if (balloonButton.getSelection ()) style |= DWT.BALLOON; + if (iconErrorButton.getSelection ()) style |= DWT.ICON_ERROR; + if (iconInformationButton.getSelection ()) style |= DWT.ICON_INFORMATION; + if (iconWarningButton.getSelection ()) style |= DWT.ICON_WARNING; + + /* Create the example widgets */ + toolTip1 = new ToolTip (shell, style); + toolTip1.setText(ControlExample.getResourceString("ToolTip_Title")); + toolTip1.setMessage(ControlExample.getResourceString("Example_string")); + } + + /** + * Creates the tab folder page. + * + * @param tabFolder org.eclipse.swt.widgets.TabFolder + * @return the new page for the tab folder + */ + Composite createTabFolderPage (TabFolder tabFolder) { + super.createTabFolderPage (tabFolder); + + /* + * Add a resize listener to the tabFolderPage so that + * if the user types into the example widget to change + * its preferred size, and then resizes the shell, we + * recalculate the preferred size correctly. + */ + tabFolderPage.addControlListener(new class() ControlAdapter { + public void controlResized(ControlEvent e) { + setExampleWidgetSize (); + } + }); + + return tabFolderPage; + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup () { + super.createStyleGroup (); + + /* Create the extra widgets */ + balloonButton = new Button (styleGroup, DWT.CHECK); + balloonButton.setText ("DWT.BALLOON"); + iconErrorButton = new Button (styleGroup, DWT.RADIO); + iconErrorButton.setText("DWT.ICON_ERROR"); + iconInformationButton = new Button (styleGroup, DWT.RADIO); + iconInformationButton.setText("DWT.ICON_INFORMATION"); + iconWarningButton = new Button (styleGroup, DWT.RADIO); + iconWarningButton.setText("DWT.ICON_WARNING"); + noIconButton = new Button (styleGroup, DWT.RADIO); + noIconButton.setText(ControlExample.getResourceString("No_Icon")); + } + + void createColorAndFontGroup () { + // ToolTip does not need a color and font group. + } + + void createOtherGroup () { + /* Create the group */ + otherGroup = new Group (controlGroup, DWT.NONE); + otherGroup.setLayout (new GridLayout ()); + otherGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, false, false)); + otherGroup.setText (ControlExample.getResourceString("Other")); + + /* Create the controls */ + autoHideButton = new Button(otherGroup, DWT.CHECK); + autoHideButton.setText(ControlExample.getResourceString("AutoHide")); + showInTrayButton = new Button(otherGroup, DWT.CHECK); + showInTrayButton.setText(ControlExample.getResourceString("Show_In_Tray")); + tray = display.getSystemTray(); + showInTrayButton.setEnabled(tray !is null); + + /* Add the listeners */ + autoHideButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setExampleWidgetAutoHide (); + } + }); + showInTrayButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + showExampleWidgetInTray (); + } + }); + shell.addDisposeListener(new class() DisposeListener { + public void widgetDisposed(DisposeEvent event) { + disposeTrayItem(); + } + }); + + /* Set the default state */ + autoHideButton.setSelection(true); + } + + void createSizeGroup () { + // ToolTip does not need a size group. + } + + /** + * Disposes the "Example" widgets. + */ + void disposeExampleWidgets () { + disposeTrayItem(); + super.disposeExampleWidgets(); + } + + /** + * Gets the "Example" widget children. + */ + // Tab uses this for many things - widgets would only get set/get, listeners, and dispose. + Widget[] getExampleWidgets () { + return [ cast(Widget) toolTip1 ]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["Message", "Text"]; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "ToolTip"; + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + showExampleWidgetInTray (); + setExampleWidgetAutoHide (); + super.setExampleWidgetState (); + balloonButton.setSelection ((toolTip1.getStyle () & DWT.BALLOON) !is 0); + iconErrorButton.setSelection ((toolTip1.getStyle () & DWT.ICON_ERROR) !is 0); + iconInformationButton.setSelection ((toolTip1.getStyle () & DWT.ICON_INFORMATION) !is 0); + iconWarningButton.setSelection ((toolTip1.getStyle () & DWT.ICON_WARNING) !is 0); + noIconButton.setSelection ((toolTip1.getStyle () & (DWT.ICON_ERROR | DWT.ICON_INFORMATION | DWT.ICON_WARNING)) is 0); + autoHideButton.setSelection(toolTip1.getAutoHide()); + } + + /** + * Sets the visibility of the "Example" widgets. + */ + void setExampleWidgetVisibility () { + toolTip1.setVisible (visibleButton.getSelection ()); + } + + /** + * Sets the autoHide state of the "Example" widgets. + */ + void setExampleWidgetAutoHide () { + toolTip1.setAutoHide(autoHideButton.getSelection ()); + } + + void showExampleWidgetInTray () { + if (showInTrayButton.getSelection ()) { + createTrayItem(); + trayItem.setToolTip(toolTip1); + } else { + disposeTrayItem(); + } + } + + void createTrayItem() { + if (trayItem is null) { + trayItem = new TrayItem(tray, DWT.NONE); + trayItem.setImage(instance.images[ControlExample.ciTarget]); + } + } + + void disposeTrayItem() { + if (trayItem !is null) { + trayItem.setToolTip(null); + trayItem.dispose(); + trayItem = null; + } + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/TreeTab.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/TreeTab.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,823 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Port to the D programming language: + * Frank Benoit + *******************************************************************************/ +module dwtexamples.controlexample.TreeTab; + + + +import dwt.DWT; +import dwt.events.DisposeEvent; +import dwt.events.DisposeListener; +import dwt.events.SelectionAdapter; +import dwt.events.SelectionEvent; +import dwt.events.SelectionListener; +import dwt.graphics.Color; +import dwt.graphics.Font; +import dwt.graphics.FontData; +import dwt.graphics.Image; +import dwt.graphics.Point; +import dwt.graphics.RGB; +import dwt.layout.GridData; +import dwt.layout.GridLayout; +import dwt.widgets.Button; +import dwt.widgets.Event; +import dwt.widgets.Group; +import dwt.widgets.Item; +import dwt.widgets.Menu; +import dwt.widgets.MenuItem; +import dwt.widgets.TableItem; +import dwt.widgets.Tree; +import dwt.widgets.TreeColumn; +import dwt.widgets.TreeItem; +import dwt.widgets.Widget; + +import dwtexamples.controlexample.Tab; +import dwtexamples.controlexample.ControlExample; +import dwtexamples.controlexample.ScrollableTab; +import tango.text.convert.Format; +import tango.util.Convert; +import tango.core.Exception; + +class TreeTab : ScrollableTab { + /* Example widgets and groups that contain them */ + Tree tree1, tree2; + TreeItem textNode1, imageNode1; + Group treeGroup, imageTreeGroup, itemGroup; + + /* Size widgets added to the "Size" group */ + Button packColumnsButton; + + /* Style widgets added to the "Style" group */ + Button checkButton, fullSelectionButton; + + /* Other widgets added to the "Other" group */ + Button multipleColumns, moveableColumns, resizableColumns, headerVisibleButton, sortIndicatorButton, headerImagesButton, subImagesButton, linesVisibleButton; + + /* Controls and resources added to the "Colors and Fonts" group */ + static const int ITEM_FOREGROUND_COLOR = 3; + static const int ITEM_BACKGROUND_COLOR = 4; + static const int ITEM_FONT = 5; + static const int CELL_FOREGROUND_COLOR = 6; + static const int CELL_BACKGROUND_COLOR = 7; + static const int CELL_FONT = 8; + Color itemForegroundColor, itemBackgroundColor, cellForegroundColor, cellBackgroundColor; + Font itemFont, cellFont; + + static char[] [] columnTitles; + + static char[][][] tableData; + + Point menuMouseCoords; + + /** + * Creates the Tab within a given instance of ControlExample. + */ + this(ControlExample instance) { + super(instance); + if( columnTitles.length is 0 ){ + columnTitles = [ + ControlExample.getResourceString("TableTitle_0"), + ControlExample.getResourceString("TableTitle_1"), + ControlExample.getResourceString("TableTitle_2"), + ControlExample.getResourceString("TableTitle_3")]; + } + if( tableData.length is 0 ){ + tableData = [ + [ ControlExample.getResourceString("TableLine0_0"), + ControlExample.getResourceString("TableLine0_1"), + ControlExample.getResourceString("TableLine0_2"), + ControlExample.getResourceString("TableLine0_3") ], + [ ControlExample.getResourceString("TableLine1_0"), + ControlExample.getResourceString("TableLine1_1"), + ControlExample.getResourceString("TableLine1_2"), + ControlExample.getResourceString("TableLine1_3") ], + [ ControlExample.getResourceString("TableLine2_0"), + ControlExample.getResourceString("TableLine2_1"), + ControlExample.getResourceString("TableLine2_2"), + ControlExample.getResourceString("TableLine2_3") ] ]; + } + } + + /** + * Creates the "Colors and Fonts" group. + */ + void createColorAndFontGroup () { + super.createColorAndFontGroup(); + + TableItem item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Item_Foreground_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Item_Background_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Item_Font")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Cell_Foreground_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Cell_Background_Color")); + item = new TableItem(colorAndFontTable, DWT.None); + item.setText(ControlExample.getResourceString ("Cell_Font")); + + shell.addDisposeListener(new class() DisposeListener { + public void widgetDisposed(DisposeEvent event) { + if (itemBackgroundColor !is null) itemBackgroundColor.dispose(); + if (itemForegroundColor !is null) itemForegroundColor.dispose(); + if (itemFont !is null) itemFont.dispose(); + if (cellBackgroundColor !is null) cellBackgroundColor.dispose(); + if (cellForegroundColor !is null) cellForegroundColor.dispose(); + if (cellFont !is null) cellFont.dispose(); + itemBackgroundColor = null; + itemForegroundColor = null; + itemFont = null; + cellBackgroundColor = null; + cellForegroundColor = null; + cellFont = null; + } + }); + } + + void changeFontOrColor(int index) { + switch (index) { + case ITEM_FOREGROUND_COLOR: { + Color oldColor = itemForegroundColor; + if (oldColor is null) oldColor = textNode1.getForeground (); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = itemForegroundColor; + itemForegroundColor = new Color (display, rgb); + setItemForeground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case ITEM_BACKGROUND_COLOR: { + Color oldColor = itemBackgroundColor; + if (oldColor is null) oldColor = textNode1.getBackground (); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = itemBackgroundColor; + itemBackgroundColor = new Color (display, rgb); + setItemBackground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case ITEM_FONT: { + Font oldFont = itemFont; + if (oldFont is null) oldFont = textNode1.getFont (); + fontDialog.setFontList(oldFont.getFontData()); + FontData fontData = fontDialog.open (); + if (fontData is null) return; + oldFont = itemFont; + itemFont = new Font (display, fontData); + setItemFont (); + setExampleWidgetSize (); + if (oldFont !is null) oldFont.dispose (); + } + break; + case CELL_FOREGROUND_COLOR: { + Color oldColor = cellForegroundColor; + if (oldColor is null) oldColor = textNode1.getForeground (1); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = cellForegroundColor; + cellForegroundColor = new Color (display, rgb); + setCellForeground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case CELL_BACKGROUND_COLOR: { + Color oldColor = cellBackgroundColor; + if (oldColor is null) oldColor = textNode1.getBackground (1); + colorDialog.setRGB(oldColor.getRGB()); + RGB rgb = colorDialog.open(); + if (rgb is null) return; + oldColor = cellBackgroundColor; + cellBackgroundColor = new Color (display, rgb); + setCellBackground (); + if (oldColor !is null) oldColor.dispose (); + } + break; + case CELL_FONT: { + Font oldFont = cellFont; + if (oldFont is null) oldFont = textNode1.getFont (1); + fontDialog.setFontList(oldFont.getFontData()); + FontData fontData = fontDialog.open (); + if (fontData is null) return; + oldFont = cellFont; + cellFont = new Font (display, fontData); + setCellFont (); + setExampleWidgetSize (); + if (oldFont !is null) oldFont.dispose (); + } + break; + default: + super.changeFontOrColor(index); + } + } + + /** + * Creates the "Other" group. + */ + void createOtherGroup () { + super.createOtherGroup (); + + /* Create display controls specific to this example */ + linesVisibleButton = new Button (otherGroup, DWT.CHECK); + linesVisibleButton.setText (ControlExample.getResourceString("Lines_Visible")); + multipleColumns = new Button (otherGroup, DWT.CHECK); + multipleColumns.setText (ControlExample.getResourceString("Multiple_Columns")); + headerVisibleButton = new Button (otherGroup, DWT.CHECK); + headerVisibleButton.setText (ControlExample.getResourceString("Header_Visible")); + sortIndicatorButton = new Button (otherGroup, DWT.CHECK); + sortIndicatorButton.setText (ControlExample.getResourceString("Sort_Indicator")); + moveableColumns = new Button (otherGroup, DWT.CHECK); + moveableColumns.setText (ControlExample.getResourceString("Moveable_Columns")); + resizableColumns = new Button (otherGroup, DWT.CHECK); + resizableColumns.setText (ControlExample.getResourceString("Resizable_Columns")); + headerImagesButton = new Button (otherGroup, DWT.CHECK); + headerImagesButton.setText (ControlExample.getResourceString("Header_Images")); + subImagesButton = new Button (otherGroup, DWT.CHECK); + subImagesButton.setText (ControlExample.getResourceString("Sub_Images")); + + /* Add the listeners */ + linesVisibleButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setWidgetLinesVisible (); + } + }); + multipleColumns.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + recreateExampleWidgets (); + } + }); + headerVisibleButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setWidgetHeaderVisible (); + } + }); + sortIndicatorButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setWidgetSortIndicator (); + } + }); + moveableColumns.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setColumnsMoveable (); + } + }); + resizableColumns.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + setColumnsResizable (); + } + }); + headerImagesButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + recreateExampleWidgets (); + } + }); + subImagesButton.addSelectionListener (new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + recreateExampleWidgets (); + } + }); + } + + /** + * Creates the "Example" group. + */ + void createExampleGroup () { + super.createExampleGroup (); + + /* Create a group for the text tree */ + treeGroup = new Group (exampleGroup, DWT.NONE); + treeGroup.setLayout (new GridLayout ()); + treeGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + treeGroup.setText ("Tree"); + + /* Create a group for the image tree */ + imageTreeGroup = new Group (exampleGroup, DWT.NONE); + imageTreeGroup.setLayout (new GridLayout ()); + imageTreeGroup.setLayoutData (new GridData (DWT.FILL, DWT.FILL, true, true)); + imageTreeGroup.setText (ControlExample.getResourceString("Tree_With_Images")); + } + + /** + * Creates the "Example" widgets. + */ + void createExampleWidgets () { + /* Compute the widget style */ + int style = getDefaultStyle(); + if (singleButton.getSelection()) style |= DWT.SINGLE; + if (multiButton.getSelection()) style |= DWT.MULTI; + if (horizontalButton.getSelection ()) style |= DWT.H_SCROLL; + if (verticalButton.getSelection ()) style |= DWT.V_SCROLL; + if (checkButton.getSelection()) style |= DWT.CHECK; + if (fullSelectionButton.getSelection ()) style |= DWT.FULL_SELECTION; + if (borderButton.getSelection()) style |= DWT.BORDER; + + /* Create the text tree */ + tree1 = new Tree (treeGroup, style); + bool multiColumn = multipleColumns.getSelection(); + if (multiColumn) { + for (int i = 0; i < columnTitles.length; i++) { + TreeColumn treeColumn = new TreeColumn(tree1, DWT.NONE); + treeColumn.setText(columnTitles[i]); + treeColumn.setToolTipText(Format( ControlExample.getResourceString("Tooltip") , columnTitles[i])); + } + tree1.setSortColumn(tree1.getColumn(0)); + } + for (int i = 0; i < 4; i++) { + TreeItem item = new TreeItem (tree1, DWT.NONE); + setItemText(item, i, ControlExample.getResourceString("Node_" ~ to!(char[])(i + 1))); + if (i < 3) { + TreeItem subitem = new TreeItem (item, DWT.NONE); + setItemText(subitem, i, ControlExample.getResourceString("Node_" ~ to!(char[])(i + 1) ~ "_1")); + } + } + TreeItem treeRoots[] = tree1.getItems (); + TreeItem item = new TreeItem (treeRoots[1], DWT.NONE); + setItemText(item, 1, ControlExample.getResourceString("Node_2_2")); + item = new TreeItem (item, DWT.NONE); + setItemText(item, 1, ControlExample.getResourceString("Node_2_2_1")); + textNode1 = treeRoots[0]; + packColumns(tree1); + try { + TreeColumn column = tree1.getColumn(0); + resizableColumns.setSelection (column.getResizable()); + } catch (IllegalArgumentException ex) {} + + /* Create the image tree */ + tree2 = new Tree (imageTreeGroup, style); + Image image = instance.images[ControlExample.ciClosedFolder]; + if (multiColumn) { + for (int i = 0; i < columnTitles.length; i++) { + TreeColumn treeColumn = new TreeColumn(tree2, DWT.NONE); + treeColumn.setText(columnTitles[i]); + treeColumn.setToolTipText(Format( ControlExample.getResourceString("Tooltip"), columnTitles[i])); + if (headerImagesButton.getSelection()) treeColumn.setImage(image); + } + } + for (int i = 0; i < 4; i++) { + item = new TreeItem (tree2, DWT.NONE); + setItemText(item, i, ControlExample.getResourceString("Node_" ~ to!(char[])(i + 1))); + if (multiColumn && subImagesButton.getSelection()) { + for (int j = 0; j < columnTitles.length; j++) { + item.setImage(j, image); + } + } else { + item.setImage(image); + } + if (i < 3) { + TreeItem subitem = new TreeItem (item, DWT.NONE); + setItemText(subitem, i, ControlExample.getResourceString("Node_" ~ to!(char[])(i + 1) ~ "_1")); + if (multiColumn && subImagesButton.getSelection()) { + for (int j = 0; j < columnTitles.length; j++) { + subitem.setImage(j, image); + } + } else { + subitem.setImage(image); + } + } + } + treeRoots = tree2.getItems (); + item = new TreeItem (treeRoots[1], DWT.NONE); + setItemText(item, 1, ControlExample.getResourceString("Node_2_2")); + if (multiColumn && subImagesButton.getSelection()) { + for (int j = 0; j < columnTitles.length; j++) { + item.setImage(j, image); + } + } else { + item.setImage(image); + } + item = new TreeItem (item, DWT.NONE); + setItemText(item, 1, ControlExample.getResourceString("Node_2_2_1")); + if (multiColumn && subImagesButton.getSelection()) { + for (int j = 0; j < columnTitles.length; j++) { + item.setImage(j, image); + } + } else { + item.setImage(image); + } + imageNode1 = treeRoots[0]; + packColumns(tree2); + } + + void setItemText(TreeItem item, int i, char[] node) { + int index = i % 3; + if (multipleColumns.getSelection()) { + tableData [index][0] = node; + item.setText (tableData [index]); + } else { + item.setText (node); + } + } + + /** + * Creates the "Size" group. The "Size" group contains + * controls that allow the user to change the size of + * the example widgets. + */ + void createSizeGroup () { + super.createSizeGroup(); + + packColumnsButton = new Button (sizeGroup, DWT.PUSH); + packColumnsButton.setText (ControlExample.getResourceString("Pack_Columns")); + packColumnsButton.addSelectionListener(new class() SelectionAdapter { + public void widgetSelected (SelectionEvent event) { + packColumns (tree1); + packColumns (tree2); + setExampleWidgetSize (); + } + }); + } + + /** + * Creates the "Style" group. + */ + void createStyleGroup() { + super.createStyleGroup(); + + /* Create the extra widgets */ + checkButton = new Button (styleGroup, DWT.CHECK); + checkButton.setText ("DWT.CHECK"); + fullSelectionButton = new Button (styleGroup, DWT.CHECK); + fullSelectionButton.setText ("DWT.FULL_SELECTION"); + } + + /** + * Gets the "Example" widget children's items, if any. + * + * @return an array containing the example widget children's items + */ + Item [] getExampleWidgetItems () { + /* Note: We do not bother collecting the tree items + * because tree items don't have any events. If events + * are ever added to TreeItem, then this needs to change. + */ + Item [] columns1 = tree1.getColumns(); + Item [] columns2 = tree2.getColumns(); + Item [] allItems = new Item [columns1.length + columns2.length]; + System.arraycopy(columns1, 0, allItems, 0, columns1.length); + System.arraycopy(columns2, 0, allItems, columns1.length, columns2.length); + return allItems; + } + + /** + * Gets the "Example" widget children. + */ + Widget [] getExampleWidgets () { + return [ cast(Widget) tree1, tree2 ]; + } + + /** + * Returns a list of set/get API method names (without the set/get prefix) + * that can be used to set/get values in the example control(s). + */ + char[][] getMethodNames() { + return ["ColumnOrder", "Selection", "ToolTipText", "TopItem"]; + } + +//PORTING_LEFT +/+ + Object[] parameterForType(char[] typeName, char[] value, Widget widget) { + if (typeName.equals("org.eclipse.swt.widgets.TreeItem")) { + TreeItem item = findItem(value, ((Tree) widget).getItems()); + if (item !is null) return new Object[] {item}; + } + if (typeName.equals("[Lorg.eclipse.swt.widgets.TreeItem;")) { + char[][] values = split(value, ','); + TreeItem[] items = new TreeItem[values.length]; + for (int i = 0; i < values.length; i++) { + TreeItem item = findItem(values[i], ((Tree) widget).getItems()); + if (item is null) break; + items[i] = item; + } + return new Object[] {items}; + } + return super.parameterForType(typeName, value, widget); + } ++/ + TreeItem findItem(char[] value, TreeItem[] items) { + for (int i = 0; i < items.length; i++) { + TreeItem item = items[i]; + if (item.getText() == value ) return item; + item = findItem(value, item.getItems()); + if (item !is null) return item; + } + return null; + } + + /** + * Gets the text for the tab folder item. + */ + char[] getTabText () { + return "Tree"; + } + + void packColumns (Tree tree) { + if (multipleColumns.getSelection()) { + int columnCount = tree.getColumnCount(); + for (int i = 0; i < columnCount; i++) { + TreeColumn treeColumn = tree.getColumn(i); + treeColumn.pack(); + } + } + } + + /** + * Sets the moveable columns state of the "Example" widgets. + */ + void setColumnsMoveable () { + bool selection = moveableColumns.getSelection(); + TreeColumn[] columns1 = tree1.getColumns(); + for (int i = 0; i < columns1.length; i++) { + columns1[i].setMoveable(selection); + } + TreeColumn[] columns2 = tree2.getColumns(); + for (int i = 0; i < columns2.length; i++) { + columns2[i].setMoveable(selection); + } + } + + /** + * Sets the resizable columns state of the "Example" widgets. + */ + void setColumnsResizable () { + bool selection = resizableColumns.getSelection(); + TreeColumn[] columns1 = tree1.getColumns(); + for (int i = 0; i < columns1.length; i++) { + columns1[i].setResizable(selection); + } + TreeColumn[] columns2 = tree2.getColumns(); + for (int i = 0; i < columns2.length; i++) { + columns2[i].setResizable(selection); + } + } + + /** + * Sets the foreground color, background color, and font + * of the "Example" widgets to their default settings. + * Also sets foreground and background color of the Node 1 + * TreeItems to default settings. + */ + void resetColorsAndFonts () { + super.resetColorsAndFonts (); + Color oldColor = itemForegroundColor; + itemForegroundColor = null; + setItemForeground (); + if (oldColor !is null) oldColor.dispose(); + oldColor = itemBackgroundColor; + itemBackgroundColor = null; + setItemBackground (); + if (oldColor !is null) oldColor.dispose(); + Font oldFont = font; + itemFont = null; + setItemFont (); + if (oldFont !is null) oldFont.dispose(); + oldColor = cellForegroundColor; + cellForegroundColor = null; + setCellForeground (); + if (oldColor !is null) oldColor.dispose(); + oldColor = cellBackgroundColor; + cellBackgroundColor = null; + setCellBackground (); + if (oldColor !is null) oldColor.dispose(); + oldFont = font; + cellFont = null; + setCellFont (); + if (oldFont !is null) oldFont.dispose(); + } + + /** + * Sets the state of the "Example" widgets. + */ + void setExampleWidgetState () { + setItemBackground (); + setItemForeground (); + setItemFont (); + setCellBackground (); + setCellForeground (); + setCellFont (); + if (!instance.startup) { + setColumnsMoveable (); + setColumnsResizable (); + setWidgetHeaderVisible (); + setWidgetSortIndicator (); + setWidgetLinesVisible (); + } + super.setExampleWidgetState (); + checkButton.setSelection ((tree1.getStyle () & DWT.CHECK) !is 0); + checkButton.setSelection ((tree2.getStyle () & DWT.CHECK) !is 0); + fullSelectionButton.setSelection ((tree1.getStyle () & DWT.FULL_SELECTION) !is 0); + fullSelectionButton.setSelection ((tree2.getStyle () & DWT.FULL_SELECTION) !is 0); + try { + TreeColumn column = tree1.getColumn(0); + moveableColumns.setSelection (column.getMoveable()); + resizableColumns.setSelection (column.getResizable()); + } catch (IllegalArgumentException ex) {} + headerVisibleButton.setSelection (tree1.getHeaderVisible()); + linesVisibleButton.setSelection (tree1.getLinesVisible()); + } + + /** + * Sets the background color of the Node 1 TreeItems in column 1. + */ + void setCellBackground () { + if (!instance.startup) { + textNode1.setBackground (1, cellBackgroundColor); + imageNode1.setBackground (1, cellBackgroundColor); + } + /* Set the background color item's image to match the background color of the cell. */ + Color color = cellBackgroundColor; + if (color is null) color = textNode1.getBackground (1); + TableItem item = colorAndFontTable.getItem(CELL_BACKGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the foreground color of the Node 1 TreeItems in column 1. + */ + void setCellForeground () { + if (!instance.startup) { + textNode1.setForeground (1, cellForegroundColor); + imageNode1.setForeground (1, cellForegroundColor); + } + /* Set the foreground color item's image to match the foreground color of the cell. */ + Color color = cellForegroundColor; + if (color is null) color = textNode1.getForeground (1); + TableItem item = colorAndFontTable.getItem(CELL_FOREGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the font of the Node 1 TreeItems in column 1. + */ + void setCellFont () { + if (!instance.startup) { + textNode1.setFont (1, cellFont); + imageNode1.setFont (1, cellFont); + } + /* Set the font item's image to match the font of the item. */ + Font ft = cellFont; + if (ft is null) ft = textNode1.getFont (1); + TableItem item = colorAndFontTable.getItem(CELL_FONT); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (fontImage(ft)); + item.setFont(ft); + colorAndFontTable.layout (); + } + + /** + * Sets the background color of the Node 1 TreeItems. + */ + void setItemBackground () { + if (!instance.startup) { + textNode1.setBackground (itemBackgroundColor); + imageNode1.setBackground (itemBackgroundColor); + } + /* Set the background button's color to match the background color of the item. */ + Color color = itemBackgroundColor; + if (color is null) color = textNode1.getBackground (); + TableItem item = colorAndFontTable.getItem(ITEM_BACKGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the foreground color of the Node 1 TreeItems. + */ + void setItemForeground () { + if (!instance.startup) { + textNode1.setForeground (itemForegroundColor); + imageNode1.setForeground (itemForegroundColor); + } + /* Set the foreground button's color to match the foreground color of the item. */ + Color color = itemForegroundColor; + if (color is null) color = textNode1.getForeground (); + TableItem item = colorAndFontTable.getItem(ITEM_FOREGROUND_COLOR); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (colorImage(color)); + } + + /** + * Sets the font of the Node 1 TreeItems. + */ + void setItemFont () { + if (!instance.startup) { + textNode1.setFont (itemFont); + imageNode1.setFont (itemFont); + } + /* Set the font item's image to match the font of the item. */ + Font ft = itemFont; + if (ft is null) ft = textNode1.getFont (); + TableItem item = colorAndFontTable.getItem(ITEM_FONT); + Image oldImage = item.getImage(); + if (oldImage !is null) oldImage.dispose(); + item.setImage (fontImage(ft)); + item.setFont(ft); + colorAndFontTable.layout (); + } + + /** + * Sets the header visible state of the "Example" widgets. + */ + void setWidgetHeaderVisible () { + tree1.setHeaderVisible (headerVisibleButton.getSelection ()); + tree2.setHeaderVisible (headerVisibleButton.getSelection ()); + } + + /** + * Sets the sort indicator state of the "Example" widgets. + */ + void setWidgetSortIndicator () { + if (sortIndicatorButton.getSelection ()) { + initializeSortState (tree1); + initializeSortState (tree2); + } else { + resetSortState (tree1); + resetSortState (tree2); + } + } + + /** + * Sets the initial sort indicator state and adds a listener + * to cycle through sort states and columns. + */ + void initializeSortState (Tree tree) { + /* Reset to known state: 'down' on column 0. */ + tree.setSortDirection (DWT.DOWN); + TreeColumn [] columns = tree.getColumns(); + for (int i = 0; i < columns.length; i++) { + TreeColumn column = columns[i]; + if (i is 0) tree.setSortColumn(column); + SelectionListener listener = new class(tree) SelectionAdapter { + Tree t; + this( Tree t ){ this.t = t; } + public void widgetSelected(SelectionEvent e) { + int sortDirection = DWT.DOWN; + if (e.widget is t.getSortColumn()) { + /* If the sort column hasn't changed, cycle down -> up -> none. */ + switch (t.getSortDirection ()) { + case DWT.DOWN: sortDirection = DWT.UP; break; + case DWT.UP: sortDirection = DWT.NONE; break; + } + } else { + t.setSortColumn(cast(TreeColumn)e.widget); + } + t.setSortDirection (sortDirection); + } + }; + column.addSelectionListener(listener); + column.setData("SortListener", cast(Object)listener); //$NON-NLS-1$ + } + } + + void resetSortState (Tree tree) { + tree.setSortDirection (DWT.NONE); + TreeColumn [] columns = tree.getColumns(); + for (int i = 0; i < columns.length; i++) { + SelectionListener listener = cast(SelectionListener)columns[i].getData("SortListener"); //$NON-NLS-1$ + if (listener !is null) columns[i].removeSelectionListener(listener); + } + } + + /** + * Sets the lines visible state of the "Example" widgets. + */ + void setWidgetLinesVisible () { + tree1.setLinesVisible (linesVisibleButton.getSelection ()); + tree2.setLinesVisible (linesVisibleButton.getSelection ()); + } + + protected void specialPopupMenuItems(Menu menu, Event event) { + MenuItem item = new MenuItem(menu, DWT.PUSH); + item.setText("getItem(Point) on mouse coordinates"); + Tree t = cast(Tree) event.widget; + menuMouseCoords = t.toControl(new Point(event.x, event.y)); + item.addSelectionListener(new class(t) SelectionAdapter { + Tree t; + this( Tree t ){ this.t = t; } + public void widgetSelected(SelectionEvent e) { + eventConsole.append ("getItem(Point(" ~ menuMouseCoords.toString ~ ")) returned: " ~ (this.t.getItem(menuMouseCoords)).toString); + eventConsole.append ("\n"); + }; + }); + } +} diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/backgroundImage.png Binary file dwtexamples/controlexample/backgroundImage.png has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/bold.bmp Binary file dwtexamples/controlexample/bold.bmp has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/bold_mask.bmp Binary file dwtexamples/controlexample/bold_mask.bmp has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/closedFolder.gif Binary file dwtexamples/controlexample/closedFolder.gif has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/controlexample.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/controlexample/controlexample.properties Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,247 @@ +############################################################################### +# Copyright (c) 2000, 2005 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +error.CouldNotLoadResources = Unable to load resources +window.title = SWT Controls +custom.window.title = SWT Custom Controls + +Text_Buttons = Text Buttons +Size = Size +Alignment = Alignment +Left = Left +Right = Right +Up = Up +Down = Down +Center = Center +One = One +Two = Two +Three = Three +Image_Buttons = Image Buttons +Image_Text_Buttons = Image and Text Buttons +Control_Example = Control Example +Parameters = Parameters +Other = Other +Enabled = Enabled +Visible = Visible +BackgroundImage = Background Image +Preferred = Preferred +Styles = Styles +Menu_Styles = Menu Styles +MenuItem_Styles = MenuItem Styles +Background_Mode = Background Mode on Parent +Listeners = Listeners +Select_Listeners = Select Listeners +Listen = Listen +Clear = Clear +Set_Get = Set/Get API +Parameter_Info = {0} e.g. {1} +Info_int = 4 +Info_intA = 0,1,2 +Info_long = 4 +Info_longA = 0,1,2 +Info_char = c +Info_charA = a,b,c +Info_boolean = true +Info_booleanA = true,true,false +Info_String = hello +Info_StringA = hello,there +Info_Point = 0,0 +Info_TabItem = Tab 0 +Info_TabItemA = Tab 0,Tab 2 +Info_TableItem = Index:2 +Info_TableItemA = Index:2,Index:4 +Info_TreeItem = Node 1 +Info_TreeItemA = Node 1,Node 3 +Select_All = Select All +Deselect_All = Deselect All +OK = OK +FillDamage = Fill Damaged Area With Color +Title_Text = Title Text +Text_Labels = Text Labels +Image_Labels = Image Labels +Custom_Labels = Custom Labels +Custom_Combo = Custom Combo +One_Two_Three = One Two Three +Text_ToolBar = Text ToolBar +Image_ToolBar = Image ToolBar +ImageText_ToolBar = Image and Text ToolBar +Maximum = Maximum +Minimum = Minimum +Selection = Selection +Increment = Increment +Page_Increment = Page Increment +Thumb = Thumb +Digits = Digits +Tree_With_Images = Tree With Images +Dialog_Type = Dialog Type +Create_Dialog = Create Dialog +Button_Styles = Button Styles +Icon_Styles = Icon Styles +Modal_Styles = Modal Styles +File_Dialog_Styles = File Dialog Styles +Item_Styles = Item Styles +Dialog_Result = Dialog Result +ColorDialog = ColorDialog +DirectoryDialog = DirectoryDialog +FileDialog = FileDialog +FontDialog = FontDialog +PrintDialog = PrintDialog +MessageBox = MessageBox +Multi_line = A multi line text widget. +Example_string = The quick brown fox jumps over the lazy dog. +Header_Visible = Header Visible +Sort_Indicator = Sort Indicator +Header_Images = Header Images +Sub_Images = Sub Images +Lines_Visible = Lines Visible +Moveable_Columns = Moveable Columns +Multiple_Columns = Multiple Columns +Locked = Locked +Combo_child = Combo Child +Node_1 = Node 1 +Node_2 = Node 2 +Node_3 = Node 3 +Node_4 = Node 4 +Node_1_1 = Node 1.1 +Node_2_1 = Node 2.1 +Node_3_1 = Node 3.1 +Node_2_2 = Node 2.2 +Node_2_2_1 = Node 2.2.1 +Parent = Parent +No_Parent = No Parent +Decoration_Styles = Decoration Styles +Create_Shell = Create Shell +Close_All_Shells = Close All Shells +Push = Push +Radio = Radio +Check = Check +Cascade = Cascade +Drop_Down = Drop Down +Images_failed = Warning: Failed to load images +readme_txt = readme.txt +Index = Index: +Title = Title: +Close = Close +Result = Result: {0} +FilterName_0 = Text Files +FilterName_1 = Batch Files +FilterName_2 = Doc Files +FilterName_3 = All Files +TableTitle_0 = Name +TableTitle_1 = Type +TableTitle_2 = Size +TableTitle_3 = Modified +TableLine0_0 = +TableLine0_1 = classes +TableLine0_2 = 0 +TableLine0_3 = today +TableLine1_0 = +TableLine1_1 = databases +TableLine1_2 = 2556 +TableLine1_3 = tomorrow +TableLine2_0 = +TableLine2_1 = images +TableLine2_2 = 91571 +TableLine2_3 = yesterday +ListData0_0 = Line 1 +ListData0_1 = Line 2 +ListData0_2 = Line 3 +ListData0_3 = Line 4 +ListData0_4 = Line 5 +ListData0_5 = Line 6 +ListData0_6 = Line 7 +ListData0_7 = Line 8 +ListData0_8 = Longest Line In List +ListData1_0 = Apples +ListData1_1 = Oranges +ListData1_2 = Bananas +ListData1_3 = Grapefruit +ListData1_4 = Peaches +ListData1_5 = Kiwi +ListData1_6 = Apricots +ListData1_7 = Strawberries +ListData1_8 = The Longest String +DropDownData_0 = Apples +DropDownData_1 = Oranges +DropDownData_2 = +DropDownData_3 = Grapefruit +DropDownData_4 = Peaches +DropDownData_5 = Kiwi +DropDownData_6 = +DropDownData_7 = Strawberries +DropDownData_8 = The Longest String +Colors = Colors and Font +Change = &Change... +Defaults = &Defaults +Foreground_Color = Foreground Color +Background_Color = Background Color +Font = Font +Item_Foreground_Color = Item 0 Foreground Color +Item_Background_Color = Item 0 Background Color +Item_Font = Item 0 Font +Cell_Foreground_Color = Item 0 Col 1 Foreground Color +Cell_Background_Color = Item 0 Col 1 Background Color +Cell_Font = Item 0 Col 1 Font +Wrap_Text = Jack and Jill went up the hill to fetch a pail of water, \ + Jack fell down and broke his crown and Jill came tumbling after! +Foreground_Style = Foreground +Background_Style = Background +StyledText_Styles = Text Styles +StyledText_Style_Instructions = Select text, then style. +Bold = Bold +Italic = Italic +Underline = Underline +Strikeout = Strikeout +Fill_X = Horizontal Fill +Fill_Y = Vertical Fill +Pack_Columns = Pack Columns +TabItem1_0 = Tab 0 +TabItem1_1 = Tab 1 +TabItem1_2 = Tab 2 +TabItem_content = TabItem Content +CTabItem1_0 = CTabItem 0 +CTabItem1_1 = CTabItem 1 +CTabItem1_2 = CTabItem 2 has a long name +CItem_Colors = CTabItem Colors +CTabItem_content = CTabItem Content +Set_Simple_Tabs = Simple Tabs +Set_Single_Tabs = Single Tab +Set_Min_Visible = Minimize +Set_Max_Visible = Maximize +Set_Unselected_Close_Visible = Close on Unselected Tabs +Set_Unselected_Image_Visible = Image on Unselected Tabs +Selection_Foreground_Color = Selection Foreground Color +Selection_Background_Color = Selection Background Color +Set_Image = Set Image +TableTree_column = Column +MenuItem_Cut = Cu&t Ctrl+X +MenuItem_Copy = &Copy Ctrl+C +MenuItem_Paste = &Paste Ctrl+V +MenuItem_SelectAll = Select &All Ctrl+A +Orientation = Orientation +Default = Default (Inherit) +Images = Images +Accelerators = Accelerators +Mnemonics = Mnemonics +SubMenu = Sub-Menu +SubSubMenu = Sub-Sub-Menu +1Radio = Radio1 +2Radio = Radio2 +1RadioWithMnemonic = Radio&1 +2RadioWithMnemonic = Radio&2 +PushWithMnemonic = &Push +RadioWithMnemonic = &Radio +CheckWithMnemonic = &Check +CascadeWithMnemonic = C&ascade +PopupMenuHere = Popup Menu Here +LinkText=Visit the Eclipse.org project and the SWT homepage. +Tooltip = Tooltip: {0} +Item1_Text = "What is your favorite button?" +Item2_Text = "What is your favorite icon?" \ No newline at end of file diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/italic.bmp Binary file dwtexamples/controlexample/italic.bmp has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/italic_mask.bmp Binary file dwtexamples/controlexample/italic_mask.bmp has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/openFolder.gif Binary file dwtexamples/controlexample/openFolder.gif has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/parentBackgroundImage.png Binary file dwtexamples/controlexample/parentBackgroundImage.png has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/red.bmp Binary file dwtexamples/controlexample/red.bmp has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/red_mask.bmp Binary file dwtexamples/controlexample/red_mask.bmp has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/strikeout.bmp Binary file dwtexamples/controlexample/strikeout.bmp has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/strikeout_mask.bmp Binary file dwtexamples/controlexample/strikeout_mask.bmp has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/target.gif Binary file dwtexamples/controlexample/target.gif has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/underline.bmp Binary file dwtexamples/controlexample/underline.bmp has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/underline_mask.bmp Binary file dwtexamples/controlexample/underline_mask.bmp has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/yellow.bmp Binary file dwtexamples/controlexample/yellow.bmp has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/controlexample/yellow_mask.bmp Binary file dwtexamples/controlexample/yellow_mask.bmp has changed diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/helloworld/HelloWorld1.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/helloworld/HelloWorld1.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.helloworld.HelloWorld1; + + +import dwt.widgets.Display; +import dwt.widgets.Shell; + +/* + * This example demonstrates the minimum amount of code required + * to open an DWT Shell and process the events. + */ +void main(){ + Display display = new Display (); + Shell shell = new Shell (display); + shell.open (); + while (!shell.isDisposed ()) { + if (!display.readAndDispatch ()) display.sleep (); + } + display.dispose (); +} + +// for unknown reason, there are linker errors. These imports are the workaround +import tango.io.Stdout; +import tango.math.Math; +import tango.text.convert.Format; +import tango.util.Convert; +import tango.util.PathUtil; + diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/helloworld/HelloWorld2.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/helloworld/HelloWorld2.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.helloworld.HelloWorld2; + +import dwt.DWT; +import dwt.widgets.Display; +import dwt.widgets.Label; +import dwt.widgets.Shell; + +/* + * This example builds on HelloWorld1 and demonstrates the minimum amount + * of code required to open an DWT Shell with a Label and process the events. + */ + +void main(){ + Display display = new Display (); + Shell shell = new Shell (display); + Label label = new Label (shell, DWT.CENTER); + label.setText ("Hello_world"); + label.setBounds (shell.getClientArea ()); + shell.open (); + while (!shell.isDisposed ()) { + if (!display.readAndDispatch ()) display.sleep (); + } + display.dispose (); +} + +// for unknown reason, there are linker errors. These imports are the workaround +import tango.io.Stdout; +import tango.math.Math; +import tango.text.convert.Format; +import tango.util.Convert; +import tango.util.PathUtil; diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/helloworld/HelloWorld3.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/helloworld/HelloWorld3.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.helloworld.HelloWorld3; + +import dwt.DWT; +import dwt.events.ControlAdapter; +import dwt.events.ControlEvent; +import dwt.widgets.Display; +import dwt.widgets.Label; +import dwt.widgets.Shell; + +/* + * This example builds on HelloWorld2 and demonstrates how to resize the + * Label when the Shell resizes using a Listener mechanism. + */ + +void main () { + Display display = new Display (); + final Shell shell = new Shell (display); + final Label label = new Label (shell, DWT.CENTER); + label.setText ("Hello_world"); + label.pack(); + shell.addControlListener(new class() ControlAdapter { + public void controlResized(ControlEvent e) { + label.setBounds (shell.getClientArea ()); + } + }); + shell.pack(); + shell.open (); + while (!shell.isDisposed ()) { + if (!display.readAndDispatch ()) display.sleep (); + } + display.dispose (); +} + +// for unknown reason, there are linker errors. These imports are the workaround +import tango.io.Stdout; +import tango.math.Math; +import tango.text.convert.Format; +import tango.util.Convert; +import tango.util.PathUtil; diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/helloworld/HelloWorld4.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/helloworld/HelloWorld4.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.helloworld.HelloWorld4; + +import dwt.DWT; +import dwt.layout.FillLayout; +import dwt.widgets.Display; +import dwt.widgets.Label; +import dwt.widgets.Shell; + +/* + * This example builds on HelloWorld2 and demonstrates how to resize the + * Label when the Shell resizes using a Layout. + */ +void main () { + Display display = new Display (); + Shell shell = new Shell (display); + shell.setLayout(new FillLayout()); + Label label = new Label (shell, DWT.CENTER); + label.setText ("Hello_world"); + shell.pack (); + shell.open (); + while (!shell.isDisposed ()) { + if (!display.readAndDispatch ()) display.sleep (); + } + display.dispose (); +} + + +// for unknown reason, there are linker errors. These imports are the workaround +import tango.io.Stdout; +import tango.math.Math; +import tango.text.convert.Format; +import tango.util.Convert; +import tango.util.PathUtil; diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/helloworld/HelloWorld5.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/helloworld/HelloWorld5.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +module dwtexamples.helloworld.HelloWorld5; + + +import dwt.events.DisposeEvent; +import dwt.events.DisposeListener; +import dwt.events.PaintEvent; +import dwt.events.PaintListener; +import dwt.graphics.Color; +import dwt.graphics.GC; +import dwt.graphics.Rectangle; +import dwt.widgets.Display; +import dwt.widgets.Shell; + +/* + * This example builds on HelloWorld1 and demonstrates how to draw directly + * on an DWT Control. + */ + +void main () { + Display display = new Display (); + final Color red = new Color(display, 0xFF, 0, 0); + final Shell shell = new Shell (display); + shell.addPaintListener(new class() PaintListener { + public void paintControl(PaintEvent event){ + GC gc = event.gc; + gc.setForeground(red); + Rectangle rect = shell.getClientArea(); + gc.drawRectangle(rect.x + 10, rect.y + 10, rect.width - 20, rect.height - 20); + gc.drawString("Hello_world", rect.x + 20, rect.y + 20); + } + }); + shell.addDisposeListener (new class() DisposeListener { + public void widgetDisposed (DisposeEvent e) { + red.dispose(); + } + }); + shell.open (); + while (!shell.isDisposed ()) { + if (!display.readAndDispatch ()) display.sleep (); + } + display.dispose (); +} + +// for unknown reason, there are linker errors. These imports are the workaround +import tango.io.Stdout; +import tango.math.Math; +import tango.text.convert.Format; +import tango.util.Convert; +import tango.util.PathUtil; diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/helloworld/helloworld.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/helloworld/helloworld.properties Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,11 @@ +############################################################################### +# Copyright (c) 2000, 2003 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +Hello_world = Hello World \ No newline at end of file diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/simple.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/simple.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,56 @@ +module dwtexample.simple; + +import dwt.DWT; +import dwt.widgets.Display; +import dwt.widgets.Shell; +import dwt.widgets.Button; +import dwt.widgets.Text; + +import tango.io.Stdout; +import tango.math.Math; +import tango.text.convert.Format; +import tango.util.Convert; +import tango.util.PathUtil; +import dwt.events.SelectionListener; +import dwt.events.SelectionEvent; + + +import dwt.DWT; +import dwt.widgets.Display; + +void main(){ + + try{ + + Display display = new Display(); + Shell shell = new Shell(display); + shell.setSize(300, 200); + shell.setText("Simple DWT Sample"); + auto btn = new Button( shell, DWT.PUSH ); + btn.setBounds(40, 50, 100, 50); + btn.setText( "hey" ); + + auto txt = new Text(shell, DWT.BORDER); + txt.setBounds(170, 50, 100, 40); + + btn.addSelectionListener(new class () SelectionListener { + public void widgetSelected(SelectionEvent event) { + txt.setText("No problem"); + } + public void widgetDefaultSelected(SelectionEvent event) { + txt.setText("No worries!"); + } + }); + + shell.open(); + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) { + display.sleep(); + } + } + } + catch (Exception e) { + Stdout.formatln (e.toString); + } +} + diff -r 000000000000 -r 052c3aebd1d3 dwtexamples/test.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dwtexamples/test.d Fri Feb 01 21:46:26 2008 +0100 @@ -0,0 +1,44 @@ +module test; + +private import dwt.internal.gtk.c.cairo; +private import tango.core.Traits; +private import tango.io.Stdout; +private import tango.stdc.stdio; + +struct lock { +static void lock() { printf("lock\n");} +static void unlock() { printf("unlock\n");} +} + +const static char[] mm = "Inside outer cairo_version"; + +template NameOfFunc(alias f) { + // Note: highly dependent on the .stringof formatting + // the value begins with "& " which is why the first two chars are cut off + const char[] NameOfFunc = (&f).stringof[2 .. $]; +} + +template ForwardGtkOsCFunc( alias cFunc ) { + alias ParameterTupleOf!(cFunc) P; + alias ReturnTypeOf!(cFunc) R; + mixin("public static R " ~ NameOfFunc!(cFunc) ~ "( P p ){ + lock.lock(); + scope(exit) lock.unlock(); + Stdout (mm).newline; + return cFunc(p); + }"); +} + +public class OS { + mixin ForwardGtkOsCFunc!(cairo_version); + mixin ForwardGtkOsCFunc!(cairo_version_string); +} + +void main() +{ + Stdout ("calling cairo_version...").newline; + int p = OS.cairo_version(); + int i = cairo_version(); + Stdout.formatln("OS.cairo_version() returns: {} cairo_version() returns: {}", p, i ).newline; + printf("OS.cairo_version_string returns: %s\n", cairo_version_string() ); +} \ No newline at end of file