/*
* Copyright 2003-2010 Tufts University Licensed under the
* Educational Community 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.osedu.org/licenses/ECL-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 tufts.vue;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class SyncDialog extends JDialog implements ActionListener, KeyListener
{
private JButton okButton, cancelButton;
private static int newcnt = 1;
private final JRadioButton nodeToSlideButton = new JRadioButton(VueResources.getString("jbutton.nodetoslide.label"));
private final JRadioButton slideToNodeButton = new JRadioButton(VueResources.getString("jbutton.slidetonode.label"));
private final JRadioButton syncAllButton = new JRadioButton(VueResources.getString("jbutton.bothways.label"));
public SyncDialog(Frame parentFrame, Point location)
{
super(parentFrame, VueResources.getString("dialog.syncresource.title"), true);
setSize(390, 200);
this.setFocusable(true);
setLocation(location);
setAlwaysOnTop(true);
setUpUI();
}
private void setUpUI()
{
okButton = new JButton(VueResources.getString("button.sync.lable"));
cancelButton = new JButton(VueResources.getString("button.cancel.lable"));
okButton.addActionListener(this);
okButton.addKeyListener(this);
cancelButton.addActionListener(this);
cancelButton.addKeyListener(this);
JPanel buttons = new JPanel();
buttons.setLayout(new FlowLayout(FlowLayout.RIGHT));
buttons.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 40));
buttons.add(cancelButton);
buttons.add(okButton);
Container dialogContentPane = getContentPane();
dialogContentPane.setLayout(new BorderLayout());
JLabel label = new JLabel(VueResources.getString("syncresource.label"));
ButtonGroup group = new ButtonGroup();
group.add(nodeToSlideButton);
group.add(slideToNodeButton);
group.add(syncAllButton);
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints gbConstraints = new GridBagConstraints();
gbConstraints.insets=new Insets(0,0,10,0);
panel.add(label,gbConstraints);
gbConstraints.insets=new Insets(0,0,0,0);
gbConstraints.gridy=1;
gbConstraints.anchor=GridBagConstraints.WEST;
panel.add(nodeToSlideButton,gbConstraints);
gbConstraints.gridy=2;
panel.add(slideToNodeButton,gbConstraints);
gbConstraints.gridy=3;
panel.add(syncAllButton,gbConstraints);
gbConstraints.gridy=4;
group.setSelected(syncAllButton.getModel(), true);
dialogContentPane.add(panel,BorderLayout.CENTER);
dialogContentPane.add(buttons, BorderLayout.SOUTH);
}
public void actionPerformed(java.awt.event.ActionEvent e)
{
if (e.getSource() == okButton) {
if (!fireAction())
return;
dispose();
} else if (e.getSource() == cancelButton) {
dispose();
}
}
private boolean fireAction() {
final LWPathway.Entry entry = VUE.getActiveEntry();
if (entry == null || entry.isMapView()) {
tufts.Util.printStackTrace(this + ": no entry or not allowed to sync virtual slides; action should have been disabled; entry=" + entry);
return false;
}
// must call action fire method in order for undo code to be invoked:
if (nodeToSlideButton.isSelected())
Actions.SyncToSlide.fire(this);
else if (slideToNodeButton.isSelected())
Actions.SyncToNode.fire(this);
else if (syncAllButton.isSelected())
Actions.SyncAll.fire(this);
else
return false;
return true;
}
//key events for the dialog box
public void keyPressed(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e)
{
if (e.getKeyChar()== KeyEvent.VK_ENTER)
{
if (okButton.isFocusOwner())
{
if (!fireAction())
return;
dispose();
} else if (cancelButton.isFocusOwner()) {
//else if the cancel button has the focus, just aborts it
dispose();
}
}
}
public String toString()
{
return "PathwayDialog[]";
}
}