/**
* Copyright 2011 Steve Good [steve@stevegood.org]
*
* 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.muratools.eclipse.wizard.newPlugin;
import java.util.ArrayList;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.TreeColumn;
import com.muratools.eclipse.SettingField;
public class SettingsPage extends WizardPage {
ArrayList<SettingField> settings = new ArrayList<SettingField>();
private Button newSetting;
private Button btnEditSetting;
private Tree settingsTree;
private TreeColumn trclmnSettings;
private boolean editing = false;
public SettingsPage(String pageName){
super(pageName);
setTitle("Add Settings");
setDescription("Add settings fields to the plugin");
}
//@Override
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
composite.setLayout(layout);
setControl(composite);
settingsTree = new Tree(composite, SWT.BORDER);
settingsTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
settingsTree.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
TreeItem item = (TreeItem)e.item;
if (item.getParentItem() == null){
btnEditSetting.setEnabled(true);
} else {
btnEditSetting.setEnabled(false);
}
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
trclmnSettings = new TreeColumn(settingsTree, SWT.LEFT);
trclmnSettings.setWidth(500);
trclmnSettings.setText("Settings");;
Composite compBtns = new Composite(composite, SWT.NONE);
GridLayout glCompBtns = new GridLayout(4,false);
compBtns.setLayout(glCompBtns);
newSetting = new Button(compBtns, SWT.NONE);
newSetting.setText("Add Setting");
newSetting.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,false,1,1));
newSetting.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e){
editing = false;
openNewSettingWizard(new SettingDialog(getShell()));
}
});
Button removeSetting = new Button(compBtns, SWT.NONE);
removeSetting.setText("Remove Setting");
removeSetting.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,false,1,1));
removeSetting.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
removeSelectedTreeItem();
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
Button removeAllSettings = new Button(compBtns, SWT.NONE);
removeAllSettings.setText("Remove All Settings");
removeAllSettings.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,false,1,1));
removeAllSettings.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
settingsTree.removeAll();
settings.removeAll(settings);
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
btnEditSetting = new Button(compBtns,SWT.NONE);
btnEditSetting.setText("Edit Selected Setting");
btnEditSetting.setEnabled(false);
btnEditSetting.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,false,1,1));
btnEditSetting.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
if (settingsTree.getSelection().length == 1){
SettingDialog dialog = new SettingDialog(getShell());
TreeItem item = settingsTree.getSelection()[0];
for (SettingField setting : settings){
if (setting.getLabel() == item.getText()){
dialog.setStrName(setting.getName());
dialog.setStrLabel(setting.getLabel());
dialog.setStrHint(setting.getHint());
dialog.setStrType(setting.getType());
dialog.setIsRequired(setting.getRequired());
dialog.setStrValidation(setting.getValidation());
dialog.setStrRegEx(setting.getRegEx());
dialog.setStrMessage(setting.getMessage());
dialog.setStrDefault(setting.getDefaultValue());
dialog.setStrOptionLabels(setting.getOptionLabelList());
dialog.setStrOptions(setting.getOptionList());
break;
}
}
if (dialog.getName().length() > 0){
editing = true;
openNewSettingWizard(dialog);
}
}
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
});
}
public void addTreeNode(SettingField setting){
settings.add(setting);
}
private void openNewSettingWizard(SettingDialog dialog){
dialog.setBlockOnOpen(true);
if (dialog.open() != Dialog.OK){
return;
} else {
if (dialog.getName().length() == 0 || dialog.getLabel().length() == 0){
return;
}
if (editing){
removeSelectedTreeItem();
editing = false;
}
SettingField setting = new SettingField();
setting.setName(dialog.getName());
setting.setLabel(dialog.getLabel());
setting.setHint(dialog.getHint());
setting.setType(dialog.getType());
setting.setRequired(dialog.getIsRequired());
setting.setValidation(dialog.getValidation());
setting.setRegEx(dialog.getRegEx());
setting.setMessage(dialog.getMessage());
setting.setDefaultValue(dialog.getDefault());
setting.setOptionList(dialog.getOptions());
setting.setOptionLabelList(dialog.getOptionLabels());
settings.add(setting);
updateTree(setting);
}
}
private void updateTree(SettingField setting){
TreeItem parentItem = new TreeItem(settingsTree, 0);
parentItem.setText(setting.getLabel());
newTreeItem(parentItem,"Name: " + setting.getName());
newTreeItem(parentItem,"Label: " + setting.getLabel());
newTreeItem(parentItem,"Hint: " + setting.getHint());
newTreeItem(parentItem,"Type: " + setting.getType());
newTreeItem(parentItem,"Required: " + setting.getRequired().toString());
newTreeItem(parentItem,"Validation: " + setting.getValidation());
newTreeItem(parentItem,"RegEx: " + setting.getRegEx());
newTreeItem(parentItem,"Message: " + setting.getMessage());
newTreeItem(parentItem,"Default Value: " + setting.getDefaultValue());
TreeItem optionsItem = newTreeItem(parentItem,"Options");
if (setting.getOptionList().split("\\^").length > 1){
for (String option : setting.getOptionList().split("\\^")){
newTreeItem(optionsItem,option);
}
}
TreeItem optionLabelsItem = newTreeItem(parentItem,"Option Labels");
if (setting.getOptionLabelList().split("\\^").length > 1){
for (String option : setting.getOptionLabelList().split("\\^")){
newTreeItem(optionLabelsItem,option);
}
}
}
private TreeItem newTreeItem(TreeItem parent, String label){
TreeItem newItem = new TreeItem(parent,0);
newItem.setText(label);
return newItem;
}
private void removeSelectedTreeItem(){
TreeItem[] selection = settingsTree.getSelection();
for (int i=0; i < selection.length; i++){
//settingsTree.clear(i, true);
selection[i].removeAll();
selection[i].dispose();
settings.remove(i);
}
}
}