Java tutorial
/* * Copyright (C) Heavy Lifting Software 2007. * * This file is part of MouseFeed. * * MouseFeed is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MouseFeed is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with MouseFeed. If not, see <http://www.gnu.org/licenses/>. */ package com.mousefeed.eclipse.commands; import static com.mousefeed.eclipse.Layout.STACKED_V_OFFSET; import static com.mousefeed.eclipse.Layout.placeUnder; import static org.apache.commons.lang.Validate.notNull; import com.mousefeed.client.Messages; import com.mousefeed.client.OnWrongInvocationMode; import com.mousefeed.client.collector.AbstractActionDesc; import com.mousefeed.eclipse.preferences.ActionOnWrongInvocationMode; import com.mousefeed.eclipse.preferences.PreferenceAccessor; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; /** * The dialog to configure action invocation mode. * * @author Andriy Palamarchuk */ public class ConfigureActionInvocationDialog extends Dialog { /** * Provides messages text. */ private static final Messages MESSAGES = new Messages(ConfigureActionInvocationDialog.class); /** * The index of the value indicating using of the default on wrong * invocation mode handling. */ private static final int DEFAULT_ON_WRONG_INVOCATION_MODE_IDX = 0; /** * The action description of the action to configure invocation mode for. */ private final AbstractActionDesc actionDesc; /** * Setting what to do when user invokes an action using wrong invocation * mode. */ private Combo onWrongInvocationModeCombo; /** * Provides access to the plugin preferences. */ private final PreferenceAccessor preferences = PreferenceAccessor.getInstance(); /** * The UI factory class. */ private final OnWrongInvocationModeUI onWrongInvocationModeUI = new OnWrongInvocationModeUI(); /** * The constructor. Creates the dialog. * @param parentShell the parent shell. Not <code>null</code>. * @param actionDesc the action description to create the dialog for. * Not <code>null</code>. */ public ConfigureActionInvocationDialog(final Shell parentShell, final AbstractActionDesc actionDesc) { super(parentShell); notNull(parentShell); notNull(actionDesc); this.actionDesc = actionDesc; } // see base @Override protected Control createDialogArea(final Composite parent) { final Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new FormLayout()); Control c; c = createActionNameLabel(composite, null); c = onWrongInvocationModeUI.createLabel(composite, c, MESSAGES.get("field.onWrongInvocationMode.label")); onWrongInvocationModeCombo = onWrongInvocationModeUI.createCombo(composite, c); onWrongInvocationModeCombo.add(getDefaultInvocationMode(), 0); updateOnWrongInvocationModeCombo(preferences.getOnWrongInvocationMode(actionDesc.getId())); applyDialogFont(composite); return composite; } // see base @Override protected void configureShell(final Shell shell) { super.configureShell(shell); shell.setText(MESSAGES.get("title", actionDesc.getLabel())); } /** * Creates a label for {@link #onWrongInvocationModeCombo}. */ private Control createActionNameLabel(final Composite container, final Control above) { notNull(container); final Label label = new Label(container, SWT.NULL); final String text = MESSAGES.get("field.actionName.label", actionDesc.getLabel()); label.setText(text); placeUnder(label, above, STACKED_V_OFFSET); return label; } // see base @Override protected void okPressed() { final OnWrongInvocationMode mode = getSelectedOnWrongInvocationMode(); if (mode == null) { preferences.removeOnWrongInvocaitonMode(actionDesc.getId()); } else { final ActionOnWrongInvocationMode actionMode = new ActionOnWrongInvocationMode(actionDesc); actionMode.setOnWrongInvocationMode(getSelectedOnWrongInvocationMode()); preferences.setOnWrongInvocationMode(actionMode); } super.okPressed(); } /** * Set the name in the combo widget to the specified value. * @param mode the value to set the combo to. <code>null</code> means to use * global settings. */ private void updateOnWrongInvocationModeCombo(final OnWrongInvocationMode mode) { onWrongInvocationModeCombo.setText(mode == null ? getDefaultInvocationMode() : mode.getLabel()); } /** * The currently selected wrong invocation mode handling. * @return the wrong invocation mode handling. <code>null</code> if the * user selected the default handling. */ private OnWrongInvocationMode getSelectedOnWrongInvocationMode() { final int i = onWrongInvocationModeCombo.getSelectionIndex(); return i == DEFAULT_ON_WRONG_INVOCATION_MODE_IDX ? null : OnWrongInvocationMode.values()[i - 1]; } /** * The text for the {@link OnWrongInvocationMode} value indicating to use * invocation handling as defined by preferences. * @return the default invocation handling option. Never <code>null</code>. */ private String getDefaultInvocationMode() { return MESSAGES.get("field.onWrongInvocationMode.value.default"); } }