Mercurial > projects > dwt-addons
diff dwtx/jface/preference/PreferenceDialog.d @ 34:b3c8e32d406f
preference
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 05 Apr 2008 01:45:47 +0200 |
parents | 6c14e54dfc11 |
children | 644f1334b451 |
line wrap: on
line diff
--- a/dwtx/jface/preference/PreferenceDialog.d Thu Apr 03 20:41:52 2008 +0200 +++ b/dwtx/jface/preference/PreferenceDialog.d Sat Apr 05 01:45:47 2008 +0200 @@ -14,17 +14,15 @@ *******************************************************************************/ module dwtx.jface.preference.PreferenceDialog; -import dwt.dwthelper.utils; - -pragma( msg, "FIXME dwtx.jface.preference.PreferenceDialog" ); -class PreferenceDialog{ - public static const String PREF_DLG_TITLE_IMG = "preference_dialog_title_image"; //$NON-NLS-1$ -} - -/++ -import java.io.IOException; -import java.util.Iterator; -import java.util.List; +import dwtx.jface.preference.IPreferencePageContainer; +import dwtx.jface.preference.IPreferencePage; +import dwtx.jface.preference.IPreferenceNode; +import dwtx.jface.preference.IPreferenceStore; +import dwtx.jface.preference.IPersistentPreferenceStore; +import dwtx.jface.preference.PreferenceManager; +import dwtx.jface.preference.PreferencePage; +import dwtx.jface.preference.PreferenceLabelProvider; +import dwtx.jface.preference.PreferenceContentProvider; import dwt.DWT; import dwt.custom.BusyIndicator; @@ -84,18 +82,21 @@ import dwtx.jface.viewers.TreeViewer; import dwtx.jface.viewers.ViewerFilter; +import dwt.dwthelper.utils; +import dwt.dwthelper.Runnable; + /** * A preference dialog is a hierarchical presentation of preference pages. Each * page is represented by a node in the tree shown on the left hand side of the * dialog; when a node is selected, the corresponding page is shown on the right * hand side. */ -public class PreferenceDialog extends TrayDialog implements IPreferencePageContainer, IPageChangeProvider { +public class PreferenceDialog : TrayDialog, IPreferencePageContainer, IPageChangeProvider { /** * Layout for the page container. * */ - private class PageLayout extends Layout { + private class PageLayout : Layout { public Point computeSize(Composite composite, int wHint, int hHint, bool force) { if (wHint !is DWT.DEFAULT && hHint !is DWT.DEFAULT) { return new Point(wHint, hHint); @@ -144,17 +145,17 @@ /** * Indentifier for the error image */ - public static final String PREF_DLG_IMG_TITLE_ERROR = DLG_IMG_MESSAGE_ERROR; + public static const String PREF_DLG_IMG_TITLE_ERROR = DLG_IMG_MESSAGE_ERROR; /** * Title area fields */ - public static final String PREF_DLG_TITLE_IMG = "preference_dialog_title_image"; //$NON-NLS-1$ + public static const String PREF_DLG_TITLE_IMG = "preference_dialog_title_image"; //$NON-NLS-1$ /** * Return code used when dialog failed */ - protected static final int FAILED = 2; + protected static const int FAILED = 2; /** * The current preference page, or <code>null</code> if there is none. @@ -172,7 +173,7 @@ * * @see #setMinimumPageSize(Point) */ - private Point minimumPageSize = new Point(400, 400); + private Point minimumPageSize; /** * The OK button. @@ -208,7 +209,7 @@ */ private TreeViewer treeViewer; - private ListenerList pageChangedListeners = new ListenerList(); + private ListenerList pageChangedListeners; /** * Composite with a FormLayout to contain the title area @@ -226,7 +227,9 @@ * @param manager * the preference manager */ - public PreferenceDialog(Shell parentShell, PreferenceManager manager) { + public this(Shell parentShell, PreferenceManager manager) { + minimumPageSize = new Point(400, 400); + pageChangedListeners = new ListenerList(); super(parentShell); setShellStyle(getShellStyle() | DWT.RESIZE | DWT.MAX); preferenceManager = manager; @@ -261,13 +264,21 @@ */ protected void cancelPressed() { // Inform all pages that we are cancelling - Iterator nodes = preferenceManager.getElements(PreferenceManager.PRE_ORDER).iterator(); - while (nodes.hasNext()) { - final IPreferenceNode node = (IPreferenceNode) nodes.next(); + foreach( e; preferenceManager.getElements(PreferenceManager.PRE_ORDER)){ + IPreferenceNode node = cast(IPreferenceNode) e; if (getPage(node) !is null) { - SafeRunnable.run(new SafeRunnable() { + + // this_: strange workaround for compiler error with dmd 1.028 in run() + SafeRunnable.run(new class(this) SafeRunnable { + PreferenceDialog this_; + IPreferenceNode node_; + this(PreferenceDialog outer_){ + node_=node; + this_=outer_; + auto p = this_.getPage( node ); + } public void run() { - if (!getPage(node).performCancel()) { + if (!this_.getPage(node_).performCancel()) { return; } } @@ -294,14 +305,14 @@ public bool close() { //Do this is in a SafeRunnable as it may run client code - SafeRunnable runnable = new SafeRunnable(){ + SafeRunnable runnable = new class SafeRunnable{ /* (non-Javadoc) * @see dwtx.core.runtime.ISafeRunnable#run() */ - public void run() throws Exception { - List nodes = preferenceManager.getElements(PreferenceManager.PRE_ORDER); + public void run() { + auto nodes = preferenceManager.getElements(PreferenceManager.PRE_ORDER); for (int i = 0; i < nodes.size(); i++) { - IPreferenceNode node = (IPreferenceNode) nodes.get(i); + IPreferenceNode node = cast(IPreferenceNode) nodes.get(i); node.disposeResources(); } @@ -310,7 +321,7 @@ /* (non-Javadoc) * @see dwtx.jface.util.SafeRunnable#handleException(java.lang.Throwable) */ - public void handleException(Throwable e) { + public void handleException(Exception e) { super.handleException(e); clearSelectedNode();//Do not cache a node with problems } @@ -329,7 +340,7 @@ protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(JFaceResources.getString("PreferenceDialog.title")); //$NON-NLS-1$ - newShell.addShellListener(new ShellAdapter() { + newShell.addShellListener(new class ShellAdapter { public void shellActivated(ShellEvent e) { if (lastShellSize is null) { lastShellSize = getShell().getSize(); @@ -370,11 +381,15 @@ * * @see dwtx.jface.window.Window#createContents(dwt.widgets.Composite) */ - protected Control createContents(final Composite parent) { - final Control[] control = new Control[1]; - BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() { + protected Control createContents(Composite parent) { + Control[1] control; + BusyIndicator.showWhile(getShell().getDisplay(), new class Runnable { + Composite parent_; + this(){ + parent_=parent; + } public void run() { - control[0] = PreferenceDialog.super.createContents(parent); + control[0] = callSuperCreateContents(parent); // Add the first page selectSavedItem(); } @@ -382,15 +397,17 @@ return control[0]; } - + private Control callSuperCreateContents( Composite c ){ + return super.createContents( c ); + } /* * (non-Javadoc) * * @see dwtx.jface.dialogs.Dialog#createDialogArea(dwt.widgets.Composite) */ protected Control createDialogArea(Composite parent) { - final Composite composite = (Composite) super.createDialogArea(parent); - GridLayout parentLayout = ((GridLayout) composite.getLayout()); + final Composite composite = cast(Composite) super.createDialogArea(parent); + GridLayout parentLayout = (cast(GridLayout) composite.getLayout()); parentLayout.numColumns = 4; parentLayout.marginHeight = 0; parentLayout.marginWidth = 0; @@ -470,13 +487,21 @@ * * @since 3.1 */ - protected Sash createSash(final Composite composite, final Control rightControl) { - final Sash sash = new Sash(composite, DWT.VERTICAL); + protected Sash createSash(Composite composite, Control rightControl) { + Sash sash = new Sash(composite, DWT.VERTICAL); sash.setLayoutData(new GridData(GridData.FILL_VERTICAL)); sash.setBackground(composite.getDisplay().getSystemColor(DWT.COLOR_LIST_BACKGROUND)); // the following listener resizes the tree control based on sash deltas. // If necessary, it will also grow/shrink the dialog. - sash.addListener(DWT.Selection, new Listener() { + sash.addListener(DWT.Selection, new class Listener { + Composite composite_; + Control rightControl_; + Sash sash_; + this(){ + composite_=composite; + rightControl_=rightControl; + sash_=sash; + } /* * (non-Javadoc) * @@ -486,8 +511,8 @@ if (event.detail is DWT.DRAG) { return; } - int shift = event.x - sash.getBounds().x; - GridData data = (GridData) rightControl.getLayoutData(); + int shift = event.x - sash_.getBounds().x; + GridData data = cast(GridData) rightControl_.getLayoutData(); int newWidthHint = data.widthHint + shift; if (newWidthHint < 20) { return; @@ -496,10 +521,10 @@ Point currentSize = getShell().getSize(); // if the dialog wasn't of a custom size we know we can shrink // it if necessary based on sash movement. - bool customSize = !computedSize.equals(currentSize); + bool customSize = !computedSize.opEquals(currentSize); data.widthHint = newWidthHint; setLastTreeWidth(newWidthHint); - composite.layout(true); + composite_.layout(true); // recompute based on new widget size computedSize = getShell().computeSize(DWT.DEFAULT, DWT.DEFAULT); // if the dialog was of a custom size then increase it only if @@ -508,7 +533,7 @@ computedSize.x = Math.max(computedSize.x, currentSize.x); } computedSize.y = Math.max(computedSize.y, currentSize.y); - if (computedSize.equals(currentSize)) { + if (computedSize.opEquals(currentSize)) { return; } setShellSize(computedSize.x, computedSize.y); @@ -596,7 +621,7 @@ messageArea = new DialogMessageArea(); messageArea.createContents(titleArea); - titleArea.addControlListener(new ControlAdapter() { + titleArea.addControlListener(new class ControlAdapter { /* (non-Javadoc) * @see dwt.events.ControlAdapter#controlResized(dwt.events.ControlEvent) */ @@ -605,7 +630,7 @@ } }); - final IPropertyChangeListener fontListener = new IPropertyChangeListener() { + final IPropertyChangeListener fontListener = new class IPropertyChangeListener { public void propertyChange(PropertyChangeEvent event) { if (JFaceResources.BANNER_FONT.equals(event.getProperty())) { updateMessage(); @@ -614,7 +639,7 @@ updateMessage(); Font dialogFont = JFaceResources.getDialogFont(); updateTreeFont(dialogFont); - Control[] children = ((Composite) buttonBar).getChildren(); + Control[] children = (cast(Composite) buttonBar).getChildren(); for (int i = 0; i < children.length; i++) { children[i].setFont(dialogFont); } @@ -622,7 +647,7 @@ } }; - titleArea.addDisposeListener(new DisposeListener() { + titleArea.addDisposeListener(new class DisposeListener { public void widgetDisposed(DisposeEvent event) { JFaceResources.getFontRegistry().removeListener(fontListener); } @@ -684,50 +709,58 @@ * * @since 3.1 */ - protected void addListeners(final TreeViewer viewer) { - viewer.addPostSelectionChangedListener(new ISelectionChangedListener() { + protected void addListeners(TreeViewer viewer) { + viewer.addPostSelectionChangedListener(new class ISelectionChangedListener { + TreeViewer viewer_; + this(){ + viewer_=viewer; + } private void handleError() { try { // remove the listener temporarily so that the events caused // by the error handling dont further cause error handling // to occur. - viewer.removePostSelectionChangedListener(this); + viewer_.removePostSelectionChangedListener(this); showPageFlippingAbortDialog(); selectCurrentPageAgain(); clearSelectedNode(); } finally { - viewer.addPostSelectionChangedListener(this); + viewer_.addPostSelectionChangedListener(this); } } public void selectionChanged(SelectionChangedEvent event) { - Object selection = getSingleSelection(event.getSelection()); - if (selection instanceof IPreferenceNode) { + Object selection = cast(Object) getSingleSelection(event.getSelection()); + if (cast(IPreferenceNode)selection ) { if (!isCurrentPageValid()) { handleError(); - } else if (!showPage((IPreferenceNode) selection)) { + } else if (!showPage(cast(IPreferenceNode) selection)) { // Page flipping wasn't successful handleError(); } else { // Everything went well - lastSuccessfulNode = (IPreferenceNode) selection; + lastSuccessfulNode = cast(IPreferenceNode) selection; } } } }); - ((Tree) viewer.getControl()).addSelectionListener(new SelectionAdapter() { - public void widgetDefaultSelected(final SelectionEvent event) { - ISelection selection = viewer.getSelection(); + (cast(Tree) viewer.getControl()).addSelectionListener(new class SelectionAdapter { + TreeViewer viewer_; + this(){ + viewer_=viewer; + } + public void widgetDefaultSelected(SelectionEvent event) { + ISelection selection = viewer_.getSelection(); if (selection.isEmpty()) { return; } IPreferenceNode singleSelection = getSingleSelection(selection); - bool expanded = viewer.getExpandedState(singleSelection); - viewer.setExpandedState(singleSelection, !expanded); + bool expanded = viewer_.getExpandedState(cast(Object)singleSelection); + viewer_.setExpandedState(cast(Object)singleSelection, !expanded); } }); //Register help listener on the tree to use context sensitive help - viewer.getControl().addHelpListener(new HelpListener() { + viewer.getControl().addHelpListener(new class HelpListener { public void helpRequested(HelpEvent event) { // call perform help on the current page if (currentPage !is null) { @@ -747,9 +780,8 @@ * found. */ protected IPreferenceNode findNodeMatching(String nodeId) { - List nodes = preferenceManager.getElements(PreferenceManager.POST_ORDER); - for (Iterator i = nodes.iterator(); i.hasNext();) { - IPreferenceNode node = (IPreferenceNode) i.next(); + foreach( e; preferenceManager.getElements(PreferenceManager.POST_ORDER)){ + IPreferenceNode node = cast(IPreferenceNode) e; if (node.getId().equals(nodeId)) { return node; } @@ -800,9 +832,9 @@ */ protected IPreferenceNode getSingleSelection(ISelection selection) { if (!selection.isEmpty()) { - IStructuredSelection structured = (IStructuredSelection) selection; - if (structured.getFirstElement() instanceof IPreferenceNode) { - return (IPreferenceNode) structured.getFirstElement(); + IStructuredSelection structured = cast(IStructuredSelection) selection; + if (cast(IPreferenceNode)structured.getFirstElement() ) { + return cast(IPreferenceNode) structured.getFirstElement(); } } return null; @@ -828,17 +860,16 @@ * </p> */ protected void handleSave() { - Iterator nodes = preferenceManager.getElements(PreferenceManager.PRE_ORDER).iterator(); - while (nodes.hasNext()) { - IPreferenceNode node = (IPreferenceNode) nodes.next(); + foreach( e; preferenceManager.getElements(PreferenceManager.PRE_ORDER)){ + IPreferenceNode node = cast(IPreferenceNode) e; IPreferencePage page = node.getPage(); - if (page instanceof PreferencePage) { + if (cast(PreferencePage)page ) { // Save now in case tbe workbench does not shutdown cleanly - IPreferenceStore store = ((PreferencePage) page).getPreferenceStore(); + IPreferenceStore store = (cast(PreferencePage) page).getPreferenceStore(); if (store !is null && store.needsSaving() - && store instanceof IPersistentPreferenceStore) { + && cast(IPersistentPreferenceStore)store ) { try { - ((IPersistentPreferenceStore) store).save(); + (cast(IPersistentPreferenceStore) store).save(); } catch (IOException e) { MessageDialog .openError( @@ -846,7 +877,7 @@ JFaceResources.getString("PreferenceDialog.saveErrorTitle"), //$NON-NLS-1$ JFaceResources .format( - "PreferenceDialog.saveErrorMessage", new Object[] { page.getTitle(), e.getMessage() })); //$NON-NLS-1$ + "PreferenceDialog.saveErrorMessage", [ page.getTitle(), e.msg ])); //$NON-NLS-1$ } } } @@ -913,7 +944,7 @@ * save any state, and then calls <code>close</code> to close this dialog. */ protected void okPressed() { - SafeRunnable.run(new SafeRunnable() { + SafeRunnable.run(new class SafeRunnable { private bool errorOccurred; /* @@ -927,10 +958,8 @@ bool hasFailedOK = false; try { // Notify all the pages and give them a chance to abort - Iterator nodes = preferenceManager.getElements(PreferenceManager.PRE_ORDER) - .iterator(); - while (nodes.hasNext()) { - IPreferenceNode node = (IPreferenceNode) nodes.next(); + foreach( e; preferenceManager.getElements(PreferenceManager.PRE_ORDER)){ + IPreferenceNode node = cast(IPreferenceNode) e; IPreferencePage page = node.getPage(); if (page !is null) { if (!page.performOk()){ @@ -946,16 +975,18 @@ if(hasFailedOK){ setReturnCode(FAILED); getButton(IDialogConstants.OK_ID).setEnabled(true); - return; + //return; } + else{ - if (!errorOccurred) { - //Give subclasses the choice to save the state of the - //preference pages. - handleSave(); + if (!errorOccurred) { + //Give subclasses the choice to save the state of the + //preference pages. + handleSave(); + } + setReturnCode(OK); + close(); } - setReturnCode(OK); - close(); } } @@ -964,7 +995,7 @@ * * @see dwtx.core.runtime.ISafeRunnable#handleException(java.lang.Throwable) */ - public void handleException(Throwable e) { + public void handleException(Exception e) { errorOccurred = true; Policy.getLog().log(new Status(IStatus.ERROR, Policy.JFACE, 0, e.toString(), e)); @@ -985,7 +1016,7 @@ if (lastSuccessfulNode is null) { return; } - getTreeViewer().setSelection(new StructuredSelection(lastSuccessfulNode)); + getTreeViewer().setSelection(new StructuredSelection(cast(Object)lastSuccessfulNode)); currentPage.setVisible(true); } @@ -1002,8 +1033,8 @@ IPreferenceNode selectedNode = nodes[i]; // See if it passes all filters for (int j = 0; j < filters.length; j++) { - if (!filters[j].select(this.treeViewer, preferenceManager - .getRoot(), selectedNode)) { + if (!filters[j].select(this.treeViewer, cast(Object)preferenceManager + .getRoot_package(), cast(Object)selectedNode)) { selectedNode = null; break; } @@ -1016,7 +1047,7 @@ } } if (node !is null) { - getTreeViewer().setSelection(new StructuredSelection(node), true); + getTreeViewer().setSelection(new StructuredSelection(cast(Object)node), true); // Keep focus in tree. See bugs 2692, 2621, and 6775. getTreeViewer().getControl().setFocus(); } @@ -1122,7 +1153,7 @@ * @see #getPreferenceStore */ public void setPreferenceStore(IPreferenceStore store) { - Assert.isNotNull(store); + Assert.isNotNull(cast(Object)store); preferenceStore = store; } @@ -1131,9 +1162,9 @@ */ private void setSelectedNode() { String storeValue = null; - IStructuredSelection selection = (IStructuredSelection) getTreeViewer().getSelection(); + IStructuredSelection selection = cast(IStructuredSelection) getTreeViewer().getSelection(); if (selection.size() is 1) { - IPreferenceNode node = (IPreferenceNode) selection.getFirstElement(); + IPreferenceNode node = cast(IPreferenceNode) selection.getFirstElement(); storeValue = node.getId(); } setSelectedNodePreference(storeValue); @@ -1213,9 +1244,9 @@ // Ensure that the page control has been created // (this allows lazy page control creation) if (currentPage.getControl() is null) { - final bool[] failed = { false }; - SafeRunnable.run(new ISafeRunnable() { - public void handleException(Throwable e) { + bool[1] failed; failed[0] = false; + SafeRunnable.run(new class ISafeRunnable { + public void handleException(Exception e) { failed[0] = true; } @@ -1235,8 +1266,8 @@ // label can be wrapped. final Point[] size = new Point[1]; final Point failed = new Point(-1, -1); - SafeRunnable.run(new ISafeRunnable() { - public void handleException(Throwable e) { + SafeRunnable.run(new class ISafeRunnable { + public void handleException(Exception e) { size[0] = failed; } @@ -1244,7 +1275,7 @@ size[0] = currentPage.computeSize(); } }); - if (size[0].equals(failed)) { + if (size[0].opEquals(failed)) { return false; } Point contentSize = size[0]; @@ -1259,7 +1290,7 @@ Point containerSize = new Point(rect.width, rect.height); int hdiff = contentSize.x - containerSize.x; int vdiff = contentSize.y - containerSize.y; - if ((hdiff > 0 || vdiff > 0) && shellSize.equals(lastShellSize)) { + if ((hdiff > 0 || vdiff > 0) && shellSize.opEquals(lastShellSize)) { hdiff = Math.max(0, hdiff); vdiff = Math.max(0, vdiff); setShellSize(shellSize.x + hdiff, shellSize.y + vdiff); @@ -1336,7 +1367,7 @@ updateButtons(); //Saved the selected node in the preferences setSelectedNode(); - firePageChanged(new PageChangedEvent(this, getCurrentPage())); + firePageChanged(new PageChangedEvent(this, cast(Object)getCurrentPage())); } /* @@ -1361,8 +1392,8 @@ errorMessage = currentPage.getErrorMessage(); } int messageType = IMessageProvider.NONE; - if (message !is null && currentPage instanceof IMessageProvider) { - messageType = ((IMessageProvider) currentPage).getMessageType(); + if (message !is null && cast(IMessageProvider)currentPage ) { + messageType = (cast(IMessageProvider) currentPage).getMessageType(); } if (errorMessage is null){ @@ -1472,7 +1503,7 @@ * @since 3.1 */ public Object getSelectedPage() { - return getCurrentPage(); + return cast(Object)getCurrentPage(); } /** @@ -1480,7 +1511,7 @@ * @since 3.1 */ public void addPageChangedListener(IPageChangedListener listener) { - pageChangedListeners.add(listener); + pageChangedListeners.add(cast(Object)listener); } /** @@ -1488,7 +1519,7 @@ * @since 3.1 */ public void removePageChangedListener(IPageChangedListener listener) { - pageChangedListeners.remove(listener); + pageChangedListeners.remove(cast(Object)listener); } @@ -1503,16 +1534,20 @@ * * @since 3.1 */ - protected void firePageChanged(final PageChangedEvent event) { + protected void firePageChanged(PageChangedEvent event) { Object[] listeners = pageChangedListeners.getListeners(); for (int i = 0; i < listeners.length; i++) { - final IPageChangedListener l = (IPageChangedListener) listeners[i]; - SafeRunnable.run(new SafeRunnable() { + SafeRunnable.run(new class SafeRunnable { + PageChangedEvent event_; + IPageChangedListener l; + this(){ + event_=event; + l = cast(IPageChangedListener) listeners[i]; + } public void run() { - l.pageChanged(event); + l.pageChanged(event_); } }); } } } -++/ \ No newline at end of file