# 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/27/velneo-vdevelop/scripts/lenguajes/javascript/clases/vfont)   | [font](#font)( Number column )                                                                                                                                        |
| Number                                                                                         | [foregroundColor](#foregroundcolor)( Number column )                                                                                                                  |
| [VImage](https://doc.velneo.com/27/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/27/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/27/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/27/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/27/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);
```
