Opened 13 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 13 years ago by
Status: | new → accepted |
---|
comment:2 Changed 13 years ago by
comment:5 Changed 13 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 13 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 13 years ago by
comment:8 Changed 13 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 13 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 13 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 13 years ago by
comment:13 Changed 13 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
Set
yNameBlock
:Set
yNameBlock
al igual que para las Struct.Set
tiene estructura se muestran la opciones genéricas para el tipoSet
solo si la estructuras no tiene opciones definidas.NameBlock
es instancia de una clase se definen las opciones genéricas definidas paraNameBlock
solo si la clase no tiene opciones definidas.