⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainframesa.java

📁 CRM源码This file describes some issues that should be implemented in future and how it should be imple
💻 JAVA
字号:
/*
 * Copyright 2006-2007 Queplix Corp.
 *
 * Licensed under the Queplix Public License, Version 1.1.1 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.queplix.com/solutions/commercial-open-source/queplix-public-license/
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.queplix.core.client.frames.mainframe.impl;

import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.WindowResizeListener;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SourcesTabEvents;
import com.google.gwt.user.client.ui.TabListener;
import com.google.gwt.user.client.ui.Widget;
import com.queplix.core.client.i18n.I18N;
import com.queplix.core.client.app.vo.ContextMenuMeta;
import com.queplix.core.client.app.vo.FamgMeta;
import com.queplix.core.client.app.vo.FocusMeta;
import com.queplix.core.client.app.vo.MetaData;
import com.queplix.core.client.app.vo.TabMeta;
import com.queplix.core.client.common.event.Event;
import com.queplix.core.client.common.event.EventListener;
import com.queplix.core.client.common.event.EventSource;
import com.queplix.core.client.common.ui.ButtonData;
import com.queplix.core.client.common.ui.DesignHelper;
import com.queplix.core.client.common.ui.DialogHelper;
import com.queplix.core.client.common.ui.QTabBar;
import com.queplix.core.client.common.ui.SourcesTabMouseEvents;
import com.queplix.core.client.common.ui.SplittedPanel;
import com.queplix.core.client.common.ui.TabMouseListener;
import com.queplix.core.client.common.ui.WindowHelper;
import com.queplix.core.client.common.ui.resizable.Resizable;
import com.queplix.core.client.common.ui.resizable.ResizableScrollPanel;
import com.queplix.core.client.common.ui.resizable.ResizableStackPanel;

import java.util.Collection;

/**
 * MainFrameSA - Main Frame Static Area
 * This class contains all static elements of the main frame.
 * @author Aliaksandr Melnik
 * @since 20 October 2006
 */
class MainFrameSA extends AbsolutePanel implements Resizable, WindowResizeListener, EventListener {
    // -------------------- public events ------------------------
    public static interface Events extends MainTree.Events,
            com.queplix.core.client.frames.mainframe.Events,
            MainToolBar.Events,
            LoadSearchBox.Events,
            SaveSearchBox.Events {
        Event/*]<String>[*/ SHORTCUT_MENU_ITEM = new Event/*]<String>[*/();
        Event/*]<GridHistoryRecord>[*/ HISTORY_MENU_ITEM = new Event/*]<GridHistoryRecord>[*/();
    }
    
    private EventSource eventSource = new EventSource(this);
    
    public EventSource getEventSource() {
        return eventSource;
    }
    // ----------------- end of public events --------------------
    
    public static interface Indicator extends MainToolBar.Indicator {}
    
    private MetaData appMetaData;
    
    private MainFrameLinks frameLinks;
    private FocusMeta[] focuses;
    private QTabBar tabBar;
    private MainToolBar mainToolBar;
    private StatusBar statusBar;
    private ShortCuts shortCuts;
    private LastViewed lastViewed;
    private MainTree mainTree;
    private SplittedPanel gridAndForms;
    private SplittedPanel navAndForms;
    private int splitterPosition = -1;
    
    private static SavedSearch savedSearch;
    private static SaveSearchBox saveSearchBox;
    private static LoadSearchBox loadSearchBox;

    private SubFocusesPanel subFocuses;
    
//    private boolean ignoreEvents; // used to disable firing events when programmatic actions occur
    
//    private ResizableScrollPanel mainFrameFARSP;
    
    private ResizableStackPanel treeStack;
    
    private boolean ignoreTreeSelection;
    
    public MainFrameSA(MetaData appMetaData, MainFrameFA mainFrameFA, MainFrameGA mainFrameGA) {
        this.appMetaData = appMetaData;
        frameLinks = new MainFrameLinks(appMetaData);
        frameLinks.getEventSource().addEventListener(eventSource); // retranslate events

        initTabBar(appMetaData);
        initSavedSearch(appMetaData);
        initSaveSearchBox();
        initLoadSearchBox(appMetaData);

        subFocuses = new SubFocusesPanel(appMetaData);
        subFocuses.getEventSource().addEventListener(eventSource);
        subFocuses.getEventSource().addEventListener(this);
        
        mainToolBar = new MainToolBar();
        mainToolBar.getEventSource().addEventListener(this);
        mainToolBar.getEventSource().addEventListener(eventSource); // retranslate events
        
        shortCuts = new ShortCuts();
        shortCuts.getEventSource().addEventListener(this);
        
        lastViewed = new LastViewed();
        lastViewed.getEventSource().addEventListener(this);
        
        statusBar = new StatusBar(appMetaData);
        
        mainTree = new MainTree(appMetaData);
        mainTree.getEventSource().addEventListener(eventSource); // retranslate events
        
        ResizableScrollPanel treeScroll = new ResizableScrollPanel(mainTree.getView());
        
        treeStack = new ResizableStackPanel();
        WindowHelper.disableSelection(treeStack.getElement());
        treeStack.add(treeScroll, DesignHelper.stackPanelHeader("Navigation Tree", "tree"), true);
        treeStack.add(new ResizableScrollPanel(shortCuts), DesignHelper.stackPanelHeader("Shortcuts", "shortcuts"), true);
        treeStack.add(new ResizableScrollPanel(lastViewed), DesignHelper.stackPanelHeader("Last Viewed", "lastviewed"), true);
        
        treeStack.addStyleName("treeStack");
        
        //mainFrameFARSP = new ResizableScrollPanel(mainFrameFA);
        mainFrameFA.setStyleName("tab_deckpanel");
        
        navAndForms = new SplittedPanel(
                treeStack,
                //mainFrameFARSP,
                mainFrameFA,
                20,
                SplittedPanel.HORIZONTAL);
        
        gridAndForms = new SplittedPanel(
                //new ResizableScrollPanel(mainFrameGA),
                mainFrameGA,
                navAndForms,
                30,
                SplittedPanel.VERTICAL);

        subFocuses.addStyleName("subFocus_panel");
        subFocuses.setWidth("100%");
        
        HorizontalPanel subFocusArea = new HorizontalPanel();
        Label welcomeLabel = new Label(I18N.getMessages().welcomeUserMessage() + appMetaData.getUserProfile().getFullName(), false);
        welcomeLabel.setStyleName("welcomeUserMessage");
        
        subFocusArea.add(subFocuses);
        subFocusArea.add(welcomeLabel);
        subFocusArea.setStyleName("subFocus_panel");
        subFocusArea.setWidth("100%");
        subFocusArea.setCellHorizontalAlignment(welcomeLabel, HasHorizontalAlignment.ALIGN_RIGHT);
        
        mainToolBar.setWidth("100%");

        addUnselectable(frameLinks);
        addUnselectable(tabBar);
        addUnselectable(subFocusArea);
        addUnselectable(mainToolBar);
        add(gridAndForms);
        addUnselectable(statusBar);
        
        addStyleName("common_bg");
        
        Window.addWindowResizeListener(this);
    }

    private void initSavedSearch(final MetaData appMetaData) {
        savedSearch = new SavedSearch();
        savedSearch.addEventListener(new EventListener() {
            public void onEvent(Event event, Widget sender) {
                if(SavedSearch.Events.LOADED.equals(event)) {
                    loadSearchBox.onRefresh();
                    if(!loadSearchBox.isDialogShown()){
                        displayLoadSearchBox();
                    }
                } else if(SavedSearch.Events.DONE == event) {
                    DialogHelper.showModalMessageDialog(I18N.getMessages().searchSaved());
                } else if(SavedSearch.Events.ERROR == event){
                    DialogHelper.showModalMessageDialog(I18N.getMessages().searchError());
                } else if(SavedSearch.Events.RENAME == event){
                    displaySaveSearchBox(SaveSearchBox.RENAME);
                }
            }
        });
    }

    private void initSaveSearchBox() {
        saveSearchBox = new SaveSearchBox(I18N.getMessages().saveSearch());
        saveSearchBox.getEventSource().addEventListener(eventSource);
    }

    private void initLoadSearchBox(MetaData appMetaData) {
        loadSearchBox = new LoadSearchBox(I18N.getMessages().loadSavedSearch(), savedSearch, appMetaData);
        loadSearchBox.getEventSource().addEventListener(eventSource);
    }

    private void displaySaveSearchBox(int state) {
        int left = (Window.getClientWidth() - saveSearchBox.getOffsetWidth()) / 2;
        int top = (Window.getClientHeight() - saveSearchBox.getOffsetHeight()) / 2;
        saveSearchBox.show(left, top, state);
    }

    private void displayLoadSearchBox(){
        int left = (Window.getClientWidth() - loadSearchBox.getOffsetWidth()) / 2;
        int top = (Window.getClientHeight() - loadSearchBox.getOffsetHeight()) / 2;
        loadSearchBox.show(left, top);
    }

    private static void loadSavedSearch(){
        savedSearch.load();
    }
    
    public static void saveSearch(String name, String formID, Collection elementsValues){
        savedSearch.save(name, formID, elementsValues);
    }

    public static void onSearchDeleted() {
        loadSavedSearch();
    }
    
    private void addUnselectable(Widget widget) {
        WindowHelper.disableSelection(widget.getElement());
        add(widget);
    }

    public void onEvent(Event event, Widget sender) {//catch and dispatch events
        if(MainToolBar.Events.LOAD_SAVED_SEARCH.equals(event)){
            loadSavedSearch();
        } if(MainToolBar.Events.SAVE_CURRENT_SEARCH.equals(event)){
            displaySaveSearchBox(SaveSearchBox.NEW);
        } else if(shortCuts.equals(sender)) {
            Events.SHORTCUT_MENU_ITEM.setData(event.getData());
            eventSource.fireEvent(Events.SHORTCUT_MENU_ITEM);
        } else if(lastViewed.equals(sender)) {
            Events.HISTORY_MENU_ITEM.setData(event.getData());
            eventSource.fireEvent(Events.HISTORY_MENU_ITEM);
        } else if(subFocuses.equals(sender)) {
            if(event == SubFocusesPanel.Events.MOUSE_LEFT) {
                tabBar.removeHighlight();
            }
        }
    }
    
    private void initTabBar(MetaData appMetaData) {
        tabBar = new QTabBar();
        
        focuses = appMetaData.getFocuses();
        
        for (int i=0; i < focuses.length; i++)
            tabBar.addTab(focuses[i].getCaption());
        
        if(focuses.length > 0)
            tabBar.selectTab(0);
        
        tabBar.addTabListener(new TabListener() {
            public void onTabSelected(SourcesTabEvents sender, int index) {
                Events.FOCUS_SELECTED.setData(focuses[index].getIndex());
                eventSource.fireEventGeneratedByUser(Events.FOCUS_SELECTED);
            }
            
            public boolean onBeforeTabSelected(SourcesTabEvents sender, int tabIndex) {
                return true;
            }
        });
        tabBar.addTabMouseListener(new TabMouseListener(){
            public void onTabMouseOver(SourcesTabMouseEvents sender, int index) {
                subFocuses.showFocusSubFocuses(focuses[index].getIndex());
            }
            public void onTabMouseOut(SourcesTabMouseEvents sender, int index){
            }
            
        });
    }
    
    public void setOffsetHeight(int height) {
        height -= tabBar.getOffsetHeight() +
                mainToolBar.getOffsetHeight() +
                statusBar.getOffsetHeight() +
                subFocuses.getOffsetHeight();
        gridAndForms.setOffsetHeight(height);
    }
    
    public void setOffsetWidth(int width) {
        gridAndForms.setOffsetWidth(width);
        setWidgetPosition(frameLinks, width - frameLinks.getOffsetWidth(), 0);
//        mainToolBar.setOffsetWidth(width);
    }
    
    public void onWindowResized(int width, int height) {
        setOffsetHeight(height);
        setOffsetWidth(width);
        this.setPixelSize(width, height);
    }
    
    protected void onAttach() {
        super.onAttach();
        onWindowResized(Window.getClientWidth(), Window.getClientHeight());

        subFocuses.adjustItemsPositions(tabBar);
    }

    /**
     * @param ignoreTreeSelection - do not allow to fire tree selection event.
     */
    public void selectTreeItem(FocusMeta.Index index, boolean ignoreTreeSelection) {
        if(ignoreTreeSelection)
            ignoreTreeSelection = true;
        if(treeStack.getSelectedIndex() == 0) {
            mainTree.getController().selectItem(index);
        }
    }
    
    public void activateFocus(FamgMeta.Index index) {
        tabBar.selectTab(index.focus);
        //if tree is visible, if selectItem in invisible tree throws exception
        selectTreeItem(index, true);
        subFocuses.activateFocus(index);
        ignoreTreeSelection = false;
        positionSplitter(index);
        generateShortCuts(index);
    }
    
    public void activateSubFocus(FamgMeta.Index index){
        tabBar.selectTab(index.focus);
        selectTreeItem(index, true);
        subFocuses.activateSubFocus(index);
        ignoreTreeSelection = false;
        positionSplitter(index);
        generateShortCuts(index);
    }
    
    public void activateTab(FamgMeta.Index index) {
        activateFocus(index);
    }
    
    private void generateShortCuts(FamgMeta.Index index) {
        ContextMenuMeta menuMeta = appMetaData.getFormMeta(index).getContextMenu();
        shortCuts.reGenerateShortCuts(menuMeta);
    }
    
    public void addHistoryItem(GridHistoryRecord record) {
        lastViewed.addHistoryItem(record);
    }
    
    void setIndicatorState(ButtonData state) {
        mainToolBar.setIndicatorState(state);
    }
    
    public boolean isIgnoreTreeSelection() {
        return ignoreTreeSelection;
    }
    
    public void setIgnoreTreeSelection(boolean ignoreTreeSelection) {
        this.ignoreTreeSelection = ignoreTreeSelection;
    }
    
    private void positionSplitter(TabMeta.Index index) {
        boolean canHaveGrid = appMetaData.getTabMeta(index).canHaveGrid();
        if (!canHaveGrid) {
            gridAndForms.setSplitterCollapsed(true);
        } else {
            if (gridAndForms.isSplitterCollapsed()) {
                gridAndForms.setSplitterCollapsed(false);
            };
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -