From 8849a5f9cdea4c5cabc2216b38f35274375b4c05 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Fri, 8 Feb 2013 15:17:48 +0100 Subject: Added bouncy bar to the status pane to make people feel better when the system is busy. --- src/main/java/com/c2kernel/gui/EntityDetails.java | 1 + src/main/java/com/c2kernel/gui/EntityFinder.java | 15 +++-- .../java/com/c2kernel/gui/EntityTabManager.java | 7 +-- src/main/java/com/c2kernel/gui/MainFrame.java | 24 ++------ .../java/com/c2kernel/gui/ProgressReporter.java | 72 ++++++++++++++++++++++ src/main/java/com/c2kernel/gui/TreeBrowser.java | 3 - .../gui/collection/SelectedMemberPanel.java | 3 - .../com/c2kernel/gui/tabs/AgentPropertiesPane.java | 51 --------------- .../java/com/c2kernel/gui/tabs/HistoryPane.java | 8 ++- .../java/com/c2kernel/gui/tabs/PropertiesPane.java | 4 +- .../gui/tabs/execution/DefaultExecutor.java | 6 +- src/main/java/com/c2kernel/gui/tree/NodeAgent.java | 2 +- 12 files changed, 106 insertions(+), 90 deletions(-) create mode 100644 src/main/java/com/c2kernel/gui/ProgressReporter.java delete mode 100644 src/main/java/com/c2kernel/gui/tabs/AgentPropertiesPane.java (limited to 'src/main/java/com/c2kernel') diff --git a/src/main/java/com/c2kernel/gui/EntityDetails.java b/src/main/java/com/c2kernel/gui/EntityDetails.java index 93a0f1f..5ea1946 100644 --- a/src/main/java/com/c2kernel/gui/EntityDetails.java +++ b/src/main/java/com/c2kernel/gui/EntityDetails.java @@ -93,6 +93,7 @@ public class EntityDetails extends JPanel implements ChangeListener, Runnable { myTabbedPane.setVisible(true); myTabbedPane.addChangeListener(this); validate(); + MainFrame.progress.stopBouncing("Done"); } diff --git a/src/main/java/com/c2kernel/gui/EntityFinder.java b/src/main/java/com/c2kernel/gui/EntityFinder.java index 71903eb..7a16f26 100644 --- a/src/main/java/com/c2kernel/gui/EntityFinder.java +++ b/src/main/java/com/c2kernel/gui/EntityFinder.java @@ -110,7 +110,6 @@ public class EntityFinder extends Box implements Runnable { findNextButton.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - MainFrame.status.setText("Navigating to next match"); nextMatch(); } }); @@ -152,19 +151,25 @@ public class EntityFinder extends Box implements Runnable { @Override public void run() { Thread.currentThread().setName("Entity Search"); - MainFrame.status.setText("Searching. Please Wait"); + MainFrame.progress.startBouncing("Searching. Please Wait"); findButton.setEnabled(false); findNextButton.setEnabled(false); String searchTerm = inputField.getText(); if (searchTerm.length() == 0) return; // don't allow null searches findNextButton.setEnabled(false); - matches = lookup.search(rootNode,inputField.getText()); + String term = inputField.getText(); +// The following block does property searching when the field contains a colon, but that returns EntityPaths, which the tree can't handle +// int colonPos = term.indexOf(':'); +// if (colonPos > 0) +// matches = lookup.search(rootNode,term.substring(0, colonPos), term.substring(colonPos+1)); +// else + matches = lookup.search(rootNode,term); if (!matches.hasMoreElements()) { - MainFrame.status.setText("No results"); + MainFrame.progress.stopBouncing("No results"); currentConsumer.push(searchTerm); // for subscribers who don't care if it exists findButton.setEnabled(true); return; } - MainFrame.status.setText("Selecting first match."); + MainFrame.progress.stopBouncing("Selecting first match."); nextMatch(); } diff --git a/src/main/java/com/c2kernel/gui/EntityTabManager.java b/src/main/java/com/c2kernel/gui/EntityTabManager.java index ef36cbb..02d97fe 100644 --- a/src/main/java/com/c2kernel/gui/EntityTabManager.java +++ b/src/main/java/com/c2kernel/gui/EntityTabManager.java @@ -30,8 +30,7 @@ public class EntityTabManager extends JPanel super(); setLayout(new GridLayout(1,1)); setBorder(BorderFactory.createLoweredBevelBorder()); - //UIDefaults ui = UIManager.getDefaults(); - //ui.put("TabbedPane.selected",Color.red); + add(tabbedPane); } @@ -39,7 +38,8 @@ public class EntityTabManager extends JPanel EntityDetails requestedDetails; if (!openItems.containsKey(new Integer(thisEntity.getSysKey()))) { - Logger.msg(1, "ItemWindowManager.add() - Window for syskey "+thisEntity.getSysKey()+" not found. Opening new one."); + MainFrame.progress.startBouncing("Opening "+thisEntity.getName()+". Please wait."); + Logger.msg(1, "ItemWindowManager.add() - Window for syskey "+thisEntity.getSysKey()+" not found. Opening new one."); requestedDetails = new EntityDetails(thisEntity); Thread itemLoader = new Thread(requestedDetails); itemLoader.start(); @@ -49,7 +49,6 @@ public class EntityTabManager extends JPanel // get currently selected item to set location tabbedPane.addTab(thisEntity.getName(), thisEntity.getIcon(), requestedDetails, Integer.toString(thisEntity.getSysKey())); - } else { //opened window but different nodeitem requestedDetails = openItems.get(new Integer(thisEntity.getSysKey())); diff --git a/src/main/java/com/c2kernel/gui/MainFrame.java b/src/main/java/com/c2kernel/gui/MainFrame.java index 577db7b..1e9123f 100644 --- a/src/main/java/com/c2kernel/gui/MainFrame.java +++ b/src/main/java/com/c2kernel/gui/MainFrame.java @@ -1,8 +1,5 @@ package com.c2kernel.gui; -import java.awt.BorderLayout; -import java.awt.Color; import java.awt.Dimension; -import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Point; @@ -14,13 +11,10 @@ import java.net.URL; import java.util.Properties; import java.util.StringTokenizer; -import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JComboBox; import javax.swing.JFileChooser; -import javax.swing.JLabel; import javax.swing.JOptionPane; -import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.SwingUtilities; import javax.swing.UIManager; @@ -48,7 +42,8 @@ public class MainFrame extends javax.swing.JFrame { protected MenuBuilder menuBuilder; protected org.omg.CORBA.ORB orb; public static Properties prefs = new Properties(); - public static JLabel status = new JLabel(); + + public static ProgressReporter progress; public String logoURL; public static AgentProxy userAgent; protected JSplitPane splitPane; @@ -179,21 +174,14 @@ public class MainFrame extends javax.swing.JFrame { c.fill = GridBagConstraints.BOTH; gridbag.setConstraints(getSplitPanel(), c); getContentPane().add(getSplitPanel()); - // setup status bar - status.setText("Cristal 2"); - status.setFont( - new Font("SansSerif", Font.PLAIN, status.getFont().getSize())); - JPanel statusPanel = new JPanel(); - statusPanel.setLayout(new BorderLayout()); - statusPanel.setBorder(BorderFactory.createLoweredBevelBorder()); - status.setForeground(Color.black); - statusPanel.add(status); + progress = new ProgressReporter(); c.gridy++; c.weighty = 0.0; - gridbag.setConstraints(statusPanel, c); - getContentPane().add(statusPanel); + gridbag.setConstraints(progress, c); + getContentPane().add(progress); pack(); + String paneSize = getPref("WindowSize", null); if (paneSize != null) { StringTokenizer tok = new StringTokenizer(paneSize, ","); diff --git a/src/main/java/com/c2kernel/gui/ProgressReporter.java b/src/main/java/com/c2kernel/gui/ProgressReporter.java new file mode 100644 index 0000000..9cfb1d7 --- /dev/null +++ b/src/main/java/com/c2kernel/gui/ProgressReporter.java @@ -0,0 +1,72 @@ +/* + * ProgressReporter.java + * + * Copyright (c) 2013, The CRISTAL Consortium. All rights reserved. + * + * CRISTAL kernel is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see: + * http://www.gnu.org/licenses/ + */ + +package com.c2kernel.gui; + +import java.awt.Color; +import java.awt.Dimension; + +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JLabel; +import javax.swing.JProgressBar; + +public class ProgressReporter extends Box { + + JLabel status = new JLabel(); + JProgressBar progress = new JProgressBar(); + + /** + * + */ + public ProgressReporter() { + super(BoxLayout.X_AXIS); + status.setText("Cristal"); + //status.setBorder(BorderFactory.createLoweredBevelBorder()); + status.setForeground(Color.black); + status.setPreferredSize(new Dimension(400, progress.getPreferredSize().height)); + //progress.setBorder(BorderFactory.createLoweredBevelBorder()); + add(status); + //add(Box.createHorizontalGlue()); + progress.setPreferredSize(new Dimension(200, progress.getPreferredSize().height)); + add(progress); + } + + /** + * @param status + */ + public void startBouncing(String statusString) { + status.setText(statusString); + progress.setIndeterminate(true); + } + + /** + * @param status + */ + public void stopBouncing(String statusString) { + status.setText(statusString); + progress.setIndeterminate(false); + } + + public void setProgress(String statusString, int percent) { + progress.setIndeterminate(false); + progress.setValue(percent); + } +} diff --git a/src/main/java/com/c2kernel/gui/TreeBrowser.java b/src/main/java/com/c2kernel/gui/TreeBrowser.java index b812686..60d6330 100644 --- a/src/main/java/com/c2kernel/gui/TreeBrowser.java +++ b/src/main/java/com/c2kernel/gui/TreeBrowser.java @@ -121,9 +121,7 @@ public class TreeBrowser extends JPanel implements DomainKeyConsumer tree.makeVisible(targetNode); // open it if (currentNode instanceof NodeEntity) { - MainFrame.status.setText("Opening "+currentNode.getName()); desktop.add((NodeEntity)currentNode); - MainFrame.status.setText("Done"); } } @@ -205,7 +203,6 @@ public class TreeBrowser extends JPanel implements DomainKeyConsumer if (source instanceof NodeEntity) { NodeEntity thisNode = (NodeEntity)source; desktop.add(thisNode); - MainFrame.status.setText("Opened "+thisNode.getName()); } if (source instanceof DynamicTreeBuilder) { DynamicTreeBuilder thisLoader = (DynamicTreeBuilder)source; diff --git a/src/main/java/com/c2kernel/gui/collection/SelectedMemberPanel.java b/src/main/java/com/c2kernel/gui/collection/SelectedMemberPanel.java index 489f316..9e7d93c 100644 --- a/src/main/java/com/c2kernel/gui/collection/SelectedMemberPanel.java +++ b/src/main/java/com/c2kernel/gui/collection/SelectedMemberPanel.java @@ -75,12 +75,10 @@ public class SelectedMemberPanel extends SelectedVertexPanel implements DomainKe @Override public void actionPerformed(ActionEvent ae) { if (changeButton.getModel().isSelected()) { - MainFrame.status.setText(Language.translate("Please scan or type your barcode to assign in the top field")); MainFrame.itemFinder.setConsumer(me, "Assign"); findButton.setEnabled(false); } else { - MainFrame.status.setText(""); MainFrame.itemFinder.clearConsumer(me); if (selectedMember.getEntityKey() > -1) findButton.setEnabled(true); } @@ -143,7 +141,6 @@ public class SelectedMemberPanel extends SelectedVertexPanel implements DomainKe */ @Override public void push(DomainPath key) { - MainFrame.status.setText("Assigning entity "+key.getSysKey()+" to slot "+selectedMember.getID()); try { selectedMember.assignEntity(key.getSysKey()); select(selectedMember); diff --git a/src/main/java/com/c2kernel/gui/tabs/AgentPropertiesPane.java b/src/main/java/com/c2kernel/gui/tabs/AgentPropertiesPane.java deleted file mode 100644 index f0ae533..0000000 --- a/src/main/java/com/c2kernel/gui/tabs/AgentPropertiesPane.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.c2kernel.gui.tabs; - -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.JTextField; - -/************************************************************************** - * - * $Revision: 1.2 $ - * $Date: 2005/07/05 11:34:17 $ - * - * Copyright (C) 2003 CERN - European Organization for Nuclear Research - * All rights reserved. - **************************************************************************/ - - -public class AgentPropertiesPane extends EntityTabPane { - - JTable roleTable; - JTextField newPassword; - JTextField newPasswordConfirm; - JButton changePassword; - - public AgentPropertiesPane() { - super("Properties", "Agent Details"); - initPanel(); - getGridBagConstraints(); - c.gridy++; - JLabel roleHeader = new JLabel("Roles held"); - roleHeader.setFont(titleFont); - roleHeader.setForeground(headingColor); - gridbag.setConstraints(roleHeader, c); - add(roleHeader); - roleTable = new JTable(1,1); - JScrollPane roleScroll = new JScrollPane(roleTable); - c.gridy++; - gridbag.setConstraints(roleScroll, c); - add(roleScroll); - - //JLabel passHeader = new JLabel("Change password"); - //TODO: Finish agent admin page - } - - @Override - public void run() { - - } - -} diff --git a/src/main/java/com/c2kernel/gui/tabs/HistoryPane.java b/src/main/java/com/c2kernel/gui/tabs/HistoryPane.java index 5d01933..fe5c1a4 100644 --- a/src/main/java/com/c2kernel/gui/tabs/HistoryPane.java +++ b/src/main/java/com/c2kernel/gui/tabs/HistoryPane.java @@ -25,6 +25,7 @@ import com.c2kernel.entity.proxy.EntityProxyObserver; import com.c2kernel.entity.proxy.MemberSubscription; import com.c2kernel.events.Event; import com.c2kernel.events.History; +import com.c2kernel.gui.MainFrame; import com.c2kernel.lifecycle.instance.stateMachine.Transitions; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.utils.Language; @@ -96,6 +97,7 @@ public class HistoryPane extends EntityTabPane implements ActionListener, Entity @Override public void run() { Thread.currentThread().setName("History Pane Builder"); + MainFrame.progress.startBouncing("Loading history"); try { history = (History)sourceEntity.getEntity().getObject(ClusterStorage.HISTORY); sourceEntity.getEntity().subscribe(new MemberSubscription(this, ClusterStorage.HISTORY, true)); @@ -265,8 +267,10 @@ public class HistoryPane extends EntityTabPane implements ActionListener, Entity @Override public void control(String control, String msg) { - // TODO Auto-generated method stub - + if (control.equals(MemberSubscription.END)) + MainFrame.progress.stopBouncing("History loading complete."); + else + MainFrame.progress.stopBouncing("History: "+msg); } } diff --git a/src/main/java/com/c2kernel/gui/tabs/PropertiesPane.java b/src/main/java/com/c2kernel/gui/tabs/PropertiesPane.java index 9e5a9b2..528b18b 100644 --- a/src/main/java/com/c2kernel/gui/tabs/PropertiesPane.java +++ b/src/main/java/com/c2kernel/gui/tabs/PropertiesPane.java @@ -43,6 +43,7 @@ import com.c2kernel.utils.Language; public class PropertiesPane extends EntityTabPane implements EntityProxyObserver, ActionListener { Box propertyBox; + JButton eraseButton; boolean subbed = false; HashMap loadedProps = new HashMap(); JLabel domTitle; @@ -82,7 +83,7 @@ public class PropertiesPane extends EntityTabPane implements EntityProxyObserver if ("true".equals(Gateway.getProperty("EnableItemErase"))) { c.gridy++; c.fill = GridBagConstraints.NONE; - JButton eraseButton = new JButton(Language.translate("Erase!")); + eraseButton = new JButton(Language.translate("Erase!")); eraseButton.addActionListener(this); eraseButton.setActionCommand("Erase Item"); gridbag.setConstraints(eraseButton, c); @@ -104,6 +105,7 @@ public class PropertiesPane extends EntityTabPane implements EntityProxyObserver if (sourceEntity instanceof NodeAgent) { remove(domAdmin); remove(domTitle); + eraseButton.setEnabled(false); } else if (domAdmin != null) domAdmin.setEntity((ItemProxy)sourceEntity.getEntity()); diff --git a/src/main/java/com/c2kernel/gui/tabs/execution/DefaultExecutor.java b/src/main/java/com/c2kernel/gui/tabs/execution/DefaultExecutor.java index 378cc2e..848d1d3 100644 --- a/src/main/java/com/c2kernel/gui/tabs/execution/DefaultExecutor.java +++ b/src/main/java/com/c2kernel/gui/tabs/execution/DefaultExecutor.java @@ -23,9 +23,11 @@ public class DefaultExecutor implements Executor { @Override public void execute(Job job, JLabel status) throws Exception { - status.setText(Language.translate("Requesting, please wait.")); + status.setText(Language.translate("Submitting...")); + MainFrame.progress.startBouncing("Requesting, please wait."); MainFrame.userAgent.execute(job); - status.setText(Language.translate("Execution complete. Waiting for joblist update.")); + MainFrame.progress.stopBouncing("Execution complete."); + status.setText("Waiting for joblist update."); } @Override diff --git a/src/main/java/com/c2kernel/gui/tree/NodeAgent.java b/src/main/java/com/c2kernel/gui/tree/NodeAgent.java index 45ffb07..cda6579 100644 --- a/src/main/java/com/c2kernel/gui/tree/NodeAgent.java +++ b/src/main/java/com/c2kernel/gui/tree/NodeAgent.java @@ -26,7 +26,7 @@ public class NodeAgent extends NodeEntity { public ArrayList getTabs() { ArrayList requiredTabs = super.getTabs(); - requiredTabs.add("AgentProperties"); + requiredTabs.add("Properties"); requiredTabs.add("JobList"); return requiredTabs; } -- cgit v1.2.3