Package net.sf.logsaw.ui.propertyPages

Source Code of net.sf.logsaw.ui.propertyPages.ColumnsPropertyPage

/*******************************************************************************
* Copyright (c) 2010, 2011 LogSaw project and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*    LogSaw project committers - initial API and implementation
*******************************************************************************/
package net.sf.logsaw.ui.propertyPages;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import net.sf.logsaw.core.field.ALogEntryField;
import net.sf.logsaw.core.logresource.ILogResource;
import net.sf.logsaw.ui.Messages;
import net.sf.logsaw.ui.editors.ILogViewEditor;
import net.sf.logsaw.ui.editors.LogViewEditorColumnConfiguration;

import org.eclipse.core.databinding.beans.PojoProperties;
import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.jface.databinding.viewers.ViewerSupport;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PropertyPage;

/**
* @author Philipp Nanz
*/
public class ColumnsPropertyPage extends PropertyPage {

  private Button moveUpButton;
  private Button moveDownButton;
  private CheckboxTableViewer tableViewer;
  private WritableList model;
  private LogViewEditorColumnConfiguration config;

  /* (non-Javadoc)
   * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
   */
  @Override
  protected Control createContents(Composite parent) {
    Composite root = new Composite(parent, SWT.NONE);
    root.setLayout(new GridLayout(2, false));
   
    tableViewer = CheckboxTableViewer.newCheckList(root, SWT.BORDER | SWT.SINGLE |
        SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
    tableViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {

      /* (non-Javadoc)
       * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
       */
      @Override
      public void selectionChanged(SelectionChangedEvent event) {
        IStructuredSelection sel = (IStructuredSelection) event.getSelection();
        boolean moveUp = false;
        boolean moveDown = false;
        if (!sel.isEmpty()) {
          // Update enabled state of moveUp/moveDown buttons
          int idx = model.indexOf(sel.getFirstElement());
          moveUp = idx > 0;
          moveDown = idx < model.size() - 1;
        }
        moveUpButton.setEnabled(moveUp);
        moveDownButton.setEnabled(moveDown);
      }
    });
   
    // Setup data binding
    ILogResource log = (ILogResource) getElement().getAdapter(ILogResource.class);
    model = new WritableList(log.getDialect().getFieldProvider().getAllFields(), ALogEntryField.class);
    ViewerSupport.bind(tableViewer, model,
        PojoProperties.values(new String[] {"label"})); //$NON-NLS-1$
   
    Composite buttonArea = new Composite(root, SWT.NONE);
    buttonArea.setLayout(new GridLayout());
    GridData gridData = new GridData();
    gridData.verticalAlignment = SWT.BEGINNING;
    buttonArea.setLayoutData(gridData);
   
    Button selectAllButton = new Button(buttonArea, SWT.PUSH);
    selectAllButton.setText(Messages.ColumnsPropertyPage_label_selectAll);
    selectAllButton.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        tableViewer.setAllChecked(true);
      }
    });
    selectAllButton.setLayoutData(new GridData(SWT.FILL, SWT.NONE, false, false));
   
    Button deselectAllButton = new Button(buttonArea, SWT.PUSH);
    deselectAllButton.setText(Messages.ColumnsPropertyPage_label_deselectAll);
    deselectAllButton.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        tableViewer.setAllChecked(false);
      }
    });
    deselectAllButton.setLayoutData(new GridData(SWT.FILL, SWT.NONE, false, false));
   
    moveUpButton = new Button(buttonArea, SWT.PUSH);
    moveUpButton.setText(Messages.ColumnsPropertyPage_label_moveUp);
    moveUpButton.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        IStructuredSelection sel =
          (IStructuredSelection) tableViewer.getSelection();
        int idx = model.indexOf(sel.getFirstElement());
        model.move(idx, idx - 1);
      }
    });
    moveUpButton.setLayoutData(new GridData(SWT.FILL, SWT.NONE, false, false));
   
    moveDownButton = new Button(buttonArea, SWT.PUSH);
    moveDownButton.setText(Messages.ColumnsPropertyPage_label_moveDown);
    moveDownButton.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        IStructuredSelection sel =
          (IStructuredSelection) tableViewer.getSelection();
        int idx = model.indexOf(sel.getFirstElement());
        model.move(idx, idx + 1);
      }
    });
    moveDownButton.setLayoutData(new GridData(SWT.FILL, SWT.NONE, false, false));
   
    tableViewer.setSelection(StructuredSelection.EMPTY);
    loadOrderAndCheckState();
   
    return root;
  }

  /* (non-Javadoc)
   * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
   */
  @Override
  protected void performDefaults() {
    ILogResource log = (ILogResource) getElement().getAdapter(ILogResource.class);
    List<ALogEntryField<?, ?>> defaultFields = log.getDialect().getFieldProvider().getDefaultFields();
    sort(log, defaultFields);
    super.performDefaults();
  }

  /* (non-Javadoc)
   * @see org.eclipse.jface.preference.PreferencePage#performOk()
   */
  @Override
  public boolean performOk() {
    saveOrderAndCheckState();
    return super.performOk();
  }

  private void sort(ILogResource log, List<ALogEntryField<?, ?>> sortedFields) {
    List<ALogEntryField<?, ?>> allFields = log.getDialect().getFieldProvider().getAllFields();
    // Reorder
    for (int i = 0; i < sortedFields.size(); i++) {
      ALogEntryField<?, ?> fld = sortedFields.get(i);
      int idx = model.indexOf(fld);
      model.move(idx, i);
      tableViewer.setChecked(fld, true);
      allFields.remove(fld);
    }
    // What's left in allFields is not contained in defaultFields
    for (ALogEntryField<?, ?> fld : allFields) {
      tableViewer.setChecked(fld, false);
    }
  }

  private void loadOrderAndCheckState() {
    ILogResource log = (ILogResource) getElement().getAdapter(ILogResource.class);
    config = new LogViewEditorColumnConfiguration(log);
    sort(log, config.getFields());
  }

  @SuppressWarnings("unchecked")
  private void saveOrderAndCheckState() {
    List<ALogEntryField<?, ?>> list = new ArrayList<ALogEntryField<?, ?>>(model);
    Iterator<ALogEntryField<?, ?>> it = list.iterator();
    // Remove unchecked from list
    while (it.hasNext()) {
      if (!tableViewer.getChecked(it.next())) {
        it.remove();
      }
    }
   
    if (config == null) {
      // Could not load resource during init
      return;
    }
    // All widths are being reset
    config.update(list, new int[list.size()]);
    // Apply column configuration to open editors
    IWorkbenchPage page = PlatformUI.getWorkbench()
        .getActiveWorkbenchWindow().getActivePage();
    IEditorReference[] editorRefs = page.findEditors(
        (IEditorInput) getElement().getAdapter(IEditorInput.class),
        null, IWorkbenchPage.MATCH_INPUT);
    for (int i = 0; i < editorRefs.length; i++) {
      IEditorPart editorPart = editorRefs[i].getEditor(false);
      ILogViewEditor editor = editorPart != null ?
          (ILogViewEditor) editorPart.getAdapter(ILogViewEditor.class) : null;
      if (editor != null) {
        editor.setColumnConfig(config);
      }
    }
  }
}
TOP

Related Classes of net.sf.logsaw.ui.propertyPages.ColumnsPropertyPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.