blob: 676b38037d714abb11a65dda0d48c89cc11228a2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012 Laurent CARON
* 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:
* Laurent CARON (laurent.caron at gmail dot com) - initial API and implementation
*******************************************************************************/
package org.mihalis.opal.propertyTable.editor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.mihalis.opal.propertyTable.PTProperty;
import org.mihalis.opal.propertyTable.PTWidget;
import org.mihalis.opal.utils.ResourceManager;
import org.mihalis.opal.utils.SWTGraphicUtil;
/**
* This abstract class contains common code for editors that open a window :
* dimension editor, insets editor, rectangle editor.
*/
public abstract class PTWindowEditor extends PTChooserEditor {
/**
* Open window.
*
* @param widget the widget
* @param item the item
* @param property the property
* @see org.mihalis.opal.propertyTable.editor.PTChooserEditor#openWindow(org.mihalis.opal.propertyTable.PTWidget,
* org.eclipse.swt.widgets.Item,
* org.mihalis.opal.propertyTable.PTProperty)
*/
@Override
protected void openWindow(final PTWidget widget, final Item item, final PTProperty property) {
final Shell shell = new Shell(widget.getWidget().getShell(), SWT.DIALOG_TRIM);
shell.setLayout(new GridLayout(2, false));
shell.setText(ResourceManager.getLabel(ResourceManager.EDIT_PROPERTY));
final Label title = new Label(shell, SWT.NONE);
final GridData titleLayoutData = new GridData(GridData.BEGINNING, GridData.BEGINNING, true, false, 2, 1);
titleLayoutData.widthHint = 400;
title.setLayoutData(titleLayoutData);
final Font font = SWTGraphicUtil.buildFontFrom(title, SWT.BOLD, 16);
title.setFont(font);
title.setText(ResourceManager.getLabel(ResourceManager.EDIT_PROPERTY));
SWTGraphicUtil.addDisposer(title, font);
createContent(shell, property);
final Composite composite = new Composite(shell, SWT.NONE);
composite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, 2, 1));
final GridLayout gridLayout = new GridLayout(2, false);
gridLayout.horizontalSpacing = gridLayout.verticalSpacing = 0;
composite.setLayout(gridLayout);
final Button ok = new Button(composite, SWT.PUSH);
final GridData okLayoutData = new GridData(GridData.END, GridData.BEGINNING, true, false);
okLayoutData.widthHint = 150;
ok.setLayoutData(okLayoutData);
ok.setText(ResourceManager.getLabel(ResourceManager.OK));
ok.addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(final Event event) {
fillProperty(item, property);
shell.dispose();
}
});
final Button cancel = new Button(composite, SWT.PUSH);
final GridData cancelLayoutData = new GridData(GridData.END, GridData.BEGINNING, false, false);
cancelLayoutData.widthHint = 150;
cancel.setLayoutData(cancelLayoutData);
cancel.setText(ResourceManager.getLabel(ResourceManager.CANCEL));
cancel.addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(final Event event) {
shell.dispose();
}
});
shell.setDefaultButton(ok);
shell.pack();
SWTGraphicUtil.centerShell(shell);
shell.open();
}
/**
* Fill property when the ok button is pressed.
*
* @param item item in which the string representation of property's value
* is display
* @param property associated property
*/
protected abstract void fillProperty(Item item, PTProperty property);
/**
* Create the content (text widgets).
*
* @param shell associated shell
* @param property associated property
*/
protected abstract void createContent(Shell shell, PTProperty property);
/**
* Gets the background color.
*
* @param property the property
* @return the background color
* @see org.mihalis.opal.propertyTable.editor.PTChooserEditor#getBackgroundColor(org.mihalis.opal.propertyTable.PTProperty)
*/
@Override
protected Color getBackgroundColor(final PTProperty property) {
return null;
}
/**
* Gets the int value.
*
* @param text text widget
* @return the integer value stored in a text. If the text value is empty,
* returns 0
*/
protected int getIntValue(final Text text) {
if (text.getText().trim().equals("")) {
return 0;
}
return Integer.parseInt(text.getText().trim());
}
/**
* Add a verify listener to a given text that accepts only integers.
*
* @param text text widget
*/
protected void addVerifyListeners(final Text text) {
text.addListener(SWT.Verify, new Listener() {
@Override
public void handleEvent(final Event e) {
final String string = e.text;
final char[] chars = new char[string.length()];
string.getChars(0, chars.length, chars, 0);
for (int i = 0; i < chars.length; i++) {
if (!('0' <= chars[i] && chars[i] <= '9') && e.keyCode != SWT.BS && e.keyCode != SWT.DEL) {
e.doit = false;
return;
}
}
}
});
}
}