Package com.eclipsesource.tabris.demos.ui

Source Code of com.eclipsesource.tabris.demos.ui.BooksListPage

/*******************************************************************************
* Copyright (c) 2013 EclipseSource and others.
* 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:
*    EclipseSource - initial API and implementation
******************************************************************************/
package com.eclipsesource.tabris.demos.ui;

import static com.eclipsesource.tabris.demos.ui.BookDetailsPage.BOOK_ITEM;
import static com.eclipsesource.tabris.demos.ui.Constants.BOOKS;
import static com.eclipsesource.tabris.demos.ui.Constants.RELATED_BOOKS_FONT;
import static com.eclipsesource.tabris.demos.ui.Constants.TITLE_FONT;
import static com.eclipsesource.tabris.widgets.enhancement.Widgets.*;

import java.util.List;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.resource.FontRegistry;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.template.ImageCell;
import org.eclipse.rap.rwt.template.Template;
import org.eclipse.rap.rwt.template.TextCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;

import com.eclipsesource.tabris.ui.AbstractPage;
import com.eclipsesource.tabris.ui.PageData;
import com.eclipsesource.tabris.ui.UI;

public class BooksListPage extends AbstractPage {

  private BookFilter bookFilter;
  private Composite container;
  private TreeViewer viewer;
  private static UI ui;

  public void setBookFilter( BookFilter bookFilter ) {
    this.bookFilter = bookFilter;
  }

  @Override
  public void createContent( Composite parent, PageData data ) {
    ui = getUI();
    registerResources();
    createBooks();
    container = new Composite( parent, SWT.NONE );
    GridLayoutFactory.fillDefaults().spacing( 0, 0 ).applyTo( container );
    viewer = createTreeViewer( this, container );
    createViewerInput( viewer );
  }

  private void registerResources() {
    FontRegistry fontRegistry = JFaceResources.getFontRegistry();
    fontRegistry.put( TITLE_FONT, createFontData( 16, SWT.BOLD ) );
    fontRegistry.put( RELATED_BOOKS_FONT, createFontData( 16, SWT.BOLD ) );
  }

  private FontData[] createFontData( int height, int style ) {
    return new FontData[]{ new FontData( "Verdana", height, style ) };
  }

  private void createBooks() {
    Object books = RWT.getUISession().getAttribute( BOOKS );
    if( books == null ) {
      books = BookProvider.getBooks( getUI().getDisplay() );
      RWT.getUISession().setAttribute( BOOKS, books );
    }
  }

  public Composite getContainer() {
    return container;
  }

  public static TreeViewer createTreeViewer( AbstractPage page, Composite container ) {
    TreeViewer viewer = new TreeViewer( container, SWT.V_SCROLL );
    viewer.setContentProvider( new BooksContentProvider() );
    addBookSelectionListener( page, viewer );
    Tree tree = viewer.getTree();
    tree.setLinesVisible( true );
    tree.setData( RWT.MARKUP_ENABLED, Boolean.TRUE );
    onTree( tree ).setTemplate( createRowTemplate() );
    onTree( tree ).setItemHeight( 68 );
    GridDataFactory.fillDefaults().align( SWT.FILL, SWT.FILL ).grab( true, true ).applyTo( tree );
    viewer.setLabelProvider( new BooksLabelProvider() );
    new TreeColumn( tree, SWT.LEFT );
    new TreeColumn( tree, SWT.LEFT );
    new TreeColumn( tree, SWT.LEFT );
    return viewer;
  }

  private static Template createRowTemplate() {
    Template template = new Template();
    addImageCell( template );
    addTitleCell( template );
    addAuthorCell( template );
    return template;
  }

  private static void addAuthorCell( Template template ) {
    TextCell authorCell = new TextCell( template );
    authorCell.setBindingIndex( 2 );
    authorCell.setLeft( 52 ).setRight( 10 ).setTop( 36 ).setBottom( 0 );
    authorCell.setForeground( new Color( ui.getDisplay(), new RGB( 123, 123, 123 ) ) );
    authorCell.setFont( new Font( ui.getDisplay(), new FontData( "Verdana", 14, SWT.NONE ) ) );
  }

  private static void addTitleCell( Template template ) {
    TextCell titleCell = new TextCell( template );
    titleCell.setBindingIndex( 1 );
    titleCell.setLeft( 52 ).setRight( 10 ).setTop( 12 ).setBottom( 0 );
    titleCell.setFont( new Font( ui.getDisplay(), new FontData( "Verdana", 18, SWT.NONE ) ) );
    titleCell.setForeground( new Color( ui.getDisplay(), new RGB( 74, 74, 74 ) ) );
  }

  private static void addImageCell( Template template ) {
    ImageCell imageCell = new ImageCell( template );
    imageCell.setBindingIndex( 0 );
    imageCell.setLeft( 10 ).setWidth( 32 ).setTop( 10 ).setHeight( 48 );
  }

  @SuppressWarnings( "unchecked" )
  private void createViewerInput( TreeViewer viewer ) {
    List books = ( List )RWT.getUISession().getAttribute( BOOKS );
    List<Book> filteredBooks = bookFilter.filter( books );
    viewer.setInput( filteredBooks );
  }

  private static void addBookSelectionListener( final AbstractPage page, TreeViewer viewer ) {
    viewer.addSelectionChangedListener( new ISelectionChangedListener() {
      @Override
      public void selectionChanged( SelectionChangedEvent event ) {
        Object book = ( ( IStructuredSelection )event.getSelection() ).getFirstElement();
        if( book != null ) {
          PageData data = new PageData();
          data.set( BOOK_ITEM, book );
          page.openPage( BookDetailsPage.class.getName(), data );
        }
      }
    } );
  }

  @Override
  public void activate() {
    super.activate();
    viewer.setSelection( null );
  }
}
TOP

Related Classes of com.eclipsesource.tabris.demos.ui.BooksListPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.