diff --git a/src/main/java/kieker/gui/mainview/Controller.java b/src/main/java/kieker/gui/mainview/Controller.java index c279e1bae8be304b5cfe4b94c46c27b364709cd6..fac94024fea3e1c1f0bef159869aad6a4c86e6dc 100644 --- a/src/main/java/kieker/gui/mainview/Controller.java +++ b/src/main/java/kieker/gui/mainview/Controller.java @@ -109,6 +109,10 @@ public final class Controller implements SelectionListener { if (e.widget == this.mainView.getMntmExit()) { this.mainView.close(); } + + if (e.widget == this.mainView.getMntmAbout()) { + this.mainView.getAboutDialog().open(); + } } private void handlePotentialTreeSelection(final SelectionEvent e) { diff --git a/src/main/java/kieker/gui/mainview/View.java b/src/main/java/kieker/gui/mainview/View.java index 204f90c28aca963153378670ff3feed001631846..f4646481ddc09ead16f154b4fa6889bd551bb7cb 100644 --- a/src/main/java/kieker/gui/mainview/View.java +++ b/src/main/java/kieker/gui/mainview/View.java @@ -32,9 +32,11 @@ import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; +import org.eclipse.swt.widgets.Widget; /** * The main view of the application. For the most part it uses sub-views to show data. @@ -52,6 +54,7 @@ public final class View implements Observer { private Composite subViewComposite; private StackLayout subViewLayout; + private MessageBox aboutDialog; private DirectoryDialog dialog; private MenuItem mntmExit; @@ -70,6 +73,7 @@ public final class View implements Observer { private TreeItem trtmJustTracesContaining; private TreeItem trtmJustFailedAggTraces; private TreeItem trtmJustAggTracesContaining; + private MenuItem mntmAbout; public View(final DataModel dataModel, final Model mainViewModel, final Controller controller, final Map<String, ISubView> subViews) { this.dataModel = dataModel; @@ -134,6 +138,10 @@ public final class View implements Observer { return this.mntmExit; } + public Widget getMntmAbout() { + return this.mntmAbout; + } + public MenuItem getMntmShortOperationNames() { return this.mntmShortOperationNames; } @@ -158,6 +166,10 @@ public final class View implements Observer { return this.dialog; } + public MessageBox getAboutDialog() { + return this.aboutDialog; + } + /** * @wbp.parser.entryPoint */ @@ -169,6 +181,10 @@ public final class View implements Observer { this.shell.setLayout(new FillLayout(SWT.HORIZONTAL)); this.dialog = new DirectoryDialog(this.shell); + this.aboutDialog = new MessageBox(this.shell, SWT.ICON_INFORMATION); + + this.aboutDialog.setText("About..."); + this.aboutDialog.setMessage("Kieker's GUI - 1.0-SNAPSHOT\n\nCopyright 2014 Kieker Project (http://kieker-monitoring.net)"); final SashForm sashForm = new SashForm(this.shell, SWT.NONE); @@ -248,6 +264,15 @@ public final class View implements Observer { this.mntmLongComponentNames = new MenuItem(menu_2, SWT.RADIO); this.mntmLongComponentNames.setSelection(true); this.mntmLongComponentNames.setText("Long Component Names"); + + final MenuItem mntmHelp = new MenuItem(menu, SWT.CASCADE); + mntmHelp.setText("Help"); + + final Menu menu_3 = new Menu(mntmHelp); + mntmHelp.setMenu(menu_3); + + this.mntmAbout = new MenuItem(menu_3, SWT.NONE); + this.mntmAbout.setText("About..."); } private void addLogic() { @@ -258,6 +283,7 @@ public final class View implements Observer { this.mntmExit.addSelectionListener(this.controller); this.mntmOpenMonitoringLog.addSelectionListener(this.controller); + this.mntmAbout.addSelectionListener(this.controller); this.mntmShortOperationNames.addSelectionListener(this.controller); this.mntmLongOperationNames.addSelectionListener(this.controller); @@ -284,4 +310,5 @@ public final class View implements Observer { this.subViewLayout.topControl = compositeToShow; this.subViewComposite.layout(); } + } diff --git a/src/main/java/kieker/gui/subview/aggregatedtraces/View.java b/src/main/java/kieker/gui/subview/aggregatedtraces/View.java index 489d2face86108259ad6793c0bdce5bb5a6b6c64..520c7a7b687edd7f12f59d82e2c746f80d8dc4d6 100644 --- a/src/main/java/kieker/gui/subview/aggregatedtraces/View.java +++ b/src/main/java/kieker/gui/subview/aggregatedtraces/View.java @@ -38,7 +38,7 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; @@ -71,6 +71,8 @@ public final class View implements Observer, ISubView { private Label lblFailed; private final PropertiesModel propertiesModel; private Label lblTotalDurationDisplay; + private Composite statusBar; + private Label lblTraceEquivalence; public View(final IModel<AggregatedExecution> model, final Model aggregatedTracesSubViewModel, final PropertiesModel propertiesModel, final SelectionListener controller) { @@ -94,9 +96,15 @@ public final class View implements Observer, ISubView { } this.composite = new Composite(parent, SWT.NONE); - this.composite.setLayout(new FillLayout(SWT.HORIZONTAL)); + final GridLayout gl_composite = new GridLayout(1, false); + gl_composite.verticalSpacing = 0; + gl_composite.marginHeight = 0; + gl_composite.marginWidth = 0; + gl_composite.horizontalSpacing = 0; + this.composite.setLayout(gl_composite); final SashForm sashForm = new SashForm(this.composite, SWT.VERTICAL); + sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); this.tree = new Tree(sashForm, SWT.BORDER | SWT.FULL_SELECTION | SWT.VIRTUAL); this.tree.setHeaderVisible(true); @@ -226,6 +234,12 @@ public final class View implements Observer, ISubView { this.lblTraceSizeDisplay.setText("N/A"); sashForm.setWeights(new int[] { 2, 1 }); + this.statusBar = new Composite(this.composite, SWT.NONE); + this.statusBar.setLayout(new GridLayout(1, false)); + + this.lblTraceEquivalence = new Label(this.statusBar, SWT.NONE); + this.lblTraceEquivalence.setText("0 Trace Equivalence Classes"); + this.tree.addSelectionListener(this.controller); this.tree.addListener(SWT.SetData, new DataProvider()); @@ -248,6 +262,7 @@ public final class View implements Observer, ISubView { public void update(final Observable observable, final Object obj) { if (observable == this.model) { this.updateTree(); + this.updateStatusBar(); } if (observable == this.aggregatedTracesSubViewModel) { this.updateDetailComposite(); @@ -257,6 +272,11 @@ public final class View implements Observer, ISubView { } } + private void updateStatusBar() { + this.lblTraceEquivalence.setText(this.model.getContent().size() + " Trace Equivalence Class(es)"); + this.statusBar.getParent().layout(); + } + private void updateTree() { final List<AggregatedExecution> records = this.model.getContent(); diff --git a/src/main/java/kieker/gui/subview/records/View.java b/src/main/java/kieker/gui/subview/records/View.java index f33e06b27924022bd6e452540d8c5bbb835e32ed..59254f72fdf5cae52ad3bb842fcf5bb728ea7300 100644 --- a/src/main/java/kieker/gui/subview/records/View.java +++ b/src/main/java/kieker/gui/subview/records/View.java @@ -29,9 +29,11 @@ import kieker.gui.subview.util.TableColumnSortListener; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; @@ -42,6 +44,8 @@ public final class View implements Observer, ISubView { private final IModel<Record> model; private Composite composite; private Table table; + private Label lblRecords; + private Composite statusBar; public View(final IModel<Record> model, final Controller controller) { this.model = model; @@ -59,10 +63,16 @@ public final class View implements Observer, ISubView { } this.composite = new Composite(parent, SWT.NONE); - this.composite.setLayout(new FillLayout(SWT.HORIZONTAL)); + final GridLayout gl_composite = new GridLayout(1, false); + gl_composite.verticalSpacing = 0; + gl_composite.marginHeight = 0; + gl_composite.marginWidth = 0; + gl_composite.horizontalSpacing = 0; + this.composite.setLayout(gl_composite); final TableViewer tableViewer = new TableViewer(this.composite, SWT.BORDER | SWT.FULL_SELECTION | SWT.VIRTUAL); this.table = tableViewer.getTable(); + this.table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); this.table.setHeaderVisible(true); this.table.setLinesVisible(true); @@ -78,6 +88,12 @@ public final class View implements Observer, ISubView { tblclmnRecordContent.setWidth(100); tblclmnRecordContent.setText("Record Content"); + this.statusBar = new Composite(this.composite, SWT.NONE); + this.statusBar.setLayout(new GridLayout(1, false)); + + this.lblRecords = new Label(this.statusBar, SWT.NONE); + this.lblRecords.setText("0 Records"); + this.table.addListener(SWT.SetData, new DataProvider()); tblclmnTimestamp.addSelectionListener(new TableColumnSortListener<>(new RecordTimestampComparator())); @@ -98,9 +114,15 @@ public final class View implements Observer, ISubView { public void update(final Observable observable, final Object obj) { if (observable == this.model) { this.updateTable(); + this.updateStatusBar(); } } + private void updateStatusBar() { + this.lblRecords.setText(this.model.getContent().size() + " Record(s)"); + this.statusBar.getParent().layout(); + } + private void updateTable() { final List<Record> records = this.model.getContent(); @@ -135,5 +157,4 @@ public final class View implements Observer, ISubView { } } - } diff --git a/src/main/java/kieker/gui/subview/traces/View.java b/src/main/java/kieker/gui/subview/traces/View.java index f793e7c861ff53dd4999683f99e3a40f2eee1964..adfd11356f60c4402aa2000de3c914ad017dfcdc 100644 --- a/src/main/java/kieker/gui/subview/traces/View.java +++ b/src/main/java/kieker/gui/subview/traces/View.java @@ -35,7 +35,7 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; @@ -65,6 +65,8 @@ public class View implements Observer, ISubView { private Label lblExecutionContainerDisplay; private Label lblFailed; private final PropertiesModel propertiesModel; + private Label lblTraces; + private Composite statusBar; public View(final IModel<Execution> model, final Model tracesSubViewModel, final PropertiesModel propertiesModel, final SelectionListener controller) { this.model = model; @@ -87,9 +89,15 @@ public class View implements Observer, ISubView { } this.composite = new Composite(parent, SWT.NONE); - this.composite.setLayout(new FillLayout(SWT.HORIZONTAL)); + final GridLayout gl_composite = new GridLayout(1, false); + gl_composite.verticalSpacing = 0; + gl_composite.marginHeight = 0; + gl_composite.marginWidth = 0; + gl_composite.horizontalSpacing = 0; + this.composite.setLayout(gl_composite); final SashForm sashForm = new SashForm(this.composite, SWT.VERTICAL); + sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); this.tree = new Tree(sashForm, SWT.BORDER | SWT.FULL_SELECTION | SWT.VIRTUAL); this.tree.setHeaderVisible(true); @@ -189,6 +197,13 @@ public class View implements Observer, ISubView { sashForm.setWeights(new int[] { 2, 1 }); + this.statusBar = new Composite(this.composite, SWT.NONE); + + this.statusBar.setLayout(new GridLayout(1, false)); + + this.lblTraces = new Label(this.statusBar, SWT.NONE); + this.lblTraces.setText("0 Traces"); + this.tree.addSelectionListener(this.controller); this.tree.addListener(SWT.SetData, new DataProvider()); @@ -212,6 +227,7 @@ public class View implements Observer, ISubView { public void update(final Observable observable, final Object obj) { if (observable == this.model) { this.updateTree(); + this.updateStatusBar(); } if (observable == this.tracesSubViewModel) { this.updateDetailComposite(); @@ -221,6 +237,11 @@ public class View implements Observer, ISubView { } } + private void updateStatusBar() { + this.lblTraces.setText(this.model.getContent().size() + " Trace(s)"); + this.statusBar.getParent().layout(); + } + private void updateTree() { final List<Execution> records = this.model.getContent();