Package edu.zao.fire.views.filter

Source Code of edu.zao.fire.views.filter.FilterView$GeneralFiltersSubView

package edu.zao.fire.views.filter;

import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
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.DirectoryDialog;
import org.eclipse.swt.widgets.ExpandBar;
import org.eclipse.swt.widgets.ExpandItem;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

import edu.zao.fire.Renamer;
import edu.zao.fire.filters.BrowserFileFilter.FilterListener;
import edu.zao.fire.filters.GeneralMatchingFilter;
import edu.zao.fire.filters.UserFilters;
import edu.zao.fire.filters.UserIgnoreFileFilter;
import edu.zao.fire.util.Filter;

public class FilterView extends ViewPart {

  @Override
  public void createPartControl(Composite parent) {
    // parent.setLayout(new FillLayout());
    // parent = new ScrolledComposite(parent, SWT.V_SCROLL);

    ExpandBar bar = new ExpandBar(parent, SWT.V_SCROLL);

    // area for individual files being ignored
    Composite composite = new Composite(bar, SWT.NONE);
    new IndividualFiltersSubView(composite);

    ExpandItem item1 = new ExpandItem(bar, SWT.NONE);
    item1.setControl(composite);
    item1.setText("Individually Ignored Items");
    item1.setHeight(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);

    // area for files ignored by a pattern
    composite = new Composite(bar, SWT.NONE);
    new GeneralFiltersSubView().createPartControl(composite);

    ExpandItem item2 = new ExpandItem(bar, SWT.NONE);
    item2.setControl(composite);
    item2.setText("Items Ignored by Instruction");
    item2.setHeight(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
  }

  private class GeneralFiltersSubView {

    private Button buttonEdit;
    private Button buttonRemove;
    private TableViewer viewer;
    private Table table;
    private UserFilters userFilters;

    // private List<GeneralMatchingFilter> filtersList;

    protected void createPartControl(final Composite parent) {
      parent.setLayout(new GridLayout(2, false));

      viewer = new TableViewer(parent);
      table = viewer.getTable();
      GridData tableData = new GridData(SWT.FILL, SWT.FILL, true, true);
      tableData.verticalSpan = 3;
      tableData.heightHint = 150;
      table.setLayoutData(tableData);

      Button buttonNew = new Button(parent, SWT.PUSH);
      buttonNew.setText("New...");
      buttonNew.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));

      buttonEdit = new Button(parent, SWT.PUSH);
      buttonEdit.setText("Edit...");
      buttonEdit.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));

      buttonRemove = new Button(parent, SWT.PUSH);
      buttonRemove.setText("Remove");
      buttonRemove.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));

      viewer.setContentProvider(new GeneralMatchingFilterContentProvider());
      viewer.setLabelProvider(new GeneralMatchingFilterLabelProvider(table.getFont()));

      userFilters = Renamer.getDefault().getUserFilters();
      viewer.setInput(userFilters);

      buttonNew.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
          GeneralMatchingFilter newFilter = GeneralMatchingFilterDialog.createNewFilter(parent.getShell());
          if (newFilter != null) {
            userFilters.add(newFilter);
            viewer.refresh();
          }
        }
      });

      table.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
          updateButtonStates();
        }
      });

      buttonEdit.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
          // should be safe to assume that selection is exactly 1 item
          TableItem selectedItem = table.getSelection()[0];
          Object selectedObject = selectedItem.getData();
          GeneralMatchingFilter filter = (GeneralMatchingFilter) selectedObject;
          GeneralMatchingFilterDialog.editFilter(parent.getShell(), filter);
          updateButtonStates();
          viewer.refresh();
        }
      });

      buttonRemove.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
          for (TableItem item : table.getSelection()) {
            userFilters.remove((GeneralMatchingFilter) item.getData());
          }
          updateButtonStates();
          viewer.refresh();
        }
      });

      updateButtonStates();
    }

    private void updateButtonStates() {
      int userGeneralFilterCount = userFilters.getGeneralFilters().size();
      buttonEdit.setEnabled(table.getSelectionCount() == 1 && userGeneralFilterCount > 0);
      buttonRemove.setEnabled(table.getSelectionCount() > 0 && userGeneralFilterCount > 0);
    }
  }

  private class IndividualFiltersSubView {
    private Button addFileButton;
    private Button addFolderButton;
    private Button removeButton;
    private TableViewer viewer;

    public IndividualFiltersSubView(final Composite parent) {
      parent.setLayout(new GridLayout(2, false));

      Label label = new Label(parent, SWT.SINGLE);
      label.setText("Individual files that are currently \"ignored\"");
      label.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false, 2, 1));

      viewer = new TableViewer(parent);
      viewer.setLabelProvider(new StyledCellLabelProvider() {
        @Override
        public void update(ViewerCell cell) {
          File file = (File) cell.getElement();

          try {
            cell.setText(file.getCanonicalPath());
          } catch (IOException e) {
            e.printStackTrace();
          }
          String fileIcon = null;
          if (file.isDirectory()) {
            fileIcon = ISharedImages.IMG_OBJ_FOLDER;
          } else if (file.isFile()) {
            fileIcon = ISharedImages.IMG_OBJ_FILE;
          }
          Image icon = PlatformUI.getWorkbench().getSharedImages().getImage(fileIcon);
          cell.setImage(icon);

          super.update(cell);
        }
      });

      viewer.setContentProvider(new IStructuredContentProvider() {

        @Override
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        }

        @Override
        public void dispose() {
        }

        @Override
        public Object[] getElements(Object inputElement) {
          UserIgnoreFileFilter filter = (UserIgnoreFileFilter) inputElement;
          List<File> ignoredFiles = new LinkedList<File>();
          for (String filename : filter.getIgnoredFileNames()) {
            File file = new File(filename);
            if (file.exists()) {
              ignoredFiles.add(file);
            }
          }
          return ignoredFiles.toArray();
        }
      });

      final UserIgnoreFileFilter individualFilter = Renamer.getDefault().getUserFilters().getIndividualFilter();
      viewer.setInput(individualFilter);

      individualFilter.addFilterListener(new FilterListener() {
        @Override
        public void filterChanged(Filter<File> filter) {
          viewer.refresh();
        }
      });

      GridData tableLayoutData = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 3);
      tableLayoutData.heightHint = 150;
      viewer.getTable().setLayoutData(tableLayoutData);

      addFileButton = new Button(parent, SWT.PUSH);
      addFileButton.setText("Add File...");
      addFileButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));

      addFileButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
          String filePath = new FileDialog(parent.getShell()).open();
          if (filePath != null) {
            individualFilter.addIgnoredFile(new File(filePath));
          }
        }
      });

      addFolderButton = new Button(parent, SWT.PUSH);
      addFolderButton.setText("Add Folder...");
      addFolderButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));

      addFolderButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
          String folderPath = new DirectoryDialog(parent.getShell()).open();
          if (folderPath != null) {
            individualFilter.addIgnoredFile(new File(folderPath));
          }
        }
      });

      removeButton = new Button(parent, SWT.PUSH);
      removeButton.setText("Remove");
      removeButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false));

      removeButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
          TableItem[] selection = viewer.getTable().getSelection();
          File[] filesToRemove = new File[selection.length];
          int i = 0;
          for (TableItem selectedItem : selection) {
            filesToRemove[i++] = (File) selectedItem.getData();
          }
          for (File file : filesToRemove) {
            individualFilter.removeIgnoredFile(file);
          }
        }
      });
    }
  }

  @Override
  public void setFocus() {
  }

}
TOP

Related Classes of edu.zao.fire.views.filter.FilterView$GeneralFiltersSubView

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.