com.ikon.frontend.client.panel.left.ExtendedStackPanel.java Source code

Java tutorial

Introduction

Here is the source code for com.ikon.frontend.client.panel.left.ExtendedStackPanel.java

Source

/**
 *  openkm, Open Document Management System (http://www.openkm.com)
 *  Copyright (c) 2006-2013  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.ikon.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.ikon.frontend.client.Main;
import com.ikon.frontend.client.constants.ui.UIDesktopConstants;
import com.ikon.frontend.client.constants.ui.UIDockPanelConstants;
import com.ikon.frontend.client.extension.event.HasNavigatorEvent;
import com.ikon.frontend.client.extension.event.handler.NavigatorHandlerExtension;
import com.ikon.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.setVisibleButtons(true);
                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;
    }

    /**
     * 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);
        }
    }
}