/* Zssapp.java {{IS_NOTE Purpose: Description: History: Nov 16, 2010 6:22:52 PM , Created by Sam }}IS_NOTE Copyright (C) 2009 Potix Corporation. All Rights Reserved. */ package org.zkoss.zss.app.zul; import java.util.ArrayList; import java.util.HashSet; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Components; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.IdSpace; import org.zkoss.zk.ui.WebApp; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.EventQueue; import org.zkoss.zk.ui.event.EventQueues; import org.zkoss.zss.app.Consts; import org.zkoss.zss.app.zul.ctrl.DesktopCellStyleContext; import org.zkoss.zss.app.zul.ctrl.DesktopWorkbenchContext; import org.zkoss.zss.engine.event.SSDataEvent; import org.zkoss.zss.model.Book; import org.zkoss.zss.model.impl.ExcelImporter; import org.zkoss.zss.ui.Action; import org.zkoss.zss.ui.Spreadsheet; import org.zkoss.zul.Div; import org.zkoss.zul.Menubar; /** * * @author sam * */ public class Zssapp extends Div implements IdSpace { private final static String KEY_ZSSAPP = "org.zkoss.zss.app.zul.zssApp"; /*Default spreadsheet*/ //TODO: in mainWin id space, move to here private Spreadsheet spreadsheet; //private Window mainWin; private Div mainWin; Appmenubar _appmenubar; public static class SpreadsheetHolder { HashSet container = new HashSet(); public void add(Spreadsheet spreadsheet) { container.add(spreadsheet); } public void remove(Spreadsheet spreadsheet) { container.remove(spreadsheet); } public HashSet getAll() { return container; } } /* Context */ DesktopWorkbenchContext workbenchContext = new DesktopWorkbenchContext(); DesktopCellStyleContext cellStyleContext = new DesktopCellStyleContext(); public Zssapp() { Executions.createComponents(Consts._Zssapp_zul, this, null); Components.wireVariables(this, this, '$', true, true); Components.addForwards(this, this, '$'); spreadsheet = (Spreadsheet)mainWin.getFellow("spreadsheet"); Menubar bar = (Menubar) mainWin.getFellow("menubar"); _appmenubar = new Appmenubar(bar); final Spreadsheet ss = spreadsheet; final EventQueue modifyEvtQueue = EventQueues.lookup("onModified", EventQueues.APPLICATION, true); modifyEvtQueue.subscribe(new EventListener() { @Override public void onEvent(Event event) throws Exception { if (ss.getPage() == null) {//unsubscribe event queue when spreadsheet detached modifyEvtQueue.unsubscribe(this); } else { ss.setActionDisabled(false, Action.SAVE_BOOK); } } }); } public void setSrc(String src) { WebApp wapp = Executions.getCurrent().getDesktop().getWebApp(); final EventQueue modifyEvtQueue = EventQueues.lookup("onModified", EventQueues.APPLICATION, true); Book book=(Book) wapp.getAttribute(src); if (book == null) { getDesktopWorkbenchContext().getWorkbookCtrl().setBookSrc(src); book = spreadsheet.getBook(); book.setShareScope(EventQueues.APPLICATION); book.subscribe(new EventListener() { @Override public void onEvent(Event event) throws Exception { String name = event.getName(); if (SSDataEvent.ON_CONTENTS_CHANGE.equals(name)) { modifyEvtQueue.publish(new Event(SSDataEvent.ON_CONTENTS_CHANGE)); } } }); wapp.setAttribute(src, book); }else getDesktopWorkbenchContext().getWorkbookCtrl().setBook(book); } /** * Sets {@link #Book} * @param book */ public void setBook(Book book) { getDesktopWorkbenchContext().getWorkbookCtrl().setBook(book); } public void setMaxrows(int maxrows) { spreadsheet.setMaxrows(maxrows); } public void setMaxcolumns(int maxcols) { spreadsheet.setMaxcolumns(maxcols); } public Spreadsheet getSpreadsheet() { return spreadsheet; } public static Zssapp getInstance(Component comp) { Zssapp self = null; Component n = null; ArrayList setPropList = null; for (n = comp; n != null; n = n.getParent()) { self = (Zssapp) n.getAttribute(KEY_ZSSAPP); if (self == null) { if (setPropList == null) setPropList = new ArrayList(); setPropList.add(n); } else { break; } if (n instanceof Zssapp) { self = (Zssapp) n; break; } } if (self != null && setPropList != null && setPropList.size() > 0) { for (Component c : setPropList) { c.setAttribute(KEY_ZSSAPP, self); } } return self; } public DesktopWorkbenchContext getDesktopWorkbenchContext() { return workbenchContext; } public static DesktopWorkbenchContext getDesktopWorkbenchContext(Component comp) { return getInstance(comp).getDesktopWorkbenchContext(); } public DesktopCellStyleContext getDesktopCellStyleContext() { return cellStyleContext; } public static DesktopCellStyleContext getDesktopCellStyleContext(Component comp) { return getInstance(comp).getDesktopCellStyleContext(); } public Appmenubar getAppmenubar() { return _appmenubar; } public class Appmenubar { Menubar _menubar; FileMenu fileMenu; ViewMenu viewMenu; public Appmenubar(Menubar menubar) { _menubar = menubar; Components.wireVariables(menubar, this); } public FileMenu getFileMenu() { return fileMenu; } public ViewMenu getViewMenu() { return viewMenu; } } }