com.amitinside.e4.rcp.todo.parts.ManagerPart.java Source code

Java tutorial

Introduction

Here is the source code for com.amitinside.e4.rcp.todo.parts.ManagerPart.java

Source

/*******************************************************************************
 * Copyright (C) 2015 - Amit Kumar Mondal <admin@amitinside.com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *******************************************************************************/
package com.amitinside.e4.rcp.todo.parts;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.inject.Inject;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.e4.ui.di.UISynchronize;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Label;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;

import com.amitinside.e4.rcp.todo.events.MyEventConstants;
import com.amitinside.e4.rcp.todo.model.ITodoService;
import com.amitinside.e4.rcp.todo.model.Todo;

public class ManagerPart {

    private Button btnNewButton;
    private Label lblNewLabel;
    private TableViewer viewer;

    @Inject
    UISynchronize sync;
    @Inject
    ESelectionService service;

    @Inject
    ITodoService model;

    @PostConstruct
    public void createControls(Composite parent, final MWindow window) {
        parent.setLayout(new GridLayout(1, false));

        btnNewButton = new Button(parent, SWT.NONE);
        btnNewButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                Job job = new Job("loading") {
                    @Override
                    protected IStatus run(IProgressMonitor monitor) {
                        List<Todo> list = model.getTodos();
                        sync.asyncExec(new Runnable() {
                            @Override
                            public void run() {
                                viewer.setInput(model.getTodos());
                            }
                        });
                        return Status.OK_STATUS;
                    }
                };
                job.schedule();

            }
        });

        btnNewButton.setText("Load Data");

        Text search = new Text(parent, SWT.SEARCH | SWT.CANCEL | SWT.ICON_SEARCH);
        search.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
        search.setMessage("Filter");
        search.addSelectionListener(new SelectionAdapter() {
            public void widgetDefaultSelected(SelectionEvent e) {
                if (e.detail == SWT.CANCEL) {
                    Text text = (Text) e.getSource();
                    text.setText("");
                    //
                }
            }
            // MORE...
        });

        viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
        Table table = viewer.getTable();
        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

        table.setHeaderVisible(true);
        table.setLinesVisible(true);

        viewer.setContentProvider(ArrayContentProvider.getInstance());
        TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);

        column.getColumn().setWidth(100);
        column.getColumn().setText("Summary");
        column.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                Todo todo = (Todo) element;
                return todo.getSummary();
            }

        });

        column.setEditingSupport(new EditingSupport(viewer) {

            @Override
            protected void setValue(Object element, Object value) {
                Todo todo = (Todo) element;
                todo.setSummary(String.valueOf(value));
                viewer.refresh();
            }

            @Override
            protected Object getValue(Object element) {
                Todo todo = (Todo) element;
                return todo.getSummary();
            }

            @Override
            protected CellEditor getCellEditor(Object element) {
                return new TextCellEditor(viewer.getTable(), SWT.NONE);
            }

            @Override
            protected boolean canEdit(Object element) {
                return true;
            }
        });
        column = new TableViewerColumn(viewer, SWT.NONE);

        column.getColumn().setWidth(100);
        column.getColumn().setText("Description");
        column.setLabelProvider(new ColumnLabelProvider() {
            @Override
            public String getText(Object element) {
                Todo todo = (Todo) element;
                return todo.getDescription();
            }
        });

        viewer.addSelectionChangedListener(new ISelectionChangedListener() {
            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
                service.setSelection(selection.getFirstElement());
            }
        });

    }

    @Inject
    @Optional
    private void getNotified(@UIEventTopic(MyEventConstants.TOPIC_TODO_ALLTOPICS) String topic) {
        if (viewer != null) {
            viewer.setInput(model.getTodos());
        }
    }

    @Focus
    private void setFocus() {
        btnNewButton.setFocus();
    }

}