content: /*
   * Copyright (c) 2016, Alex Blewitt, Bandlem Ltd
   * Copyright (c) 2016, Packt Publishing Ltd
   *
   * 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
   */
  package com.packtpub.e4.application.parts;
  
  import java.util.Arrays;
  import java.util.List;
  import javax.annotation.PostConstruct;
  import javax.inject.Inject;
  
  import org.eclipse.e4.ui.di.Focus;
  import org.eclipse.e4.ui.di.Persist;
  import org.eclipse.e4.ui.model.application.ui.MDirtyable;
  import org.eclipse.jface.viewers.ArrayContentProvider;
  import org.eclipse.jface.viewers.TableViewer;
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.events.ModifyEvent;
  import org.eclipse.swt.events.ModifyListener;
  import org.eclipse.swt.layout.GridData;
  import org.eclipse.swt.layout.GridLayout;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.swt.widgets.Text;
  
  public class SamplePart {
  
  	private Text txtInput;
  	private TableViewer tableViewer;
  
  	@Inject
  	private MDirtyable dirty;
  
  	@PostConstruct
  	public void createComposite(Composite parent) {
  		parent.setLayout(new GridLayout(1, false));
  
  		txtInput = new Text(parent, SWT.BORDER);
  		txtInput.setMessage("Enter text to mark part as dirty");
  		txtInput.addModifyListener(new ModifyListener() {
  			@Override
  			public void modifyText(ModifyEvent e) {
  				dirty.setDirty(true);
  			}
  		});
  		txtInput.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
  
  		tableViewer = new TableViewer(parent);
  
  		tableViewer.setContentProvider(ArrayContentProvider.getInstance());;
  		tableViewer.setInput(createInitialDataModel());
  		tableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
  	}
  
  	@Focus
  	public void setFocus() {
  		tableViewer.getTable().setFocus();
  	}
  
  	@Persist
  	public void save() {
  		dirty.setDirty(false);
  	}
  	
  	private List<String> createInitialDataModel() {
  		return Arrays.asList("Sample item 1", "Sample item 2", "Sample item 3", "Sample item 4", "Sample item 5");
  	}
  }