Package org.erlide.ui.actions

Source Code of org.erlide.ui.actions.SortAction

/*******************************************************************************
* Copyright (c) 2006 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.erlide.ui.actions;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.erlide.ui.ErlideImage;
import org.erlide.ui.navigator.ErlElementSorter;

public class SortAction extends Action {

    private boolean fSorted;
    private int fSortedHow;

    private final StructuredViewer fViewer;

    private final ViewerComparator fComparator;
    private final ViewerComparator fComparator2;

    private final ViewerComparator fDefaultComparator;

    private final IPreferenceStore fStore;

    /**
     * @param viewer
     * @param tooltipText
     * @param sorter
     * @param defaultSorter
     * @param listener
     * @param useMiniImage
     */
    public SortAction(final StructuredViewer viewer, final String tooltipText,
            final ViewerComparator comparator, final ViewerComparator comparator2,
            final IPropertyChangeListener listener, final boolean useMiniImage,
            final IPreferenceStore store) {

        super(tooltipText, IAction.AS_CHECK_BOX);
        // Set the tooltip
        setToolTipText(tooltipText);
        // Set the default comparator
        fDefaultComparator = null;
        // Set the viewer
        fViewer = viewer;
        // Set prefs store
        fStore = store;
        // Set the comparators
        fComparator = comparator;
        fComparator2 = comparator2;

        // Determine if the viewer is already sorted
        fSorted = fStore != null && fStore.getBoolean("erlide.sortedOutline");
        fSortedHow = fStore != null ? fStore.getInt("erlide.sortedOutlineHow")
                : ErlElementSorter.SORT_ON_NAME;
        setComparator();
        // Set the status of this action depending on whether it is sorted or
        // not
        setChecked(fSorted);
        // Set the image
        setImage();
        // If a listener was specified, use it
        if (listener != null) {
            addListenerObject(listener);
        }
    }

    /**
     *
     */
    private void setComparator() {
        if (fSorted) {
            if (fSortedHow == ErlElementSorter.SORT_ON_EXPORT) {
                fViewer.setComparator(fComparator2);
            } else {
                fViewer.setComparator(fComparator);
            }
        } else {
            fViewer.setComparator(fDefaultComparator);
        }
    }

    @Override
    public void run() {
        // Toggle sorting in three steps
        if (fSorted) {
            if (fSortedHow == ErlElementSorter.SORT_ON_NAME) {
                fSortedHow = ErlElementSorter.SORT_ON_EXPORT;
            } else {
                fSorted = false;
            }
        } else {
            // Sorting is off
            // Turn it on (name)
            fSorted = true;
            fSortedHow = ErlElementSorter.SORT_ON_NAME;
        }
        setComparator();
        if (fStore != null) {
            fStore.setValue("erlide.sortedOutline", fSorted);
            final int how = fViewer.getComparator() == fComparator2 ? ErlElementSorter.SORT_ON_EXPORT
                    : ErlElementSorter.SORT_ON_NAME;
            fStore.setValue("erlide.sortedOutlineHow", how);
        }
        setChecked(fSorted);
        setImage();
    }

    private void setImage() {
        final ImageDescriptor desc = fSorted
                && fSortedHow == ErlElementSorter.SORT_ON_EXPORT ? ErlideImage.EXPORTED_SORT
                .getDescriptor() : ErlideImage.ALPHAB_SORT.getDescriptor();
        setImageDescriptor(desc);
    }

}
TOP

Related Classes of org.erlide.ui.actions.SortAction

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.