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

📄 qformviewimpl.java

📁 CRM源码This file describes some issues that should be implemented in future and how it should be imple
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/*
 * 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.controls.form;


import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.EventPreview;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FocusListenerAdapter;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HasFocus;
import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.KeyboardListenerCollection;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.queplix.core.client.app.Application;
import com.queplix.core.client.app.vo.BaseFieldMeta;
import com.queplix.core.client.app.vo.ContextMenuMeta;
import com.queplix.core.client.app.vo.FieldData;
import com.queplix.core.client.app.vo.FieldDataRequest;
import com.queplix.core.client.app.vo.FieldMeta;
import com.queplix.core.client.app.vo.FieldOnDemandData;
import com.queplix.core.client.app.vo.FormButtonMeta;
import com.queplix.core.client.app.vo.FormHtmlElementMeta;
import com.queplix.core.client.app.vo.FormLayoutMeta;
import com.queplix.core.client.app.vo.FormLinkMeta;
import com.queplix.core.client.app.vo.FormMeta;
import com.queplix.core.client.app.vo.MenuItemMeta;
import com.queplix.core.client.app.vo.chart.ChartMeta;
import com.queplix.core.client.app.vo.chart.ChartModel;
import com.queplix.core.client.common.StringUtil;
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.CommonActionButtonSet;
import com.queplix.core.client.common.ui.DialogHelper;
import com.queplix.core.client.common.ui.Icon;
import com.queplix.core.client.common.ui.IconButton;
import com.queplix.core.client.common.ui.IconData;
import com.queplix.core.client.common.ui.MenuPopup;
import com.queplix.core.client.controls.DataCloneException;
import com.queplix.core.client.controls.DataRequirementsListener;
import com.queplix.core.client.controls.QButton;
import com.queplix.core.client.controls.QElementsCoupler;
import com.queplix.core.client.controls.QFormComponentsFactory;
import com.queplix.core.client.controls.QFormElement;
import com.queplix.core.client.controls.QFormElementModel;
import com.queplix.core.client.controls.QFormElementModelImpl;
import com.queplix.core.client.controls.QFormElementView;
import com.queplix.core.client.controls.QFormHtmlElement;
import com.queplix.core.client.controls.QFormLayoutElement;
import com.queplix.core.client.controls.chart.QChart;
import com.queplix.core.client.frames.mainframe.FormState;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Implementation of the view for the QueWeb QForm.
 *
 * @author Sergey Kozmin
 * @since 21 Sep 2006
 */
class QFormViewImpl extends QFormView implements ClickListener, QFormDataListener, DataRequirementsListener {

    private static final String WHOLE_FORM_STYLE = QForm.FORM_STYLE_NAME_PREFIX + "wholeForm";

    public static final String SEARCH_BUTTON_CAPTION = "Search";
    public static final String CLEAR_BUTTON_CLEAR_CAPTION = "Clear";
    public static final String CLEAR_BUTTON_CANCEL_CAPTION = "Cancel";
    public static final String NEW_BUTTON_CAPTION = "New";
    public static final String CHANGE_BUTTON_CAPTION = "Change";
    public static final String UPDATE_BUTTON_CAPTION = "Save";

    public static final Character SEARCH_BUTTON_KEYCODE = new Character('c');
    public static final Character CLEAR_BUTTON_CLEAR_KEYCODE = new Character('r');
    public static final Character CLEAR_BUTTON_CANCEL_KEYCODE = new Character('l');
    public static final Character NEW_BUTTON_KEYCODE = new Character('n');
    public static final Character CHANGE_BUTTON_KEYCODE = new Character('g');
    public static final Character UPDATE_BUTTON_KEYCODE = new Character('s');

    private static final int DEFAULT_MODIFIER_KEY = KeyboardListener.MODIFIER_ALT;
    private static final String FORM_KEYCODE_PREFIX = "Alt + ";

    private static final IconData ICON_STATE_SEARCH = new IconData("form/state_search.gif", "Form is in Search state");
    private static final IconData ICON_STATE_SELECTED = new IconData("form/state_selected.gif", "Form is in Selected state");
    private static final IconData ICON_STATE_NEW = new IconData("form/state_new.gif", "Form is in New state");
    private static final IconData ICON_STATE_EDIT = new IconData("form/state_edit.gif", "Form is in Edit state");
    private static final IconData ICON_REPORT_DESIGN = new IconData("form/state_report_design.gif", "Form is in Report Design state");

    private static final ButtonData MENU_BUTTON = new ButtonData(null, null, "form_actionButton", null, "form_actionButton_hi", true);
    private static final ButtonData MINIMIZE_BUTTON_MIN_STATE = new ButtonData(null, "Minimize form", "form_minButton", null, "form_minButton_hi", true);
    private static final ButtonData MINIMIZE_BUTTON_MAX_STATE = new ButtonData(null, "Maximize form", "form_maxButton", null, "form_maxButton_hi", true);

    private QFormModelImpl model;

    private HashMap controls = new HashMap();
    private HashMap customButtons = new HashMap();
    private HashMap keyCodes = new HashMap();
    private HashSet presentButtons = new HashSet();

    private int formLayout;
    private int gridWidth;
    private int gridHeight;
    private int lastXPosition;
    private int lastYPosition;

    private String actualHeight;

    private Grid mainPanel;
    private FocusPanel container;

    private boolean textAreaHasFocus;
    private boolean menuPopupShowRequest = false;

    //used for having access to protected method getBodyElement()
    private class InternalFlexTable extends FlexTable {
        protected Element getBodyElement() {
            return super.getBodyElement();
        }
    }

    private InternalFlexTable elementsGrid;
    private DockPanel titleBar;
    private DockPanel elementsPanel;
    private VerticalPanel elementsAndSizeKeeper;
    private SimplePanel sizeKeeper;
    private boolean minimized;

    private Label rightSide;
    private Label leftSide;
    private Label bottomSide;

    private CommonActionButtonSet commonActionPanel;

    private QButton searchButton;
    private QButton changeOrUpdateButton;
    private QButton clearButton;
    private QButton newButton;

    private EventPreview keyboardEventPreview;
    private DataRequirementsListener dataRequirementsListener;

    private MenuPopup contextMenu;

    private Icon stateIcon;
    private IconButton minimizeButton;
    private IconButton menuButton;
    private int labelsOrientation;
    private FormLayoutMeta layoutMeta;
    private final List buttonsMeta = new ArrayList();
    private FormLinkMeta[] links;
    private final Map htmlElements = new HashMap();
    private final List chartModels = new ArrayList();

    private boolean selected;
    private boolean isAlreadyLoaded = false;

    public QFormViewImpl(QFormModelImpl model) {
        initParams(model);

        doInit();
    }

    public QFormViewImpl(QFormModelImpl model, int formLayout, int width, int height) {
        initParams(model);

        this.formLayout = formLayout;
        this.gridWidth = width;
        this.gridHeight = height;
        
        doInit();
    }

    private void initParams(QFormModelImpl model) {
        this.model = model;
        FormMeta formMeta = model.getFormMeta();
        layoutMeta = formMeta.getLayoutMeta();
        FormButtonMeta[] buttonsMeta = formMeta.getButtons();
        for(int i = 0; i < buttonsMeta.length; i++) {
            this.buttonsMeta.add(buttonsMeta[i]);
        }
        FormHtmlElementMeta[] htmlElements = formMeta.getHtmlElements();
        for (int i = 0; i < htmlElements.length; i++) {
            this.htmlElements.put(htmlElements[i].getId(), htmlElements[i].getHtml());
        }
        ChartModel[] chartsModels = formMeta.getCharts();
        if (chartsModels != null) {
            for(int i = 0; i < chartsModels.length; i++) {
                this.chartModels.add(chartsModels[i]);
            }
        }
        this.links = formMeta.getLinks();
        this.labelsOrientation = formMeta.getLabelsOrientation();
    }

    private void doInit() {
        model.addDataListener(this);
        initializeWrappingUI();
        createMenu();
        subscribeEvents();
        initKeyboardHandling();

        initFormLayoutUI();
    }

    private void initializeWrappingUI() {
        container = new FocusPanel();
        mainPanel = new Grid(3, 3);

        elementsGrid = new InternalFlexTable();
        elementsGrid.setCellPadding(0);
        elementsGrid.setCellSpacing(0);

        titleBar = new DockPanel();

        stateIcon = new Icon(ICON_STATE_SEARCH);
        stateIcon.setStyleName("form_topIcon");

        minimizeButton = new IconButton(MINIMIZE_BUTTON_MIN_STATE);
        menuButton = new IconButton(MENU_BUTTON);

        titleBar.add(stateIcon, DockPanel.WEST);
        titleBar.add(captionLabel, DockPanel.WEST);
        captionLabel.setStyleName("form_topSide");
        captionLabel.setWordWrap(false);
        titleBar.setCellWidth(captionLabel, "100%");
        titleBar.add(menuButton, DockPanel.EAST);
        titleBar.add(minimizeButton, DockPanel.EAST);
        titleBar.setCellWidth(menuButton, "1px");
        titleBar.setCellWidth(minimizeButton, "1px");


        elementsPanel = new DockPanel();

        commonActionPanel = new CommonActionButtonSet();
        commonActionPanel.getEventSource().addEventListener(el);
        sizeKeeper = new SimplePanel();
        sizeKeeper.setStyleName("form_sizeKeeper");
        sizeKeeper.setHeight("1px");

        elementsPanel.add(elementsGrid, DockPanel.CENTER);
        elementsPanel.add(commonActionPanel, DockPanel.EAST);

        elementsAndSizeKeeper = new VerticalPanel();
        elementsAndSizeKeeper.add(elementsPanel);
        elementsAndSizeKeeper.add(sizeKeeper);

        Label leftTop = new Label(" ");
        leftTop.setStyleName("form_leftTop");

        leftSide = new Label(" ");
        leftSide.setStyleName("form_leftSide");

        Label leftBottom = new Label(" ");
        leftBottom.setStyleName("form_leftBottom");

        Label topSide = new Label(" ");
        topSide.setStyleName("form_topSide");

        bottomSide = new Label(" ");
        bottomSide.setStyleName("form_bottomSide");

        Label rightTop = new Label(" ");
        rightTop.setStyleName("form_rightTop");

        rightSide = new Label(" ");
        rightSide.setStyleName("form_rightSide");

        Label rightBottom = new Label(" ");
        rightBottom.setStyleName("form_rightBottom");


        mainPanel.setWidget(0, 0, leftTop);
        mainPanel.setWidget(0, 1, titleBar);
        mainPanel.setWidget(0, 2, rightTop);

⌨️ 快捷键说明

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