/* * ----------------------------------------------------------------------- * File: $HeadURL$ * Revision $LastChangedRevision$ * Last Modified: $LastChangedDate$ * Last Change by: $LastChangedBy$ * ----------------------------------------------------------------------- * Copyright (C) 2007 Keith Stribley <devel@thanlwinsoft.org> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * ----------------------------------------------------------------------- */ /** * */ package org.thanlwinsoft.languagetest.eclipse.views; import java.util.HashSet; import org.eclipse.jface.viewers.ICellModifier; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.part.ViewPart; import org.thanlwinsoft.languagetest.eclipse.editors.TestItemEditor; import org.thanlwinsoft.languagetest.eclipse.editors.TestModuleEditor; import org.thanlwinsoft.languagetest.eclipse.workspace.MetaDataManager; import org.thanlwinsoft.languagetest.language.test.meta.MetaNode; import org.thanlwinsoft.schemas.languagetest.module.ConfigType; import org.thanlwinsoft.schemas.languagetest.module.TestItemType; /** * @author keith * */ public class MetaDataView extends ViewPart implements ISelectionChangedListener { // private Tree dataTree = null; // private TreeViewer viewer = null; //private ITreeContentProvider provider = null; //private MetaDataLabelProvider labelProvider = null; //private MetaDataCellModifier cellModifier = null; private Display display = null; //private CellEditor [] editors = null;; private HashSet<ISelectionProvider> selectionProviders = null; private TagFilterComposite filterComposite; public final static String ID = "org.thanlwinsoft.languagetest.eclipse.views.MetaDataView"; //private final static String COL = "Tag"; public MetaDataView() { selectionProviders = new HashSet<ISelectionProvider>(); } /* (non-Javadoc) * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ public void createPartControl(Composite parent) { this.display = parent.getDisplay(); Group treeComposite = new Group(parent, SWT.SHADOW_ETCHED_IN); treeComposite.setLayout(new FillLayout()); filterComposite = new TagFilterComposite(treeComposite, SWT.H_SCROLL | SWT.V_SCROLL); /* dataTree = new Tree(treeComposite, SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL); dataTree.setEnabled(true); viewer = new TreeViewer(dataTree); TreeColumn tc = new TreeColumn(dataTree, SWT.LEAD); tc.setWidth(200); tc.setResizable(true); tc.setText(MessageUtil.getString("MetaDataColumn")); viewer.setColumnProperties(new String[]{COL}); provider = new MetaDataContentProvider(); labelProvider = new MetaDataLabelProvider(display); cellModifier = new MetaDataCellModifier(); editors = new CellEditor[]{ new CheckboxCellEditor(dataTree, SWT.LEAD) }; viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS); viewer.setContentProvider(provider); viewer.setLabelProvider(labelProvider); viewer.setCellModifier(cellModifier); viewer.setCellEditors(editors); ConfigType [] config = loadConfig(); viewer.setInput(config); viewer.refresh(); dataTree.showColumn(tc); */ //dataTree.redraw(); IEditorPart editor = getSite().getPage().getActiveEditor(); if (editor instanceof TestModuleEditor) { TestModuleEditor tme = (TestModuleEditor)editor; TestItemEditor tie = (TestItemEditor) tme.getAdapter(TestItemEditor.class); addSelectionProvider(tie); } } public void addSelectionProvider(ISelectionProvider provider) { provider.addSelectionChangedListener(this); selectionProviders.add(provider); } public void setTestItem(TestItemType testItem) { //cellModifier.setTestItem(testItem); //labelProvider.setTestItem(testItem); //viewer.refresh(); //viewer.expandAll(); filterComposite.setTestItem(testItem); } protected ConfigType [] loadConfig() { return MetaDataManager.loadConfig(); } /* (non-Javadoc) * @see org.eclipse.ui.part.WorkbenchPart#setFocus() */ public void setFocus() { } public class MetaDataCellModifier implements ICellModifier { TestItemType testItem = null; public MetaDataCellModifier() { } public void setTestItem(TestItemType ti) { this.testItem = ti; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object, java.lang.String) */ public boolean canModify(Object element, String property) { if (element instanceof MetaNode) { return !((MetaNode)element).hasChildren(); } return false; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object, java.lang.String) */ public Object getValue(Object element, String property) { if (element instanceof MetaNode) { if (testItem == null) return Boolean.FALSE; return ((MetaNode)element).isSetOnItem(testItem); } return null; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object, java.lang.String, java.lang.Object) */ public void modify(Object element, String property, Object value) { TreeItem treeItem = null; if (element instanceof TreeItem) { treeItem = (TreeItem)element; element = treeItem.getData(); } if (element instanceof MetaNode && value instanceof Boolean && testItem != null) { MetaNode mn = (MetaNode)element; boolean state = ((Boolean)value).booleanValue(); mn.setOnItem(testItem, state); IEditorPart editor = getSite().getPage().getActiveEditor(); if (editor instanceof TestModuleEditor) { TestModuleEditor tme = (TestModuleEditor)editor; //TestItemEditor tie = (TestItemEditor) tme.getAdapter(TestItemEditor.class); tme.setDirty(true); } //if (treeItem != null) // treeItem.setImage(labelProvider.getColumnImage(element, 0)); } } } /* (non-Javadoc) * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) */ public void selectionChanged(SelectionChangedEvent event) { if (event.getSelection() instanceof IStructuredSelection) { IStructuredSelection ss = (IStructuredSelection)event.getSelection(); if (ss.getFirstElement() instanceof TestItemType) { TestItemType ti = (TestItemType)ss.getFirstElement(); //if (!dataTree.isDisposed()) // setTestItem(ti); if (!filterComposite.isDisposed()) filterComposite.setTestItem(ti); } } } public Display getDisplay() { return display; } }