package hep.aida.ref.plotter.style.registry;
import hep.aida.ref.plotter.Style;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
/**
* This class is a stand-alone Style Store Editor
*
*/
public class StyleStoreEditor extends JSplitPane {
private JTabbedPane tabbedPanel;
private JTree tree;
private JPopupMenu entryMenu;
private JPopupMenu storeMenu;
private CreateStyleStorePanel createPanel;
private OpenStyleStorePanel openPanel;
private AddStyleStoreEntryPanel addStyleStoreEntryPanel;
private WriteStyleStorePanel writeStyleStorePanel;
public StyleStoreEditor() {
super(JSplitPane.HORIZONTAL_SPLIT);
init();
}
private void init() {
ActionListener aL = new ActionListener() {
public void actionPerformed(ActionEvent ev) {
String command = ev.getActionCommand();
if (command == null || command.trim().equals("")) return;
if (command.equals("Move Up")) moveStoreEntryUpAction();
else if (command.equals("Move Down")) moveStoreEntryDownAction();
else if (command.equals("Remove This Entry")) removeStoreEntryAction();
else if (command.equals("Save IPlotterStyle to XML...")) savePlotterStyleAction();
else if (command.equals("Add Store Entry...")) addStoreEntryAction();
else if (command.equals("Save As...")) saveStoreAsAction();
else if (command.equals("Commit Store")) commitStoreAction();
else if (command.equals("Close Store")) closeStoreAction();
}
};
JMenuItem item = null;
entryMenu = new JPopupMenu("Store Entry Menu");
item = new JMenuItem("Edit this Entry");
item.addActionListener(aL);
entryMenu.add(item);
item = new JMenuItem("Move Up");
item.addActionListener(aL);
entryMenu.add(item);
item = new JMenuItem("Move Down");
item.addActionListener(aL);
entryMenu.add(item);
item = new JMenuItem("Remove This Entry");
item.addActionListener(aL);
entryMenu.add(item);
item = new JMenuItem("Save IPlotterStyle to XML...");
item.addActionListener(aL);
entryMenu.add(item);
storeMenu = new JPopupMenu("Store Menu");
item = new JMenuItem("Add Store Entry...");
item.addActionListener(aL);
storeMenu.add(item);
item = new JMenuItem("Save As...");
item.addActionListener(aL);
storeMenu.add(item);
item = new JMenuItem("Commit Store");
item.addActionListener(aL);
storeMenu.add(item);
item = new JMenuItem("Close Store");
item.addActionListener(aL);
storeMenu.add(item);
tabbedPanel = new JTabbedPane();
this.setRightComponent(new JScrollPane(tabbedPanel));
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
DefaultTreeModel treeModel = new DefaultTreeModel(root);
//treeModel.addTreeModelListener(new MyTreeModelListener());
tree = new JTree(treeModel);
tree.setRootVisible(false);
tree.setEditable(false);
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setExpandsSelectedPaths(true);
// Fistern for double-click events on the leaf nodes
MouseListener ml = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) popupAction(e);
else if(e.getClickCount() == 2) doubleClickAction(e);
}
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) popupAction(e);
}
};
tree.addMouseListener(ml);
this.setLeftComponent(new JScrollPane(tree));
this.setDividerLocation(150);
}
private void addMenus(JMenuBar menuBar) {
// FILE Menu
JMenu fileMenu = new JMenu("File");
JMenuItem item = new JMenuItem("Create Style Store...");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
newStoreAction();
}
});
fileMenu.add(item);
item = new JMenuItem("Open Style Store...");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
openStoreAction();
}
});
fileMenu.add(item);
item = new JMenuItem("Save As...");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
saveStoreAsAction();
}
});
item.setEnabled(false);
//fileMenu.add(item);
item = new JMenuItem("Close Store");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
closeStoreAction();
}
});
item.setEnabled(false);
//fileMenu.add(item);
fileMenu.addSeparator();
item = new JMenuItem("Exit");
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
exitAction();
}
});
fileMenu.add(item);
menuBar.add(fileMenu);
}
// Menu item actions
void newStoreAction() {
if (createPanel == null) createPanel = new CreateStyleStorePanel(this);
try {
IStyleStore store = createPanel.createStore();
if (store != null) {
addStoreNode(store);
}
} catch (Exception e) {
e.printStackTrace();
}
}
void openStoreAction() {
if (openPanel == null) openPanel = new OpenStyleStorePanel(this);
else openPanel.updateAction();
try {
IStyleStore store = openPanel.openStore();
if (store != null) addStoreNode(store);
} catch (Exception e) {
e.printStackTrace();
//app.error("Error while openning IStyleStore: "+e.getMessage(), e);
}
}
void addStoreNode(IStyleStore store) {
DefaultMutableTreeNode storeNode = new DefaultMutableTreeNode(store, true);
String[] names = store.getAllStyleNames();
StyleStoreEntry entry = null;
StoreEntryNode node = null;
for (int i=0; i= (storeNode.getChildCount()-1)) return;
DefaultMutableTreeNode entryNode = (DefaultMutableTreeNode) storeNode.getChildAt(index);
storeNode.remove(index);
storeNode.insert(entryNode, index+1);
((DefaultTreeModel) tree.getModel()).nodeStructureChanged(storeNode);
}
void savePlotterStyleAction() {
}
void editStoreEntry() {
StoreEntryNode node = null;
Object obj = tree.getLastSelectedPathComponent();
if (obj instanceof StoreEntryNode) node = (StoreEntryNode) obj;
else return;
showEntryPage(node);
}
void exitAction() {
int n = tabbedPanel.getTabCount();
for (int i=n-1; i>=0; i--) {
Component comp = tabbedPanel.getComponentAt(i);
if (comp instanceof StoreEntryEditorPanel) {
((StoreEntryEditorPanel) comp).close();
}
tabbedPanel.removeTabAt(i);
}
System.exit(0);
}
void doubleClickAction(MouseEvent e) {
int selRow = tree.getRowForLocation(e.getX(), e.getY());
TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
if(selRow == -1) return;
StoreEntryNode node = null;
Object obj = tree.getLastSelectedPathComponent();
if (obj instanceof StoreEntryNode) node = (StoreEntryNode) obj;
else return;
showEntryPage(node);
}
void popupAction(MouseEvent e) {
int selRow = tree.getRowForLocation(e.getX(), e.getY());
TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
if(selRow == -1) return;
tree.setSelectionPath(selPath);
Object obj = tree.getLastSelectedPathComponent();
enableMenus();
if (obj instanceof StoreEntryNode) {
entryMenu.show(tree, e.getX(), e.getY());
} else if (obj instanceof DefaultMutableTreeNode) {
storeMenu.show(tree, e.getX(), e.getY());
}
}
// can do enable/disable of menu elements here
private void enableMenus() {
}
private void showEntryPage(StoreEntryNode node) {
JComponent page = node.getPage();
if (page == null) {
page = new StoreEntryEditorPanel(node.getStoreEntry());
node.setPage(page);
}
int index = tabbedPanel.indexOfComponent(page);
if (index >= 0) tabbedPanel.setSelectedIndex(index);
else {
tabbedPanel.addTab(node.getName(), page);
tabbedPanel.setSelectedComponent(page);
}
}
private StyleStoreEntry getSelectedEntry() {
StyleStoreEntry entry = null;
Object obj = tree.getLastSelectedPathComponent();
if (obj instanceof StoreEntryNode) {
entry = ((StoreEntryNode) obj).getStoreEntry();
}
return entry;
}
private IStyleStore getSelectedStore() {
IStyleStore store = null;
Object node = tree.getLastSelectedPathComponent();
if (node instanceof StoreEntryNode) {
store = (IStyleStore) ((DefaultMutableTreeNode) ((StoreEntryNode) node).getParent()).getUserObject();
} else if (node instanceof DefaultMutableTreeNode) {
Object obj = ((DefaultMutableTreeNode) node).getUserObject();
if (obj instanceof IStyleStore) store = (IStyleStore) obj;
}
return store;
}
private int findInNode(DefaultMutableTreeNode node, String childName) {
int index = -1;
for (int i=0; i
Ads help maintain this website.