net.sf.sveditor.ui.prop_pages.GlobalDefinesPage.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.sveditor.ui.prop_pages.GlobalDefinesPage.java

Source

/****************************************************************************
 * Copyright (c) 2008-2010 Matthew Ballance and others.
 * 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:
 *     Matthew Ballance - initial implementation
 ****************************************************************************/

package net.sf.sveditor.ui.prop_pages;

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

import net.sf.sveditor.core.Tuple;
import net.sf.sveditor.core.db.project.SVProjectFileWrapper;
import net.sf.sveditor.ui.SVUiPlugin;

import org.eclipse.core.resources.IProject;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
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.Control;

public class GlobalDefinesPage implements ISVProjectPropsPage, IStructuredContentProvider, ITableLabelProvider {
    private TableViewer fGlobalDefines;
    private SVProjectFileWrapper fProjectWrapper;
    private List<Tuple<String, String>> fDefineList;
    private Button fAdd;
    private Button fRemove;
    private Button fEdit;
    //   private IProject                  fProject;

    public GlobalDefinesPage(IProject p) {
        fDefineList = new ArrayList<Tuple<String, String>>();
        //      fProject = p;
    }

    public void init(SVProjectFileWrapper project_wrapper) {
        fProjectWrapper = project_wrapper;

        fDefineList.clear();
        for (Tuple<String, String> p : fProjectWrapper.getGlobalDefines()) {
            Tuple<String, String> dup = new Tuple<String, String>(p.first(), p.second());
            fDefineList.add(dup);
        }
    }

    public Control createContents(Composite parent) {
        Composite frame = new Composite(parent, SWT.NONE);

        frame.setLayout(new GridLayout(2, false));

        fGlobalDefines = new TableViewer(frame, SWT.MULTI + SWT.BORDER);
        fGlobalDefines.getTable().setHeaderVisible(true);
        fGlobalDefines.getTable().setLinesVisible(true);

        TableViewerColumn tc = new TableViewerColumn(fGlobalDefines, SWT.NONE);
        tc.getColumn().setText("Name");
        tc.getColumn().setWidth(100);

        tc = new TableViewerColumn(fGlobalDefines, SWT.NONE);
        tc.getColumn().setText("Value");
        tc.getColumn().setWidth(100);

        fGlobalDefines.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        fGlobalDefines.setContentProvider(this);
        fGlobalDefines.setLabelProvider(this);
        fGlobalDefines.setInput(fDefineList);
        fGlobalDefines.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                updateSelection();
            }
        });

        Composite button_bar = new Composite(frame, SWT.NONE);
        button_bar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true));
        button_bar.setLayout(new GridLayout(1, true));

        fAdd = new Button(button_bar, SWT.PUSH);
        fAdd.setText("Add");
        fAdd.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        fAdd.addSelectionListener(new SelectionListener() {
            public void widgetDefaultSelected(SelectionEvent e) {
            }

            public void widgetSelected(SelectionEvent e) {
                add();
            }
        });

        fEdit = new Button(button_bar, SWT.PUSH);
        fEdit.setText("Edit");
        fEdit.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        fEdit.addSelectionListener(new SelectionListener() {
            public void widgetDefaultSelected(SelectionEvent e) {
            }

            public void widgetSelected(SelectionEvent e) {
                edit();
            }
        });

        fRemove = new Button(button_bar, SWT.PUSH);
        fRemove.setText("Remove");
        fRemove.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
        fRemove.addSelectionListener(new SelectionListener() {
            public void widgetDefaultSelected(SelectionEvent e) {
            }

            public void widgetSelected(SelectionEvent e) {
                remove();
            }
        });

        updateSelection();

        return frame;
    }

    public Image getIcon() {
        return SVUiPlugin.getImage("/icons/edecl16/define_obj.gif");
    }

    public String getName() {
        return "Global Defines";
    }

    public void perfomOk() {
        fProjectWrapper.getGlobalDefines().clear();

        for (Tuple<String, String> p : fDefineList) {
            Tuple<String, String> dup = new Tuple<String, String>(p.first(), p.second());
            fProjectWrapper.getGlobalDefines().add(dup);
        }
    }

    public Object[] getElements(Object inputElement) {
        return fDefineList.toArray();
    }

    public boolean isLabelProperty(Object element, String property) {
        return false;
    }

    /*
    public String getText(Object element) {
       if (element instanceof SVDBPath) {
     return ((SVDBPath)element).getPath();
       }
       return null;
    }
     */

    public Image getColumnImage(Object element, int columnIndex) {
        return null;
    }

    @SuppressWarnings("unchecked")
    public String getColumnText(Object element, int columnIndex) {
        Tuple<String, String> def = (Tuple<String, String>) element;

        return (columnIndex == 0) ? def.first() : def.second();
    }

    private void add() {
        AddDefineDialog dlg = new AddDefineDialog(fAdd.getShell());

        if (dlg.open() == Window.OK) {
            Tuple<String, String> path = new Tuple<String, String>(dlg.getName(), dlg.getValue());
            fDefineList.add(path);
            fGlobalDefines.refresh();
        }
    }

    @SuppressWarnings("unchecked")
    private void edit() {
        IStructuredSelection sel = (IStructuredSelection) fGlobalDefines.getSelection();
        Tuple<String, String> elem = (Tuple<String, String>) sel.getFirstElement();

        AddDefineDialog dlg = new AddDefineDialog(fAdd.getShell());
        dlg.setInitialName(elem.first());
        dlg.setInitialValue(elem.second());

        if (dlg.open() == Window.OK) {
            elem.setFirst(dlg.getName());
            elem.setSecond(dlg.getValue());
            fGlobalDefines.refresh();
        }
    }

    private void remove() {
        IStructuredSelection sel = (IStructuredSelection) fGlobalDefines.getSelection();

        for (Object sel_o : sel.toList()) {
            fDefineList.remove(sel_o);
        }

        fGlobalDefines.refresh();
    }

    private void updateSelection() {
        IStructuredSelection sel = (IStructuredSelection) fGlobalDefines.getSelection();

        fAdd.setEnabled(true);
        if (sel.getFirstElement() == null) {
            fRemove.setEnabled(false);
            fEdit.setEnabled(false);
        } else {
            if (sel.size() == 1) {
                fEdit.setEnabled(true);
            } else {
                fEdit.setEnabled(false);
            }
            fRemove.setEnabled(true);
        }
    }

    public void dispose() {
    }

    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    }

    public void addListener(ILabelProviderListener listener) {
    }

    public void removeListener(ILabelProviderListener listener) {
    }

}