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

📄 qmainwindowtranslator.java

📁 A translator that converts Qt Designer UI files into SWT java classes. Use the power of Qt Designer
💻 JAVA
字号:
/* This file is part of ui2swt.
 *
 * $Revision: 1.3 $
 * $Date: 2007/01/14 10:35:39 $
 * $Name:  $
 *
 * Copyright (C) 2006-2007 James Forbes, All Rights Reserved.
 *
 * This software is provided 'as-is', without any express or implied warranty.
 * In no event will the authors be held liable for any damages arising from the
 * use of this software.
 *
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 *
 *  1. The origin of this software must not be misrepresented; you must not
 *     claim that you wrote the original software. If you use this software in
 *     a product, an acknowledgment in the product documentation would be
 *     appreciated but is not required.
 *
 *  2. Altered source versions must be plainly marked as such, and must not be
 *     misrepresented as being the original software.
 *
 *  3. This notice may not be removed or altered from any source distribution.
 */

package ui2swt.swt;

import ui2swt.Action;
import ui2swt.ClassDefinition;
import ui2swt.Translator;
import ui2swt.UIDefinition;
import ui2swt.Widget;


public class QMainWindowTranslator extends AbstractWidgetTranslator
{
    private static final String COOL_BAR_VAR                    = "l_coolBar";
    private static final String COOL_ITEM_VAR                   = "l_coolItem";
    private static final String COOL_ITEM_SIZE_VAR              = "l_coolItemSize";
    private static final String COOL_ITEM_PREFERRED_SIZE_VAR    = "l_coolItemPreferredSize";

    
    //
    //
    //
    
    public QMainWindowTranslator()
    {}


    public void translateChildren(
        Translator      iTranslator,
        UIDefinition    iUIDefinition,
        Widget          iWidget,
        Widget[]        iChildren,
        ClassDefinition iClassDefinition )
    {
        this.translateActions(
            iTranslator,
            iUIDefinition,
            iWidget,
            iClassDefinition);
        
        this.translateMenuBar(
            iTranslator,
            iUIDefinition,
            iWidget,
            iClassDefinition);
        
        this.translateToolBars(
            iTranslator,
            iUIDefinition,
            iWidget,
            iClassDefinition);
        
        super.translateChildren(
            iTranslator,
            iUIDefinition,
            iWidget,
            iChildren,
            iClassDefinition);
        
        this.layoutChildren(
            iUIDefinition,
            iWidget,
            iClassDefinition);
    }


    //
    //
    //
    
    protected void setProperties(
        UIDefinition    iUIDefinition,
        Widget          iWidget )
    {
        SWTWidgetHelper.setAttributeProperties(iUIDefinition, iWidget);
        SWTWidgetHelper.setExpandProperties(iUIDefinition, iWidget);
        SWTWidgetHelper.setMinimumSizeProperties(iUIDefinition, iWidget);

        SWTShellHelper.setAttributeProperties(iUIDefinition, iWidget);
        SWTShellHelper.setDefaultExpandProperties(iUIDefinition, iWidget);
    }


    protected void generateConstructCode(
        UIDefinition    iUIDefinition,
        Widget          iWidget,
        ClassDefinition iClassDefinition )
    {
        SWTShellHelper.generateConstructCode(
            iUIDefinition,
            iWidget,
            iClassDefinition);
        
        this.generateLayoutCode(
            iUIDefinition,
            iWidget,
            iClassDefinition);
    }


    protected void generateSetFieldsCode(
        UIDefinition    iUIDefinition,
        Widget          iWidget,
        ClassDefinition iClassDefinition )
    {
        SWTWidgetHelper.generateSetEnabledCode(
            iUIDefinition,
            iWidget,
            iClassDefinition);
        
        SWTWidgetHelper.generateSetTitleCode(
            iUIDefinition,
            iWidget,
            iClassDefinition);
        
        SWTWidgetHelper.generateSetSizeCode(
            iUIDefinition,
            iWidget,
            iClassDefinition);
        
        SWTWidgetHelper.generateSetToolTipCode(
            iUIDefinition,
            iWidget,
            iClassDefinition);
    }
    
    
    //
    //
    //
    
    private void generateLayoutCode(
        UIDefinition    iUIDefinition,
        Widget          iWidget,
        ClassDefinition iClassDefinition )
    {
        String widgetVar = iWidget.getProperty(SWTWidgetHelper.SWT_VAR);
        
        iClassDefinition
            .addImport("org.eclipse.swt.layout.FillLayout")
            .getConstructor()
                .addMethodCall1(widgetVar, "setLayout", "new FillLayout(SWT.VERTICAL)");
    }
    
    
    //
    //
    //
    
    private void translateActions(
        Translator      iTranslator,
        UIDefinition    iUIDefinition,
        Widget          iWidget,
        ClassDefinition iClassDefinition )
    {
        Action[] actions = iUIDefinition.getActions();
        
        for ( int i = 0; i < actions.length; i++ )
        {
            SWTActionHelper.translate(
                iUIDefinition,
                actions[i],
                iClassDefinition);
        }
    }
    
    
    private void translateMenuBar(
        Translator      iTranslator,
        UIDefinition    iUIDefinition,
        Widget          iWidget,
        ClassDefinition iClassDefinition )
    {
        Widget menuBar = iUIDefinition.getMenuBar();
        
        if ( menuBar != null )
        {
            menuBar.setProperty(
                SWTWidgetHelper.SWT_PARENT_VAR,
                iWidget.getProperty(SWTWidgetHelper.SWT_VAR));

            iTranslator.translateWidget(iUIDefinition, menuBar, iClassDefinition);
        }
    }
    
    
    private void translateToolBars(
        Translator      iTranslator,
        UIDefinition    iUIDefinition,
        Widget          iWidget,
        ClassDefinition iClassDefinition )
    {
        Widget[] toolBars = iUIDefinition.getToolBars();
        
        if ( toolBars.length > 0 )
        {
            String parentVar = iWidget.getProperty(SWTWidgetHelper.SWT_VAR);
            
            iClassDefinition
                .addImport("org.eclipse.swt.SWT")
                .addImport("org.eclipse.swt.widgets.CoolBar")
                .addImport("org.eclipse.swt.widgets.Event")
                .addImport("org.eclipse.swt.widgets.Listener")
                .getConstructor()
                    .addLocalVariable("CoolBar", COOL_BAR_VAR)
                    .addVariableInstantiation2(COOL_BAR_VAR, "CoolBar", parentVar, "SWT.NONE")
                    .addStatement(COOL_BAR_VAR+".addListener(SWT.Resize, new Listener()")
                    .addStatement("{")
                    .addStatement("    public void handleEvent(Event event)")
                    .addStatement("    {")
                    .addStatement("        "+parentVar+".layout();")
                    .addStatement("    }")
                    .addStatement("});");
            
            for ( int i = 0; i < toolBars.length; i++ )
            {
                Widget toolBar = toolBars[i];
                
                toolBar.setProperty(SWTWidgetHelper.SWT_PARENT_VAR, COOL_BAR_VAR);
                iTranslator.translateWidget(iUIDefinition, toolBar, iClassDefinition);
                
                String toolBarVar = toolBar.getProperty(SWTWidgetHelper.SWT_VAR);
                
                iClassDefinition
                    .addImport("org.eclipse.swt.SWT")
                    .addImport("org.eclipse.swt.widgets.CoolItem")
                    .addImport("org.eclipse.swt.graphics.Point")
                    .getConstructor()
                        .addMethodCall0(toolBarVar, "pack")
                        .addLocalVariable("CoolItem", COOL_ITEM_VAR)
                        .addLocalVariable("Point", COOL_ITEM_SIZE_VAR)
                        .addLocalVariable("Point", COOL_ITEM_PREFERRED_SIZE_VAR)
                        .addVariableAssignment(COOL_ITEM_SIZE_VAR, toolBarVar+".getSize()")
                        .addVariableInstantiation2(COOL_ITEM_VAR, "CoolItem", COOL_BAR_VAR, "SWT.NONE")
                        .addMethodCall1(COOL_ITEM_VAR, "setControl", toolBarVar)
                        .addVariableAssignment(COOL_ITEM_PREFERRED_SIZE_VAR, COOL_ITEM_VAR+".computeSize("+COOL_ITEM_SIZE_VAR+".x,"+COOL_ITEM_SIZE_VAR+".y)")
                        .addMethodCall1(COOL_ITEM_VAR, "setPreferredSize", COOL_ITEM_PREFERRED_SIZE_VAR);

            }
        }
    }
    
    
    private void layoutChildren(
        UIDefinition    iUIDefinition,
        Widget          iWidget,
        ClassDefinition iClassDefinition )
    {
        String widgetVar = iWidget.getProperty(SWTWidgetHelper.SWT_VAR);
        
        if ( iUIDefinition.hasToolBars() )
        {
            String childVar = COOL_BAR_VAR;
            String dataVar  = SWTHelper.getLocalVariableName("FormData");
            
            iClassDefinition
                .addImport("org.eclipse.swt.layout.FormLayout")
                .addImport("org.eclipse.swt.layout.FormData")
                .addImport("org.eclipse.swt.layout.FormAttachment")
                .getConstructor()
                    .addMethodCall1(widgetVar, "setLayout", "new FormLayout()")
                    .addLocalVariable("FormData", dataVar)
                    .addVariableInstantiation0(dataVar, "FormData")
                    .addVariableFieldAssignment(dataVar, "top", "new FormAttachment(0)")
                    .addVariableFieldAssignment(dataVar, "left", "new FormAttachment(0)")
                    .addVariableFieldAssignment(dataVar, "right", "new FormAttachment(100)")
                    .addMethodCall1(COOL_BAR_VAR, "setLayoutData", dataVar);
            
            Widget[] children = iWidget.getChildren();
            
            for ( int i = 0; i < children.length; i++ )
            {
                String previousChildVar = childVar;
                
                childVar = children[i].getProperty(SWTWidgetHelper.SWT_VAR);

                iClassDefinition.getConstructor()
                    .addVariableInstantiation0(dataVar, "FormData")
                    .addVariableFieldAssignment(dataVar, "top", "new FormAttachment("+previousChildVar+")")
                    .addVariableFieldAssignment(dataVar, "left", "new FormAttachment(0)")
                    .addVariableFieldAssignment(dataVar, "right", "new FormAttachment(100)");

                if ( i == (children.length - 1) )
                {
                    iClassDefinition.getConstructor()
                        .addVariableFieldAssignment(dataVar, "bottom", "new FormAttachment(100)");
                }

                iClassDefinition.getConstructor()
                    .addMethodCall1(childVar, "setLayoutData", dataVar);
            }
        }
        else
        {
            iClassDefinition
                .addImport("org.eclipse.swt.layout.FillLayout")
                .getConstructor()
                    .addMethodCall1(widgetVar, "setLayout", "new FillLayout()");
        }
    }
}

⌨️ 快捷键说明

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