From 27051c284ace2482cda5a4201ce3684348a8436b Mon Sep 17 00:00:00 2001 From: Oleg Krasilnikov Date: Wed, 12 Sep 2007 13:43:54 +0000 Subject: [PATCH] Bug # 192810 : selected configurations not saved when changing page --- .../ui/wizards/CDTConfigWizardPage.java | 32 +++++++++++++++---- .../ui/wizards/MBSWizardHandler.java | 13 +++----- .../cdt/ui/wizards/CDTMainWizardPage.java | 1 + 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CDTConfigWizardPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CDTConfigWizardPage.java index 65bc3fc30df..cd0c3b25339 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CDTConfigWizardPage.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CDTConfigWizardPage.java @@ -11,6 +11,7 @@ package org.eclipse.cdt.managedbuilder.ui.wizards; import java.util.ArrayList; +import java.util.Arrays; import java.util.Set; import java.util.TreeSet; @@ -72,6 +73,7 @@ public class CDTConfigWizardPage extends WizardPage { public boolean isVisible = false; private MBSWizardHandler handler; public boolean pagesLoaded = false; + private IToolChain[] visitedTCs = null; public CDTConfigWizardPage(MBSWizardHandler h) { super(UIMessages.getString("CDTConfigWizardPage.0")); //$NON-NLS-1$ @@ -232,6 +234,21 @@ public class CDTConfigWizardPage extends WizardPage { return (CfgHolder[])out.toArray(new CfgHolder[out.size()]); } + /** + * Checks whether we've already worked with + * given set of selected toolchains + * + * @return true if toolchain(s) is the same as before + */ + private boolean isVisited() { + if (table == null || handler == null) + return false; + + return Arrays.equals( + handler.getSelectedToolChains(), + visitedTCs); + } + /** * Returns whether this page's controls currently all contain valid * values. @@ -240,7 +257,8 @@ public class CDTConfigWizardPage extends WizardPage { * false if at least one is invalid */ public boolean isCustomPageComplete() { - if (!isVisible) return true; + if (!isVisited()) + return true; if (table.getItemCount() == 0) { errorMessage = UIMessages.getString("CConfigWizardPage.10"); //$NON-NLS-1$ @@ -262,16 +280,16 @@ public class CDTConfigWizardPage extends WizardPage { */ public void setVisible(boolean visible) { isVisible = visible; - if (visible && handler != null) { + if (visible && handler != null && !isVisited()) { tv.setInput(CfgHolder.unique(getDefaultCfgs(handler))); tv.setAllChecked(true); String s = EMPTY_STR; - IToolChain[] tc = handler.getSelectedToolChains(); - for (int i=0; i < tc.length; i++) { - s = s + ((tc[i] == null) ? + visitedTCs = handler.getSelectedToolChains(); + for (int i=0; i < visitedTCs.length; i++) { + s = s + ((visitedTCs[i] == null) ? "" : //$NON-NLS-1$ - tc[i].getUniqueRealName()); - if (i < tc.length - 1) s = s + "\n"; //$NON-NLS-1$ + visitedTCs[i].getUniqueRealName()); + if (i < visitedTCs.length - 1) s = s + "\n"; //$NON-NLS-1$ } l_chains.setText(s); l_projtype.setText(handler.getName()); diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java index a51e96f54a6..d83d9bc8cd2 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java @@ -203,7 +203,7 @@ public class MBSWizardHandler extends CWizardHandler { return followingPage; } - public boolean canFinish(IWizardPage predatingPage, IWizardPage followingPage){ + private boolean canFinish(IWizardPage predatingPage, IWizardPage followingPage){ getNextPage(predatingPage, followingPage); for(int i = 0; i < templatePages.length; i++){ if(!templatePages[i].isPageComplete()) @@ -488,10 +488,6 @@ public class MBSWizardHandler extends CWizardHandler { public IWizardPage getSpecificPage() { return entryInfo.getNextPage(getStartingPage(), getConfigPage()); -// if (fConfigPage == null) { -// fConfigPage = new CDTConfigWizardPage(this); -// } -// return fConfigPage; } /** @@ -569,8 +565,6 @@ public class MBSWizardHandler extends CWizardHandler { TableItem[] tis = table.getSelection(); if (tis == null || tis.length == 0) return Messages.getString("MBSWizardHandler.0"); //$NON-NLS-1$ - if (fConfigPage != null && fConfigPage.isVisible && !fConfigPage.isCustomPageComplete()) - return Messages.getString("MBSWizardHandler.1"); //$NON-NLS-1$ return null; } @@ -653,7 +647,10 @@ public class MBSWizardHandler extends CWizardHandler { if(entryInfo == null) return false; - if(!entryInfo.canFinish(getStartingPage(), getConfigPage())) + if (!getConfigPage().isCustomPageComplete()) + return false; + + if(!entryInfo.canFinish(startingPage, getConfigPage())) return false; return super.canFinich(); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CDTMainWizardPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CDTMainWizardPage.java index 8e8022dc30b..f6391040cba 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CDTMainWizardPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/CDTMainWizardPage.java @@ -565,6 +565,7 @@ import org.eclipse.cdt.internal.ui.CPluginImages; public void toolChainListChanged(int count) { setPageComplete(validatePage()); + getWizard().getContainer().updateButtons(); } public boolean isCurrent() { return isCurrentPage(); }