package org.pasif.gui;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.beans.PropertyVetoException;
import javax.swing.ActionMap;
import javax.swing.Icon;
import javax.swing.JDesktopPane;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.SwingConstants;
import javax.swing.Timer;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeModel;
import org.jdesktop.application.Action;
import org.jdesktop.application.Application;
import org.jdesktop.application.ResourceMap;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import org.jdesktop.application.TaskMonitor;
import org.jdesktop.layout.GroupLayout;
import org.jdesktop.layout.LayoutStyle;
public class MainView extends FrameView {
public MainView(SingleFrameApplication app) {
super(app);
initComponents();
// status bar initialization - message timeout, idle icon and busy animation, etc
ResourceMap resourceMap = getResourceMap();
int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout");
messageTimer = new Timer(messageTimeout, new ActionListener() {
public void actionPerformed(ActionEvent e) {
statusMessageLabel.setText("");
}
});
messageTimer.setRepeats(false);
int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate");
for (int i = 0; i < busyIcons.length; i++) {
busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]");
}
busyIconTimer = new Timer(busyAnimationRate, new ActionListener() {
public void actionPerformed(ActionEvent e) {
busyIconIndex = (busyIconIndex + 1) % busyIcons.length;
statusAnimationLabel.setIcon(busyIcons[busyIconIndex]);
}
});
idleIcon = resourceMap.getIcon("StatusBar.idleIcon");
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);
// connecting action tasks to status bar via TaskMonitor
TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
String propertyName = evt.getPropertyName();
if ("started".equals(propertyName)) {
if (!busyIconTimer.isRunning()) {
statusAnimationLabel.setIcon(busyIcons[0]);
busyIconIndex = 0;
busyIconTimer.start();
}
progressBar.setVisible(true);
progressBar.setIndeterminate(true);
} else if ("done".equals(propertyName)) {
busyIconTimer.stop();
statusAnimationLabel.setIcon(idleIcon);
progressBar.setVisible(false);
progressBar.setValue(0);
} else if ("message".equals(propertyName)) {
String text = (String) (evt.getNewValue());
statusMessageLabel.setText((text == null) ? "" : text);
messageTimer.restart();
} else if ("progress".equals(propertyName)) {
int value = (Integer) (evt.getNewValue());
progressBar.setVisible(true);
progressBar.setIndeterminate(false);
progressBar.setValue(value);
}
}
});
DefaultMutableTreeNode root = new DefaultMutableTreeNode("项目");
TreeModel tree = new DefaultTreeModel(root);
jTree1.setModel(tree);
}
@Action
public void showConfig() {
if (config == null || config.isClosed()) {
config = new BaseConfigurationFrame();
jDesktopPane1.add(config);
}
config.setVisible(true);
config.setLocation((int) (jDesktopPane1.getSize().getWidth() - config.getSize().getWidth()) / 2,
(int) (jDesktopPane1.getSize().getHeight() - config.getSize().getHeight()) / 2);
config.moveToFront();
try {
config.setSelected(true);
} catch (PropertyVetoException ex) {
ex.printStackTrace();
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
mainPanel = new JPanel();
jDesktopPane1 = new JDesktopPane();
jPanel1 = new JPanel();
jSplitPane1 = new JSplitPane();
jTabbedPane1 = new JTabbedPane();
jPanel2 = new JPanel();
jPanel4 = new JPanel();
jTabbedPane2 = new JTabbedPane();
jScrollPane1 = new JScrollPane();
jTree1 = new JTree();
jToolBar1 = new JToolBar();
jMenuBar1 = new JMenuBar();
jMenu5 = new JMenu();
jMenuItem8 = new JMenuItem();
jMenuItem9 = new JMenuItem();
jMenuItem11 = new JMenuItem();
jMenu4 = new JMenu();
jMenuItem7 = new JMenuItem();
jMenuItem10 = new JMenuItem();
jMenu1 = new JMenu();
jMenuItem3 = new JMenuItem();
jMenuItem4 = new JMenuItem();
jMenuItem2 = new JMenuItem();
jMenu2 = new JMenu();
jMenuItem1 = new JMenuItem();
jMenu3 = new JMenu();
jMenuItem5 = new JMenuItem();
jMenuItem6 = new JMenuItem();
statusPanel = new JPanel();
JSeparator statusPanelSeparator = new JSeparator();
statusMessageLabel = new JLabel();
statusAnimationLabel = new JLabel();
progressBar = new JProgressBar();
mainPanel.setMaximumSize(new Dimension(32764, 32764));
mainPanel.setMinimumSize(new Dimension(640, 480));
mainPanel.setName("mainPanel"); // NOI18N
mainPanel.setPreferredSize(new Dimension(640, 480));
jDesktopPane1.setName("jDesktopPane1"); // NOI18N
jDesktopPane1.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent evt) {
changeSize(evt);
}
});
jPanel1.setName("jPanel1"); // NOI18N
jSplitPane1.setName("jSplitPane1"); // NOI18N
jTabbedPane1.setName("jTabbedPane1"); // NOI18N
jPanel2.setName("jPanel2"); // NOI18N
GroupLayout jPanel2Layout = new GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(GroupLayout.LEADING)
.add(0, 748, Short.MAX_VALUE)
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(GroupLayout.LEADING)
.add(0, 461, Short.MAX_VALUE)
);
ResourceMap resourceMap = Application.getInstance(Client.class).getContext().getResourceMap(MainView.class);
jTabbedPane1.addTab(resourceMap.getString("jPanel2.TabConstraints.tabTitle"), jPanel2); // NOI18N
jPanel4.setName("jPanel4"); // NOI18N
GroupLayout jPanel4Layout = new GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(GroupLayout.LEADING)
.add(0, 748, Short.MAX_VALUE)
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(GroupLayout.LEADING)
.add(0, 461, Short.MAX_VALUE)
);
jTabbedPane1.addTab(resourceMap.getString("jPanel4.TabConstraints.tabTitle"), jPanel4); // NOI18N
jSplitPane1.setRightComponent(jTabbedPane1);
jTabbedPane2.setName("jTabbedPane2"); // NOI18N
jScrollPane1.setName("jScrollPane1"); // NOI18N
jTree1.setName("jTree1"); // NOI18N
jScrollPane1.setViewportView(jTree1);
jTabbedPane2.addTab(resourceMap.getString("jScrollPane1.TabConstraints.tabTitle"), jScrollPane1); // NOI18N
jSplitPane1.setLeftComponent(jTabbedPane2);
jToolBar1.setRollover(true);
jToolBar1.setName("jToolBar1"); // NOI18N
GroupLayout jPanel1Layout = new GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(GroupLayout.LEADING)
.add(jToolBar1, GroupLayout.DEFAULT_SIZE, 800, Short.MAX_VALUE)
.add(GroupLayout.TRAILING, jSplitPane1, GroupLayout.DEFAULT_SIZE, 800, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(GroupLayout.LEADING)
.add(jPanel1Layout.createSequentialGroup()
.add(jToolBar1, GroupLayout.PREFERRED_SIZE, 25, GroupLayout.PREFERRED_SIZE)
.add(3, 3, 3)
.add(jSplitPane1, GroupLayout.DEFAULT_SIZE, 492, Short.MAX_VALUE))
);
jPanel1.setBounds(0, 0, 800, 520);
jDesktopPane1.add(jPanel1, JLayeredPane.DEFAULT_LAYER);
GroupLayout mainPanelLayout = new GroupLayout(mainPanel);
mainPanel.setLayout(mainPanelLayout);
mainPanelLayout.setHorizontalGroup(
mainPanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(jDesktopPane1, GroupLayout.DEFAULT_SIZE, 795, Short.MAX_VALUE)
);
mainPanelLayout.setVerticalGroup(
mainPanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(jDesktopPane1, GroupLayout.DEFAULT_SIZE, 520, Short.MAX_VALUE)
);
mainPanel.getAccessibleContext().setAccessibleName(resourceMap.getString("mainPanel.AccessibleContext.accessibleName")); // NOI18N
jMenuBar1.setName("jMenuBar1"); // NOI18N
jMenu5.setText(resourceMap.getString("jMenu5.text")); // NOI18N
jMenu5.setName("jMenu5"); // NOI18N
jMenuItem8.setText(resourceMap.getString("jMenuItem8.text")); // NOI18N
jMenuItem8.setName("jMenuItem8"); // NOI18N
jMenu5.add(jMenuItem8);
jMenuItem9.setText(resourceMap.getString("jMenuItem9.text")); // NOI18N
jMenuItem9.setName("jMenuItem9"); // NOI18N
jMenu5.add(jMenuItem9);
jMenuItem11.setText(resourceMap.getString("jMenuItem11.text")); // NOI18N
jMenuItem11.setName("jMenuItem11"); // NOI18N
jMenu5.add(jMenuItem11);
jMenuBar1.add(jMenu5);
jMenu4.setText(resourceMap.getString("jMenu4.text")); // NOI18N
jMenu4.setName("jMenu4"); // NOI18N
ActionMap actionMap = Application.getInstance(Client.class).getContext().getActionMap(MainView.class, this);
jMenuItem7.setAction(actionMap.get("showConfig")); // NOI18N
jMenuItem7.setText(resourceMap.getString("jMenuItem7.text")); // NOI18N
jMenuItem7.setName("jMenuItem7"); // NOI18N
jMenu4.add(jMenuItem7);
jMenuItem10.setText(resourceMap.getString("jMenuItem10.text")); // NOI18N
jMenuItem10.setName("jMenuItem10"); // NOI18N
jMenu4.add(jMenuItem10);
jMenuBar1.add(jMenu4);
jMenu1.setText(resourceMap.getString("jMenu1.text")); // NOI18N
jMenu1.setName("jMenu1"); // NOI18N
jMenuItem3.setAction(actionMap.get("startQuartz")); // NOI18N
jMenuItem3.setText(resourceMap.getString("jMenuItem3.text")); // NOI18N
jMenuItem3.setName("jMenuItem3"); // NOI18N
jMenu1.add(jMenuItem3);
jMenuItem4.setText(resourceMap.getString("jMenuItem4.text")); // NOI18N
jMenuItem4.setName("jMenuItem4"); // NOI18N
jMenu1.add(jMenuItem4);
jMenuItem2.setText(resourceMap.getString("jMenuItem2.text")); // NOI18N
jMenuItem2.setName("jMenuItem2"); // NOI18N
jMenu1.add(jMenuItem2);
jMenuBar1.add(jMenu1);
jMenu2.setText(resourceMap.getString("jMenu2.text")); // NOI18N
jMenu2.setName("jMenu2"); // NOI18N
jMenuItem1.setText(resourceMap.getString("jMenuItem1.text")); // NOI18N
jMenuItem1.setName("jMenuItem1"); // NOI18N
jMenu2.add(jMenuItem1);
jMenuBar1.add(jMenu2);
jMenu3.setName("jMenu3"); // NOI18N
jMenuItem5.setName("jMenuItem5"); // NOI18N
jMenu3.add(jMenuItem5);
jMenuItem6.setName("jMenuItem6"); // NOI18N
jMenu3.add(jMenuItem6);
jMenuBar1.add(jMenu3);
statusPanel.setMaximumSize(new Dimension(240, 30));
statusPanel.setName("statusPanel"); // NOI18N
statusPanel.setPreferredSize(new Dimension(240, 30));
statusPanelSeparator.setName("statusPanelSeparator"); // NOI18N
statusMessageLabel.setName("statusMessageLabel"); // NOI18N
statusAnimationLabel.setHorizontalAlignment(SwingConstants.LEFT);
statusAnimationLabel.setName("statusAnimationLabel"); // NOI18N
progressBar.setName("progressBar"); // NOI18N
GroupLayout statusPanelLayout = new GroupLayout(statusPanel);
statusPanel.setLayout(statusPanelLayout);
statusPanelLayout.setHorizontalGroup(
statusPanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(statusPanelSeparator, GroupLayout.DEFAULT_SIZE, 795, Short.MAX_VALUE)
.add(statusPanelLayout.createSequentialGroup()
.addContainerGap()
.add(statusMessageLabel)
.addPreferredGap(LayoutStyle.RELATED, 620, Short.MAX_VALUE)
.add(progressBar, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.RELATED)
.add(statusAnimationLabel)
.addContainerGap())
);
statusPanelLayout.setVerticalGroup(
statusPanelLayout.createParallelGroup(GroupLayout.LEADING)
.add(statusPanelLayout.createSequentialGroup()
.add(statusPanelSeparator, GroupLayout.PREFERRED_SIZE, 2, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(statusPanelLayout.createParallelGroup(GroupLayout.BASELINE)
.add(statusMessageLabel)
.add(statusAnimationLabel)
.add(progressBar, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.add(3, 3, 3))
);
setComponent(mainPanel);
setMenuBar(jMenuBar1);
setStatusBar(statusPanel);
setToolBar(jToolBar1);
}// </editor-fold>//GEN-END:initComponents
private void changeSize(ComponentEvent evt) {//GEN-FIRST:event_changeSize
JDesktopPane j = (JDesktopPane) evt.getSource();
jPanel1.setSize(j.getSize());
jPanel1.updateUI();
jPanel1.validate();
}//GEN-LAST:event_changeSize
// Variables declaration - do not modify//GEN-BEGIN:variables
private JDesktopPane jDesktopPane1;
private JMenu jMenu1;
private JMenu jMenu2;
private JMenu jMenu3;
private JMenu jMenu4;
private JMenu jMenu5;
private JMenuBar jMenuBar1;
private JMenuItem jMenuItem1;
private JMenuItem jMenuItem10;
private JMenuItem jMenuItem11;
private JMenuItem jMenuItem2;
private JMenuItem jMenuItem3;
private JMenuItem jMenuItem4;
private JMenuItem jMenuItem5;
private JMenuItem jMenuItem6;
private JMenuItem jMenuItem7;
private JMenuItem jMenuItem8;
private JMenuItem jMenuItem9;
private JPanel jPanel1;
private JPanel jPanel2;
private JPanel jPanel4;
private JScrollPane jScrollPane1;
private JSplitPane jSplitPane1;
private JTabbedPane jTabbedPane1;
private JTabbedPane jTabbedPane2;
private JToolBar jToolBar1;
private JTree jTree1;
private JPanel mainPanel;
private JProgressBar progressBar;
private JLabel statusAnimationLabel;
private JLabel statusMessageLabel;
private JPanel statusPanel;
// End of variables declaration//GEN-END:variables
private final Timer messageTimer;
private final Timer busyIconTimer;
private final Icon idleIcon;
private final Icon[] busyIcons = new Icon[15];
private int busyIconIndex = 0;
BaseConfigurationFrame config;
}