Package net.sf.latexdraw.ui

Source Code of net.sf.latexdraw.ui.UIBuilder

package net.sf.latexdraw.ui;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;

import javax.swing.BoxLayout;

import net.sf.latexdraw.glib.ui.LCanvas;
import net.sf.latexdraw.lang.LangTool;

import org.malai.instrument.Instrument;
import org.malai.swing.ui.SwingUIComposer;
import org.malai.swing.widget.MComboBox;
import org.malai.swing.widget.MPanel;
import org.malai.swing.widget.MProgressBar;
import org.malai.swing.widget.MSpinner;
import org.malai.swing.widget.MToolBar;
import org.malai.swing.widget.ScrollableWidget;

/**
* This composer composes the latexdraw user interface.<br>
* <br>
* This file is part of LaTeXDraw.<br>
* Copyright (c) 2005-2014 Arnaud BLOUIN<br>
* <br>
* LaTeXDraw is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later version.
* <br>
* LaTeXDraw is distributed without any warranty; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.<br>
* <br>
* 20/31/2010<br>
* @author Arnaud BLOUIN
* @since 3.0
*/
public class UIBuilder extends SwingUIComposer<LFrame> {
  /** The max height of the textfield widget. */
  protected static final int HEIGHT_TEXTFIELD = 30;

  /** The space added between widgets. */
  protected static final int SEPARATION_WIDTH = 5;

  /** The menu bar composer. */
  protected MenubarBuilder menubarBuilder;

  /** The tool bar composer. */
  protected ToolbarBuilder toolbarBuilder;

  /** The properties tool bar composer. */
  protected PropertiesToolbarBuilder propToolbarBuilder;


  /**
   * Creates the composer of the latexdraw user interface.
   * @param frame The frame of the interactive system that contains the instruments and presentations to compose.
   * @since 3.0
   */
  public UIBuilder(final LFrame frame) {
    super();
    widget = frame;
    menubarBuilder     = new MenubarBuilder(widget);
    toolbarBuilder     = new ToolbarBuilder(widget);
    propToolbarBuilder   = new PropertiesToolbarBuilder(widget);
  }


  /**
   * @return The toolbar of the application.
   * @since 3.0
   */
  public MToolBar getToolbar() {
    return toolbarBuilder.getWidget();
  }


  // FIXME SCALA: When a trait will be used, this trait could be used as type of the parameter instead of several operations.
  protected static void addSpinner(final Container cont, final MSpinner spinner, final int width) {
    spinner.setPreferredSize(new Dimension(width, HEIGHT_TEXTFIELD));
    if(spinner.getLabel()!=null)
      cont.add(spinner.getLabel());
    cont.add(spinner);
  }


  protected static void addCombobox(final Container cont, final MComboBox<?> spinner) {
    if(spinner.getLabel()!=null)
      cont.add(spinner.getLabel());
    cont.add(spinner);
  }


  @Override
  public void setWidgetVisible(final Component widget, final boolean visible) {
    final Component comp;

    if(widget==null || visible==widget.isVisible()) return;

    // For widgets having a ScrollPane we must check their containing ScollPane.
    if(widget instanceof ScrollableWidget && ((ScrollableWidget)widget).hasScrollPane())
      comp = ((ScrollableWidget)widget).getScrollpane();
    else comp = widget;

    super.setWidgetVisible(comp, visible);

    WidgetMiniToolbar list = toolbarBuilder.mapContainers.get(comp);

    if(list==null)
      list = propToolbarBuilder.mapContainers.get(comp);

    if(list!=null) {
      list.setVisible(visible || list.isContentVisible());
      if(list.isVisible() && list.getWindowToolBar().isVisible())
        list.update();
    }
  }


  @Override
  public void compose(final MProgressBar progressBar) {
    final MPanel statusPanel = new MPanel(false, false);

    menubarBuilder.compose(progressBar);
    toolbarBuilder.compose(progressBar);
    propToolbarBuilder.compose(progressBar);

    /* Creation of the drawing area composed of the canvas, the scales, etc. */
    final MPanel drawingArea = new MPanel(false, false);
    drawingArea.setLayout(new BorderLayout());
    drawingArea.add(widget.xScaleRuler, BorderLayout.NORTH);
    drawingArea.add(widget.yScaleRuler, BorderLayout.WEST);
    drawingArea.add(widget.layeredPanel, BorderLayout.CENTER);
    drawingArea.add(propToolbarBuilder.getWidget(), BorderLayout.SOUTH);
    if(progressBar!=null) progressBar.addToProgressBar(5);

    /* Creation of the tabbed pane. */
    widget.tabbedPanel.addTab(LangTool.INSTANCE.getStringActions("UIBuilder.1"), drawingArea); //$NON-NLS-1$
    widget.tabbedPanel.addTab("PST", widget.getCodePanel()); //$NON-NLS-1$

    statusPanel.setLayout(new BoxLayout(statusPanel, BoxLayout.LINE_AXIS));
    statusPanel.add(widget.fileLoader.getProgressBar());
    statusPanel.add(widget.statusBar);
    widget.fileLoader.getProgressBar().setMaximumSize(new Dimension(200, 60));

    widget.setLayout(new BorderLayout());
    widget.add(toolbarBuilder.getWidget(), BorderLayout.NORTH);
    widget.add(widget.tabbedPanel, BorderLayout.CENTER);
    widget.add(statusPanel, BorderLayout.SOUTH);
    if(progressBar!=null) progressBar.addToProgressBar(5);

    widget.setJMenuBar(menubarBuilder.getWidget());
    // Updating the concrete presentations.
    widget.updatePresentations();

    setEventableToInstruments();
    initialiseInstrumentsActivation();

    if(progressBar!=null) progressBar.addToProgressBar(5);
  }


  /**
   * Sets the eventable objects to the instruments.
   * @since 3.0
   */
  protected void setEventableToInstruments() {
    final LCanvas canvas   = widget.getCanvas();
    final MToolBar toolbar   = toolbarBuilder.getWidget();

    widget.prefActivator.addEventable(menubarBuilder.editMenu);
    widget.exceptionsManager.addEventable(toolbar);
    widget.scroller.addEventable(canvas);
    widget.editingSelector.addEventable(toolbar);
    widget.hand.addEventable(canvas);
    widget.pencil.addEventable(canvas);
    widget.exporter.addEventable(toolbar);
    widget.exporter.addEventable(widget.exporter.getExportMenu());
    widget.scaleRulersCustomiser.addEventable(menubarBuilder.displayMenu);
    widget.scaleRulersCustomiser.addEventable(menubarBuilder.unitMenu);
    widget.fileLoader.addEventable(widget.fileLoader.getRecentFilesMenu());
    widget.gridCustomiser.addEventable(toolbarBuilder.magneticGridB.getToolbar());
    widget.helper.addEventable(menubarBuilder.helpMenu);
    setGlobalShortcutEventable(widget.undoManager, canvas);
    setGlobalShortcutEventable(widget.zoomer, canvas);
    setGlobalShortcutEventable(widget.deleter, canvas);
    setGlobalShortcutEventable(widget.paster, canvas);
    setGlobalShortcutEventable(widget.fileLoader, canvas);
    widget.fileLoader.addEventable(widget);
    widget.tabSelector.addEventable(widget.tabbedPanel);
    widget.drawingPropCustomiser.addEventable(toolbarBuilder.drawingB.getToolbar());
    widget.templateManager.addEventable(widget.templateManager.templateMenu());
    widget.templateManager.addEventable(widget.exporter.getExportMenu());
  }


  protected void setGlobalShortcutEventable(final Instrument instrument, final LCanvas canvas) {
    if(instrument!=null) {
      instrument.addEventable(toolbarBuilder.getWidget());
      instrument.addEventable(propToolbarBuilder.getWidget());
      instrument.addEventable(canvas);
      instrument.addEventable(widget.getTabbedPanel());
      instrument.addEventable(widget.getCodePanel());
      instrument.addEventable(menubarBuilder.displayMenu);
      instrument.addEventable(menubarBuilder.drawingMenu);
      instrument.addEventable(menubarBuilder.editMenu);
      instrument.addEventable(menubarBuilder.helpMenu);
      instrument.addEventable(menubarBuilder.unitMenu);
    }
  }


  protected void initialiseInstrumentsActivation() {
    widget.prefActivator.setActivated(true);
    widget.helper.setActivated(true);
    widget.gridCustomiser.setActivated(true);
    widget.scroller.setActivated(true);
    widget.exporter.setActivated(false);
    widget.editingSelector.setActivated(true);
    widget.hand.setActivated(true);
    widget.pencil.setActivated(false);
    widget.deleter.setActivated(false);
    widget.undoManager.setActivated(true);
    widget.zoomer.setActivated(true);
    widget.fileLoader.setActivated(true);
    widget.scaleRulersCustomiser.setActivated(true);
    widget.paster.setActivated(true);
    widget.tabSelector.setActivated(true);
    widget.drawingPropCustomiser.setActivated(true);
    widget.templateManager.setActivated(true);
  }
}
TOP

Related Classes of net.sf.latexdraw.ui.UIBuilder

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.