Package com.eclipsesource.tabris.demos.ui

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

/*******************************************************************************
* 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.Constants.RELATED_BOOKS_FONT;
import static com.eclipsesource.tabris.demos.ui.Constants.TITLE_FONT;
import static com.eclipsesource.tabris.widgets.enhancement.Widgets.onComposite;
import static org.eclipse.jface.resource.JFaceResources.getFontRegistry;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;

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

public class BookDetailsPage extends AbstractPage {

  public static final String BOOK_ITEM = "bookItem";
  private Label titleLabel;
  private Label authorLabel;
  private Label imageLabel;
  private TreeViewer relatedTreeViewer;
  private Composite bookDetailsComposite;

  @Override
  public void createContent( Composite parent, PageData data ) {
    Composite container = new Composite( parent, SWT.NONE );
    container.setBackground( parent.getDisplay().getSystemColor( SWT.COLOR_WHITE ) );
    GridLayoutFactory.fillDefaults().spacing( 0, 0 ).applyTo( container );
    createBookDetailsComposite( container );
    createRelatedBooks( container );
    createRelatedList( container );
    populatePage( data );
  }

  private void populatePage( PageData data ) {
    Book book = data.get( BOOK_ITEM, Book.class );
    setTitle( book.getTitle() );
    titleLabel.setText( book.getTitle() );
    authorLabel.setText( book.getAuthor() );
    imageLabel.setImage( book.getImage() );
    relatedTreeViewer.setInput( book.getRelated() );
    addGroupedEventsListener( book );
  }

  private void addGroupedEventsListener( final Book book ) {
    onComposite( bookDetailsComposite ).addGroupedListener( SWT.MouseDown, new Listener() {

      @Override
      public void handleEvent( Event event ) {
        PageData readData = new PageData();
        readData.set( ReadBookPage.BOOK_ITEM, book );
        openPage( ReadBookPage.class.getName(), readData );
      }
    } );
  }

  private void createBookDetailsComposite( Composite parent ) {
    createBookComposite( parent );
    createBookImage();
    createBookTitle();
    createBookAuthor();
  }

  private void createBookComposite( Composite parent ) {
    bookDetailsComposite = new Composite( parent, SWT.NONE );
    bookDetailsComposite.setBackground( parent.getDisplay().getSystemColor( SWT.COLOR_WHITE ) );
    GridData layoutData = GridDataFactory.fillDefaults()
      .align( SWT.FILL, SWT.TOP )
      .grab( true, false )
      .create();
    bookDetailsComposite.setLayoutData( layoutData );
    onComposite( bookDetailsComposite ).showLocalTouch( true );
    GridLayout layout = GridLayoutFactory.fillDefaults()
      .spacing( 12, 12 )
      .margins( 12, 12 )
      .numColumns( 2 )
      .create();
    bookDetailsComposite.setLayout( layout );
  }

  private void createBookImage() {
    imageLabel = new Label( bookDetailsComposite, SWT.WRAP );
    imageLabel.setForeground( bookDetailsComposite.getDisplay().getSystemColor( SWT.COLOR_BLACK ) );
    GridData gridData = new GridData( SWT.FILL, SWT.FILL, false, false );
    gridData.verticalSpan = 2;
    imageLabel.setLayoutData( gridData );
  }

  private void createBookTitle() {
    titleLabel = new Label( bookDetailsComposite, SWT.WRAP );
    titleLabel.setForeground( bookDetailsComposite.getDisplay().getSystemColor( SWT.COLOR_BLACK ) );
    titleLabel.setFont( getFontRegistry().get( TITLE_FONT ) );
    GridDataFactory.fillDefaults().align( SWT.FILL, SWT.TOP ).grab( true, false ).applyTo( titleLabel );
  }

  private void createBookAuthor() {
    authorLabel = new Label( bookDetailsComposite, SWT.WRAP );
    authorLabel.setForeground( bookDetailsComposite.getDisplay().getSystemColor( SWT.COLOR_BLACK ) );
    GridDataFactory.fillDefaults().align( SWT.FILL, SWT.TOP ).grab( true, false ).applyTo( authorLabel );
  }

  private void createRelatedBooks( Composite parent ) {
    Composite relatedBooksComposite = createRelatedTitleComposite( parent );
    createRelatedBooksTitle( relatedBooksComposite );
    createLine( relatedBooksComposite );
  }

  private Composite createRelatedTitleComposite( Composite parent ) {
    Composite composite = new Composite( parent, SWT.NONE );
    GridDataFactory.fillDefaults().align( SWT.FILL, SWT.TOP ).grab( true, false ).applyTo( composite );
    GridLayoutFactory.fillDefaults()
      .spacing( 0, 0 )
      .margins( 6, 0 )
      .extendedMargins( 0, 0, 12, 6 )
      .applyTo( composite );
    composite.setBackground( composite.getDisplay().getSystemColor( SWT.COLOR_WHITE ) );
    return composite;
  }

  private void createRelatedBooksTitle( Composite composite ) {
    Label relatedBooksLabel = new Label( composite, SWT.NONE );
    relatedBooksLabel.setText( "Related Books" );
    relatedBooksLabel.setFont( getFontRegistry().get( RELATED_BOOKS_FONT ) );
    relatedBooksLabel.setForeground( composite.getDisplay().getSystemColor( SWT.COLOR_DARK_GRAY ) );
    GridData layoutData = new GridData( SWT.FILL, SWT.TOP, true, false );
    layoutData.horizontalIndent = 6;
    relatedBooksLabel.setLayoutData( layoutData );
  }

  private void createLine( Composite composite ) {
    Label line = new Label( composite, SWT.NONE );
    line.setBackground( composite.getDisplay().getSystemColor( SWT.COLOR_GRAY ) );
    GridData layoutData = new GridData( SWT.FILL, SWT.TOP, true, false );
    layoutData.heightHint = 1;
    line.setLayoutData( layoutData );
  }

  private void createRelatedList( Composite parent ) {
    relatedTreeViewer = BooksListPage.createTreeViewer( this, parent );
  }

  @Override
  public void activate() {
    relatedTreeViewer.setSelection( null );
  }

  @Override
  public void deactivate() {
    // nothing to do here
  }
}
TOP

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

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.