Java tutorial
/******************************************************************************* * FreeQDA, a software for professional qualitative research data * analysis, such as interviews, manuscripts, journal articles, memos * and field notes. * * Copyright (C) 2011 Dirk Kitscha, Jrg groe Schlarmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. *******************************************************************************/ package net.sf.freeqda.view.projectview; import net.sf.freeqda.common.projectmanager.ProjectDataModifiedListener; import net.sf.freeqda.common.projectmanager.ProjectManager; import net.sf.freeqda.common.projectmanager.TextCategoryNode; import net.sf.freeqda.common.projectmanager.TextNode; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ILabelDecorator; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.part.ViewPart; public class ProjectViewer extends ViewPart implements ProjectDataModifiedListener { public static final String ID = "net.sf.freeqda.projectview.ProjectViewer"; //$NON-NLS-1$ private static final String EDITOR_COMMAND_ID = "net.sf.freeqda.common.callEditor"; //$NON-NLS-1$ private static final ProjectManager PROJECT_MANAGER = ProjectManager.getInstance(); private TreeViewer treeViewer; private Composite parentComposite; public ProjectViewer() { ProjectManager.registerProjectModifiedListener(this); } @Override public void createPartControl(Composite parent) { parentComposite = parent; parent.setLayout(new FillLayout(SWT.HORIZONTAL)); ILabelDecorator documentDecorator = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator(); treeViewer = new TreeViewer(parent, SWT.NONE); treeViewer.setContentProvider(new TextTreeContentProvider(TextTreeContentProvider.SHOW_CATEGORY_AND_TEXT)); treeViewer.setLabelProvider(new DecoratingLabelProvider(new TextTreeLabelProvider(), documentDecorator)); Tree tree = treeViewer.getTree(); tree.setLinesVisible(true); tree.setBackground(new Color(parent.getDisplay(), 255, 255, 255)); /* * First we create a menu Manager */ MenuManager menuManager = new MenuManager(); Menu menu = menuManager.createContextMenu(treeViewer.getTree()); /* * Set the MenuManager */ treeViewer.getTree().setMenu(menu); getSite().registerContextMenu(menuManager, treeViewer); treeViewer.setInput(PROJECT_MANAGER); treeViewer.expandAll(); /* * Make the selection available */ getSite().setSelectionProvider(treeViewer); hookDoubleClickCommand(); parent.setEnabled(false); } private void hookDoubleClickCommand() { treeViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { openSelectedTextInEditor(); } }); } public void openSelectedTextInEditor() { /* * If we have a selected TextNode then open the editor */ ISelection selection = getSite().getSelectionProvider().getSelection(); if (selection != null && selection instanceof IStructuredSelection) { Object obj = ((IStructuredSelection) selection).getFirstElement(); if ((obj != null) && (obj instanceof TextNode)) { IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class); try { handlerService.executeCommand(EDITOR_COMMAND_ID, null); } catch (Exception ex) { ex.printStackTrace(); throw new RuntimeException(EXCEPTION_INVALID_OBJECT); } } } } private static final String EXCEPTION_INVALID_OBJECT = Messages.ProjectViewer_InvalidObject; @Override public void setFocus() { treeViewer.getControl().setFocus(); } @Override public void ProjectDataModified() { refresh(null); parentComposite.setEnabled(PROJECT_MANAGER.isActive()); } public void refresh(TextCategoryNode rootNode) { //FIXME save changes on refresh? if (rootNode == null) { treeViewer.refresh(); treeViewer.expandAll(); } else { treeViewer.refresh(rootNode); treeViewer.expandToLevel(rootNode, TreeViewer.ALL_LEVELS); } } }