]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.message.ui/src/org/simantics/message/ui/FilterDialog.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.message.ui / src / org / simantics / message / ui / FilterDialog.java
diff --git a/bundles/org.simantics.message.ui/src/org/simantics/message/ui/FilterDialog.java b/bundles/org.simantics.message.ui/src/org/simantics/message/ui/FilterDialog.java
new file mode 100644 (file)
index 0000000..47f5ada
--- /dev/null
@@ -0,0 +1,278 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.message.ui;
+
+import java.util.StringTokenizer;
+import org.eclipse.jface.dialogs.*;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.ui.IMemento;
+
+public class FilterDialog extends TrayDialog {
+
+       Button okButton;
+
+       // entries count limit
+       private Button limit;
+       Text limitText;
+
+       // entry types filter
+       private Button errorButton;
+       private Button warningButton;
+       private Button infoButton;
+
+       // show all sessions
+       private Button showAllButton;
+
+       // filter stack trace elements in EventDetailsDialog
+       private Button filterEnabled;
+       private Button addFilter;
+       private Button removeFilter;
+       private List filterList;
+
+       private IMemento memento;
+
+       public FilterDialog(Shell parentShell, IMemento memento) {
+               super(parentShell);
+               this.memento = memento;
+       }
+
+       protected Control createDialogArea(Composite parent) {
+               Composite container = (Composite) super.createDialogArea(parent);
+               createEventTypesGroup(container);
+               createLimitSection(container);
+               createSessionSection(container);
+               createFilterSection(container);
+
+               Dialog.applyDialogFont(container);
+               return container;
+       }
+
+       private void createEventTypesGroup(Composite parent) {
+               Group group = new Group(parent, SWT.NONE);
+               group.setLayout(new GridLayout());
+               GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+               gd.widthHint = 275;
+               group.setLayoutData(gd);
+               group.setText(Messages.LogView_FilterDialog_eventTypes);
+
+               infoButton = new Button(group, SWT.CHECK);
+               infoButton.setText(Messages.LogView_FilterDialog_information);
+               infoButton.setSelection(memento.getString(LogView.P_LOG_INFO).equals("true")); //$NON-NLS-1$
+
+               warningButton = new Button(group, SWT.CHECK);
+               warningButton.setText(Messages.LogView_FilterDialog_warning);
+               warningButton.setSelection(memento.getString(LogView.P_LOG_WARNING).equals("true")); //$NON-NLS-1$
+
+               errorButton = new Button(group, SWT.CHECK);
+               errorButton.setText(Messages.LogView_FilterDialog_error);
+               errorButton.setSelection(memento.getString(LogView.P_LOG_ERROR).equals("true")); //$NON-NLS-1$
+       }
+
+       private void createLimitSection(Composite parent) {
+               Composite comp = new Composite(parent, SWT.NONE);
+               GridLayout layout = new GridLayout();
+               layout.numColumns = 2;
+               comp.setLayout(layout);
+               comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               limit = new Button(comp, SWT.CHECK);
+               limit.setText(Messages.LogView_FilterDialog_limitTo);
+               limit.setSelection(memento.getString(LogView.P_USE_LIMIT).equals("true")); //$NON-NLS-1$
+               limit.addSelectionListener(new SelectionAdapter() {
+                       public void widgetSelected(SelectionEvent e) {
+                               limitText.setEnabled(((Button) e.getSource()).getSelection());
+                       }
+               });
+
+               limitText = new Text(comp, SWT.BORDER);
+               limitText.addModifyListener(new ModifyListener() {
+                       public void modifyText(ModifyEvent e) {
+                               try {
+                                       if (okButton == null)
+                                               return;
+                                       Integer.parseInt(limitText.getText());
+                                       okButton.setEnabled(true);
+                               } catch (NumberFormatException e1) {
+                                       okButton.setEnabled(false);
+                               }
+                       }
+               });
+               limitText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               limitText.setText(memento.getString(LogView.P_LOG_LIMIT));
+               limitText.setEnabled(limit.getSelection());
+
+       }
+
+       private void createSessionSection(Composite parent) {
+               Composite container = new Composite(parent, SWT.NONE);
+               container.setLayout(new GridLayout());
+               container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               Label label = new Label(container, SWT.NONE);
+               label.setText(Messages.LogView_FilterDialog_eventsLogged);
+
+               showAllButton = new Button(container, SWT.RADIO);
+               showAllButton.setText(Messages.LogView_FilterDialog_allSessions);
+               GridData gd = new GridData();
+               gd.horizontalIndent = 20;
+               showAllButton.setLayoutData(gd);
+
+               Button button = new Button(container, SWT.RADIO);
+               button.setText(Messages.LogView_FilterDialog_recentSession);
+               gd = new GridData();
+               gd.horizontalIndent = 20;
+               button.setLayoutData(gd);
+
+               if (memento.getString(LogView.P_SHOW_ALL_SESSIONS).equals("true")) { //$NON-NLS-1$
+                       showAllButton.setSelection(true);
+               } else {
+                       button.setSelection(true);
+               }
+       }
+
+       private void createFilterSection(Composite parent) {
+               Composite comp = new Composite(parent, SWT.NONE);
+               GridLayout layout = new GridLayout(2, false);
+               comp.setLayout(layout);
+               comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               filterEnabled = new Button(comp, SWT.CHECK);
+               filterEnabled.setText(Messages.FilterDialog_EnableFiltersCheckbox);
+               GridData gd = new GridData();
+               gd.horizontalSpan = 2;
+               filterEnabled.setLayoutData(gd);
+               filterEnabled.addSelectionListener(new SelectionAdapter() {
+                       public void widgetSelected(SelectionEvent e) {
+                               setStackTraceFilterEnabled(filterEnabled.getSelection());
+                       }
+
+               });
+
+               filterList = new List(comp, SWT.BORDER);
+               gd = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
+               gd.verticalSpan = 3;
+               gd.widthHint = 280;
+               gd.horizontalIndent = 20;
+               filterList.setLayoutData(gd);
+               filterList.addSelectionListener(new SelectionAdapter() {
+                       public void widgetSelected(SelectionEvent e) {
+                               removeFilter.setEnabled(true);
+                       }
+               });
+
+               addFilter = new Button(comp, SWT.NONE);
+               gd = new GridData(GridData.FILL_HORIZONTAL);
+               addFilter.setLayoutData(gd);
+               addFilter.setText(Messages.FilterDialog_Add);
+               addFilter.addSelectionListener(new SelectionAdapter() {
+                       public void widgetSelected(SelectionEvent e) {
+                               addFilter();
+                       }
+               });
+
+               removeFilter = new Button(comp, SWT.NONE);
+               gd = new GridData(GridData.FILL_HORIZONTAL);
+               removeFilter.setLayoutData(gd);
+               removeFilter.setText(Messages.FilterDialog_Remove);
+               removeFilter.setEnabled(false);
+               removeFilter.addSelectionListener(new SelectionAdapter() {
+                       public void widgetSelected(SelectionEvent e) {
+                               removeFilter();
+                       }
+               });
+
+               // load preferences
+               Boolean enable = memento.getBoolean(EventDetailsDialog.FILTER_ENABLED);
+               enable = enable == null ? Boolean.FALSE : enable;
+
+               filterEnabled.setSelection(enable.booleanValue());
+               setStackTraceFilterEnabled(enable.booleanValue());
+
+               String filters = memento.getString(EventDetailsDialog.FILTER_LIST);
+               if (filters != null) {
+                       StringTokenizer st = new StringTokenizer(filters, ";"); //$NON-NLS-1$
+                       while (st.hasMoreElements()) {
+                               filterList.add(st.nextToken());
+                       }
+               }
+       }
+
+       private void addFilter() {
+               IInputValidator validator = new IInputValidator() {
+
+                       public String isValid(String newText) {
+                               return newText.indexOf(';') >= 0 ? Messages.FilterDialog_FilterShouldntContainSemicolon : null;
+                       }
+
+               };
+               InputDialog dialog = new InputDialog(getShell(), Messages.FilterDialog_AddFilterTitle, Messages.FilterDialog_AddFliterLabel, null, validator);
+               if (dialog.open() == Window.OK) {
+                       String value = dialog.getValue().trim();
+
+                       if (value.length() > 0) {
+                               filterList.add(value);
+                       }
+               }
+       }
+
+       private void removeFilter() {
+               int index = filterList.getSelectionIndex();
+               if (index != -1) {
+                       filterList.remove(index);
+               }
+
+               removeFilter.setEnabled(false);
+       }
+
+       private void setStackTraceFilterEnabled(boolean enabled) {
+               filterList.setEnabled(enabled);
+               addFilter.setEnabled(enabled);
+               removeFilter.setEnabled(enabled && filterList.getSelectionIndex() != -1);
+       }
+
+       protected void createButtonsForButtonBar(Composite parent) {
+               okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
+               createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
+       }
+
+       protected void okPressed() {
+               memento.putString(LogView.P_LOG_INFO, infoButton.getSelection() ? "true" : "false"); //$NON-NLS-1$ //$NON-NLS-2$
+               memento.putString(LogView.P_LOG_WARNING, warningButton.getSelection() ? "true" : "false"); //$NON-NLS-1$ //$NON-NLS-2$
+               memento.putString(LogView.P_LOG_ERROR, errorButton.getSelection() ? "true" : "false"); //$NON-NLS-1$ //$NON-NLS-2$
+               memento.putString(LogView.P_LOG_LIMIT, limitText.getText());
+               memento.putString(LogView.P_USE_LIMIT, limit.getSelection() ? "true" : "false"); //$NON-NLS-1$ //$NON-NLS-2$
+               memento.putString(LogView.P_SHOW_ALL_SESSIONS, showAllButton.getSelection() ? "true" : "false"); //$NON-NLS-1$ //$NON-NLS-2$
+
+               // store Event Dialog stack trace filter preferences
+               memento.putBoolean(EventDetailsDialog.FILTER_ENABLED, filterEnabled.getSelection());
+
+               StringBuffer sb = new StringBuffer();
+               String[] items = filterList.getItems();
+               for (int i = 0; i < items.length; i++) {
+                       sb.append(items[i]);
+                       if (i < items.length - 1) {
+                               sb.append(";"); //$NON-NLS-1$
+                       }
+               }
+               memento.putString(EventDetailsDialog.FILTER_LIST, sb.toString());
+
+               super.okPressed();
+       }
+
+}