/** * OpenKM, Open Document Management System (http://www.openkm.com) * Copyright (c) 2006-2011 Paco Avila & Josep Llort * * No bytes were intentionally harmed during the development of this application. * * This program 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. * * This program 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 this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package com.openkm.frontend.client.panel.left; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.google.gwt.user.client.ui.StackPanel; import com.openkm.frontend.client.Main; import com.openkm.frontend.client.contants.ui.UIDesktopConstants; import com.openkm.frontend.client.contants.ui.UIDockPanelConstants; import com.openkm.frontend.client.extension.event.HasNavigatorEvent; import com.openkm.frontend.client.extension.event.handler.NavigatorHandlerExtension; import com.openkm.frontend.client.extension.event.hashandler.HasNavigatorHandlerExtension; public class ExtendedStackPanel extends StackPanel implements HasNavigatorEvent, HasNavigatorHandlerExtension { private boolean startupFinished = false; // to indicate process starting up has finished private boolean taxonomyVisible = false; private boolean categoriesVisible = false; private boolean thesaurusVisible = false; private boolean templatesVisible = false; private boolean personalVisible = false; private boolean mailVisible = false; private boolean trashVisible = false; private int hiddenStacks = 7; private int stackIndex = 0; private List<NavigatorHandlerExtension> navHandlerExtensionList; public ExtendedStackPanel() { super(); navHandlerExtensionList = new ArrayList<NavigatorHandlerExtension>(); } /* (non-Javadoc) * @see com.google.gwt.user.client.ui.StackPanel#showStack(int) */ public void showStack( int index ) { stackIndex = index; if (startupFinished) { changeView(index,true); } super.showStack(index); } /** * setStartUpFinished */ public void setStartUpFinished() { startupFinished = true; } /** * Gets the stack index value * * @return The stack index value */ public int getStackIndex() { return indexCorrectedChangeViewIndex(stackIndex); } /** * Change the stack panel view * * @param index The new stack index selected * @param refresh Enables or disables refreshing */ private void changeView(int index, boolean refresh) { if (startupFinished) { // If there's folder creating or renaming must cancel it before changing view if (Main.get().activeFolderTree.isFolderCreating()) { Main.get().activeFolderTree.removeTmpFolderCreate(); } else if (Main.get().activeFolderTree.isFolderRenaming()) { Main.get().activeFolderTree.cancelRename(); } switch (indexCorrectedChangeViewIndex(index)) { case UIDesktopConstants.NAVIGATOR_TAXONOMY: Main.get().activeFolderTree = Main.get().mainPanel.desktop.navigator.taxonomyTree; Main.get().mainPanel.desktop.browser.fileBrowser.changeView(UIDesktopConstants.NAVIGATOR_TAXONOMY); Main.get().mainPanel.topPanel.toolBar.changeView(UIDesktopConstants.NAVIGATOR_TAXONOMY,UIDockPanelConstants.DESKTOP); if (refresh) { Main.get().activeFolderTree.forceSetSelectedPanel(); Main.get().activeFolderTree.refresh(true); // When opening a path document must not refreshing } Main.get().mainPanel.desktop.browser.tabMultiple.setVisibleButtons(true); break; case UIDesktopConstants.NAVIGATOR_TRASH: Main.get().activeFolderTree = Main.get().mainPanel.desktop.navigator.trashTree; Main.get().mainPanel.desktop.browser.fileBrowser.changeView(UIDesktopConstants.NAVIGATOR_TRASH); Main.get().mainPanel.topPanel.toolBar.changeView(UIDesktopConstants.NAVIGATOR_TRASH,UIDockPanelConstants.DESKTOP); if (refresh) { Main.get().activeFolderTree.forceSetSelectedPanel(); Main.get().activeFolderTree.refresh(true); // When opening a path document must not refreshing } Main.get().mainPanel.desktop.browser.tabMultiple.setVisibleButtons(false); break; case UIDesktopConstants.NAVIGATOR_CATEGORIES: Main.get().activeFolderTree = Main.get().mainPanel.desktop.navigator.categoriesTree; Main.get().mainPanel.desktop.browser.fileBrowser.changeView(UIDesktopConstants.NAVIGATOR_CATEGORIES); Main.get().mainPanel.topPanel.toolBar.changeView(UIDesktopConstants.NAVIGATOR_CATEGORIES,UIDockPanelConstants.DESKTOP); if (refresh) { Main.get().activeFolderTree.forceSetSelectedPanel(); Main.get().activeFolderTree.refresh(true); // When opening a path document must not refreshing } Main.get().mainPanel.desktop.browser.tabMultiple.setVisibleButtons(true); break; case UIDesktopConstants.NAVIGATOR_THESAURUS: Main.get().activeFolderTree = Main.get().mainPanel.desktop.navigator.thesaurusTree; Main.get().mainPanel.desktop.browser.fileBrowser.changeView(UIDesktopConstants.NAVIGATOR_THESAURUS); Main.get().mainPanel.topPanel.toolBar.changeView(UIDesktopConstants.NAVIGATOR_THESAURUS,UIDockPanelConstants.DESKTOP); if (refresh) { Main.get().activeFolderTree.forceSetSelectedPanel(); Main.get().activeFolderTree.refresh(true); // When opening a path document must not refreshing } Main.get().mainPanel.desktop.browser.tabMultiple.setVisibleButtonsOnlyDocuments(); break; case UIDesktopConstants.NAVIGATOR_TEMPLATES: Main.get().activeFolderTree = Main.get().mainPanel.desktop.navigator.templateTree; Main.get().mainPanel.desktop.browser.fileBrowser.changeView(UIDesktopConstants.NAVIGATOR_TEMPLATES); Main.get().mainPanel.topPanel.toolBar.changeView(UIDesktopConstants.NAVIGATOR_TEMPLATES,UIDockPanelConstants.DESKTOP); if (refresh) { Main.get().activeFolderTree.forceSetSelectedPanel(); Main.get().activeFolderTree.refresh(true); // When opening a path document must not refreshing } Main.get().mainPanel.desktop.browser.tabMultiple.setVisibleButtons(true); break; case UIDesktopConstants.NAVIGATOR_PERSONAL: Main.get().activeFolderTree = Main.get().mainPanel.desktop.navigator.personalTree; Main.get().mainPanel.desktop.browser.fileBrowser.changeView(UIDesktopConstants.NAVIGATOR_PERSONAL); Main.get().mainPanel.topPanel.toolBar.changeView(UIDesktopConstants.NAVIGATOR_PERSONAL,UIDockPanelConstants.DESKTOP); if (refresh) { Main.get().activeFolderTree.forceSetSelectedPanel(); Main.get().activeFolderTree.refresh(true); // When opening a path document must not refreshing } Main.get().mainPanel.desktop.browser.tabMultiple.setVisibleButtons(true); break; /* case UIDesktopConstants.NAVIGATOR_MAIL: Main.get().activeFolderTree = Main.get().mainPanel.desktop.navigator.mailTree; Main.get().mainPanel.desktop.browser.fileBrowser.changeView(UIDesktopConstants.NAVIGATOR_MAIL); Main.get().mainPanel.topPanel.toolBar.changeView(UIDesktopConstants.NAVIGATOR_MAIL,UIDockPanelConstants.DESKTOP); if (refresh) { Main.get().activeFolderTree.forceSetSelectedPanel(); Main.get().activeFolderTree.refresh(true); // When opening a path document must not refreshing } Main.get().mainPanel.desktop.browser.tabMultiple.setVisibleButtons(true); break;*/ } fireEvent(HasNavigatorEvent.STACK_CHANGED); } } /** * Show a stack * * @param index The new stack index selected * @param refresh Enables or disables refreshing */ public void showStack( int index, boolean refresh ) { stackIndex = correctedStackIndex(index); changeView(stackIndex,refresh); super.showStack(stackIndex); } /** * isTaxonomyVisible * * @return */ public boolean isTaxonomyVisible() { return taxonomyVisible; } /** * isCategoriesVisible * * @return */ public boolean isCategoriesVisible() { return categoriesVisible; } /** * isThesaurusVisible * * @return */ public boolean isThesaurusVisible() { return thesaurusVisible; } /** * isTemplatesVisible * * @return */ public boolean isTemplatesVisible() { return templatesVisible; } /** * isPersonalVisible * * @return */ public boolean isPersonalVisible() { return personalVisible; } /** * isMailVisible * * @return */ public boolean isMailVisible() { //return mailVisible; return false; } /** * isTrashVisible * * @return */ public boolean isTrashVisible() { return trashVisible; } /** * showTaxonomy */ public void showTaxonomy() { hiddenStacks--; taxonomyVisible = true; } /** * showCategories * * @param */ public void showCategories() { hiddenStacks--; categoriesVisible = true; } /** * showThesaurus * */ public void showThesaurus() { hiddenStacks--; thesaurusVisible = true; } /** * showTemplates */ public void showTemplates() { hiddenStacks--; templatesVisible = true; } /** * showPersonal * * @param */ public void showPersonal() { hiddenStacks--; personalVisible = true; } /** * showMail * * @param */ public void showMail() { hiddenStacks--; mailVisible = true; } /** * showTrash */ public void showTrash() { hiddenStacks--; trashVisible = true; } /** * indexCorrectedChangeViewIndex * * Return index correction made depending visible panels * * @param index * @return */ public int indexCorrectedChangeViewIndex(int index) { int corrected = index; if (!taxonomyVisible && corrected>=UIDesktopConstants.NAVIGATOR_TAXONOMY) { corrected++; } if (!categoriesVisible && corrected>=UIDesktopConstants.NAVIGATOR_CATEGORIES) { corrected++; } if (!thesaurusVisible && corrected>=UIDesktopConstants.NAVIGATOR_THESAURUS) { corrected++; } if (!templatesVisible && corrected>=UIDesktopConstants.NAVIGATOR_TEMPLATES) { corrected++; } if (!personalVisible && corrected>=UIDesktopConstants.NAVIGATOR_PERSONAL) { corrected++; } if (!mailVisible && corrected>=UIDesktopConstants.NAVIGATOR_MAIL) { corrected++; } if (!trashVisible && corrected>=UIDesktopConstants.NAVIGATOR_TRASH) { corrected++; } return corrected; } /** * correctedStackIndex * * Return index correction, made depending visible panels * * @param index * @return */ private int correctedStackIndex(int index) { int corrected = index; if (!trashVisible && corrected>=UIDesktopConstants.NAVIGATOR_TRASH) { corrected--; } if (!mailVisible && corrected>=UIDesktopConstants.NAVIGATOR_MAIL) { corrected--; } if (!personalVisible && corrected>=UIDesktopConstants.NAVIGATOR_PERSONAL) { corrected--; } if (!thesaurusVisible && corrected>=UIDesktopConstants.NAVIGATOR_THESAURUS) { corrected--; } if (!templatesVisible && corrected>=UIDesktopConstants.NAVIGATOR_TEMPLATES) { corrected--; } if (!categoriesVisible && corrected>=UIDesktopConstants.NAVIGATOR_CATEGORIES) { corrected--; } if (!taxonomyVisible && corrected>=UIDesktopConstants.NAVIGATOR_TAXONOMY) { corrected--; } return corrected; } /** * getHiddenStacks * * @return */ public int getHiddenStacks() { return hiddenStacks; } @Override public void addNavigatorHandlerExtension(NavigatorHandlerExtension handlerExtension) { navHandlerExtensionList.add(handlerExtension); } @Override public void fireEvent(NavigatorEventConstant event) { for (Iterator<NavigatorHandlerExtension> it = navHandlerExtensionList.iterator(); it.hasNext();) { it.next().onChange(event); } } }