Package com.extjs.gxt.desktop.client

Source Code of com.extjs.gxt.desktop.client.Desktop

/*
* Ext GWT - Ext for GWT
* Copyright(c) 2007, 2008, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
package com.extjs.gxt.desktop.client;

import java.util.ArrayList;
import java.util.List;

import com.extjs.gxt.ui.client.Events;
import com.extjs.gxt.ui.client.XDOM;
import com.extjs.gxt.ui.client.core.El;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.WindowEvent;
import com.extjs.gxt.ui.client.event.WindowListener;
import com.extjs.gxt.ui.client.event.WindowManagerEvent;
import com.extjs.gxt.ui.client.widget.ComponentHelper;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.Viewport;
import com.extjs.gxt.ui.client.widget.Window;
import com.extjs.gxt.ui.client.widget.WindowManager;
import com.extjs.gxt.ui.client.widget.layout.RowData;
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.RootPanel;

/**
* A desktop represents a desktop like application which contains a task bar,
* start menu, and shortcuts.
*
* <p/> Rather than adding content directly to the
* root panel, content should be wrapped in windows. Windows can be opened via
* shortcuts and the start menu.
*/
public class Desktop {

  private TaskBar taskBar = new TaskBar();
  private WindowListener listener;
  private Listener<WindowManagerEvent> managerListener;
  private Viewport viewport;
  private Window activeWindow;
  private List<Shortcut> shortcuts = new ArrayList<Shortcut>();
  private El shortcutEl;
 
  public Desktop() {
    initListeners();

    viewport = new Viewport();
    viewport.setLayout(new RowLayout());

    LayoutContainer lc = new LayoutContainer() {
      @Override
      protected void onRender(Element parent, int index) {
        super.onRender(parent, index);
        el().appendChild(XDOM.getElementById("x-desktop"));
      }
    };

    viewport.add(lc, new RowData(1, 1));
    viewport.add(taskBar, new RowData(1, 30));

    Element el = XDOM.getElementById("x-shortcuts");
    if (el == null) {
      el = DOM.createDiv();
      el.setClassName("x-shortcuts");
      XDOM.getBody().appendChild(el);
    }
    shortcutEl = new El(el);

    RootPanel.get().add(viewport);
  }

  public void addShortcut(Shortcut shortcut) {
    shortcuts.add(shortcut);
    shortcut.render(shortcutEl.dom);
    ComponentHelper.doAttach(shortcut);
  }

  public void removeShortcut(Shortcut shortcut) {
    shortcuts.remove(shortcut);
    shortcutEl.dom.removeChild(shortcut.getElement());
    ComponentHelper.doDetach(shortcut);
  }

  public StartMenu getStartMenu() {
    return taskBar.getStartMenu();
  }

  public TaskBar getTaskBar() {
    return taskBar;
  }

  public void minimizeWindow(Window window) {
    window.setData("minimize", true);
    window.hide();
  }

  protected void initListeners() {
    listener = new WindowListener() {
      @Override
      public void windowActivate(WindowEvent we) {
        markActive(we.window);
      }

      @Override
      public void windowDeactivate(WindowEvent we) {
        markInactive(we.window);
      }

      @Override
      public void windowMinimize(WindowEvent we) {
        minimizeWindow(we.window);
      }

    };

    managerListener = new Listener<WindowManagerEvent>() {

      public void handleEvent(WindowManagerEvent be) {
        switch (be.type) {
          case Events.Register:
            onRegister(be.window);
            break;
          case Events.Unregister:
            onUnregister(be.window);
            break;
        }
      }

    };

    WindowManager.get().addListener(Events.Register, managerListener);
    WindowManager.get().addListener(Events.Unregister, managerListener);
  }

  private void onRegister(Window window) {
    taskBar.addTaskButton(window);
    window.addWindowListener(listener);
  }

  private void onUnregister(Window window) {
    if (activeWindow == window) {
      activeWindow = null;
    }
    taskBar.removeTaskButton((TaskButton) window.getData("taskButton"));
  }

  private void markActive(Window window) {
    if (activeWindow != null && activeWindow != window) {
      markInactive(activeWindow);
    }
    taskBar.setActiveButton((TaskButton) window.getData("taskButton"));
    activeWindow = window;
    TaskButton btn = window.getData("taskButton");
    btn.addStyleName("active-win");
    window.setData("minimize", null);
  }

  private void markInactive(Window window) {
    if (window == activeWindow) {
      activeWindow = null;
      TaskButton btn = window.getData("taskButton");
      btn.removeStyleName("active-win");
    }
  }

}
TOP

Related Classes of com.extjs.gxt.desktop.client.Desktop

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.