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

📄 qmemoviewimplinline.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.controls.memo;

import com.google.gwt.user.client.ui.FocusListener;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.KeyboardListener;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.Widget;
import com.jpavel.gwt.wysiwyg.client.EditorUtils;
import com.queplix.core.client.app.vo.uisettings.DialogUISettings;
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.ui.resizable.Resizable;
import com.queplix.core.client.controls.QFormElementView;
import com.queplix.core.client.frames.htmledit.HtmlEditFrame;

/**
 * Memo contol inline view variant implementation.
 * @author Sultan Tezadov
 * @since 22 Feb 2007
 */
public class QMemoViewImplInline extends QMemoViewImpl implements EventListener {
    private Widget activeControl;
    
    private int lastVisibleWidth;
    private int lastVisibleHeight;
    
    private static final String VIEW_DEFAULT_WIDTH = HtmlEditFrame.DEFAULT_WIDTH + "px";
    private static final String VIEW_DEFAULT_HEIGHT = HtmlEditFrame.DEFAULT_HEIGHT + "px";
    
    private static final String SEARCH_DEFAULT_WIDTH = (HtmlEditFrame.DEFAULT_WIDTH / 2) + "px";
    private static final String SEARCH_DEFAULT_HEIGHT = HtmlEditFrame.DEFAULT_HEIGHT + "px";
    
    private String clientWidth;
    
    protected static class QueplixScrollPanel extends ScrollPanel implements Resizable {
        public void setOffsetHeight(int height) {
            super.setHeight(StringUtil.pixelToSize(height));
        }

        public void setOffsetWidth(int width) {
            super.setWidth(StringUtil.pixelToSize(width));
        }
    }
    
    private QueplixScrollPanel htmlViewPanel;

    private String originalText = "";
    private HorizontalPanel fieldPanel;
    
    public QMemoViewImplInline(QMemoModelImpl model, int layout) {
        super(model, layout);
    }
    
    protected DialogUISettings getUISettings() {
        return null;
    }
    
    public void showPopup() {
    }
    
    protected int getButtonWidth() {
        return 0;
    }
    
    protected void initGUI() {
        super.initGUI();
        initGUIVisible();
    }
    
    private void initGUIVisible() {
        fieldPanel = new HorizontalPanel();
        setTextAreaWidth();
        fieldPanel.add(textArea);
        fieldPanel.add(emptyButton);
        addToPanel(fieldPanel);
        activeControl = textArea;
        
        textArea.addFocusListener(new FocusListener() {
            public void onFocus(Widget sender) {
                getEventSource().fireEvent(QFormElementView.Events.TEXTAREA_FOCUSED);
            }
            public void onLostFocus(Widget sender) {
                eventHandlers.handleEvent(saveEvent);
                getEventSource().fireEvent(QFormElementView.Events.TEXTAREA_FOCUS_LOST);
            }
        });
        textArea.addKeyboardListener(new KeyboardListener() {
            public void onKeyDown(Widget sender, char keyCode, int modifiers) {
            }
            public void onKeyPress(Widget sender, char keyCode, int modifiers) {
            }
            public void onKeyUp(Widget sender, char keyCode, int modifiers) {
                eventHandlers.handleEvent(saveEvent);
            }
        });
        
        htmlEditorFrame.addEventListener(this);
        htmlViewPanel = new QueplixScrollPanel();
        setHtmlViewPanelWidth();
        htmlViewPanel.add(html);
        html.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
        htmlViewPanel.setStyleName("html_viewer");
        
        initPanel();
    }
    
    public void onEvent(Event event, Widget sender) {
        getEventSource().fireEvent(event);
    }
    
    protected void contentChanged() {
        if (getControlType() == QMemoView.MODE_EDIT || getControlType() == QMemoView.MODE_NEW) {
            String additionalText = htmlEditorFrame.getText(null);
            String textForData = originalText;
            if (!additionalText.equals("")) {
                textForData = htmlEditorFrame.getText(originalText);
            }
            if (htmlEditorFrame.isShowFrame()) {
                textForData = StringUtil.nullToEmpty(textForData);
                if (!textForData.equals("") && !HtmlEditFrame.isHTML(textForData)) {
                    textForData += HtmlEditFrame.HTML_INDICATOR;
                }
            } else {
                textForData = textForData.replaceAll(HtmlEditFrame.HTML_INDICATOR, "");
            }
            textArea.setText(textForData);
            eventHandlers.handleEvent(saveEvent);
            htmlEditorFrame.setLockedText(originalText);
            htmlEditorFrame.setHasRecords(!originalText.trim().equals(""));
        }
    }

    public void onModelDataChanged() {
        super.onModelDataChanged();
        refreshGUI();
        htmlEditorFrame.resetEditor();
        originalText = StringUtil.nullToEmpty(model.getData().getText());
        htmlEditorFrame.setHasRecords(!originalText.trim().equals(""));
    }
    
    protected void replaceActiveControl(Widget activeControl, Widget newControl) {
        int width = activeControl.getOffsetWidth();
        int height = activeControl.getOffsetHeight();
        if (height > 0  && width > 0) {
            lastVisibleWidth = width;
            lastVisibleHeight = height;
        }
        fieldPanel.clear();
        fieldPanel.add(newControl);
        fieldPanel.add(emptyButton);
        if (getColSpan() > 1) {
            if (width == 0 && height == 0) {
                width = lastVisibleWidth;
                height = lastVisibleHeight;
            }
            ((Resizable) newControl).setOffsetWidth(width);
            ((Resizable) newControl).setOffsetHeight(height);
        } else if (clientWidth == null) {
            switch (getControlType()) {
                case CONTROL_TEXTAREA:
                    setTextAreaWidth();
                    break;
                case CONTROL_HTML_VIEWER:
                    setHtmlViewPanelWidth();
                    break;
            }
        } else {
            switch (getControlType()) {
                case CONTROL_TEXTAREA:
                    textArea.setWidth(clientWidth);
                    break;
                case CONTROL_HTML_VIEWER:
                    htmlViewPanel.setWidth(clientWidth);
                    break;
            }
        }
        this.activeControl = newControl;
    }
    
    private void setTextAreaWidth() {
        textArea.setWidth(SEARCH_DEFAULT_WIDTH);
    }
    
    private void setHtmlViewPanelWidth() {
        htmlViewPanel.setWidth(VIEW_DEFAULT_WIDTH);
    }

    public void setRowSpan(int rowSpan) {
        if (rowSpan == 0) {
            return;
        }
        super.setRowSpan(rowSpan);
        if (rowSpan > 10) {
            int height = (HtmlEditFrame.DEFAULT_HEIGHT / 10) * rowSpan;
            textArea.setOffsetHeight(height);
            htmlViewPanel.setOffsetHeight(height);
            htmlEditorFrame.setOffsetHeight(height);
        } else {
            textArea.setHeight(SEARCH_DEFAULT_HEIGHT);
            htmlViewPanel.setHeight(VIEW_DEFAULT_HEIGHT);
            htmlEditorFrame.setOffsetHeight(HtmlEditFrame.DEFAULT_HEIGHT);
        }
    }
    
    private void refreshGUI() {
        Widget control = textArea;
        switch (getControlType()) {
            case CONTROL_TEXTAREA:
                control = textArea;
                break;
            case CONTROL_HTML_EDITOR:
                if (EditorUtils.isGecko() && activeControl != htmlEditorFrame) {
                    htmlEditorFrame = new HtmlEditFrame(model);
                    htmlEditorFrame.setupLockedPanelVisibility();
                    htmlEditorFrame.addEventListener(this);
                }
                control = htmlEditorFrame;
                break;
            case CONTROL_HTML_VIEWER:
                control = htmlViewPanel;
                break;
        }
        if (activeControl != control) {
            replaceActiveControl(activeControl, control);
            //do not remove following code to the switch
            if (getControlType() == CONTROL_HTML_EDITOR) {
                htmlEditorFrame.setupEditor(originalText);
            }
        }
        refreshGUIData();
        //todo as per discussion with [AM] it is needed to fix form boundaries, but it doesn't work now, find
        //better decision without of mainframe realization dependency
//        getEventSource().fireEvent(MainFrameFA.Events.FORM_ACTIVATED);
    }
    
    protected void onModeChanged(int newMode) {
        refreshGUI();
    }

    protected void setEnabled(boolean isEnabled) {
    }

    public void setOffsetWidth(int width) {
        ((Resizable) activeControl).setOffsetWidth(width);
    }

    public void setOffsetHeight(int height) {
        ((Resizable) activeControl).setOffsetHeight(height);
    }
    
    public Widget getActiveControl() {
        return activeControl;
    }
    
    public int getCaptionOffsetWidth() {
        return captionLabel.getOffsetWidth();
    }
    
    public int getFilledWidth() {
        return super.getFilledWidth() + emptyButton.getOffsetWidth();
    }

    public int getClientWidth() {
        return activeControl.getOffsetWidth();
    }
    
    public void setClientWidth(String clientWidth) {
        this.clientWidth = clientWidth;
        activeControl.setWidth(clientWidth);
        int width = activeControl.getOffsetWidth();
        int height = activeControl.getOffsetHeight();
        if (height > 0  && width > 0) {
            lastVisibleWidth = width;
            lastVisibleHeight = height;
        }
    }
    
    public boolean alignableAsHorizontal() {
        return !isVerticalLayout();
    }

    public boolean canBeCoupled(int coupleType) {
        return false;
    }
    
}

⌨️ 快捷键说明

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