Java tutorial
/** * Copyright (c) 2008-2012, Dr. Garbage Community * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.drgarbage.core.jface; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Shell; import com.drgarbage.core.CorePlugin; public class AbstractMessageDialog extends MessageDialog { private static final String DIALOG_HEIGHT = "DIALOG_HEIGHT"; private static final String DIALOG_ORIGIN_X = "DIALOG_X_ORIGIN"; private static final String DIALOG_ORIGIN_Y = "DIALOG_Y_ORIGIN"; private static final String DIALOG_WIDTH = "DIALOG_WIDTH"; /* (non-Javadoc) * @see org.eclipse.jface.window.Window#close() */ public boolean close() { persistDialogSettings(getShell(), id); return super.close(); } private String id; public AbstractMessageDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage, int dialogImageType, String[] dialogButtonLabels, int defaultIndex, String id) { super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels, defaultIndex); this.id = id; } /** * Persists the location and dimensions of the shell and other user settings in the * plugin's dialog settings under the provided dialog settings section name * * @param shell The shell whose geometry is to be stored * @param dialogSettingsSectionName The name of the dialog settings section */ protected void persistDialogSettings(Shell shell, String dialogSettingsSectionName) { Point shellLocation = shell.getLocation(); Point shellSize = shell.getSize(); IDialogSettings settings = getDialogSettings(dialogSettingsSectionName); settings.put(DIALOG_ORIGIN_X, shellLocation.x); settings.put(DIALOG_ORIGIN_Y, shellLocation.y); settings.put(DIALOG_WIDTH, shellSize.x); settings.put(DIALOG_HEIGHT, shellSize.y); } private IDialogSettings getDialogSettings(String dialogSettingsSectionName) { IDialogSettings settings = CorePlugin.getDefault().getDialogSettings(); IDialogSettings section = settings.getSection(dialogSettingsSectionName); if (section == null) { section = settings.addNewSection(dialogSettingsSectionName); } return section; } /* (non-Javadoc) * @see org.eclipse.jface.window.Window#getInitialLocation(org.eclipse.swt.graphics.Point) */ protected Point getInitialLocation(Point initialSize) { Point p = getInitialLocation(id); return p != null ? p : super.getInitialLocation(initialSize); } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#isResizable() */ protected boolean isResizable() { return true; } /* (non-Javadoc) * @see org.eclipse.jface.window.Window#getInitialSize() */ protected Point getInitialSize() { Point p = super.getInitialSize(); return getInitialSize(id, p); } /** * Returns the initial location which is persisted in the IDE Plugin dialog settings * under the provided dialog setttings section name. * If location is not persisted in the settings, the <code>null</code> is returned. * * @param dialogSettingsSectionName The name of the dialog settings section * @return The initial location or <code>null</code> */ public Point getInitialLocation(String dialogSettingsSectionName) { IDialogSettings settings = getDialogSettings(dialogSettingsSectionName); try { int x = settings.getInt(DIALOG_ORIGIN_X); int y = settings.getInt(DIALOG_ORIGIN_Y); return new Point(x, y); } catch (NumberFormatException e) { } return null; } /** * Returns the initial size which is the larger of the <code>initialSize</code> or * the size persisted in the IDE UI Plugin dialog settings under the provided dialog setttings section name. * If no size is persisted in the settings, the <code>initialSize</code> is returned. * * @param initialSize The initialSize to compare against * @param dialogSettingsSectionName The name of the dialog settings section * @return the initial size */ private Point getInitialSize(String dialogSettingsSectionName, Point initialSize) { IDialogSettings settings = getDialogSettings(dialogSettingsSectionName); try { int x, y; x = settings.getInt(DIALOG_WIDTH); y = settings.getInt(DIALOG_HEIGHT); return new Point(Math.max(x, initialSize.x), Math.max(y, initialSize.y)); } catch (NumberFormatException e) { } return initialSize; } }