Package tk.eclipse.plugin.htmleditor

Source Code of tk.eclipse.plugin.htmleditor.CustomAssistPreferencePage

package tk.eclipse.plugin.htmleditor;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
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.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.objectstyle.wolips.preferences.TableViewerSupport;

import tk.eclipse.plugin.htmleditor.assist.CustomAttribute;
import tk.eclipse.plugin.htmleditor.assist.CustomElement;

/**
* @author Naoki Takezoe
*/
public class CustomAssistPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
 
  private TableViewer attributeTableViewer;
  private TableViewer elementTableViewer;
 
  private List<CustomElement> elementModel = new ArrayList<CustomElement>();
  private List<CustomAttribute> attributeModel = new ArrayList<CustomAttribute>();
 
  public CustomAssistPreferencePage(){
    super("CustomAssist");
    setPreferenceStore(HTMLPlugin.getDefault().getPreferenceStore());
    setDescription(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.CustomAssist.Desc"));
  }
 
  public void init(IWorkbench workbench) {
  }

  @Override
  protected Control createContents(Composite parent) {
    Composite composite = new Composite(parent, SWT.NULL);
   
    composite.setLayoutData(new GridData(GridData.FILL_BOTH));
    composite.setLayout(new GridLayout(1, false));
   
    TabFolder tabFolder = new TabFolder(composite, SWT.NULL);
    tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
   
    TabItem elementTab = new TabItem(tabFolder,SWT.NULL);
    elementTab.setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.CustomElements"));
    elementTab.setControl(createElementArea(tabFolder));
   
    TabItem attributeTab = new TabItem(tabFolder,SWT.NULL);
    attributeTab.setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.CustomAttributes"));
    attributeTab.setControl(createAttributeArea(tabFolder));
   
    // set initial values
    attributeModel.addAll(CustomAttribute.loadFromPreference(false));
    attributeTableViewer.refresh();
    elementModel.addAll(CustomElement.loadFromPreference(false));
    elementTableViewer.refresh();
   
    return composite;
  }
 
  private Control createElementArea(TabFolder tabFolder){
    TableViewerSupport support = new TableViewerSupport(elementModel, tabFolder){

      @Override
      protected void initTableViewer(TableViewer viewer) {
        Table table = viewer.getTable();
       
        TableColumn col1 = new TableColumn(table, SWT.NULL);
        col1.setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.DisplayName"));
        col1.setWidth(100);
       
        TableColumn col2 = new TableColumn(table, SWT.NULL);
        col2.setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.AssistString"));
        col2.setWidth(200);
      }

      @Override
      protected Object doAdd() {
        CustomElementDialog dialog = new CustomElementDialog(getShell());
        if(dialog.open()==Dialog.OK){
          return dialog.getCustomElement();
        }
        return null;
      }

      @Override
      protected void doEdit(Object obj) {
        CustomElement element = (CustomElement)obj;
        CustomElementDialog dialog = new CustomElementDialog(getShell(), element);
        if(dialog.open()==Dialog.OK){
          CustomElement newElement = dialog.getCustomElement();
          element.setDisplayName(newElement.getDisplayName());
          element.setAssistString(newElement.getAssistString());
        }
      }

      @Override
      protected ITableLabelProvider createLabelProvider() {
        return new CustomAssistLabelProvider();
      }
    };
   
    elementTableViewer = support.getTableViewer();
    return support.getControl();
  }
 
  private Control createAttributeArea(TabFolder tabFolder){
    TableViewerSupport support = new TableViewerSupport(attributeModel, tabFolder){

      @Override
      protected void initTableViewer(TableViewer viewer) {
        Table table = viewer.getTable();
       
        TableColumn col1 = new TableColumn(table, SWT.NULL);
        col1.setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.TargetTag"));
        col1.setWidth(100);
       
        TableColumn col2 = new TableColumn(table, SWT.NULL);
        col2.setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.AttributeName"));
        col2.setWidth(200);
      }

      @Override
      protected Object doAdd() {
        CustomAttributeDialog dialog = new CustomAttributeDialog(getShell());
        if(dialog.open()==Dialog.OK){
          return dialog.getCustomAttribute();
        }
        return null;
      }

      @Override
      protected void doEdit(Object obj) {
        CustomAttribute attrInfo = (CustomAttribute)obj;
        CustomAttributeDialog dialog = new CustomAttributeDialog(getShell(), attrInfo);
        if(dialog.open()==Dialog.OK){
          CustomAttribute newAttrInfo = dialog.getCustomAttribute();
          attrInfo.setTargetTag(newAttrInfo.getTargetTag());
          attrInfo.setAttributeName(newAttrInfo.getAttributeName());
        }
      }

      @Override
      protected ITableLabelProvider createLabelProvider() {
        return new CustomAssistLabelProvider();
      }
     
    };
   
    attributeTableViewer = support.getTableViewer();
    return support.getControl();
  }
 
  @Override
  protected void performDefaults() {
    attributeModel.clear();
    attributeModel.addAll(CustomAttribute.loadFromPreference(true));
    attributeTableViewer.refresh();
   
    elementModel.clear();
    elementModel.addAll(CustomElement.loadFromPreference(true));
    elementTableViewer.refresh();
  }
 
  @Override
  public boolean performOk() {
    CustomAttribute.saveToPreference(attributeModel);
    CustomElement.saveToPreference(elementModel);
    return true;
  }
 
  /**
   * LabelProvider for TableViewers
   */
  private class CustomAssistLabelProvider implements ITableLabelProvider {
   
    public Image getColumnImage(Object element, int columnIndex) {
      return null;
    }
   
    public String getColumnText(Object element, int columnIndex) {
      if(element instanceof CustomAttribute){
        CustomAttribute attr = (CustomAttribute)element;
        if(columnIndex==0){
          return attr.getTargetTag();
        } else if(columnIndex==1){
          return attr.getAttributeName();
        }
      } else if(element instanceof CustomElement){
        CustomElement elem = (CustomElement)element;
        if(columnIndex==0){
          return elem.getDisplayName();
        } else if(columnIndex==1){
          return elem.getAssistString();
        }
      }
      return null;
    }
   
    public void addListener(ILabelProviderListener listener) {
    }
   
    public void dispose() {
    }
   
    public boolean isLabelProperty(Object element, String property) {
      return false;
    }
   
    public void removeListener(ILabelProviderListener listener) {
    }
  }
 
  /**
   * The dialog to add / edit the code completion proposal for elements.
   */
  private class CustomElementDialog extends Dialog {
   
    private Text displayName;
    private Text assistString;
    private CustomElement element;
   
    public CustomElementDialog(Shell parentShell) {
      super(parentShell);
      setShellStyle(getShellStyle()|SWT.RESIZE);
    }
   
    public CustomElementDialog(Shell parentShell, CustomElement element) {
      super(parentShell);
      this.element = element;
    }
   
    @Override
    protected Point getInitialSize() {
      Point size = super.getInitialSize();
      size.x = 300;
      return size;
    }

    @Override
    protected Control createDialogArea(Composite parent) {
      getShell().setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.CustomElements"));
     
      Composite composite = new Composite(parent, SWT.NULL);
      composite.setLayoutData(new GridData(GridData.FILL_BOTH));
      composite.setLayout(new GridLayout(2,false));
     
      Label label = new Label(composite, SWT.NULL);
      label.setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.Dialog.DisplayName"));
     
      displayName = new Text(composite, SWT.BORDER);
      if(element!=null){
        displayName.setText(element.getDisplayName());
      }
      displayName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
//      displayName.addModifyListener(new ModifyListener(){
//        public void modifyText(ModifyEvent e){
//          if(assistString.getText().equals("")){
//            assistString.setText("<" + displayName.getText() + "/>");
//          }
//        }
//      });
     
      label = new Label(composite, SWT.NULL);
      label.setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.Dialog.AssistString"));
     
      assistString = new Text(composite, SWT.BORDER);
      assistString.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
      if(element!=null){
        assistString.setText(element.getAssistString());
      }
     
      return composite;
    }
   
    @Override
    protected void okPressed() {
      if(displayName.getText().length()==0){
        HTMLPlugin.openAlertDialog(HTMLPlugin.createMessage(
            HTMLPlugin.getResourceString("Error.Required"),
            new String[]{ HTMLPlugin.getResourceString("HTMLEditorPreferencePage.DisplayName") }));
        return;
      }
      if(assistString.getText().length()==0){
        HTMLPlugin.openAlertDialog(HTMLPlugin.createMessage(
            HTMLPlugin.getResourceString("Error.Required"),
            new String[]{ HTMLPlugin.getResourceString("HTMLEditorPreferencePage.AssistString") }));
        return;
      }
      element = new CustomElement(displayName.getText(), assistString.getText());
      super.okPressed();
    }
   
    public CustomElement getCustomElement(){
      return element;
    }
  }
 
  /**
   * The dialog to add / edit the code completion proposal for attributes.
   */
  private class CustomAttributeDialog extends Dialog {
   
    private Text target;
    private Text name;
    private CustomAttribute attrInfo;
   
    public CustomAttributeDialog(Shell parentShell) {
      super(parentShell);
      setShellStyle(getShellStyle()|SWT.RESIZE);
    }
   
    public CustomAttributeDialog(Shell parentShell, CustomAttribute attrInfo) {
      super(parentShell);
      this.attrInfo = attrInfo;
    }
   
    @Override
    protected Point getInitialSize() {
      Point size = super.getInitialSize();
      size.x = 300;
      return size;
    }
   
    @Override
    protected Control createDialogArea(Composite parent) {
      getShell().setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.CustomAttributes"));
     
      Composite composite = new Composite(parent, SWT.NULL);
      composite.setLayoutData(new GridData(GridData.FILL_BOTH));
      composite.setLayout(new GridLayout(2,false));
     
      Label label = new Label(composite, SWT.NULL);
      label.setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.Dialog.TargetTag"));
     
      target = new Text(composite, SWT.BORDER);
      if(attrInfo!=null){
        target.setText(attrInfo.getTargetTag());
      } else {
        target.setText("*");
      }
      target.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
     
      label = new Label(composite, SWT.NULL);
      label.setText(HTMLPlugin.getResourceString("HTMLEditorPreferencePage.Dialog.AttributeName"));
     
      name = new Text(composite, SWT.BORDER);
      name.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
      if(attrInfo!=null){
        name.setText(attrInfo.getAttributeName());
      }
     
      return composite;
    }
   
    @Override
    protected void okPressed() {
      if(target.getText().length()==0){
        HTMLPlugin.openAlertDialog(HTMLPlugin.createMessage(
            HTMLPlugin.getResourceString("Error.Required"),
            new String[]{ HTMLPlugin.getResourceString("HTMLEditorPreferencePage.TargetTag") }));
        return;
      }
      if(name.getText().length()==0){
        HTMLPlugin.openAlertDialog(HTMLPlugin.createMessage(
            HTMLPlugin.getResourceString("Error.Required"),
            new String[]{ HTMLPlugin.getResourceString("HTMLEditorPreferencePage.AttributeName") }));
        return;
      }
      attrInfo = new CustomAttribute(target.getText(), name.getText());
      super.okPressed();
    }
   
    public CustomAttribute getCustomAttribute(){
      return attrInfo;
    }
  }
 
}
TOP

Related Classes of tk.eclipse.plugin.htmleditor.CustomAssistPreferencePage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.