Package com.daikit.daikit4gxt.client.ui

Source Code of com.daikit.daikit4gxt.client.ui.BaseGui

/**
* Copyright (C) 2013 DaiKit.com - daikit4gxt module (admin@daikit.com)
*
*         Project home : http://code.daikit.com/daikit4gxt
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*         http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.daikit.daikit4gxt.client.ui;

import com.daikit.daikit4gxt.client.DkMain;
import com.daikit.daikit4gxt.client.ui.component.toolbar.TextToolItem;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.RootPanel;
import com.sencha.gxt.widget.core.client.ContentPanel;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer;
import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData;
import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer.HorizontalLayoutData;
import com.sencha.gxt.widget.core.client.container.MarginData;
import com.sencha.gxt.widget.core.client.container.SimpleContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.container.Viewport;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.form.FormPanel;
import com.sencha.gxt.widget.core.client.form.FormPanel.Method;
import com.sencha.gxt.widget.core.client.toolbar.FillToolItem;
import com.sencha.gxt.widget.core.client.toolbar.SeparatorToolItem;
import com.sencha.gxt.widget.core.client.toolbar.ToolBar;


public class BaseGui implements UIInvalidatable
{

  protected Viewport viewport;

  protected SimpleContainer screenContainerPanel;

  private final ToolBar tb;
  private TextButton buttonRestoreDown;
  private TextButton buttonExpand;
  private TextToolItem displayNameText;

  private final HorizontalLayoutData layoutDataVerticalCenter;

  private final FormPanel hyperlinkCallerFormPanel;
  private final Anchor hyperLink;

  // FOR GUI STANDALONE ----
  private SeparatorToolItem connectSeparatorToolItem;
  private TextButton buttonConnectDisconnect;

  // ----

  // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
  // RENDERING
  // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

  /**
   * Constructor
   */
  public BaseGui()
  {
    // final Theme themeSlate = new Theme("slate", "Slate", GWT.getHostPageBaseURL() +
    // "gxt/themes/slate/css/xtheme-slate.css");
    // final Theme themeGray = new Theme("gray", GXT.MESSAGES.themeSelector_grayTheme(), GWT.getHostPageBaseURL() +
    // "/gxt/css/gxt-gray.css");
    // ThemeManager.unregister(Theme.GRAY);
    // ThemeManager.register(themeGray);
    // ThemeManager.register(themeSlate);

    viewport = new Viewport();
    RootPanel.get().add(viewport);
    viewport.getElement().getStyle().setPosition(Position.FIXED);
    viewport.getElement().getStyle().setTop(0, Unit.PX);
    viewport.getElement().getStyle().setLeft(0, Unit.PX);
    viewport.getElement().getStyle().setZIndex(1);

    final HorizontalLayoutContainer mainContainer = new HorizontalLayoutContainer();
    viewport.add(mainContainer);
    mainContainer.getElement().getStyle().setProperty("textAlign", "center"); // IE hack for center alignment

    final BorderLayoutContainer mainBorderLayoutContainer = new BorderLayoutContainer()
    {
      @Override
      protected void doLayout()
      {
        super.doLayout();
        getElement().getStyle().setProperty("textAlign", "left"); // clear IE hack
        getElement().getStyle().setProperty("marginTop", "0");
        getElement().getStyle().setProperty("marginRight", "auto");
        getElement().getStyle().setProperty("marginBottom", "0");
        getElement().getStyle().setProperty("marginLeft", "auto");
        getElement().getStyle().setPosition(Position.RELATIVE);
      }
    };
    mainBorderLayoutContainer.setBorders(true);
    layoutDataVerticalCenter = new HorizontalLayoutData(DkMain.model().isFullSize() ? 1 : DkMain.config()
        .getApplicationWidth(), 1, null);
    mainContainer.add(mainBorderLayoutContainer, layoutDataVerticalCenter);

    // NORTH PANEL --------------------------------------------------------------------------

    final VerticalLayoutContainer northPanel = new VerticalLayoutContainer();
    northPanel.setBorders(false);
    tb = new ToolBar();
    updateMainToolBar(tb);
    northPanel.add(tb, new VerticalLayoutData(1, -1));

    final StringBuffer sb = new StringBuffer();
    sb.append("<div class='application-title-container'>");
    sb.append("<img src='" + GWT.getHostPageBaseURL() + DkMain.i18n().appIconPath()).append("'/>");
    sb.append("<span class='app-title'>").append(DkMain.i18n().appTitle()).append("</span>");
    sb.append("<span class='app-title-info'>").append(getAppInfoLabel()).append("</span>");
    sb.append("</div>");
    final HTML titlePanel = new HTML(sb.toString());
    northPanel.add(titlePanel, new VerticalLayoutData(1, -1));

    final BorderLayoutData northBorderLayoutData = new BorderLayoutData(63);
    mainBorderLayoutContainer.setNorthWidget(northPanel, northBorderLayoutData);

    // HYPERLINK FORM PANEL -----------------------------------------------------------------
    hyperlinkCallerFormPanel = new FormPanel();
    hyperlinkCallerFormPanel.setAction("");
    hyperlinkCallerFormPanel.setMethod(Method.POST);
    northPanel.add(hyperlinkCallerFormPanel);

    hyperLink = new Anchor();
    hyperLink.setVisible(false);
    northPanel.add(hyperLink);
    // SCREEN CONTAINER PANEL ---------------------------------------------------------------

    final MarginData centerBorderLayoutData = new MarginData(4, 2, 1, 2);
    screenContainerPanel = new SimpleContainer();
    mainBorderLayoutContainer.add(screenContainerPanel, centerBorderLayoutData);
  }

  private final void updateMainToolBar(final ToolBar tb)
  {
    updateToolbarBeforeStart(tb);
    // Display name text
    tb.add(new FillToolItem());
    updateToolbarBeforeDisplayName(tb);
    displayNameText = new TextToolItem();
    // displayNameText.getElement().getStyle().setFontWeight(FontWeight.BOLD);
    // displayNameText.getElement().getStyle().setFontStyle(FontStyle.ITALIC);
    tb.add(displayNameText);
    updateToolbarBetweenDisplayNameAndConnectButtons(tb);
    updateToolbarConnectButton(tb);
    // button restore down
    buttonRestoreDown = new TextButton("", new SelectEvent.SelectHandler()
    {
      @Override
      public void onSelect(final SelectEvent event)
      {
        DkMain.controller().onFullScreen(false);
      }
    });
    buttonRestoreDown.setIcon(DkMain.icons().restore_down_16_14());
    // button expand
    buttonExpand = new TextButton("", new SelectEvent.SelectHandler()
    {
      @Override
      public void onSelect(final SelectEvent event)
      {
        DkMain.controller().onFullScreen(true);
      }
    });
    buttonExpand.setIcon(DkMain.icons().full_size_16_14());
    tb.add(buttonRestoreDown);
    tb.add(buttonExpand);
  }

  protected void updateToolbarConnectButton(final ToolBar tb)
  {
    if (DkMain.config().isStandalone())
    {
      // Button Connect
      buttonConnectDisconnect = new TextButton("Connect", new SelectEvent.SelectHandler()
      {
        @Override
        public void onSelect(final SelectEvent event)
        {
          if (DkMain.model().isLogged())
          {
            DkMain.controller().doDisconnect();
          }
          else
          {
            DkMain.controller().getConnectionPopupInstance().show();
          }
        }
      });
      buttonConnectDisconnect.setIcon(DkMain.icons().connect_16());
      // Button disconnect

      connectSeparatorToolItem = new SeparatorToolItem();

      tb.add(connectSeparatorToolItem);
      tb.add(buttonConnectDisconnect);
    }
  }

  protected void updateToolbarBeforeStart(final ToolBar tb)
  {
    // Nothing done by default
  }

  protected void updateToolbarBeforeDisplayName(final ToolBar tb)
  {
    // Nothing done by default
  }

  protected void updateToolbarBetweenDisplayNameAndConnectButtons(final ToolBar tb)
  {
    // Nothing done by default
  }

  // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
  // GETTERS - SETTERS
  // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

  public SimpleContainer getScreenContainerPanel()
  {
    return screenContainerPanel;
  }

  public Viewport getViewport()
  {
    return viewport;
  }

  public void setViewport(final Viewport viewport)
  {
    this.viewport = viewport;
  }

  public void setScreenContainerPanel(final ContentPanel screenContainerPanel)
  {
    this.screenContainerPanel = screenContainerPanel;
  }

  public void onFullScreenChanged()
  {
    if (DkMain.model().isFullSize())
    {
      layoutDataVerticalCenter.setWidth(1);
    }
    else if (!DkMain.model().isFullSize())
    {
      layoutDataVerticalCenter.setWidth(DkMain.config().getApplicationWidth());
    }
  }

  public FormPanel getHyperlinkCallerFormPanel()
  {
    return hyperlinkCallerFormPanel;
  }

  public Anchor getHyperLink()
  {
    return hyperLink;
  }

  // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
  // METHODS
  // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

  @Override
  public void invalidateUi()
  {
    buttonExpand.setEnabled(!DkMain.model().isFullSize());
    buttonExpand.setVisible(!DkMain.model().isFullSize());

    buttonRestoreDown.setEnabled(DkMain.model().isFullSize());
    buttonRestoreDown.setVisible(DkMain.model().isFullSize());

    displayNameText.getElement().getStyle().setPaddingRight(5d, Unit.PX);
    displayNameText.getElement().getStyle().setPaddingRight(5d, Unit.PX);

    if (DkMain.config().isStandalone())
    {
      if (DkMain.model().isLogged())
      {
        displayNameText.setText(DkMain.i18n().gui_logged_as_text(getLoggedAsUsername()));
        buttonConnectDisconnect.setText(DkMain.i18n().label_disconnect());
        buttonConnectDisconnect.setIcon(DkMain.icons().disconnect_16());
      }
      else
      {
        displayNameText.setText(DkMain.i18n().gui_user_not_connected());
        buttonConnectDisconnect.setText(DkMain.i18n().label_connect());
        buttonConnectDisconnect.setIcon(DkMain.icons().connect_16());
      }
    }
    else
    {
      displayNameText.setText(DkMain.i18n().gui_logged_as_text(getLoggedAsUsername()));
    }
    displayNameText.syncSize();
    tb.syncSize();
    tb.forceLayout();
  }

  protected String getLoggedAsUsername()
  {
    return DkMain.model().getUserLogged().getEmail();
  }

  protected String getAppInfoLabel()
  {
    return "( F11 : Full Screen )";
  }

}
TOP

Related Classes of com.daikit.daikit4gxt.client.ui.BaseGui

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.