org.eclipse.ui.internal.views.markers.MarkersViewColumnsDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.ui.internal.views.markers.MarkersViewColumnsDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2008, 2011 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 ******************************************************************************/

package org.eclipse.ui.internal.views.markers;

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

import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.views.markers.MarkerField;

/**
 * MarkersViewSettingDialog is the dialog for showing marker preferences.
 * 
 * 
 * @since 3.7
 * @author Hitesh Soliwal
 * 
 */
public class MarkersViewColumnsDialog extends ViewerColumnsDialog {

    private ExtendedMarkersView extendedView;

    /**
     * Create a new instance of the receiver.
     * 
     * @param view
     *            - the view this is being launched from
     */
    public MarkersViewColumnsDialog(ExtendedMarkersView view) {
        super(view.getSite().getShell());
        this.extendedView = view;
        initialize(false);
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets
     * .Shell)
     */
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText(JFaceResources.getString("ConfigureColumnsDialog_Title")); //$NON-NLS-1$
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.window.Window#getShellStyle()
     */
    protected int getShellStyle() {
        return super.getShellStyle() | SWT.RESIZE;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets
     * .Composite)
     */
    protected Control createDialogArea(Composite parent) {
        Control control = super.createDialogArea(parent);
        return control;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.dialogs.Dialog#okPressed()
     */
    protected void okPressed() {
        extendedView.setVisibleFields(getVisibleFields(), getNewWidths());
        super.okPressed();
    }

    /**
     */
    private int[] getNewWidths() {
        List visible = getVisible();
        int[] widths = new int[visible.size()];
        int i = 0;
        Iterator iterator = visible.iterator();
        while (iterator.hasNext()) {
            widths[i] = ((FieldEntry) iterator.next()).width;
            i++;
        }
        return widths;
    }

    private Collection getVisibleFields() {
        List visible = getVisible();
        List list = new ArrayList(visible.size());
        Iterator iterator = visible.iterator();
        while (iterator.hasNext()) {
            list.add(((FieldEntry) iterator.next()).field);
        }
        return list;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.preferences.ViewSettingsDialog#performDefaults()
     */
    protected void performDefaults() {
        initialize(true);
        super.performDefaults();
    }

    /**
     */
    void initialize(boolean defaultWidths) {
        MarkerField[] allFields = extendedView.getBuilder().getGenerator().getAllFields();
        MarkerField[] visibleFields = null;
        if (defaultWidths) {
            visibleFields = extendedView.getBuilder().getGenerator().getInitialVisible();
        } else {
            visibleFields = extendedView.getBuilder().getGenerator().getVisibleFields();
        }
        List visible = getVisible();
        List nonVisible = getNonVisible();
        visible.clear();
        nonVisible.clear();
        FieldEntry entry = null;
        for (int i = 0; i < allFields.length; i++) {
            if (!contains(visibleFields, allFields[i])) {
                entry = new FieldEntry(allFields[i], -1);
                entry.width = extendedView.getFieldWidth(entry.field, defaultWidths ? 0 : -1, !defaultWidths);
                entry.visible = false;
                nonVisible.add(entry);
            }
        }
        for (int i = 0; i < visibleFields.length; i++) {
            entry = new FieldEntry(visibleFields[i], -1);
            entry.width = extendedView.getFieldWidth(entry.field, defaultWidths ? 0 : -1, !defaultWidths);
            entry.visible = true;
            visible.add(entry);
        }
    }

    /**
     * @param visibleFields
     * @param field
     */
    private boolean contains(MarkerField[] visibleFields, MarkerField field) {
        for (int i = 0; i < visibleFields.length; i++) {
            if (visibleFields[i].equals(field)) {
                return true;
            }
        }
        return false;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.ui.internal.views.markers.ViewerColumnsDialog#getLabelProvider
     * ()
     */
    protected ITableLabelProvider getLabelProvider() {
        return new TableLabelProvider() {
            public String getText(Object element) {
                return ((FieldEntry) element).field.getName();
            }
        };
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.internal.views.markers.ViewerColumnsDialog#
     * getColumnInfoProvider()
     */
    protected IColumnInfoProvider getColumnInfoProvider() {

        return new IColumnInfoProvider() {
            public int getColumnIndex(Object columnObj) {
                return getVisible().indexOf(columnObj);
            }

            public int getColumnWidth(Object columnObj) {
                FieldEntry field = (FieldEntry) columnObj;
                if (field.width <= 0) {
                    field.width = extendedView.getFieldWidth(field.field, field.width, false);
                }
                return field.width;
            }

            public boolean isColumnVisible(Object columnObj) {
                return ((FieldEntry) columnObj).visible;
            }

            public boolean isColumnMovable(Object columnObj) {
                return true;
            }

            public boolean isColumnResizable(Object columnObj) {
                return true;
            }
        };
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.ui.internal.views.markers.ViewerColumnsDialog#getColumnUpdater
     * ()
     */
    protected IColumnUpdater getColumnUpdater() {

        return new IColumnUpdater() {
            public void setColumnVisible(Object columnObj, boolean visible) {
                ((FieldEntry) columnObj).visible = visible;
            }

            public void setColumnMovable(Object columnObj, boolean movable) {
                // not implemented
            }

            public void setColumnIndex(Object columnObj, int index) {
                // ignore
            }

            public void setColumnResizable(Object columnObj, boolean resizable) {
                // ignore
            }

            public void setColumnWidth(Object columnObj, int newWidth) {
                ((FieldEntry) columnObj).width = newWidth;
            }
        };
    }

    static class FieldEntry {
        final MarkerField field;
        int width;
        boolean visible;

        FieldEntry(MarkerField field, int width) {
            this.field = field;
            this.width = width;
            visible = false;
        }

        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((field == null) ? 0 : field.hashCode());
            return result;
        }

        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            FieldEntry other = (FieldEntry) obj;
            if (field == null) {
                if (other.field != null)
                    return false;
            } else if (!field.equals(other.field))
                return false;
            return true;
        }

    }
}