blob: eb29cc4e26c93d10fe9b4fadd8c0c12e550dfde5 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package org.openoffice.setup;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.event.WindowAdapter;
import java.io.File;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.border.EmptyBorder;
public class SetupFrame extends WindowAdapter {
String StringPrevious;
String StringNext;
String StringCancel;
String StringFinish;
String StringHelp;
String StringAppTitle;
Icon IconStarOffice;
public static final String ACTION_NEXT = "ActionNext";
public static final String ACTION_PREVIOUS = "ActionPrevious";
public static final String ACTION_CANCEL = "ActionCancel";
public static final String ACTION_HELP = "ActionHelp";
public static final String ACTION_DETAILS = "ActionDetails";
public static final String ACTION_STOP = "ActionStop";
public static final int CODE_OK = 0;
public static final int CODE_CANCEL = 1;
public static final int CODE_ERROR = 2;
public static final int BUTTON_NEXT = 1;
public static final int BUTTON_PREVIOUS = 2;
public static final int BUTTON_CANCEL = 3;
public static final int BUTTON_HELP = 4;
private JButton mNextButton;
private JButton mPreviousButton;
private JButton mCancelButton;
private JButton mHelpButton;
private JDialog mDialog;
private JPanel mCardPanel;
private CardLayout mCardLayout;
private SetupActionListener mActionListener;
private DeckOfPanels mDeck;
public SetupFrame() {
StringPrevious = ResourceManager.getString("String_Previous");
StringNext = ResourceManager.getString("String_Next");
StringCancel = ResourceManager.getString("String_Cancel");
StringFinish = ResourceManager.getString("String_Finish");
StringHelp = ResourceManager.getString("String_Help");
InstallData data = InstallData.getInstance();
if ( data.isInstallationMode() ) {
StringAppTitle = ResourceManager.getString("String_ApplicationTitle");
} else {
StringAppTitle = ResourceManager.getString("String_ApplicationTitleUninstallation");
}
// The setup icon has to be flexible for customization, not included into the jar file
File iconFile = data.getInfoRoot("images");
iconFile = new File(iconFile, "Setup.gif");
IconStarOffice = ResourceManager.getIconFromPath(iconFile);
mActionListener = new SetupActionListener(this);
mDeck = new DeckOfPanels();
mDialog = new JDialog();
mDialog.setTitle(StringAppTitle);
initFrame();
}
public void addPanel(PanelController panel, String name) {
mCardPanel.add(panel.getPanel(), name);
panel.setSetupFrame(this);
mDeck.addPanel(panel, name);
}
public PanelController getCurrentPanel() {
return mDeck.getCurrentPanel();
}
public void setCurrentPanel(String name, boolean ignoreRepeat, boolean isNext) {
if (name == null)
close(CODE_ERROR);
PanelController panel = mDeck.getCurrentPanel();
boolean repeatDialog = false;
if (panel != null) {
repeatDialog = panel.afterShow(isNext);
if ( isNext ) {
name = panel.getNext(); // afterShow() could have changed the "next" dialog
}
if ( ignoreRepeat ) {
repeatDialog = false;
}
}
if ( repeatDialog ) {
name = panel.getName();
}
panel = mDeck.setCurrentPanel(name);
if (panel != null)
{
setButtonsForPanel(panel);
panel.beforeShow();
mCardLayout.show(mCardPanel, name);
panel.duringShow();
}
}
void setButtonsForPanel(PanelController panel) {
setButtonText(StringCancel, BUTTON_CANCEL);
setButtonText(StringHelp, BUTTON_HELP);
setButtonText(StringPrevious, BUTTON_PREVIOUS);
// setButtonEnabled((panel.getPrevious() != null), BUTTON_PREVIOUS);
// setButtonEnabled((panel.getNext() != null), BUTTON_CANCEL);
if (panel.getNext() == null) {
setButtonText(StringFinish, BUTTON_NEXT);
} else {
setButtonText(StringNext, BUTTON_NEXT);
}
}
public void setButtonText(String text, int button) {
switch (button) {
case BUTTON_NEXT: mNextButton.setText(text); break;
case BUTTON_PREVIOUS: mPreviousButton.setText(text); break;
case BUTTON_CANCEL: mCancelButton.setText(text); break;
case BUTTON_HELP: mHelpButton.setText(text); break;
}
}
public void setButtonSelected(int button) {
switch (button) {
case BUTTON_NEXT: mNextButton.grabFocus(); break;
case BUTTON_PREVIOUS: mPreviousButton.grabFocus(); break;
case BUTTON_CANCEL: mCancelButton.grabFocus(); break;
case BUTTON_HELP: mHelpButton.grabFocus(); break;
}
}
public void setButtonEnabled(boolean enabled, int button) {
switch (button) {
case BUTTON_NEXT: mNextButton.setEnabled(enabled); break;
case BUTTON_PREVIOUS: mPreviousButton.setEnabled(enabled); break;
case BUTTON_CANCEL: mCancelButton.setEnabled(enabled); break;
case BUTTON_HELP: mHelpButton.setEnabled(enabled); break;
}
}
public void removeButtonIcon(int button) {
switch (button) {
case BUTTON_NEXT: mNextButton.setIcon(null); break;
case BUTTON_PREVIOUS: mPreviousButton.setIcon(null); break;
case BUTTON_CANCEL: mCancelButton.setIcon(null); break;
case BUTTON_HELP: mHelpButton.setIcon(null); break;
}
}
public SetupActionListener getSetupActionListener() {
return mActionListener;
}
void close(int code) {
mDialog.dispose();
}
public JDialog getDialog() {
return mDialog;
}
public int showFrame() {
mDialog.pack();
mDialog.setLocationRelativeTo(null);
mDialog.setModal(true);
mDialog.setResizable(false);
// mDialog.setMinimumSize(new Dimension(679, 459));
mDialog.setVisible(true);
// System.err.println("Width: " + mDialog.getWidth() + ", Height: " + mDialog.getHeight());
return 0;
}
private void initFrame() {
mDialog.getContentPane().setLayout(new BorderLayout());
mCardLayout = new CardLayout();
mCardPanel = new JPanel();
mCardPanel.setBorder(new EmptyBorder(new Insets(5, 10, 5, 10)));
mCardPanel.setLayout(mCardLayout);
mPreviousButton = new JButton();
mNextButton = new JButton();
mCancelButton = new JButton();
mHelpButton = new JButton();
mPreviousButton.setHorizontalTextPosition(JButton.RIGHT);
mNextButton.setHorizontalTextPosition(JButton.LEFT);
mPreviousButton.setIcon(ResourceManager.getIcon("Icon_Previous"));
mNextButton.setIcon(ResourceManager.getIcon("Icon_Next"));
mPreviousButton.setActionCommand(ACTION_PREVIOUS);
mNextButton.setActionCommand(ACTION_NEXT);
mCancelButton.setActionCommand(ACTION_CANCEL);
mHelpButton.setActionCommand(ACTION_HELP);
mPreviousButton.addActionListener(mActionListener);
mNextButton.addActionListener(mActionListener);
mCancelButton.addActionListener(mActionListener);
mHelpButton.addActionListener(mActionListener);
InstallData data = InstallData.getInstance();
if (data.useRtl()) {
mPreviousButton.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
mNextButton.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
mCancelButton.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
mHelpButton.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
}
Box ButtonBox = new Box(BoxLayout.X_AXIS);
ButtonBox.setBorder(new EmptyBorder(new Insets(5, 10, 5, 10)));
ButtonBox.add(mPreviousButton);
ButtonBox.add(Box.createHorizontalStrut(10));
ButtonBox.add(mNextButton);
ButtonBox.add(Box.createHorizontalStrut(30));
ButtonBox.add(mCancelButton);
ButtonBox.add(Box.createHorizontalStrut(10));
ButtonBox.add(mHelpButton);
if (data.useRtl()) {
ButtonBox.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
}
JPanel ButtonPanel = new JPanel();
JSeparator Separator = new JSeparator();
ButtonPanel.setLayout(new BorderLayout());
ButtonPanel.setPreferredSize(new Dimension(612, 44));
ButtonPanel.add(Separator, BorderLayout.NORTH);
ButtonPanel.add(ButtonBox, java.awt.BorderLayout.EAST);
JPanel IconPanel = new JPanel();
JLabel Icon = new JLabel();
Icon.setIcon(IconStarOffice);
// IconPanel.setPreferredSize(new Dimension(142, 372));
// IconPanel.setBorder(new EmptyBorder(new Insets(10, 10, 10, 10)));
IconPanel.setLayout(new BorderLayout());
IconPanel.add(Icon);
mDialog.getContentPane().add(ButtonPanel, java.awt.BorderLayout.SOUTH);
mDialog.getContentPane().add(mCardPanel, java.awt.BorderLayout.CENTER);
mDialog.getContentPane().add(IconPanel, java.awt.BorderLayout.WEST);
}
}