From 76233b6467e856f89f95b83b11f243ddb5a61a16 Mon Sep 17 00:00:00 2001 From: jurgen Date: Fri, 7 Jun 2013 12:12:06 +0000 Subject: [PATCH] Composite dialog pages model --- .../dbeaver/ext/ui/ICompositeDialogPage.java | 31 ++++++++ .../ui/IDataSourceConnectionEditorSite.java | 3 +- .../ui/dialogs/MultiPageWizardDialog.java | 74 ++++++++++++------- .../connection/ConnectionPageSettings.java | 9 --- 4 files changed, 80 insertions(+), 37 deletions(-) create mode 100644 plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ext/ui/ICompositeDialogPage.java diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ext/ui/ICompositeDialogPage.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ext/ui/ICompositeDialogPage.java new file mode 100644 index 0000000000..5266e66bb1 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ext/ui/ICompositeDialogPage.java @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2010-2012 Serge Rieder + * serge@jkiss.org + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +package org.jkiss.dbeaver.ext.ui; + +import org.eclipse.jface.dialogs.IDialogPage; + +/** + * ICompositeDialogPage + */ +public interface ICompositeDialogPage extends IDialogPage +{ + IDialogPage[] getSubPages(); + +} \ No newline at end of file diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ext/ui/IDataSourceConnectionEditorSite.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ext/ui/IDataSourceConnectionEditorSite.java index 18a9cfa3ed..f4c822140f 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ext/ui/IDataSourceConnectionEditorSite.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ext/ui/IDataSourceConnectionEditorSite.java @@ -19,6 +19,7 @@ package org.jkiss.dbeaver.ext.ui; +import org.eclipse.jface.dialogs.IDialogPage; import org.eclipse.jface.operation.IRunnableContext; import org.jkiss.dbeaver.model.DBPConnectionInfo; import org.jkiss.dbeaver.model.DBPDriver; @@ -38,7 +39,5 @@ public interface IDataSourceConnectionEditorSite void updateMessage(); - void testConnection(); - boolean openDriverEditor(); } diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/MultiPageWizardDialog.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/MultiPageWizardDialog.java index c6c15d4dba..0544658c45 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/MultiPageWizardDialog.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/MultiPageWizardDialog.java @@ -38,7 +38,9 @@ import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWizard; +import org.jkiss.dbeaver.ext.ui.ICompositeDialogPage; import org.jkiss.dbeaver.ui.UIUtils; +import org.jkiss.utils.CommonUtils; import java.lang.reflect.InvocationTargetException; @@ -113,27 +115,8 @@ public class MultiPageWizardDialog extends TitleAreaDialog implements IWizardCon Point maxSize = new Point(0, 0); IWizardPage[] pages = wizard.getPages(); - for (int i = 0, pagesLength = pages.length; i < pagesLength; i++) { - IDialogPage page = pages[i]; - page.createControl(pageArea); - if (i == 0 && page instanceof ActiveWizardPage) { - ((ActiveWizardPage) page).activatePage(); - } - Control control = page.getControl(); - Point pageSize = control.computeSize(SWT.DEFAULT, SWT.DEFAULT); - if (pageSize.x > maxSize.x) maxSize.x = pageSize.x; - if (pageSize.y > maxSize.y) maxSize.y = pageSize.y; - GridData gd = (GridData) control.getLayoutData(); - if (gd == null) { - gd = new GridData(GridData.FILL_BOTH); - control.setLayoutData(gd); - } - gd.exclude = i > 0; - control.setVisible(i == 0); - - TreeItem item = new TreeItem(pagesTree, SWT.NONE); - item.setText(page.getTitle()); - item.setData(page); + for (IWizardPage page : pages) { + addPage(null, page, maxSize); } prevPage = (IDialogPage) pagesTree.getItem(0).getData(); GridData gd = (GridData) pageArea.getLayoutData(); @@ -171,6 +154,42 @@ public class MultiPageWizardDialog extends TitleAreaDialog implements IWizardCon return composite; } + private TreeItem addPage(TreeItem parentItem, IDialogPage page, Point maxSize) + { + boolean hasPages = pagesTree.getItemCount() != 0; + page.createControl(pageArea); + if (!hasPages && page instanceof ActiveWizardPage) { + ((ActiveWizardPage) page).activatePage(); + } + Control control = page.getControl(); + Point pageSize = control.computeSize(SWT.DEFAULT, SWT.DEFAULT); + if (pageSize.x > maxSize.x) maxSize.x = pageSize.x; + if (pageSize.y > maxSize.y) maxSize.y = pageSize.y; + GridData gd = (GridData) control.getLayoutData(); + if (gd == null) { + gd = new GridData(GridData.FILL_BOTH); + control.setLayoutData(gd); + } + gd.exclude = hasPages; + control.setVisible(!gd.exclude); + + TreeItem item = parentItem == null ? + new TreeItem(pagesTree, SWT.NONE) : + new TreeItem(parentItem, SWT.NONE); + item.setText(page.getTitle()); + item.setData(page); + + // Ad sub pages + if (page instanceof ICompositeDialogPage) { + IDialogPage[] subPages = ((ICompositeDialogPage) page).getSubPages(); + for (IDialogPage subPage : subPages) { + addPage(item, subPage, maxSize); + } + } + + return item; + } + private void changePage() { pageArea.setRedraw(false); @@ -220,20 +239,23 @@ public class MultiPageWizardDialog extends TitleAreaDialog implements IWizardCon @Override public IWizardPage getCurrentPage() { - return null; + TreeItem[] selection = pagesTree.getSelection(); + if (CommonUtils.isEmpty(selection)) { + return null; + } + IDialogPage page = (IDialogPage)selection[0].getData(); + return page instanceof IWizardPage ? (IWizardPage) page : null; } @Override public void showPage(IWizardPage page) { -/* - for (CTabItem item : pagesFolder.getItems()) { + for (TreeItem item : pagesTree.getItems()) { if (item.getData() == page) { - pagesFolder.setSelection(item); + pagesTree.setSelection(item); break; } } -*/ } @Override diff --git a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/connection/ConnectionPageSettings.java b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/connection/ConnectionPageSettings.java index 26ebf1e183..5ee1bd8de8 100644 --- a/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/connection/ConnectionPageSettings.java +++ b/plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/dialogs/connection/ConnectionPageSettings.java @@ -190,15 +190,6 @@ class ConnectionPageSettings extends ActiveWizardPage implemen getWizard().getContainer().updateTitleBar(); } - @Override - public void testConnection() - { - if (this.connectionEditor != null) { - this.connectionEditor.saveSettings(); - this.wizard.testConnection(); - } - } - @Override public boolean openDriverEditor() { -- GitLab