/*
* Copyright (C) 2013 The University of Electro-Communications All rights reserved.
* Copyright (C) 2013 AXE,Inc.
*/
package net.dependableos.dcase.diagram.editor.ui;
import net.dependableos.dcase.Argument;
import net.dependableos.dcase.System;
import net.dependableos.dcase.diagram.part.PatternUtil;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Spinner;
/**
* A dialog to input number for Pattern nodes.
*/
public class PatternNumberDialog extends Dialog {
/**
* the initial width.
*/
private static final int INIT_WIDTH = 500;
/**
* the strings of title and label.
*/
private String titleStr = null;
private String labelStr = null;
/**
* the node and the argument.
*/
private System sNode;
private Argument argument;
/**
* the number.
*/
private int nr;
private int min;
private int max;
/**
* the spinner to input the number.
*/
private Spinner nrSpinner = null;
/**
* Creates a dialog and initializes it.
*
* @param parentShell the parent.
* @param min the minimum number.
* @param max the maximum number.
*/
public PatternNumberDialog(Shell parentShell, String titleStr, String labelStr,
System sNode, Argument argument) {
super(parentShell);
this.titleStr = titleStr;
this.labelStr = labelStr;
this.sNode = sNode;
this.argument = argument;
if (PatternUtil.isLoop(sNode.getSubType())) {
this.min = this.nr = 1;
this.max = 100; // SPINNER_MAX at AttributeDialog.
} else {
this.min = this.nr = sNode.getI();
this.max = sNode.getJ();
}
}
/**
* Returns the current number.
* @return the current number.
*/
public int getNumber() {
return nr;
}
/**
* Sets the number.
* @param nr the number.
*/
public void setNumber(int nr) {
this.nr = nr;
}
/**
* {@inheritDoc}
*/
@Override
protected Control createDialogArea(Composite parent) {
// sets grids.
Composite panel = (Composite) super.createDialogArea(parent);
panel.setLayoutData(new GridData(GridData.FILL_BOTH));
GridLayout layout = new GridLayout();
layout.numColumns = 2;
panel.setLayout(layout);
// sets the title.
getShell().setText(titleStr);
// create a label and initializes it.
Label label = new Label(panel, SWT.WRAP);
label.setText(String.format("%s\n%s", //$NON-NLS-1$
PatternUtil.getNodeLabel(PatternUtil.getParent(sNode, argument), argument),
labelStr));
label.setLayoutData(new GridData());
// creates a spinner.
nrSpinner = new Spinner(parent, SWT.BORDER);
nrSpinner.setMaximum(max);
nrSpinner.setMinimum(min);
nrSpinner.setSelection(nr - min);
GridData nrGrid = new GridData();
nrGrid.horizontalAlignment = GridData.FILL;
nrGrid.grabExcessHorizontalSpace = true;
nrSpinner.setLayoutData(nrGrid);
return panel;
}
/**
* {@inheritDoc}
*/
@Override
protected Point getInitialSize() {
Point size = super.getInitialSize();
if (size.x < INIT_WIDTH) {
size.x = INIT_WIDTH;
}
return size;
}
/**
* {@inheritDoc}
*/
@Override
protected void okPressed() {
nr = Integer.valueOf(nrSpinner.getText());
super.okPressed();
}
}