com.siemens.ct.mp3m.ui.views.logical.LogicalView.java Source code

Java tutorial

Introduction

Here is the source code for com.siemens.ct.mp3m.ui.views.logical.LogicalView.java

Source

/*******************************************************************************
 * Copyright (c) 2009 Siemens AG
 * 
 * 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:
 *    Kai Toedter - initial API and implementation
 *******************************************************************************/

package com.siemens.ct.mp3m.ui.views.logical;

import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.ViewPart;

import com.siemens.ct.mp3m.model.logical.Artists;
import com.siemens.ct.mp3m.model.logical.ILogicalModelListener;
import com.siemens.ct.mp3m.model.logical.Song;
import com.siemens.ct.mp3m.ui.views.EditorFactory;
import com.siemens.ct.mp3m.ui.views.PathEditorInput;

/**
 * The logical view: Artists, Albums, Tracks + Titles
 * 
 * @author Kai Toedter
 * @author $LastChangedBy: toedter_k $
 * @version $LastChangedDate: 2009-01-07 14:13:52 +0100 (Mi, 07 Jan 2009) $
 * @version $LastChangedRevision: 771 $
 */
public class LogicalView extends ViewPart implements ILogicalModelListener {
    public static final String ID = "com.siemens.ct.mp3m.ui.views.logical.LogicalView"; //$NON-NLS-1$

    // The TableTreeViewer
    TreeViewer treeViewer;

    /**
     * Creates the main window's contents
     * 
     * @param parent
     *            the main window
     * 
     * @return Control
     */
    protected Control createContents(Composite parent) {
        // Create the table viewer to display the Artists
        treeViewer = new TreeViewer(parent, SWT.FULL_SELECTION);
        treeViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));

        // Set the content and label providers
        treeViewer.setContentProvider(new ArtistTreeContentProvider(this));
        treeViewer.setLabelProvider(new ArtistTreeLabelProvider());
        treeViewer.setInput(Artists.getArtists());

        String[] columnTitles = { Messages.getString("LogicalView.Artist_Album_Song"),
                Messages.getString("LogicalView.Track"), Messages.getString("LogicalView.Duration") };
        Tree tree1 = treeViewer.getTree();
        for (int i = 0; i < columnTitles.length; i++) {
            TreeColumn treeColumn = new TreeColumn(tree1, SWT.NONE);
            treeColumn.setText(columnTitles[i]);
        }
        tree1.setSortColumn(tree1.getColumn(0));
        int columnCount = tree1.getColumnCount();
        for (int i = 0; i < columnCount; i++) {
            TreeColumn treeColumn = tree1.getColumn(i);
            treeColumn.pack();
        }
        tree1.setHeaderVisible(true);
        tree1.setLinesVisible(true);

        // Create a context menu and register it with the Workbench
        MenuManager menuManager = new MenuManager("FileSystemPopup");
        menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
        Menu menu = menuManager.createContextMenu(treeViewer.getControl());
        treeViewer.getControl().setMenu(menu);
        getSite().registerContextMenu(menuManager, treeViewer);

        getSite().setSelectionProvider(treeViewer);

        return treeViewer.getTree();
    }

    @Override
    public void createPartControl(Composite parent) {
        createContents(parent);
        Mp3DoubleclickListener listener = new Mp3DoubleclickListener(this);
        treeViewer.addDoubleClickListener(listener);
        Artists.addModelChangeListener(this);
        // getSite().getKeyBindingService().setScopes(new
        // String[]{"com.siemens.ct.mp3manager.mp3ManagerContext"});
        // //$NON-NLS-1$
    }

    @Override
    public void setFocus() {
        treeViewer.getControl().setFocus();
    }

    class Mp3DoubleclickListener implements IDoubleClickListener {
        private final LogicalView view;

        /**
         * @param view
         *            the logical view
         */
        Mp3DoubleclickListener(LogicalView view) {
            this.view = view;
        }

        public void doubleClick(DoubleClickEvent event) {
            IStructuredSelection selection = (IStructuredSelection) event.getSelection();
            if (selection.getFirstElement() instanceof Song) {
                Song title = ((Song) selection.getFirstElement());
                final String fullPath = title.getFile();
                if (fullPath != null) {
                    PathEditorInput pathEditorInput = new PathEditorInput(fullPath);
                    try {
                        this.view.getViewSite().getWorkbenchWindow().getActivePage().openEditor(pathEditorInput,
                                EditorFactory.getDefaultMp3EditorId());
                    } catch (PartInitException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.siemens.ct.mp3m.model.logical.ILogicalModelListener#modelChanged()
     */
    public void modelChanged() {
        treeViewer.setInput(Artists.getArtists());
        treeViewer.refresh();
    }
}