Package com.eclipsesource.tabris.demos.entrypoints

Source Code of com.eclipsesource.tabris.demos.entrypoints.ButtonControlsDemo

/*******************************************************************************
* Copyright (c) 2012 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.entrypoints;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.resource.FontDescriptor;
import org.eclipse.rap.rwt.application.EntryPoint;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;

import com.eclipsesource.tabris.demos.button.Questions;
import com.eclipsesource.tabris.widgets.enhancement.Widgets;

public class ButtonControlsDemo implements EntryPoint {

  private Questions questions;
  private Button buttonA;
  private Button buttonB;
  private Button buttonC;
  private Button buttonNext;
  private Button buttonPrevious;
  private Label labelQuestion;

  @Override
  public int createUI() {
    Display display = new Display();
    Shell shell = new Shell( display, SWT.NO_TRIM );
    shell.setMaximized( true );
    shell.setBackground( display.getSystemColor( SWT.COLOR_WHITE ) );
    GridLayoutFactory.fillDefaults().applyTo( shell );
    createToolbar( shell );
    createContent( shell );
    createNavigation( shell );
    shell.open();
    reset();
    return 0;
  }

  private void createToolbar( Composite parent ) {
    ToolBar toolBar = new ToolBar( parent, SWT.NONE );
    GridDataFactory.fillDefaults().grab( true, false ).align( SWT.FILL, SWT.TOP ).applyTo( toolBar );

    ToolItem titleItem = new ToolItem( toolBar, SWT.NONE );
    Widgets.onToolItem( titleItem ).useAsTitle();
    titleItem.setText( "You don't know that?" );

    ToolItem resetItem = new ToolItem( toolBar, SWT.PUSH );
    resetItem.setText( "Restart" );
    resetItem.addSelectionListener( new SelectionAdapter() {
      @Override
      public void widgetSelected( SelectionEvent e ) {
        reset();
        updateUI();
      }
    } );
  }

  private void createContent( Composite parent ) {
    Composite content = new Composite( parent, SWT.NONE );
    GridDataFactory.fillDefaults().grab( true, true ).align( SWT.FILL, SWT.FILL ).applyTo( content );
    GridLayoutFactory.fillDefaults().margins( 16, 16 ).applyTo( content );
    createQuestion( content );
    createAnswers( content );
  }

  public void createQuestion( Composite parent ) {
    labelQuestion = new Label( parent, SWT.WRAP | SWT.CENTER );
    GridDataFactory.fillDefaults().align( SWT.FILL, SWT.FILL ).grab( true, true ).applyTo( labelQuestion );
    FontDescriptor labelFontDescriptor = FontDescriptor.createFrom( labelQuestion.getFont() );
    FontDescriptor bigFontDescriptor = labelFontDescriptor.setStyle( SWT.BOLD ).increaseHeight( 7 );
    labelQuestion.setFont( bigFontDescriptor.createFont( parent.getDisplay() ) );
    labelQuestion.setForeground( parent.getDisplay().getSystemColor( SWT.COLOR_BLACK ) );
  }

  private void createAnswers( Composite parent ) {
    Composite result = new Composite( parent, SWT.NONE );
    GridDataFactory.fillDefaults().grab( true, true ).align( SWT.FILL, SWT.FILL ).applyTo( result );
    GridLayoutFactory.fillDefaults().applyTo( result );
    buttonA = createAnswerButton( result, new RGB(43, 232, 105) );
    buttonB = createAnswerButton( result, new RGB(182, 107, 153) );
    buttonC = createAnswerButton( result, new RGB(225, 134, 87) );
  }

  private Button createAnswerButton( Composite result, RGB color ) {
    final Button button = new Button( result, SWT.RADIO | SWT.WRAP );
    button.setForeground( new Color( button.getDisplay(), color ) );
    button.addSelectionListener( new SelectionAdapter() {
      @Override
      public void widgetSelected( SelectionEvent e ) {
        if( button.getSelection() ) {
          answerSelected( button.getText() );
        }
      }
    } );
    return button;
  }

  private void createNavigation( Composite parent ) {
    Composite navigation = new Composite( parent, SWT.NONE );
    GridDataFactory.fillDefaults().grab( true, false ).align( SWT.FILL, SWT.FILL ).applyTo( navigation );
    GridLayoutFactory.fillDefaults().numColumns( 2 ).margins( 8, 8 ).equalWidth( true ).applyTo( navigation );

    createNavigationPrevious( navigation );
    createNavigationNext( navigation );
  }

  public void createNavigationNext( Composite parent ) {
    buttonNext = new Button( parent, SWT.PUSH | SWT.BORDER );
    buttonNext.setText( "Next Question" );
    GridDataFactory.fillDefaults().grab( true, true ).align( SWT.END, SWT.END ).applyTo( buttonNext);
    buttonNext.addSelectionListener( new SelectionAdapter() {
      @Override
      public void widgetSelected( SelectionEvent e ) {
        next();
      }
    } );
  }

  public void createNavigationPrevious( Composite parent ) {
    buttonPrevious = new Button( parent, SWT.PUSH );
    buttonPrevious.setText( "Last Question" );
    GridDataFactory.fillDefaults().grab( true, true ).align( SWT.BEGINNING, SWT.END ).applyTo( buttonPrevious );
    buttonPrevious.addSelectionListener( new SelectionAdapter() {
      @Override
      public void widgetSelected( SelectionEvent e ) {
        previous();
      }
    } );
  }

  /**
   * Update UI state
   */
  protected void answerSelected( String answer ) {
    String currentQuestion = questions.getCurrentQuestion();
    boolean correct = questions.isCorrect( currentQuestion, answer );
    if( correct ) {
      buttonNext.setForeground( buttonNext.getDisplay().getSystemColor( SWT.COLOR_DARK_GREEN ) );
    } else {
      buttonNext.setForeground( buttonNext.getDisplay().getSystemColor( SWT.COLOR_DARK_RED ) );
    }
    buttonNext.setEnabled( correct && questions.hasNextQuestion() );
  }

  private void updateUI() {
    String currentQuestion = questions.getCurrentQuestion();
    labelQuestion.setText( currentQuestion );
    labelQuestion.getParent().layout();
    String[] answers = questions.getAnswers( currentQuestion );
    buttonA.setText( answers[0] );
    buttonB.setText( answers[1] );
    buttonC.setText( answers[2] );
    buttonA.getParent().layout();
    buttonPrevious.setEnabled( questions.hasPreviousQuestion() );
    buttonNext.setEnabled( false );
  }

  /**
   * Navigate the Questions
   */

  private void previous() {
    questions.getPreviousQuestion();
    resetButtons();
    updateUI();
  }

  protected void next() {
    questions.getNextQuestion();
    resetButtons();
    updateUI();
  }

  private void resetButtons() {
    buttonA.setSelection( false );
    buttonB.setSelection( false );
    buttonC.setSelection( false );
  }

  private void reset() {
    questions = new Questions();
    updateUI();
    resetButtons();
  }

}
TOP

Related Classes of com.eclipsesource.tabris.demos.entrypoints.ButtonControlsDemo

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.