-
Ludovic Apvrille authoredLudovic Apvrille authored
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