Mercurial > projects > dwt-samples
diff examples/controlexample/ShellTab.d @ 78:4a04b6759f98
Clean up directory names
author | John Reimer <terminal.node@gmail.com> |
---|---|
date | Sat, 10 May 2008 13:32:45 -0700 |
parents | |
children | eb84f9418bbf |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/controlexample/ShellTab.d Sat May 10 13:32:45 2008 -0700 @@ -0,0 +1,313 @@ +/******************************************************************************* + * 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 <benoit@tionex.de> +*******************************************************************************/ +module examples.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 examples.controlexample.Tab; +import examples.controlexample.ControlExample; + +import dwt.dwthelper.utils; + +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<shellCount; i++) { + if (shells[i] !is null & !shells [i].isDisposed ()) { + shells [i].dispose(); + } + } + shellCount = 0; + } + + /** + * Handle the Create button selection event. + * + * @param event org.eclipse.swt.events.SelectionEvent + */ + public void createButtonSelected(SelectionEvent event) { + + /* + * Remember the example shells so they + * can be disposed by the user. + */ + if (shellCount >= 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"; + } +}