# VItemRegisterPattern

Con esta clase podemos configurar el patrón a aplicar al control TreeWidget.

En el patrón disponemos de funciones para configurar las columnas, formularios de alta, baja y modificación, los colores, fuentes y alineaciones a aplicar a los nodos del árbol añadidos a través del patrón.

## Funciones

**Generales**

| Retorno | Función                                                   |
| ------- | --------------------------------------------------------- |
| Number  | [flags](#flags)()                                         |
| Boolean | [setDeleteForm](#setdeleteform)( String idRefForm )       |
| Boolean | [setEditForm](#seteditform)( String idRefForm )           |
| void    | [setFlags](#setflags)( Number flags )                     |
| Boolean | [setNewRecordForm](#setnewrecordform)( String idRefForm ) |
| Boolean | [setTable](#settable)( String idRefTable )                |

**De columnas**

| Retorno                                                                                        | Función                                                                                                                                                               |
| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Number                                                                                         | [backgroundColor](#backgroundcolor)( Number column )                                                                                                                  |
| Number                                                                                         | [columnCount](#columncount)()                                                                                                                                         |
| [VFont](https://doc.velneo.com/28/velneo-vdevelop/scripts/lenguajes/javascript/clases/vfont)   | [font](#font)( Number column )                                                                                                                                        |
| Number                                                                                         | [foregroundColor](#foregroundcolor)( Number column )                                                                                                                  |
| [VImage](https://doc.velneo.com/28/velneo-vdevelop/scripts/lenguajes/javascript/clases/vimage) | [icon](#icon)( Number column )                                                                                                                                        |
| String                                                                                         | [idFieldIcon](#idfieldicon)( Number column)                                                                                                                           |
| String                                                                                         | [idFieldText](#idfieldtext)( Number column)                                                                                                                           |
| void                                                                                           | [setBackgroundColor](#setbackgroundcolor)( Number column, Number rgbaColor )                                                                                          |
| void                                                                                           | [setBackgroundColor](#void-setbackgroundcolor-number-column-number-r-number-g-number-b-number-a--255-)( Number column, Number r, Number g, Number b, Number a = 255 ) |
| void                                                                                           | [setFont](#setfont)( Number column, VFont font )                                                                                                                      |
| void                                                                                           | [setForegroundColor](#setforegroundcolor)( Number column, Number rgbaColor )                                                                                          |
| void                                                                                           | [setForegroundColor](#void-setforegroundcolor-number-column-number-r-number-g-number-b-number-a--255-)( Number column, Number r, Number g, Number b, Number a = 255 ) |
| void                                                                                           | [setIcon](#seticon)( Number column, VImage image )                                                                                                                    |
| void                                                                                           | [setIdFieldIcon](#setidfieldicon)( Number column, String idCampo )                                                                                                    |
| void                                                                                           | [setIdFieldText](#setidfieldtext)( Number column, String idCampo )                                                                                                    |
| void                                                                                           | [setTextAlignment](#settextalignment)( Number nCol, Number nAlignment )                                                                                               |
| Number                                                                                         | [textAlignment](#textalignment)( Number column)                                                                                                                       |

**Patrones hijos**

| Retorno              | Función                                                                  |
| -------------------- | ------------------------------------------------------------------------ |
| void                 | [addChildPattern](#addchildpattern)( VItemRegisterPattern childPattern ) |
| VItemRegisterPattern | [childPattern](#childpattern)( Number index )                            |
| Number               | [childPatternCount](#childpatterncount)()                                |

## Enumeraciones

**Flags de alineamiento**

* AlignLeft = 0x0001
* AlignLeft = 0x0002
* AlignHCenter = 0x0004
* AlignJustify = 0x0008
* AlignAbsolute = 0x0010
* AlignTop = 0x0020
* AlignBottom = 0x0040
* AlignVCenter = 0x0080
* AlignCenter = AlignVCenter | AlignHCenter

**ItemFlag**

* 0 = No tiene fijada ninguna propiedad
* 1 = Puede ser seleccionado
* 2 = Puede ser editado
* 4 = Puede ser arrastrado
* 8 = Puede ser usado como destino de un drop
* 16 = Puede ser marcado o desmarcado por el usuario
* 32 = El usuario puede interactuar con el ítem
* 64 = El ítem se puede marcar con 3 estados independientes

## Documentación de funciones

### Funciones generales

#### Number flags() <a href="#flags" id="flags"></a>

Devuelve el valor de los flags configurados para el ítem. Ver enum ItemFlag para conocer todos los valores configurables.

#### Boolean setDeleteForm( String idRefForm ) <a href="#setdeleteform" id="setdeleteform"></a>

Establece el formulario de baja para el control TreeWidget para los ítem generados con el patrón.

Parámetros:

* idRefForm: idRef del formulario de baja.

#### Boolean setEditForm( String idRefForm ) <a href="#seteditform" id="seteditform"></a>

Establece el formulario de edición/modificación para el control TreeWidget para los ítem generados con el patrón.

Parámetros:

* idRefForm: idRef del formulario de edición/modificación.

#### void setFlags( Number flags ) <a href="#setflags" id="setflags"></a>

Permite configurar diferentes valores del ítem como si es seleccionable, editable, arrastrable, etc. Ver enum ItemFlag para conocer todos los valores configurables.

Parámetros:

* flags: valor numérico que combina los valores del enum ItemFlag.

#### Boolean setNewRecordForm( String idRefForm ) <a href="#setnewrecordform" id="setnewrecordform"></a>

Establece el formulario de alta para el control TreeWidget para los ítem generados con el patrón.

Parámetros:

* idRefForm: idRef del formulario de alta.

#### Boolean setTable( String idRefTable ) <a href="#settable" id="settable"></a>

Establece la tabla a usar en el patrón para el control TreeWidget.

Parámetros:

* idRefTable: idRef de la tabla.

### Funciones de columnas

#### Number backgroundColor( Number column ) <a href="#backgroundcolor" id="backgroundcolor"></a>

Devuelve un número que se corresponde con el color de fondo de una columna.

Parámetros:

* column: número de columna (la primera es la 0).

#### Number columnCount() <a href="#columncount" id="columncount"></a>

Devuelve el nº de columnas que tiene el ítem en curso en el control TreeWidget.

#### VFont font( Number column ) <a href="#font" id="font"></a>

Devuelve un objeto de la [VFont](https://doc.velneo.com/28/velneo-vdevelop/scripts/lenguajes/javascript/clases/vfont) con la fuente establecida para la columna especificada.

Parámetros:

* columna: número de columna (la primera es la 0).

#### Number foregroundColor( Number column ) <a href="#foregroundcolor" id="foregroundcolor"></a>

Devuelve un número que se corresponde con el color de texto de una columna.

Parámetros:

* column: número de columna (la primera es la 0).

#### VImage icon( Number column ) <a href="#icon" id="icon"></a>

Devuelve un objeto de la clase [VImage](https://doc.velneo.com/28/velneo-vdevelop/scripts/lenguajes/javascript/clases/vimage) con el icono que se visualiza en una columna del ítem.

Parámetros:

* column: número de columna (la primera es la 0).

#### String idFieldIcon( Number column) <a href="#idfieldicon" id="idfieldicon"></a>

Devuelve el identificador del campo que contiene el icono que se visualiza en la columna.

Parámetros:

* column: número de columna (la primera es la 0).

#### String idFieldText( Number column) <a href="#idfieldtext" id="idfieldtext"></a>

Devuelve el identificador del campo que contiene el contenido/texto que se visualiza en la columna.

Parámetros:

* column: número de columna (la primera es la 0).

#### void setBackgroundColor( Number column, Number rgbaColor ) <a href="#setbackgroundcolor" id="setbackgroundcolor"></a>

Fija el color de fondo de una columna del ítem pasándole un número que representa el valor RGBA de color.

Parámetros:

* column: número de columna del ítem.
* rgbaColor: número que se corresponde con la representación decimal del valor hexadecimal de un color en formato RGBA.

#### void setBackgroundColor( Number column, Number r, Number g, Number b, Number a = 255 )

Fija el color de fondo de una columna del ítem pasándole por separado los colores del formato RGBA del color de fondo.

Parámetros:

* column: número de columna del ítem.
* r: número que se corresponde con la representación decimal del color rojo.
* g: número que se corresponde con la representación decimal del color verde.
* b: número que se corresponde con la representación decimal del color azul.
* a: número que se corresponde con la representación decimal del canal alfa o transparencia.

#### void setFont( Number column, VFont font) <a href="#setfont" id="setfont"></a>

Fija la fuente de la columna.

Propiedades:

* column: número de columna.
* font: objeto de la clase [VFont](https://doc.velneo.com/28/velneo-vdevelop/scripts/lenguajes/javascript/clases/vfont) que representa a la fuente.

#### void setForegroundColor( Number column, Number rgbaColor ) <a href="#setforegroundcolor" id="setforegroundcolor"></a>

Fija el color del texto de una columna del ítem pasándole un número que representa el valor RGBA de color.

Parámetros:

* column: número de columna del ítem.
* rgbaColor: número que se corresponde con la representación decimal del valor hexadecimal de un color en formato RGBA.

#### void setForegroundColor( Number column, Number r, Number g, Number b, Number a = 255 )

Fija el color del texto de una columna del ítem pasándole por separado los colores del formato RGBA del color de fondo.

Parámetros:

* column: número de columna del ítem.
* r: número que se corresponde con la representación decimal del color rojo.
* g: número que se corresponde con la representación decimal del color verde.
* b: número que se corresponde con la representación decimal del color azul.
* a: número que se corresponde con la representación decimal del canal alfa o transparencia.

#### void setIcon( Number column, VImage image ) <a href="#seticon" id="seticon"></a>

Fija el icono que se mostrará en una columna del ítem.

Parámetros:

* column: número de columna del ítem.
* image: objeto de la clase [VImage](https://doc.velneo.com/28/velneo-vdevelop/scripts/lenguajes/javascript/clases/vimage) que contiene el icono a visualizar.

#### void setIdFieldIcon( Number column, String idCampo ) <a href="#setidfieldicon" id="setidfieldicon"></a>

Fija el campo que se usará para mostrar el icono en la columna.

Parámetros:

* column: número de columna del ítem.
* idCampo: identificador del campo de tipo objeto imagen a visualizar.

#### void setIdFieldText( Number column, String idCampo ) <a href="#setidfieldtext" id="setidfieldtext"></a>

Fija el campo que se usará para mostrar el contenido en la columna.

Parámetros:

* column: número de columna del ítem.
* idCampo: identificador del campo de tipo objeto imagen a visualizar.

#### void setTextAlignment( Number nCol, Number nAlignment ) <a href="#settextalignment" id="settextalignment"></a>

Configura la alineación de los textos en una columna del ítem en curso.

Parámetros:

* column: número de la columna del ítem.
* alignFlags: número de el valor de los flags de alineamiento. Ver enum de flags de alineamiento.

#### Number textAlignment( Number column) <a href="#textalignment" id="textalignment"></a>

Devuelve un número que se corresponde con el valor de alineamiento de texto del ítem y columna en curso, ver enum flags de alineamiento.

### Patrones hijos <a href="#patrones" id="patrones"></a>

#### void addChildPattern( VItemRegisterPattern childPattern ) <a href="#addchildpattern" id="addchildpattern"></a>

Añade un patrón como un nodo hijo del ítem en curso.

Parámetros:

* childPatter: objeto de la clave VItemRegisterPattern que se usará para generar nodos hijos.

#### VItemRegisterPattern childPattern( Number index ) <a href="#childpattern" id="childpattern"></a>

Devuelve un patrón seleccionado que se corresponde con un objeto de la clase VItemRegisterPattern.

Parámetros:

* index: número de patrón (el primero es el 0).

#### Number childPatternCount() <a href="#childpatterncount" id="childpatterncount"></a>

Devuelve el número de patrones configurados en los nodos hijos del ítem.

## Ejemplos

### Ejemplo de películas con repartos

```javascript
// --------------------------------------------------------------------------------
// TreeWidget de películas y sus repartos
// --------------------------------------------------------------------------------
importClass ("VImage" );

// --------------------------------------------------------------------------------
// Preparamos y configuramos el control treewidget
// --------------------------------------------------------------------------------
var tree = theRoot.dataView().control("CONTROL" );

tree.setHeaderLabel(0, "Título");
tree.setHeaderLabel(1, "Año / Trabajo");
tree.setIconSize(64, 80);

// --------------------------------------------------------------------------------
// Creamos el top level del árbol con un icono basado en un objeto dibujo
// --------------------------------------------------------------------------------
var icoPelis = new VImage();
icoPelis.loadResource("CINE/CINE_32");
var itemCarpetaPeliculas = tree.addTopLevelItem();

itemCarpetaPeliculas.setText(0, "Películas");
itemCarpetaPeliculas.setIcon(0, icoPelis);

// --------------------------------------------------------------------------------
// Preparamos el patrón de películas
// --------------------------------------------------------------------------------
var patternPeli = tree.createItemRegPattern();
patternPeli.addChildPattern(patternReparto);
patternPeli.setTable("CINE_DAT/PELICULAS");

patternPeli.setIdFieldIcon(0, "CARTEL");
patternPeli.setIdFieldText(0, "NAME");
patternPeli.setTextAlignment(0, VTreeItem.AlignLeft | VTreeItem.AlignVCenter);

patternPeli.setIdFieldText(1, "AGNO");
patternPeli.setTextAlignment(1, VTreeItem.AlignLeft | VTreeItem.AlignVCenter);

patternPeli.setNewRecordForm("CINE/PELICULA");
patternPeli.setEditForm("CINE/PELICULA");
patternPeli.setDeleteForm("CINE/ELIMINAR_PELICULA");

// --------------------------------------------------------------------------------
// Preparamos el patrón de repartos
// --------------------------------------------------------------------------------
var patternReparto = tree.createItemRegPattern();
patternReparto.setTable("CINE_DAT/REPARTOS");

patternReparto.setIdFieldIcon(0, "PERSONAS.FOTO");
patternReparto.setIdFieldText(0, "PERSONAS.NAME");

patternReparto.setIdFieldText(1, "TRABAJOS.NAME");

patternReparto.setNewRecordForm("CINE/REPARTO_PRUEBAS");
patternReparto.setEditForm("CINE/REPARTO_PRUEBAS");
patternReparto.setDeleteForm("CINE/REPARTO_CARTEL_P");

// --------------------------------------------------------------------------------
// Leemos la lista de películas a cargar en el treewidget
// --------------------------------------------------------------------------------
var pelis = new VRegisterList(theRoot);
pelis.setTable("CINE_DAT/PELICULAS");
var a = new Array;
pelis.load("ID", a);

// --------------------------------------------------------------------------------
// Cargamos la lista de películas al treewidget aplicando el patrón
// --------------------------------------------------------------------------------
itemCarpetaPeliculas.addChildRegisterList(pelis ,patternPeli);

// --------------------------------------------------------------------------------
// Recorremos las películas del treewidget para incluir los repartos
// --------------------------------------------------------------------------------
var agnos = 0;
for(var x = 0 ; x < itemCarpetaPeliculas.childCount(); ++x)
{
    // Se lee la película del nodo en curso
    var itemPeli = itemCarpetaPeliculas.child(x);
    var curPeli = pelis.readAt(x);

    // Se leen los repartos de la película
    var reparto = curPeli.loadPlurals("REPARTOS_PELICULAS");

    // Se calcula el total años de la película (como ejemplo de cálculo de totales)
    agnos += curPeli.fieldToInt("AGNO");

    // --------------------------------------------------------------------------------
    // Se añaden los repartos como nodos hijos de la película aplicando el patrón
    // --------------------------------------------------------------------------------
    itemPeli.addChildRegisterList(reparto, patternReparto);

    // --------------------------------------------------------------------------------
    // Se añade un nodo hijo con el subtotal de personas de reparto de la película
    // --------------------------------------------------------------------------------
    var itemSubtotal = itemPeli.addChild();
    itemSubtotal.setFlags(VTreeItem.NoItemFlags);

    itemSubtotal.setBackgroundColor(0, 192, 192, 192);
    itemSubtotal.setForegroundColor(0, 0, 0, 128);
    itemSubtotal.setText(0, "Nº de personas: " + reparto.size());

    itemSubtotal.setBackgroundColor(1, 192, 192, 192);    
    itemSubtotal.setForegroundColor(1, 0, 0, 128);
};

// --------------------------------------------------------------------------------
// Se añade un nodo con los totales generales (películas y años)
// --------------------------------------------------------------------------------
var itemTotalPeliculas = itemCarpetaPeliculas.addChild();
itemTotalPeliculas.setFlags(VTreeItem.NoItemFlags);

itemTotalPeliculas.setBackgroundColor(0, 192, 192, 192);
itemTotalPeliculas.setForegroundColor(0, 255, 0, 0);
itemTotalPeliculas.setText(0, "Nº de películas: " + pelis.size());

itemTotalPeliculas.setBackgroundColor(1, 192, 192, 192);
itemTotalPeliculas.setForegroundColor(1, 255, 0, 0);
itemTotalPeliculas.setText(1, "" + agnos);
itemTotalPeliculas.setTextAlignment(1, VTreeItem.AlignRight | VTreeItem.AlignVCenter);

// --------------------------------------------------------------------------------
// Se expande el ítem de totales generales creado y se ajuste el ancho de las columnas del treewidget
// --------------------------------------------------------------------------------
tree.expandItem(itemCarpetaPeliculas);
tree.resizeColumnToContents(0);

// --------------------------------------------------------------------------------
// Como ejemplo, se añaden los géneros de las películas como nodos principales al treewidget
// --------------------------------------------------------------------------------
var patternGenero = tree.createItemRegPattern();
patternGenero.setTable("CINE_DAT/GENEROS");
patternGenero.setIdFieldText(0, "NAME");

var generos = new VRegisterList(theRoot);
generos.setTable("CINE_DAT/GENEROS");
var a = new Array;
generos.load("ID", a);

tree.addTopLevelItemRegisterList(generos, patternGenero);
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.velneo.com/28/velneo-vdevelop/scripts/lenguajes/javascript/clases/vitemregisterpattern.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
