Skip to content
Snippets Groups Projects
JToolBarMainTurtle.java 22.60 KiB
/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
 *
 * ludovic.apvrille AT enst.fr
 *
 * This software is a computer program whose purpose is to allow the
 * edition of TURTLE analysis, design and deployment diagrams, to
 * allow the generation of RT-LOTOS or Java code from this diagram,
 * and at last to allow the analysis of formal validation traces
 * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
 * from INRIA Rhone-Alpes.
 *
 * This software is governed by the CeCILL  license under French law and
 * abiding by the rules of distribution of free software.  You can  use,
 * modify and/ or redistribute the software under the terms of the CeCILL
 * license as circulated by CEA, CNRS and INRIA at the following URL
 * "http://www.cecill.info".
 *
 * As a counterpart to the access to the source code and  rights to copy,
 * modify and redistribute granted by the license, users are provided only
 * with a limited warranty  and the software's author,  the holder of the
 * economic rights,  and the successive licensors  have only  limited
 * liability.
 *
 * In this respect, the user's attention is drawn to the risks associated
 * with loading,  using,  modifying and/or developing or reproducing the
 * software by the user in light of its specific status of free software,
 * that may mean  that it is complicated to manipulate,  and  that  also
 * therefore means  that it is reserved for developers  and  experienced
 * professionals having in-depth computer knowledge. Users are therefore
 * encouraged to load and test the software's suitability as regards their
 * requirements in conditions enabling the security of their systems and/or
 * data to be ensured and,  more generally, to use and operate it in the
 * same conditions as regards security.
 *
 * The fact that you are presently reading this means that you have had
 * knowledge of the CeCILL license and that you accept its terms.
 */





package ui;

import common.ConfigurationTTool;
import common.SpecConfigTTool;
import myutil.TraceManager;

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.concurrent.CancellationException;


/**
 * Class JToolBarMainTurtle
 * Main toolbar of the ttool main window
 * Creation: 09/12/2003
 * @author Ludovic APVRILLE
 */
public  class JToolBarMainTurtle extends JToolBar implements ActionListener     {
    private static int COMMON_ACTIONS [] = {TGUIAction.ACT_NEW, TGUIAction.ACT_NEW_PROJECT, TGUIAction.ACT_OPEN,
            TGUIAction.ACT_OPEN_PROJECT, TGUIAction.ACT_SAVE, -1, TGUIAction.ACT_CUT, TGUIAction.ACT_COPY, TGUIAction.ACT_PASTE,
            TGUIAction.ACT_DELETE, TGUIAction.MOVE_ENABLED, TGUIAction.FIRST_DIAGRAM, -1, TGUIAction.ACT_BACKWARD, TGUIAction.ACT_FORWARD,
            -1, TGUIAction.ACT_ZOOM_LESS, TGUIAction.ACT_SHOW_ZOOM, TGUIAction.ACT_ZOOM_MORE, -1, -1, TGUIAction.ACT_MODEL_CHECKING};

    // Avatar
    private JButton  avatarSimu, avatarFVUPPAAL, avatarFVProVerif, avatarFVStaticAnalysis, avatarCodeGeneration, avatarMC;
    private JMenuItem avatarSimuMI, avatarFVUPPAALMI, avatarFVProVerifMI, avatarFVStaticAnalysisMI, avatarCodeGenerationMI, avatarMCMI;

    // Other
    private JButton genrtlotos, genlotos, genuppaal, gendesign, genMapping, dse, dseZ3, noc;
    private JMenuItem genrtlotosMI, genlotosMI, genuppaalMI, gendesignMI, genMappingMI, dseMI, dseZ3MI, nocMI;
    private JButton checkcode, simulation, validation;
    private JMenuItem checkcodeMI, simulationMI, validationMI;

    private JButton oneClickrtlotos, onclicklotos, gensystemc, simusystemc, gentml, genC, genjava, nc,externalSearch, internalSearch;
    private JMenuItem oneClickrtlotosMI, onclicklotosMI, gensystemcMI, simusystemcMI, gentmlMI, genCMI, genjavaMI, ncMI;

    // Main button
    private JButton menuButton;
    private JPopupMenu menu;

    private boolean popupShown;


    private JTextField search;

    private MainGUI mgui;

    public JToolBarMainTurtle(MainGUI _mgui) {
        super();
        mgui = _mgui;
        buildToolBar(mgui);
    }

    // Menus
    private void buildToolBar(MainGUI mgui) {
        JButton button;
        MenuItem m;

        menu = new JPopupMenu();

        menu.addPopupMenuListener(new PopupMenuListener() {
            @Override
            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
                popupShown = true;
            }

            @Override
            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
                SwingUtilities.invokeLater(new Runnable() {

                    @Override
                    public void run() {
                        popupShown = false;
                    }
                });
            }

            @Override
            public void popupMenuCanceled(PopupMenuEvent e) {
            }
        });

        menuButton = add(mgui.actions[TGUIAction.ACT_ACTION_MENU]);
        menuButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                final boolean shown = popupShown;
                SwingUtilities.invokeLater(new Runnable() {

                    @Override
                    public void run() {
                        popupShown = shown;
                    }
                });
            }
        });


        addSeparator();

        int j;
        for (j=0; j<COMMON_ACTIONS.length; j++) {
            if (COMMON_ACTIONS[j] == -1) {
                addSeparator();
                menu.addSeparator();
            } else {
                button = add(mgui.actions[COMMON_ACTIONS[j]]);
                button.addMouseListener(mgui.mouseHandler);
                addMenu(mgui.actions[COMMON_ACTIONS[j]]);
            }
        }


        addSeparator();
        menu.addSeparator();

        if (MainGUI.experimentalOn) {
            gendesign = add(mgui.actions[TGUIAction.ACT_GEN_DESIGN]);
            gendesign.addMouseListener(mgui.mouseHandler);
            gendesignMI = addMenu(mgui.actions[TGUIAction.ACT_GEN_DESIGN]);
        }

        addSeparator();
        menu.addSeparator();

        genMapping = add(mgui.actions[TGUIAction.ACT_GEN_MAPPING]);
        genMapping.addMouseListener(mgui.mouseHandler);
        genMappingMI = addMenu(mgui.actions[TGUIAction.ACT_GEN_MAPPING]);

        dse = add(mgui.actions[TGUIAction.ACT_DSE]);
        dse.addMouseListener(mgui.mouseHandler);
        dseMI = addMenu(mgui.actions[TGUIAction.ACT_DSE]);

        if (MainGUI.experimentalOn) {
            dseZ3 = add(mgui.actions[TGUIAction.ACT_DSE_Z3]);
            dseZ3.addMouseListener(mgui.mouseHandler);
            dseZ3MI = addMenu(mgui.actions[TGUIAction.ACT_DSE_Z3]);
        }

        addSeparator();
        menu.addSeparator();

        avatarSimu = add(mgui.actions[TGUIAction.ACT_AVATAR_SIM]);
        avatarSimu.addMouseListener(mgui.mouseHandler);
        avatarSimuMI = addMenu(mgui.actions[TGUIAction.ACT_AVATAR_SIM]);

        addSeparator();
        menu.addSeparator();

        avatarMC = add(mgui.actions[TGUIAction.ACT_AVATAR_MODEL_CHECKER]);
        avatarMC.addMouseListener(mgui.mouseHandler);
        avatarMCMI = addMenu(mgui.actions[TGUIAction.ACT_AVATAR_MODEL_CHECKER]);

        avatarFVUPPAAL = add(mgui.actions[TGUIAction.ACT_AVATAR_FV_UPPAAL]);
        avatarFVUPPAAL.addMouseListener(mgui.mouseHandler);
        avatarFVUPPAALMI = addMenu(mgui.actions[TGUIAction.ACT_AVATAR_FV_UPPAAL]);

        if (MainGUI.uppaalOn) {
            genuppaal = add(mgui.actions[TGUIAction.ACT_GEN_UPPAAL]);
            genuppaal.addMouseListener(mgui.mouseHandler);
            genuppaalMI = addMenu(mgui.actions[TGUIAction.ACT_GEN_UPPAAL]);
        }

        if (MainGUI.proverifOn) {
            avatarFVProVerif = add(mgui.actions[TGUIAction.ACT_AVATAR_FV_PROVERIF]);
            avatarFVProVerif.addMouseListener(mgui.mouseHandler);
            avatarFVProVerifMI = addMenu(mgui.actions[TGUIAction.ACT_AVATAR_FV_PROVERIF]);
        }

        avatarFVStaticAnalysis = add(mgui.actions[TGUIAction.ACT_AVATAR_FV_STATICANALYSIS]);
        avatarFVStaticAnalysis.addMouseListener(mgui.mouseHandler);
        avatarFVStaticAnalysisMI = addMenu(mgui.actions[TGUIAction.ACT_AVATAR_FV_STATICANALYSIS]);


        addSeparator();
        menu.addSeparator();

        avatarCodeGeneration = add(mgui.actions[TGUIAction.ACT_AVATAR_EXECUTABLE_GENERATION]);
        avatarCodeGeneration.addMouseListener(mgui.mouseHandler);
        avatarCodeGenerationMI = addMenu(mgui.actions[TGUIAction.ACT_AVATAR_EXECUTABLE_GENERATION]);

        addSeparator();
        menu.addSeparator();

        genrtlotos = add(mgui.actions[TGUIAction.ACT_GEN_RTLOTOS]);
        genrtlotos.addMouseListener(mgui.mouseHandler);
        genrtlotosMI = addMenu(mgui.actions[TGUIAction.ACT_GEN_RTLOTOS]);

        if (MainGUI.systemcOn) {
            genlotos = add(mgui.actions[TGUIAction.ACT_GEN_LOTOS]);
            genlotos.addMouseListener(mgui.mouseHandler);
            genlotosMI = addMenu(mgui.actions[TGUIAction.ACT_GEN_LOTOS]);
            /*addSeparator();
              button = add(mgui.actions[TGUIAction.ACT_GEN_AUTS]);
              button.addMouseListener(mgui.mouseHandler);
              button = add(mgui.actions[TGUIAction.ACT_GEN_AUT]);
              button.addMouseListener(mgui.mouseHandler);*/
        } else if (MainGUI.lotosOn) {
            genlotos = add(mgui.actions[TGUIAction.ACT_GEN_LOTOS]);
            genlotos.addMouseListener(mgui.mouseHandler);
            genlotosMI = addMenu(mgui.actions[TGUIAction.ACT_GEN_LOTOS]);
        }

        addSeparator();
        menu.addSeparator();

        checkcode = add(mgui.actions[TGUIAction.ACT_CHECKCODE]);
        checkcode.addMouseListener(mgui.mouseHandler);
        checkcodeMI = addMenu(mgui.actions[TGUIAction.ACT_CHECKCODE]);

        simulation = add(mgui.actions[TGUIAction.ACT_SIMULATION]);
        simulation.addMouseListener(mgui.mouseHandler);
        simulationMI = addMenu(mgui.actions[TGUIAction.ACT_SIMULATION]);

        validation = add(mgui.actions[TGUIAction.ACT_VALIDATION]);
        validation.addMouseListener(mgui.mouseHandler);
        validationMI = addMenu(mgui.actions[TGUIAction.ACT_VALIDATION]);

        addSeparator();
        menu.addSeparator();

        oneClickrtlotos = add(mgui.actions[TGUIAction.ACT_ONECLICK_RTLOTOS_RG]);
        oneClickrtlotos.addMouseListener(mgui.mouseHandler);
        oneClickrtlotosMI = addMenu(mgui.actions[TGUIAction.ACT_ONECLICK_RTLOTOS_RG]);

        if (MainGUI.lotosOn) {
            onclicklotos = add(mgui.actions[TGUIAction.ACT_ONECLICK_LOTOS_RG]);
            onclicklotos.addMouseListener(mgui.mouseHandler);
            onclicklotosMI = addMenu(mgui.actions[TGUIAction.ACT_ONECLICK_LOTOS_RG]);
        }

        addSeparator();
        menu.addSeparator();

        if (MainGUI.systemcOn) {
            gensystemc = add(mgui.actions[TGUIAction.ACT_GEN_SYSTEMC]);
            gensystemc.addMouseListener(mgui.mouseHandler);
            gensystemcMI = addMenu(mgui.actions[TGUIAction.ACT_GEN_SYSTEMC]);

            simusystemc = add(mgui.actions[TGUIAction.ACT_SIMU_SYSTEMC]);
            simusystemc.addMouseListener(mgui.mouseHandler);
            simusystemcMI = addMenu(mgui.actions[TGUIAction.ACT_SIMU_SYSTEMC]);
            addSeparator();
            menu.addSeparator();

            gentml = add(mgui.actions[TGUIAction.ACT_GEN_TMLTXT]);
            gentml.addMouseListener(mgui.mouseHandler);
            gentmlMI = addMenu(mgui.actions[TGUIAction.ACT_GEN_TMLTXT]);
            addSeparator();
            menu.addSeparator();

            genC = add(mgui.actions[TGUIAction.ACT_GEN_CCODE]);
            genC.addMouseListener(mgui.mouseHandler);
            genCMI = addMenu(mgui.actions[TGUIAction.ACT_GEN_CCODE]);
            addSeparator();
            menu.addSeparator();
        }

        addSeparator();
        menu.addSeparator();

        genjava = add(mgui.actions[TGUIAction.ACT_GEN_JAVA]);
        genjava.addMouseListener(mgui.mouseHandler);
        genjavaMI = addMenu(mgui.actions[TGUIAction.ACT_GEN_JAVA]);
        //button = add(mgui.actions[TGUIAction.ACT_SIMU_JAVA]);
        //button.addMouseListener(mgui.mouseHandler);

        addSeparator();

        if (MainGUI.experimentalOn) {
            noc = add(mgui.actions[TGUIAction.ACT_REMOVENOC]);
            noc.addMouseListener(mgui.mouseHandler);
            nocMI = addMenu(mgui.actions[TGUIAction.ACT_REMOVENOC]);
        }

        if (MainGUI.ncOn) {
            nc = add(mgui.actions[TGUIAction.ACT_NC]);
            nc.addMouseListener(mgui.mouseHandler);
            ncMI = addMenu(mgui.actions[TGUIAction.ACT_NC]);
        }

        addSeparator();


        if ((SpecConfigTTool.ExternalCommand1.length() > 0) && (ConfigurationTTool.ExternalCommand1Host.length() > 0)) {
            button = add(mgui.actions[TGUIAction.EXTERNAL_ACTION_1]);
            button.addMouseListener(mgui.mouseHandler);
            button.setToolTipText(ConfigurationTTool.ExternalCommand1);
            JMenuItem mi = addMenu(mgui.actions[TGUIAction.EXTERNAL_ACTION_1]);
            mi.setToolTipText(ConfigurationTTool.ExternalCommand1);
            addSeparator();
        }

        if ((ConfigurationTTool.ExternalCommand2.length() > 0) && (ConfigurationTTool.ExternalCommand2Host.length() > 0)) {
            button = add(mgui.actions[TGUIAction.EXTERNAL_ACTION_2]);
            button.addMouseListener(mgui.mouseHandler);
            button.setToolTipText(ConfigurationTTool.ExternalCommand2);
            JMenuItem mi = addMenu(mgui.actions[TGUIAction.EXTERNAL_ACTION_2]);
            mi.setToolTipText(ConfigurationTTool.ExternalCommand2);
            addSeparator();
            menu.addSeparator();
        }

        addSeparator();

        showAvatarActions(false);
        search = new JTextField("", 10);
        search.setEnabled(false);
        add( search );
        search.addActionListener(this);

        search.getDocument().addDocumentListener(new DocumentListener() {
                @Override
                public void insertUpdate(DocumentEvent documentEvent) {
                    if ( search.getText().length()>0){
                        internalSearch.setEnabled(true);
                    } else
                        internalSearch.setEnabled(false);
                }

                @Override
                public void removeUpdate(DocumentEvent documentEvent) {
                    if ( search.getText().length()>0){
                        internalSearch.setEnabled(true);
                    } else
                        internalSearch.setEnabled(false);
                }

                @Override
                public void changedUpdate(DocumentEvent documentEvent) {
                }
            });

        //@author : Huy TRUONG
        //add external search button into menu bar
        internalSearch = add(mgui.actions[TGUIAction.ACT_INTERNAL_SEARCH]);
        internalSearch.addMouseListener(mgui.mouseHandler);
        externalSearch = add(mgui.actions[TGUIAction.ACT_EXTERNAL_SEARCH]);
        externalSearch.addMouseListener(mgui.mouseHandler);
    }

    public void showAvatarActions(boolean b) {

        //TraceManager.addDev("Show avatar options with b = " + b);
        genMapping.setVisible(!b);
        genMappingMI.setVisible(!b);
        dse.setVisible(!b);
        dseMI.setVisible(!b);

        if (dseZ3 != null) {
            dseZ3.setVisible(!b);
        }
        if (dseZ3MI != null) {
            dseZ3MI.setVisible(!b);
        }

        if (noc != null) {
            noc.setVisible(!b);
            nocMI.setVisible(!b);
        }

        avatarSimu.setVisible(b);
        avatarFVUPPAAL.setVisible(b);
        avatarSimuMI.setVisible(b);
        avatarFVUPPAALMI.setVisible(b);

        if (avatarFVProVerif != null) {
            avatarFVProVerif.setVisible(b);
        }
        if (avatarFVProVerifMI != null) {
            avatarFVProVerifMI.setVisible(b);
        }


        avatarFVStaticAnalysis.setVisible(b);
        avatarCodeGeneration.setVisible(b);
        avatarFVStaticAnalysisMI.setVisible(b);
        avatarCodeGenerationMI.setVisible(b);

        if (genrtlotosMI != null) {
            genrtlotosMI.setVisible(!b);
        }

        if (genlotos != null) {
            genlotos.setVisible(!b);
        }
        if (genlotosMI != null) {
            genlotosMI.setVisible(!b);
        }

        if (genuppaal != null) {
            genuppaal.setVisible(!b);
        }

        if (genuppaalMI != null) {
            genuppaalMI.setVisible(!b);
        }

        if (checkcode != null) {
            checkcode.setVisible(!b);
        }

        if (checkcodeMI != null) {
            checkcodeMI.setVisible(!b);
        }

        if (simulation != null) {
            simulation.setVisible(!b);
        }

        if (simulationMI != null) {
            simulationMI.setVisible(!b);
        }

        if (validation != null) {
            validation.setVisible(!b);
        }

        if (validationMI != null) {
            validationMI.setVisible(!b);
        }

        if (oneClickrtlotos != null) {
            oneClickrtlotos.setVisible(!b);
        }

        if (oneClickrtlotosMI != null) {
            oneClickrtlotosMI.setVisible(!b);
        }

        if (onclicklotos != null) {
            onclicklotos.setVisible(!b);
        }

        if (onclicklotosMI != null) {
            onclicklotosMI.setVisible(!b);
        }

        if (gensystemc != null) {
            gensystemc.setVisible(!b);
        }

        if (gensystemcMI != null) {
            gensystemcMI.setVisible(!b);
        }

        if (simusystemc != null) {
            simusystemc.setVisible(!b);
        }

        if (simusystemcMI != null) {
            simusystemcMI.setVisible(!b);
        }

        if (gentml != null) {
            gentml.setVisible(!b);
        }

        if (gentmlMI != null) {
            gentmlMI.setVisible(!b);
        }

        if (genC != null) {
            genC.setVisible(!b);
        }

        if (genCMI != null) {
            genCMI.setVisible(!b);
        }

        if (genjavaMI != null) {
            genjavaMI.setVisible(!b);
        }

        if (genjava != null) {
            genjava.setVisible(!b);
        }

        if (nc != null) {
            nc.setVisible(!b);
        }

        if (ncMI != null) {
            ncMI.setVisible(!b);
        }

        if (gendesign != null) {
            gendesign.setVisible(!b);
        }

        if (gendesignMI != null) {
            gendesignMI.setVisible(!b);
        }

    }

    public void showDiplodocusActions(boolean b) {

        //TraceManager.addDev("Show diplodocus options with b = " + b);

        genMapping.setVisible(b);
        dse.setVisible(b);

        genMappingMI.setVisible(b);
        dseMI.setVisible(b);

        if (dseZ3 != null) {
            dseZ3.setVisible(b);
        }
        if (dseZ3MI != null) {
            dseZ3MI.setVisible(b);
        }

        if (noc != null) {
            noc.setVisible(b);
        }

        if (nocMI != null) {
            nocMI.setVisible(b);
        }

        avatarSimu.setVisible(b);
        avatarSimuMI.setVisible(b);

        avatarFVUPPAAL.setVisible(!b);
        avatarFVStaticAnalysis.setVisible(!b);
        avatarFVUPPAALMI.setVisible(!b);
        avatarFVStaticAnalysisMI.setVisible(!b);

        if (avatarFVProVerif != null) {
            avatarFVProVerif.setVisible(b);
        }

        if (avatarFVProVerifMI != null) {
            avatarFVProVerifMI.setVisible(b);
        }

        avatarCodeGeneration.setVisible(!b);
        avatarCodeGenerationMI.setVisible(!b);

        if (genrtlotos != null) {
            genrtlotos.setVisible(!b);
            genrtlotosMI.setVisible(!b);
        }


        if (genlotos != null) {
            genlotos.setVisible(!b);
            genlotosMI.setVisible(!b);
        }

        if (genuppaal != null) {
            genuppaal.setVisible(b);
            genuppaalMI.setVisible(b);
        }

        if (checkcode != null) {
            checkcode.setVisible(!b);
            checkcodeMI.setVisible(!b);
        }

        if (simulation != null) {
            simulation.setVisible(!b);
            simulationMI.setVisible(!b);
        }

        if (validation != null) {
            validation.setVisible(!b);
            validationMI.setVisible(!b);
        }

        if (oneClickrtlotos != null) {
            oneClickrtlotos.setVisible(!b);
            oneClickrtlotosMI.setVisible(!b);
        }

        if (onclicklotos != null) {
            onclicklotos.setVisible(!b);
            onclicklotosMI.setVisible(!b);
        }

        if (gensystemc != null) {
            gensystemc.setVisible(b);
            gensystemcMI.setVisible(b);
        }

        if (simusystemc != null) {
            simusystemc.setVisible(b);
            simusystemcMI.setVisible(b);
        }

        if (gentml != null) {
            gentml.setVisible(b);
            gentmlMI.setVisible(b);
        }

        if (genC != null) {
            genC.setVisible(b);
            genCMI.setVisible(b);
        }

        if (genjava != null) {
            genjava.setVisible(!b);
            genjavaMI.setVisible(!b);
        }

        if (nc != null) {
            nc.setVisible(!b);
            ncMI.setVisible(!b);
        }

        if (gendesign != null) {
            gendesign.setVisible(!b);
            gendesignMI.setVisible(!b);
        }

    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == search ) {
            String text = search.getText();
            TraceManager.addDev("Searching elements with" + text);
            if (text.length()>0) {
            	search.setEnabled(false);
                mgui.search(text);
                search.setEnabled(true);
            }
        }
    }

    public void activateSearch(boolean enabled) {
    	search.setEnabled(enabled);
    }
    
    public String getSearchText() {
    	return search.getText();
    }
    
    public void setSearchText( final String text ) {
    	search.setText( text );
    }

    public void popupMainCommand() {
        if (popupShown) {
            menu.setVisible(false);
            popupShown = false;
            return;
        }
        // Get the location of the point 'on the screen'
        Point p = menuButton.getLocationOnScreen();
        menu.show(this,0,0);
        menu.setLocation(p.x,p.y + menuButton.getHeight());
    }

    private JMenuItem addMenu(TGUIAction action) {
        JMenuItem mi = new JMenuItem(action);
        addMenuItem(mi, action);
        return mi;
    }

    private void addMenuItem(JMenuItem mi, TGUIAction action) {
        mi.setName(action.getShortDescription());
        menu.add(mi);
    }





} // Class