close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

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 Jorge

Status: newaccepted

comment:2 Changed 13 years ago by Jorge

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.

comment:3 Changed 13 years ago by Jorge

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

comment:4 Changed 13 years ago by Jorge

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

comment:5 Changed 13 years ago by Jorge

(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 Jorge

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 Jorge

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

comment:8 Changed 13 years ago by Jorge

Resolution: fixed
Status: acceptedclosed
#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 Pedro Gea

Resolution: fixed
Status: closedreopened

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 Jorge

Cc: Víctor de Buen Remiro added
Severity: criticalblocker

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

comment:11 Changed 13 years ago by Jorge

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

comment:12 Changed 13 years ago by Jorge

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

comment:13 Changed 13 years ago by Jorge

(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.

comment:14 Changed 11 years ago by Pedro Gea

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ú
Note: See TracTickets for help on using tickets.