Ticket #1364 (reopened enhancement)

Opened 7 years ago

Last modified 4 years ago

GuiTools: Ampliar los menú contextuales a los tipos básicos

Reported by: pgea Owned by: josp
Priority: highest Milestone: TOLBase Revitalization
Component: GuiTools Version: head
Severity: blocker Keywords:
Cc: vdebuen, lmperez, cfaghloumi

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

Changed 7 years ago by josp

  • status changed from new to accepted

Changed 7 years ago by josp

Sobre los tipos Set y NameBlock:

  • Se podrán definir opciones para los tipos Set y NameBlock al igual que para las Struct.
  • Si un Set tiene estructura se muestran la opciones genéricas para el tipo Set solo si la estructuras no tiene opciones definidas.
  • Si un NameBlock es instancia de una clase se definen las opciones genéricas definidas para NameBlock solo si la clase no tiene opciones definidas.

Changed 7 years ago by josp

(In [3954]) refs #1364, retorno el subtipo de Set o NameBlock

Changed 7 years ago by josp

(In [3955]) refs #1364, test para tipos primarios de TOL

Changed 7 years ago by josp

(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

Changed 7 years ago by josp

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)

Changed 7 years ago by josp

(In [3983]) refs #1364, se corrige el error anterior, los caracteres :: no son válidos en el nombre de un menú de tk

Changed 6 years ago by josp

  • status changed from accepted to closed
  • resolution set to fixed
#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 ]]
);

Changed 6 years ago by pgea

  • status changed from closed to reopened
  • resolution fixed deleted

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)

Changed 6 years ago by josp

  • cc vdebuen added
  • severity changed from critical to blocker

Efectivamente, esto ha dejado de funcionar. En linux incluso provoca un caida de tol. Vere como aislarlo para reproducirlo directamente en TOL.

Changed 6 years ago by josp

Se ha creado un ticket específico para este error, vease #1478.

Changed 6 years ago by josp

(In [4447]) refs #1244, #1364, #1480, cambios en los test para adaptarse a la reimplementación de MenuManager.

Changed 6 years ago by josp

(In [4448]) refs #1244, #1364, #1480, reimplementación de MenuManager:

  • creación apropiada opciones de menu delegadas
  • redefinición de imagenes y opciones de menu
  • unificación de las etiquetas de menu, se usa el mismo método para crear etiquetas de submenu como etiquetas de tipo de dato.

Changed 4 years ago by pgea

  • cc lmperez, cfaghloumi 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ú
Note: See TracTickets for help on using tickets.