001 package org.springframework.richclient.wizard; 002 003 import org.springframework.richclient.application.config.ApplicationObjectConfigurer; 004 import org.springframework.richclient.application.ApplicationServicesLocator; 005 import org.springframework.richclient.util.GuiStandardUtils; 006 007 import javax.swing.*; 008 import java.awt.*; 009 import java.util.Map; 010 import java.util.HashMap; 011 012 import com.jgoodies.forms.layout.*; 013 import com.jgoodies.forms.factories.FormFactory; 014 import com.jgoodies.forms.builder.DefaultFormBuilder; 015 016 /** 017 * Wizard dialog that additionally adds a panel to the dialog 018 * showing the page path and the current page. 019 * 020 * @author Schaubroeck N.V. 021 */ 022 public class ExtendedWizardDialog extends 023 org.springframework.richclient.wizard.WizardDialog 024 { 025 private Map<String, Component> indexComponents = new HashMap<String, Component>(); 026 private Map<String, Component> indexNumbers = new HashMap<String, Component>(); 027 private JLabel stepNofMax = new JLabel(); 028 private String id = null; 029 030 public ExtendedWizardDialog() 031 { 032 super(); 033 } 034 035 public ExtendedWizardDialog(Wizard wizard) 036 { 037 this(wizard, null); 038 } 039 040 public ExtendedWizardDialog(Wizard wizard, String id) 041 { 042 super(wizard); 043 this.id = id; 044 if (this.id != null) 045 ((ApplicationObjectConfigurer) ApplicationServicesLocator.services().getService(ApplicationObjectConfigurer.class)).configure(this, this.id); 046 } 047 048 public void setWizard(Wizard wizard) 049 { 050 super.setWizard(wizard); 051 this.wizard = wizard; 052 } 053 054 protected JComponent createDialogContentPane() 055 { 056 JPanel wizardPanel = new JPanel(new FormLayout( 057 new ColumnSpec[]{ 058 new ColumnSpec(ColumnSpec.FILL, Sizes.DEFAULT, FormSpec.NO_GROW), 059 ColumnSpec.decode("fill:pref"), 060 new ColumnSpec(ColumnSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW) 061 }, 062 new RowSpec[]{ 063 new RowSpec(RowSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW), 064 RowSpec.decode("fill:pref") 065 })); 066 CellConstraints cc = new CellConstraints(); 067 wizardPanel.add(new JSeparator(SwingConstants.VERTICAL), cc.xy(2, 1)); 068 wizardPanel.add(super.createDialogContentPane(), cc.xy(3, 1)); 069 wizardPanel.add(createWizardIndex(), cc.xy(1, 1)); // do this after super.createDialogPane() because only then, pages are added 070 wizardPanel.add(new JSeparator(), cc.xyw(1, 2, 3)); 071 return wizardPanel; 072 } 073 074 private Component createWizardIndex() 075 { 076 JPanel indexPanel = new JPanel(new FormLayout( 077 new ColumnSpec[]{ 078 new ColumnSpec(ColumnSpec.CENTER, Sizes.DEFAULT, FormSpec.NO_GROW) 079 }, 080 new RowSpec[]{ 081 new RowSpec(RowSpec.FILL, Sizes.DEFAULT, FormSpec.NO_GROW), 082 FormFactory.UNRELATED_GAP_ROWSPEC, 083 new RowSpec(RowSpec.CENTER, Sizes.DEFAULT, FormSpec.DEFAULT_GROW), 084 FormFactory.UNRELATED_GAP_ROWSPEC, 085 new RowSpec(RowSpec.FILL, Sizes.DEFAULT, FormSpec.NO_GROW), 086 })); 087 CellConstraints cc = new CellConstraints(); 088 GuiStandardUtils.attachBorder(indexPanel, BorderFactory.createEmptyBorder(5, 5, 5, 5)); 089 indexPanel.add(createWizardTitle(), cc.xy(1, 1)); 090 WizardPage[] pages = wizard.getPages(); 091 DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout( 092 "right:pref, 3dlu, left:pref", "")); 093 JLabel indexNumber; 094 JLabel indexTitle; 095 for (int i = 0; i < pages.length; ++i) 096 { 097 indexNumber = new JLabel(Integer.toString(i + 1) + "."); 098 indexNumber.setName(Integer.toString(i + 1)); 099 indexTitle = new JLabel(pages[i].getTitle()); 100 indexNumbers.put(pages[i].getTitle(), indexNumber); 101 indexComponents.put(pages[i].getTitle(), indexTitle); 102 builder.append(indexNumber); 103 builder.append(indexTitle); 104 if (i < pages.length - 1) 105 builder.nextLine(); 106 } 107 indexPanel.add(builder.getPanel(), cc.xy(1, 3)); 108 indexPanel.add(createStepNofMPanel(pages.length), cc.xy(1, 5)); 109 return indexPanel; 110 } 111 112 /** @return */ 113 private JLabel createWizardTitle() 114 { 115 return new JLabel(getTitle()); 116 } 117 118 private Component createStepNofMPanel(int m) 119 { 120 JPanel panel = new JPanel(new FormLayout("fill:pref, fill:pref:grow, fill:pref", "center:pref:none")); 121 CellConstraints cc = new CellConstraints(); 122 panel.add(new JLabel("Stap "), cc.xy(1, 1)); 123 panel.add(this.stepNofMax, cc.xy(2, 1)); 124 panel.add(new JLabel(" van " + Integer.toString(m)), cc.xy(3, 1)); 125 return panel; 126 } 127 128 public void showPage(WizardPage page) 129 { 130 JComponent component; 131 String pageTitle; 132 if (getCurrentPage() != null) 133 { 134 pageTitle = getCurrentPage().getTitle(); 135 component = (JComponent) indexComponents.get(pageTitle); 136 component.setFont(component.getFont().deriveFont(Font.PLAIN)); 137 component = (JComponent) indexNumbers.get(pageTitle); 138 component.setFont(component.getFont().deriveFont(Font.PLAIN)); 139 } 140 super.showPage(page); 141 pageTitle = page.getTitle(); 142 component = (JComponent) indexComponents.get(pageTitle); 143 component.setFont(component.getFont().deriveFont(Font.BOLD)); 144 component = (JComponent) indexNumbers.get(pageTitle); 145 component.setFont(component.getFont().deriveFont(Font.BOLD)); 146 this.stepNofMax.setText(component.getName()); 147 } 148 }