/**
* Copyright 2010 the original author or authors.
*
* This file is part of Zksample2. http://zksample2.sourceforge.net/
*
* Zksample2 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 3 of the License, or
* (at your option) any later version.
*
* Zksample2 is distributed in the hope that it will be useful,
* but 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.
*
* You should have received a copy of the GNU General Public License
* along with Zksample2. If not, see <http://www.gnu.org/licenses/gpl.html>.
*/
package de.forsthaus.webui.spreadsheet;
import java.io.Serializable;
import java.text.ParseException;
import org.apache.log4j.Logger;
import org.zkoss.calendar.Calendars;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Path;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Borderlayout;
import org.zkoss.zul.Button;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.West;
import org.zkoss.zul.Window;
import de.forsthaus.webui.util.GFCBaseCtrl;
import de.forsthaus.webui.util.ZksampleMessageUtils;
/**
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<br>
* Main controller for the calendar module.<br>
* <br>
* zul-file: /WEB-INF/pages/calendar/calendar.zul.<br>
* <br>
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<br>
* <br>
*
* @author bbruhns
* @author sgerth
*/
public class SpreadsheetMainCtrl extends GFCBaseCtrl implements Serializable {
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(SpreadsheetMainCtrl.class);
/*
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* All the components that are defined here and have a corresponding
* component with the same 'id' in the zul-file are getting autowired by our
* 'extends GFCBaseCtrl' GenericForwardComposer.
* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
protected Window windowSpreadsheet; // autowired
protected Borderlayout borderLayout_Spreadsheet; // autowired
// protected Div divCenter; // autowired
protected Calendars cal; // autowired
protected Button btn_Show1Day; // autowired
protected Button btn_Show5Days; // autowired
protected Button btn_ShowWeek; // autowired
protected Button btn_Show2Weeks; // autowired
protected Button btn_ShowMonth; // autowired
private String btnOriginColor = "color: black; font-weight: normal;";
private String btnPressedColor = "color: red; font-weight: bold;";
// ServiceDAOs / Domain Classes
/**
* default constructor.<br>
*/
public SpreadsheetMainCtrl() {
super();
}
@Override
public void doAfterCompose(Component window) throws Exception {
super.doAfterCompose(window);
/**
* 1. Set an 'alias' for this composer name to access it in the
* zul-file.<br>
* 2. Set the parameter 'recurse' to 'false' to avoid problems with
* managing more than one zul-file in one page. Otherwise it would be
* overridden and can ends in curious error messages.
*/
this.self.setAttribute("controller", this, false);
}
// +++++++++++++++++++++++++++++++++++++++++++++++++ //
// +++++++++++++++ Component Events ++++++++++++++++ //
// +++++++++++++++++++++++++++++++++++++++++++++++++ //
/**
* Automatically called method from zk.
*
* @param event
* @throws Exception
*/
public void onCreate$windowSpreadsheet(Event event) throws Exception {
doFitSize();
}
/**
* When the "help" button is clicked.
*
* @param event
* @throws InterruptedException
*/
public void onClick$btnHelp(Event event) throws InterruptedException {
doHelp(event);
}
/**
* when the "refresh" button is clicked. <br>
* <br>
*
* @param event
* @throws InterruptedException
* @throws ParseException
*/
public void onClick$btnRefresh(Event event) throws InterruptedException, ParseException {
doFitSize();
}
/**
* when the "print calendar" button is clicked.
*
* @param event
* @throws InterruptedException
*/
public void onClick$btn_PrintSpreadsheet(Event event) throws InterruptedException {
ZksampleMessageUtils.doShowNotImplementedMessage();
}
/**
* when the "resize to full screen" button is clicked.
*
* @param event
* @throws InterruptedException
*/
public void onClick$btnFullScreen(Event event) throws InterruptedException {
doViewInFullScreen(event);
}
// +++++++++++++++++++++++++++++++++++++++++++++++++ //
// +++++++++++++++++ Business Logic ++++++++++++++++ //
// +++++++++++++++++++++++++++++++++++++++++++++++++ //
/**
* Changes the view for full width screen mode by collapsing the west
* borderlayout are, means the menu.
*
* @param event
*/
public void doViewInFullScreen(Event event) {
final Borderlayout bl = ((Borderlayout) Path.getComponent("/outerIndexWindow/borderlayoutMain"));
final West west = bl.getWest();
if (west != null) {
try {
if (west.isOpen()) {
west.setOpen(false);
} else
west.setOpen(true);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
/**
* Opens the help screen for the current module.
*
* @param event
* @throws InterruptedException
*/
private void doHelp(Event event) throws InterruptedException {
ZksampleMessageUtils.doShowNotImplementedMessage();
// we stop the propagation of the event, because zk will call ALL events
// with the same name in the namespace and 'btnHelp' is a standard
// button in this application and can often appears.
// Events.getRealOrigin((ForwardEvent) event).stopPropagation();
event.stopPropagation();
}
// +++++++++++++++++++++++++++++++++++++++++++++++++ //
// ++++++++++++++++++++ Helpers ++++++++++++++++++++ //
// +++++++++++++++++++++++++++++++++++++++++++++++++ //
/**
* Recalculates the container size for this controller and resize them.
*
* Calculate how many rows have been place in the listbox. Get the
* currentDesktopHeight from a hidden Intbox from the index.zul that are
* filled by onClientInfo() in the indexCtroller.
*
* @throws ParseException
*/
public void doFitSize() throws ParseException {
// normally 0 ! Or we have a i.e. a toolBar on top of the listBox.
final int specialSize = 0;
final int height = ((Intbox) Path.getComponent("/outerIndexWindow/currentDesktopHeight")).getValue().intValue();
final int maxListBoxHeight = height - specialSize - 119;
// setCountRows((int) Math.round((maxListBoxHeight) / 17.7));
this.borderLayout_Spreadsheet.setHeight(String.valueOf(maxListBoxHeight) + "px");
}
// +++++++++++++++++++++++++++++++++++++++++++++++++ //
// ++++++++++++++++ Setter/Getter ++++++++++++++++++ //
// +++++++++++++++++++++++++++++++++++++++++++++++++ //
}