blob: a51ba772c27d4cff780d5b2877f473139b055d65 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.internal.ccvs.ui.repo;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.action.*;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.team.internal.ccvs.ui.CVSUIMessages;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.actions.ActionGroup;
public class RepositoriesSortingActionGroup extends ActionGroup {
// Sorting actions
private Action labelSortingAction;
private Action locationSortingAction;
private Action hostSortingAction;
/**
* Action for switching between ascending and descending sorting order
*/
private Action reverseSortingOrderAction;
/**
* Current comparator set.
*/
private RepositoryComparator comparator;
private IPropertyChangeListener comparatorUpdater;
/**
* Indicates if comparator was changed
*/
public static final String CHANGE_COMPARATOR = "changeComparator"; //$NON-NLS-1$
private static final String REPOSITORIES_SORTING_ACTION_GROUP = "repositoriesSortingActionGroup"; //$NON-NLS-1$
public RepositoriesSortingActionGroup(Shell shell,
IPropertyChangeListener comparatorUpdater) {
Assert.isNotNull(shell);
this.comparatorUpdater = comparatorUpdater;
labelSortingAction = new Action(
CVSUIMessages.RepositoriesSortingActionGroup_label,
Action.AS_RADIO_BUTTON) {
@Override
public void run() {
if (labelSortingAction.isChecked())
setComparatorOrder(RepositoryComparator.ORDER_BY_LABEL);
}
};
locationSortingAction = new Action(
CVSUIMessages.RepositoriesSortingActionGroup_location,
Action.AS_RADIO_BUTTON) {
@Override
public void run() {
if (locationSortingAction.isChecked())
setComparatorOrder(RepositoryComparator.ORDER_BY_LOCATION);
}
};
hostSortingAction = new Action(
CVSUIMessages.RepositoriesSortingActionGroup_host,
Action.AS_RADIO_BUTTON) {
@Override
public void run() {
if (hostSortingAction.isChecked())
setComparatorOrder(RepositoryComparator.ORDER_BY_HOST);
}
};
reverseSortingOrderAction = new Action(
CVSUIMessages.RepositoriesSortingActionGroup_descending,
Action.AS_CHECK_BOX) {
@Override
public void run() {
reverseSortingOrder();
}
};
}
/* package */void setComparatorOrder(int orderBy) {
comparator.setOrder(orderBy);
firePropertyChange(comparator);
}
private void reverseSortingOrder() {
this.comparator.setAscending(!comparator.isAscending());
firePropertyChange(comparator);
}
private void firePropertyChange(RepositoryComparator newComparator) {
// Update viewer
if (comparatorUpdater != null) {
comparatorUpdater
.propertyChange(new PropertyChangeEvent(this,
CHANGE_COMPARATOR, null /* oldComparator */,
newComparator));
}
}
@Override
public void fillActionBars(IActionBars actionBars) {
IMenuManager menuManager = actionBars.getMenuManager();
if (menuManager.find(IWorkbenchActionConstants.MB_ADDITIONS) != null)
menuManager.insertAfter(IWorkbenchActionConstants.MB_ADDITIONS,
new Separator(REPOSITORIES_SORTING_ACTION_GROUP));
else
menuManager.add(new Separator(REPOSITORIES_SORTING_ACTION_GROUP));
IMenuManager sortSubmenu = new MenuManager(
CVSUIMessages.RepositoriesSortingActionGroup_sortBy);
menuManager.appendToGroup(REPOSITORIES_SORTING_ACTION_GROUP,
sortSubmenu);
sortSubmenu.add(labelSortingAction);
sortSubmenu.add(locationSortingAction);
sortSubmenu.add(hostSortingAction);
sortSubmenu.add(new Separator());
sortSubmenu.add(reverseSortingOrderAction);
}
public void setSelectedComparator(RepositoryComparator selectedComparator) {
comparator = selectedComparator;
labelSortingAction
.setChecked(selectedComparator.getOrderBy() == RepositoryComparator.ORDER_BY_LABEL);
locationSortingAction
.setChecked(selectedComparator.getOrderBy() == RepositoryComparator.ORDER_BY_LOCATION);
hostSortingAction
.setChecked(selectedComparator.getOrderBy() == RepositoryComparator.ORDER_BY_HOST);
reverseSortingOrderAction.setChecked(!selectedComparator.isAscending());
firePropertyChange(comparator);
}
}