Opened 14 years ago
Last modified 11 years ago
#1364 reopened enhancement
GuiTools: Ampliar los menú contextuales a los tipos básicos
| Reported by: | Pedro Gea | Owned by: | Jorge |
|---|---|---|---|
| Priority: | highest | Milestone: | TOLBase Revitalization |
| Component: | GuiTools | Version: | head |
| Severity: | blocker | Keywords: | |
| Cc: | Víctor de Buen Remiro, lmperez, Chakib Faghloumi |
Description
Se solicita ampliar la posibilidad de declarar las opciones de menú contextual a los tipos básicos, las gramáticas: Real, Text, Serie, Matrix, etc.
En el caso de los conjuntos (Set) se podrían distinguir los conjuntos estructurados de los no estructurados e incluso personalizar los conjuntos estructurados. También debería poder distinguirse entre el menú contextual de un nameblock que no es instancia del que es instancia de una clase.
Change History (14)
comment:1 Changed 14 years ago by
| Status: | new → accepted |
|---|
comment:2 Changed 14 years ago by
comment:5 Changed 14 years ago by
(In [3957]) refs #1364, todas los tipos de TOL, excepto Anything, despliegan opciones de menu definidas en MenuManager, ver ejemplo https://www.tol-project.org/browser/tolp/OfficialTolArchiveNetwork/GuiTools/test/test_0005/test.tol?rev=3955
comment:6 Changed 14 years ago by
Hay un error en el paquete
invalid command name ".main.mdi.slave1.work.pw.f0.frame.ti.f1.frame.ts.sw1.vars.m.mtypeMMS::@Network"
invalid command name ".main.mdi.slave1.work.pw.f0.frame.ti.f1.frame.ts.sw1.vars.m.mtypeMMS::@Network"
while executing
"{.main.mdi.slave1.work.pw.f0.frame.ti.f1.frame.ts.sw1.vars.m.mtypeMMS::@Network} post 750 308"
invoked from within
"$menu postcascade active"
(procedure "tk::MenuMotion" line 15)
invoked from within
"tk::MenuMotion .main.mdi.slave1.work.pw.f0.frame.ti.f1.frame.ts.sw1.vars.m 3 1 1024"
(command bound to event)
comment:7 Changed 14 years ago by
comment:8 Changed 14 years ago by
| Resolution: | → fixed |
|---|---|
| Status: | accepted → closed |
#Require GuiTools;
Real RealSquare( Real x, Set args )
{
Real sqX = x*x;
WriteLn( "El cuadrado de " << x << " es " << sqX );
sqX
};
Real GuiTools::MenuManager::defineMenuCommand
( "Real",
[[ Text name = "Real_SQ",
Text label = "Cuadrado del Real",
Real flagGroup = 0,
Code CmdInvoke = RealSquare ]]
);
comment:9 Changed 14 years ago by
| Resolution: | fixed |
|---|---|
| Status: | closed → reopened |
No estoy seguro de si es realmente un error, o es que el ejemplo anterior no es adecuado, pero si el método asignado a la opción de menú (RealSquare en el ejemplo) no es un miembro de un nameblock se obtiene el siquiente error:
ERROR: [1] Corrupted method RealSquare Possibly this problem is due to a non standard use of OOP, if this function was assigned to a member of type Code of a NameBlock or Class instance that has been destroyed already. [Call stack] [3] Real RealSquare (Real x, Set args) [2] Real option::option::inst::invoke (Anything objOrSelection) [1] Real GuiTools::MenuManager::invokeEntry (Text optionName, Set objOrSelection)
comment:10 Changed 14 years ago by
| Cc: | Víctor de Buen Remiro added |
|---|---|
| Severity: | critical → blocker |
Efectivamente, esto ha dejado de funcionar. En linux incluso provoca un caida de tol. Vere como aislarlo para reproducirlo directamente en TOL.
comment:12 Changed 14 years ago by
comment:13 Changed 14 years ago by
comment:14 Changed 11 years ago by
| Cc: | lmperez Chakib Faghloumi added |
|---|
Algo se rompió con los Set tras los últimos cambios (de hace ya un par de años) porque actualmente no funciona. Con la versión GuiTools.3.4 sí funciona.
#Require GuiTools;
Real f(Anything any, Set extraData) {
1};
Real GuiTools::MenuManager::defineMenuCommand("Set", [[
Text name = "name",
Text label = "label",
Real flagGroup = 0,
Real rank = 100,
Code CmdInvoke = f
]]);
Set Empty; // -> no aparece el menú

Sobre los tipos
SetyNameBlock:SetyNameBlockal igual que para las Struct.Settiene estructura se muestran la opciones genéricas para el tipoSetsolo si la estructuras no tiene opciones definidas.NameBlockes instancia de una clase se definen las opciones genéricas definidas paraNameBlocksolo si la clase no tiene opciones definidas.