Skip to content

Commit

Permalink
Save and restore session
Browse files Browse the repository at this point in the history
  • Loading branch information
akarnokd committed Feb 26, 2015
1 parent 9bb83b0 commit 4a4b288
Show file tree
Hide file tree
Showing 6 changed files with 289 additions and 6 deletions.
1 change: 1 addition & 0 deletions .classpath
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?project=akarnokd-tools&amp;ivyXmlPath=ivy.xml&amp;confs=*"/>
<classpathentry kind="lib" path="lib/akarnokd_tools.jar" sourcepath="lib/akarnokd_tools.jar"/>
<classpathentry kind="lib" path="lib/jfontchooser-1.0.5.jar" sourcepath="lib/jfontchooser-1.0.5.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
6 changes: 4 additions & 2 deletions ivy.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,14 @@
status="integration">
</info>
<dependencies>
<dependency org="com.google.guava" name="guava" rev="18.0" />
<!--
<dependency org="joda-time" name="joda-time" rev="2.2" />
<dependency org="net.sf.trove4j" name="trove4j" rev="3.0.3"/>
<dependency org="org.bouncycastle" name="bcprov-jdk15on" rev="1.50"/>
<dependency org="org.javassist" name="javassist" rev="3.18.2-GA"/>
<dependency org="io.reactivex" name="rxjava" rev="1.+" />
<dependency org="com.github.akarnokd" name="ixjava" rev="latest.[any status]" />
-->
<dependency org="com.google.guava" name="guava" rev="18.0" />
<dependency org="io.reactivex" name="rxjava" rev="1.+" />
</dependencies>
</ivy-module>
66 changes: 64 additions & 2 deletions src/hu/akarnokd/jmh/gui/ComparisonTab.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package hu.akarnokd.jmh.gui;

import hu.akarnokd.utils.sequence.SequenceUtils;
import hu.akarnokd.utils.xml.XElement;

import java.awt.*;
import java.awt.datatransfer.*;
Expand All @@ -15,7 +16,7 @@ public class ComparisonTab extends JPanel {

/** */
private static final long serialVersionUID = -7892819950169164119L;
public JTable table;
private JTable table;
public JMHResultModel model;
public final List<JMHResults> results = new ArrayList<>();
private JComboBox<String> cols;
Expand All @@ -25,6 +26,7 @@ public class ComparisonTab extends JPanel {
JButton use;
final JTabbedPane parent;
private JButton renameCol;
private DefaultTableCellRenderer rightRenderer;

public ComparisonTab(JTabbedPane parent) {
this.parent = parent;
Expand All @@ -38,9 +40,11 @@ public ComparisonTab(JTabbedPane parent) {

table.setModel(model);

DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
rightRenderer = new DefaultTableCellRenderer();
rightRenderer.setHorizontalAlignment(SwingConstants.RIGHT);
table.setDefaultRenderer(String.class, rightRenderer);
table.setColumnSelectionAllowed(true);


add(sp, BorderLayout.CENTER);

Expand All @@ -64,6 +68,7 @@ public ComparisonTab(JTabbedPane parent) {
commands.add(paste);
commands.add(pasteExample);
commands.add(cols);
commands.add(renameCol);
commands.add(delete);
commands.add(use);

Expand All @@ -72,6 +77,7 @@ public ComparisonTab(JTabbedPane parent) {
pasteExample.addActionListener(al -> {
JMHResults r = new JMHResults();
r.parse(JMHResults.example());
r.name = "Example";
results.add(r);
buildModel();
autoSize();
Expand Down Expand Up @@ -109,10 +115,37 @@ public ComparisonTab(JTabbedPane parent) {

close.addActionListener(al -> {
int idx = parent.indexOfComponent(this);
if (idx > 0) {
parent.setSelectedIndex(idx - 1);
}
parent.removeTabAt(idx);
});

renameCol.addActionListener(al -> renameColumn());

cols.setEnabled(false);
renameCol.setEnabled(false);
delete.setEnabled(false);
use.setEnabled(false);
}
public void setTableFont(Font font) {
table.setFont(font);
adjustTable();
autoSize();
table.repaint();
}
public void setPadding(int padding) {
table.setIntercellSpacing(new Dimension(padding, padding));
adjustTable();
autoSize();
table.repaint();
}

void adjustTable() {
Dimension dim = table.getIntercellSpacing();
Font font = table.getFont();

table.setRowHeight(dim.height * 2 + font.getSize() + 1);
}

public void buildModel() {
Expand Down Expand Up @@ -263,6 +296,35 @@ void reportError(Throwable ex) {
JOptionPane.showMessageDialog(this, ex.toString(), "Error", JOptionPane.ERROR_MESSAGE);
}
void renameColumn() {
int idx = cols.getSelectedIndex();
JMHResults rs = results.get(idx);
String name = JOptionPane.showInputDialog(ComparisonTab.this, "Rename result", rs.name != null ? rs.name : "");
rs.name = name;
table.getColumnModel().getColumn(valueStart + idx).setHeaderValue(name);
((DefaultComboBoxModel<String>)cols.getModel()).removeElementAt(idx);
((DefaultComboBoxModel<String>)cols.getModel()).insertElementAt((idx + 1) + ": " + name, idx);
cols.setSelectedIndex(idx);
}
public void save(XElement out) {
int idx = parent.indexOfComponent(this);
out.set("title", parent.getTitleAt(idx));

for (JMHResults rs : results) {
XElement xrs = out.add("results");
rs.save(xrs);
}
}
public void load(XElement in) {
int idx = parent.indexOfComponent(this);
parent.setTitleAt(idx, in.get("title", "New tab"));

results.clear();
for (XElement xrs : in.childrenWithName("results")) {
JMHResults rs = new JMHResults();
rs.load(xrs);
results.add(rs);
}

buildModel();
}
}
180 changes: 178 additions & 2 deletions src/hu/akarnokd/jmh/gui/JMHCompareGUI.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
package hu.akarnokd.jmh.gui;

import hu.akarnokd.utils.xml.XElement;

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.*;

import javax.swing.*;
import javax.xml.stream.XMLStreamException;

import say.swing.JFontChooser;

public class JMHCompareGUI extends JFrame {

/** */
private static final long serialVersionUID = -4168653287697309256L;
private JTabbedPane tabs;
final File configFile = new File("./jmh-compare-gui-config.xml");
Font tableFont;
int cellPadding;

void init() {
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
Expand All @@ -31,6 +38,10 @@ public void windowClosing(WindowEvent e) {
c.setLayout(new BorderLayout());
c.add(tabs, BorderLayout.CENTER);

tableFont = tabs.getFont().deriveFont(Font.PLAIN);

initMenu();

if (!initConfig()) {
ComparisonTab ct = new ComparisonTab(tabs);
tabs.addTab("New tab", ct);
Expand All @@ -41,22 +52,187 @@ public void windowClosing(WindowEvent e) {
Component tc = tabs.getComponentAt(idx);
if (tc instanceof JLabel) {
ComparisonTab ct = new ComparisonTab(tabs);
ct.setTableFont(tableFont);
ct.setPadding(cellPadding);
tabs.setComponentAt(idx, ct);
tabs.setTitleAt(idx, "New tab");
tabs.addTab("+", new JLabel());
}
});
}

void initMenu() {
JMenuBar menubar = new JMenuBar();
setJMenuBar(menubar);

JMenu mnuFile = new JMenu("File");
menubar.add(mnuFile);

JMenuItem mnuNewTab = new JMenuItem("New tab");
mnuFile.add(mnuNewTab);
JMenuItem mnuNewWorkspace = new JMenuItem("New workspace");
mnuFile.add(mnuNewWorkspace);
mnuFile.addSeparator();

JMenuItem mnuOpenTab = new JMenuItem("Open tab...");
mnuFile.add(mnuOpenTab);

JMenuItem mnuOpenWorkspace = new JMenuItem("Open workspace...");
mnuFile.add(mnuOpenWorkspace);

mnuFile.addSeparator();

JMenuItem mnuCloseTab = new JMenuItem("Close tab");
mnuFile.add(mnuCloseTab);
JMenuItem mnuCloseAllTabs = new JMenuItem("Close all tabs");
mnuFile.add(mnuCloseAllTabs);

mnuFile.addSeparator();

JMenuItem mnuSaveTab = new JMenuItem("Save tab...");
mnuFile.add(mnuSaveTab);
JMenuItem mnuSaveWorkspace = new JMenuItem("Save workspace...");
mnuFile.add(mnuSaveWorkspace);

mnuFile.addSeparator();

JMenuItem mnuExit = new JMenuItem("Exit");
mnuFile.add(mnuExit);

JMenu mnuView = new JMenu("View");
menubar.add(mnuView);

JMenuItem mnuFont = new JMenuItem("Font...");
mnuView.add(mnuFont);

JMenuItem mnuCellPadding = new JMenuItem("Cell padding...");
mnuView.add(mnuCellPadding);

JMenu mnuHelp = new JMenu("Help");
menubar.add(mnuHelp);

JMenuItem mnuHomepage = new JMenuItem("Homepage...");
mnuHelp.add(mnuHomepage);

// ------------------------------------------

mnuFont.addActionListener(al -> doChangeFont());

mnuCellPadding.addActionListener(al -> doCellPadding());
}

void doCellPadding() {
String value = JOptionPane.showInputDialog(this, "Enter padding value", "" + cellPadding);

try {
cellPadding = Integer.parseInt(value);
for (int i = 0; i < tabs.getTabCount(); i++) {
Component tc = tabs.getComponentAt(i);
if (tc instanceof ComparisonTab) {
ComparisonTab ct = (ComparisonTab) tc;
ct.setPadding(cellPadding);
}
}
} catch (NumberFormatException ex) {
reportError(ex);
}
}

void doChangeFont() {
JFontChooser jfc = new JFontChooser();
jfc.setSelectedFont(tableFont);
if (jfc.showDialog(this) == JFontChooser.OK_OPTION) {
tableFont = jfc.getSelectedFont();
for (int i = 0; i < tabs.getTabCount(); i++) {
Component tc = tabs.getComponentAt(i);
if (tc instanceof ComparisonTab) {
ComparisonTab ct = (ComparisonTab) tc;
ct.setTableFont(tableFont);
ct.autoSize();
}
}
}
}

boolean initConfig() {
if (configFile.canRead()) {

try {
XElement config = XElement.parseXML(configFile);
processConfig(config);
return true;
} catch (XMLStreamException ex) {
ex.printStackTrace();
}
}
return false;
}

void processConfig(XElement config) {
int state = config.getInt("window-state", getState());
setState(state);
if (state != MAXIMIZED_BOTH && state != ICONIFIED) {
setLocation(config.getInt("window-x", getX()), config.getInt("window-y", getY()));
setSize(config.getInt("window-width", getWidth()), config.getInt("window-height", getHeight()));
}
cellPadding = config.getInt("cell-padding", 0);

XElement xfont = config.childElement("font");
if (xfont != null) {
tableFont = new Font(xfont.get("name"), xfont.getInt("style"), xfont.getInt("size"));
}

for (XElement xtab : config.childrenWithName("tab")) {
ComparisonTab ct = new ComparisonTab(tabs);
if (tableFont != null) {
ct.setTableFont(tableFont);
}
ct.setPadding(cellPadding);
tabs.add(ct, "New tab");
ct.load(xtab);
ct.autoSize();
}
}

void saveConfig() {
XElement config = new XElement("jmh-compare-gui-config");

int state = getState();
config.set("window-state", state);
if (state != MAXIMIZED_BOTH && state != ICONIFIED) {
config.set("window-x", getX());
config.set("window-y", getY());
config.set("window-width", getWidth());
config.set("window-height", getHeight());
}
config.set("cell-padding", cellPadding);

if (tableFont != null) {
XElement xfont = config.add("font");
xfont.set("name", tableFont.getName());
xfont.set("style", tableFont.getStyle());
xfont.set("size", tableFont.getSize());
}

int tabCount = 0;
for (int i = 0; i < tabs.getTabCount(); i++) {
Component c = tabs.getComponentAt(i);
if (c instanceof ComparisonTab) {

ComparisonTab ct = (ComparisonTab) c;

XElement tab = config.add("tab");
ct.save(tab);

tabCount++;
}
}
config.set("tab-count", tabCount);

try {
config.save(configFile);
} catch (IOException ex) {
reportError(ex);
}
}


Expand Down
Loading

0 comments on commit 4a4b288

Please sign in to comment.