com.nokia.carbide.cpp.internal.project.ui.mmpEditor.MissingSourcesSectionPart.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.carbide.cpp.internal.project.ui.mmpEditor.MissingSourcesSectionPart.java

Source

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: 
*
*/
package com.nokia.carbide.cpp.internal.project.ui.mmpEditor;

import com.nokia.carbide.cpp.internal.project.ui.editors.common.*;
import com.nokia.carbide.cpp.internal.project.ui.mmpEditor.commands.EMMPListSelector;
import com.nokia.cpp.internal.api.utils.ui.editor.FormEditorEditingContext;

import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.SectionPart;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;

import java.util.*;
import java.util.List;

/**
 * Displays a list of MMP source files that couldn't be found in the project.
 */
public class MissingSourcesSectionPart extends SectionPart {

    private TableViewer tableViewer;
    private Button removeButton;
    private MMPEditorContext editorContext;
    private List<IPath> missingFilePaths;
    private final SourcesPage page;

    public MissingSourcesSectionPart(Composite parent, FormToolkit toolkit, int style, SourcesPage page) {
        super(parent, toolkit, style);
        this.page = page;
        createClient(getSection(), toolkit);
    }

    private void createClient(Section section, FormToolkit toolkit) {
        section.setText(Messages.MissingSourcesSectionPart_missingSourcesSectionTitle);
        section.setDescription(Messages.MissingSourcesSectionPart_missingSourcesDescription);
        Composite container = toolkit.createComposite(section);
        toolkit.paintBordersFor(container);
        container.setLayout(new FormLayout());
        //
        section.setClient(container);

        final Composite buttonComposite = toolkit.createComposite(container, SWT.NONE);
        final RowLayout rowLayout = new RowLayout(SWT.VERTICAL);
        rowLayout.fill = true;
        rowLayout.wrap = false;
        rowLayout.marginRight = 1;
        rowLayout.marginLeft = 1;
        buttonComposite.setLayout(rowLayout);
        final FormData formData = new FormData();
        formData.bottom = new FormAttachment(100, -5);
        formData.right = new FormAttachment(100, 0);
        formData.top = new FormAttachment(0, 0);
        buttonComposite.setLayoutData(formData);

        removeButton = toolkit.createButton(buttonComposite, Messages.MissingSourcesSectionPart_removeButton,
                SWT.NONE);
        removeButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                removeButtonPressed();
            }
        });

        tableViewer = new TableViewer(container, SWT.MULTI);
        tableViewer.setContentProvider(new ArrayContentProvider());
        tableViewer.setLabelProvider(new LabelProvider());
        Table table = tableViewer.getTable();
        toolkit.adapt(table);
        final FormData formData_1 = new FormData();
        formData_1.bottom = new FormAttachment(100, -9);
        formData_1.right = new FormAttachment(buttonComposite, -5, SWT.LEFT);
        formData_1.top = new FormAttachment(0, 3);
        formData_1.left = new FormAttachment(0, 5);
        table.setLayoutData(formData_1);
        toolkit.adapt(table, true, true);
        tableViewer.setInput(new Object());
        table.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                if (e.character == SWT.DEL) {
                    removeButtonPressed();
                }
            }
        });
    }

    private void hookControls(ControlManager controlManager) {
        controlManager.add(new MissingSourceControlHandler(tableViewer));
    }

    public void initialize(IManagedForm managedForm, MMPEditorContext editorContext,
            ControlManager controlManager) {
        this.editorContext = editorContext;
        initialize(managedForm);
        hookControls(controlManager);
    }

    @Override
    public void refresh() {
        super.refresh();
        tableViewer.setInput(missingFilePaths);
    }

    public void setMissingFilePaths(List<IPath> paths) {
        missingFilePaths = paths;
    }

    protected void removeButtonPressed() {
        List<Integer> indices = new ArrayList<Integer>();
        List sourceList = EMMPListSelector.SOURCES.fetchList(editorContext.mmpView);
        IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection();
        Iterator iter = selection.iterator();
        while (iter.hasNext()) {
            int index = sourceList.indexOf(iter.next());
            if (index >= 0) {
                indices.add(index);
            }
        }

        RemoveListValueOperation command = new RemoveListValueOperation(editorContext.mmpView,
                new FormEditorEditingContext(editorContext.editor, tableViewer.getControl()),
                ControlHandler.getHandlerForViewer(tableViewer), EMMPListSelector.SOURCES, indices);
        editorContext.executeOperation(command);

        missingFilePaths.removeAll(selection.toList());
        tableViewer.refresh();
    }

    class MissingSourceControlHandler extends ControlHandler {

        public MissingSourceControlHandler(StructuredViewer viewer) {
            super(viewer, true);
        }

        @SuppressWarnings("unchecked") //$NON-NLS-1$
        @Override
        public void addListItems(List items) {
            // adding and removing affects both the sources tree and
            // this list. To keep in sync we refresh all
            refresh();
        }

        @Override
        public void removeListItems(List items) {
            refresh();
        }

        @Override
        protected void doRefresh() {
            // get the page to update both the sources tree
            // and the missing files list.
            page.refresh();
        }
    }

    public TableViewer getTableViewer() {
        return tableViewer;
    }

    public Button getRemoveButton() {
        return removeButton;
    }

}