Autore Topic: EditColumnView - ColumnView editabile  (Letto 1023 volte)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
EditColumnView - ColumnView editabile
« il: 15 Agosto 2010, 17:02:41 »
In realtà ho aperto questa discussione non per una ricerca di aiuto, ma per fornire qualche elemento di aiuto.

In allegato invio una form, in cui ho utilizzato l'oggetto ColumnView, giocando con la quale ho cercato di rendere la classe in qualche modo editabile, nel senso che può essere, ad esempio, usata per modificare un file di configurazione (come nel mio caso), o per altre utili cose all'interno di una qualsiasi applicazione.

L'oggetto ColumnView è un elemento molto comune in altri linguaggi, anche se magari non si chiama allo stesso modo, ma che unisce due oggetti grafici di base: TreeView e GridView.
Nell'esempio in allegato, ho aggiunto la gestiore di coppie di dati [chiave, valore], con la possibilità di modificare il valore, tenendo presente il tipo, ad es.: Text=stringhe, Check=boolean, Combo=combobox per lista di stringhe, Color=selezione colore, Font=selezione font, Number=inserimento valori numerici, e così via.

L'esempio non è ancora completo, perchè aperto a qualsiasi implementazione, modifiche e miglioramenti.
Ho provato questa cosa, per avere qualche idea migliorativa per pgDesigner, che stò valutando, e così è uscita questa cosa in questi due giorni.

Se a qualcuno può interessare, l'esempio è libero e utilizzabile in qualsiasi modo. Spero solo che qualsivoglia aggiornamento o idea sia in qualche modo pubblicata in questo forum e, per pulizia, in questa discussione.

Se poi si riesce a farne un modulo generalizzato, meglio! Cercheremo di integrarlo come progetto vero e proprio e, magari, segnalarlo al gruppo di sviluppo di Gambas.

Ricordo che l'esempio è stato creato in Gambas2!

Bye, e spero che questa discussione si allunghi...

P.S.: sò che è ferragosto, ma questo è anche un modo per rilassarmi... :-)
« Ultima modifica: 15 Agosto 2010, 17:37:37 da md9327 »

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: EditColumnView - ColumnView editabile
« Risposta #1 il: 15 Agosto 2010, 20:12:43 »
Vogliamo la classe....o meglio il componente... 8)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: EditColumnView - ColumnView editabile
« Risposta #2 il: 17 Agosto 2010, 13:02:46 »
Eccolo qua, pure migliorato... (come sei esigente...)

Note:
Ho riscontrato qualche problema, relativo alle librerie qt/gtk, in particolare un'anomalia nella gtk (su qt funziona bene) per la ColumnView, ovvero la dimensione di larghezza delle colonne (proprietà Width) non viene valorizzata, ovvero è sempre a zero, mentre con le qt riporta il valore corretto anche nel ridimensionamento manuale. Questo causa un problema nella disposizione dell'oggetto editor sulla riga selezionata. Ho cercato di porre rimedio in qualche modo, ma il rimedio fà un pò pena. Inoltre ho riscontrato che la proprietà Header di ColumnView determina coordinate diverse in base all'uso delle qt o delle gtk. Anche qui ho trovato un modo che sistema la cosa, ma dipende dall'impostazione del deskop, dato che non riesco a trovare il modo di sapere quale delle due librerie si stà usando, in particolare se si usa la libreria gb.gui.

Descrizione:
Il componente è composto dalla classe EditColumnView, e già dal nome si evince che la classe è basata sull'oggetto ColumnView presente nelle librerie di Gambas2.
La ColumnView è contenuta in un pannello, questo per permettere di controllarne le dimensioni, anche in vista di implementazioni future.

La classe EditColumnView mette a disposizione alcuni metodi, con cui popolare la griglia che, ricordo, è composta da due colonne: la TreeView e la colonna dei valori. Lo scopo è, appunto, quello di gestire coppie di informazione: label/valore.

Costanti (da usare per la creazione degli elementi):

T_Label: semplice etichetta (usata per le voci di gruppo)
T_Text: stringa (TextBox)
T_Check: boolean (CheckBox)
T_Number: numerico (ValueBox)
T_Date: data (ValueBox)
T_Time: time (ValueBox)
T_Combo: lista di stringhe (ComboBox)
T_Color: colore (intero, ColorDialog)
T_Font: font (oggetto, FontDialog)

Metodi:

AddItem(): tramite le costanti di cui sopra, permette di creare una singola voce. I parametri sono:
  • tipo (Integer): una delle costanti di cui sopra (obbligatorio).
  • chiave (String): chiave dell'item (obbligatoria, deve essere univoca)
  • etichetta (Stringa): etichetta che viene visualizzata nella Tree, corrispondente al valore (obbligatorio)
  • padre (String): chiave dell'elemento padre, se esistente (facoltativo)
  • valore (Variant): valore dell'elemento (facoltatico: stringa, logico, numerico, data, ora, intero, font)
  • opzioni (Variant): opzioni valore (facoltativo), dipendentente dal tipo di voce (data/ora=formato di visualizzazione, combo=lista di stringhe di valori)

AddLabel: aggiunge una semplice etichetta di gruppo. I parametri sono:
  • chiave (String): chiave dell'item (obbligatoria, deve essere univoca)
  • etichetta (Stringa): etichetta che viene visualizzata nella Tree, corrispondente al valore (obbligatorio)
  • padre (String): chiave dell'elemento padre, se esistente (facoltativo)

AddText: aggiunge un valore di tipo String. I parametri sono:
  • chiave (String): chiave dell'item (obbligatoria, deve essere univoca)
  • etichetta (Stringa): etichetta che viene visualizzata nella Tree, corrispondente al valore (obbligatorio)
  • padre (String): chiave dell'elemento padre, se esistente (facoltativo)
  • valore (String): valore (facoltativo, default="")

AddCheck: aggiunge un valore di tipo Boolean. I parametri sono:
  • chiave (String): chiave dell'item (obbligatoria, deve essere univoca)
  • etichetta (Stringa): etichetta che viene visualizzata nella Tree, corrispondente al valore (obbligatorio)
  • padre (String): chiave dell'elemento padre, se esistente (facoltativo)
  • valore (Boolean): valore (facoltativo, default=FALSE)

AddCombo: aggiunge un valore di tipo String. I parametri sono:
  • chiave (String): chiave dell'item (obbligatoria, deve essere univoca)
  • etichetta (Stringa): etichetta che viene visualizzata nella Tree, corrispondente al valore (obbligatorio)
  • padre (String): chiave dell'elemento padre, se esistente (facoltativo)
  • valore (String): valore (facoltativo, default="")
  • lista (String[]): lista dei valori da visualizzare nella ComboBox (facoltativo, default=NULL)

AddColor: aggiunge un valore di tipo Integer, che rappresenta il valore intero (RGB) di un colore. I parametri sono:
  • chiave (String): chiave dell'item (obbligatoria, deve essere univoca)
  • etichetta (Stringa): etichetta che viene visualizzata nella Tree, corrispondente al valore (obbligatorio)
  • padre (String): chiave dell'elemento padre, se esistente (facoltativo)
  • valore (Integer): valore (facoltativo, default=0=Black)

AddFont: aggiunge un valore di tipo Font. I parametri sono:
  • chiave (String): chiave dell'item (obbligatoria, deve essere univoca)
  • etichetta (Stringa): etichetta che viene visualizzata nella Tree, corrispondente al valore (obbligatorio)
  • padre (String): chiave dell'elemento padre, se esistente (facoltativo)
  • valore (Font): valore (facoltativo, default=NULL)

AddNumber: aggiunge un valore di tipo Float. I parametri sono:
  • chiave (String): chiave dell'item (obbligatoria, deve essere univoca)
  • etichetta (Stringa): etichetta che viene visualizzata nella Tree, corrispondente al valore (obbligatorio)
  • padre (String): chiave dell'elemento padre, se esistente (facoltativo)
  • valore (Float): valore (facoltativo, default=0)

AddDate: aggiunge un valore di tipo Date. I parametri sono:
  • chiave (String): chiave dell'item (obbligatoria, deve essere univoca)
  • etichetta (Stringa): etichetta che viene visualizzata nella Tree, corrispondente al valore (obbligatorio)
  • padre (String): chiave dell'elemento padre, se esistente (facoltativo)
  • valore (Date): valore (facoltativo, default=NULL)
  • formato (String): formato di visualizzazione (facoltativo, default="dd/mm/yyyy")

AddTime: aggiunge un valore di tipo Date. I parametri sono:
  • chiave (String): chiave dell'item (obbligatoria, deve essere univoca)
  • etichetta (Stringa): etichetta che viene visualizzata nella Tree, corrispondente al valore (obbligatorio)
  • padre (String): chiave dell'elemento padre, se esistente (facoltativo)
  • valore (Date): valore (facoltativo, default=NULL)
  • formato (String): formato di visualizzazione (facoltativo, default="hh:nn:ss")

GetValue(key AS String) AS Variant: ritorna il valore associato alla chiave key.
IsModified(key AS String) AS Boolean: ritorna TRUE che il valore di key è stato modificato.

Proprietà:

ScrollBar: di tipo Scroll, determina se e quali scrollbar visualizzare per la griglia.

Eventi:

Change(key AS String): la modifica di un valore scatena l'evento Change, che evidenzia anche la chiave dell'elemento modificato (key). All'interno dell'evento è possibile determinare, tramite i metodi GetValue e IsModified, il valore modificato.


Bè, penso che per il momento sia tutto... vedremo in seguito...
Ad ogni modo, se qualcuno ha qualche idea, ben venga...

P.S.: sarà il caso di mettere la discussione in evidenza???

Ciao
« Ultima modifica: 17 Agosto 2010, 13:04:24 da md9327 »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: EditColumnView - ColumnView editabile
« Risposta #3 il: 20 Agosto 2010, 16:23:23 »
Ho fatto alcuni piccoli aggiornamenti al codice, alcuni si possono notare dalla form di test.