Un salutone e un abbraccio a tutti.
Mi dispiace che non sono con voi da un bel pò di tempo, e ho anche notato che qualcuno mi ha pure cercato anche in altre bande.
Purtroppo la situazione non mi permette di avere molto tempo da dedicare al diletto ma, ad ogni modo, quel pochino che riesco a racimolare, penso sempre a questa banda di matti...
Comunque, e sempre sperando di poter ritornare a pieno regime, e come accennato, ho utilizzato qualche oretta la notte per scrivere qualcosina.
In allegato ho messo i sorgenti di una serie di classi e, in particolare, ho voluto riscrivere la classe TableView in modo da espanderne le sue potenzialità, particolarmente in fase di editing.
Preso spunto da qualche studio fatto in Java, ho riscritto la classe TableView, aggiungendo la possibilità di gestire più tipologie di dato, sia in fase di editing, sia in fase di rendering.
La cosa un pochino fastidiosa su cui ho penato un pochino è stata l'utilizzo in Gambas di alcune classi statiche non modificabile, quelle che nella documentazione iniziano con un punto, come appunto esistono nella GridView (che è una classe scritta in C++).
Dato che non volevo mettere le mani sui sorgenti in C++, oltre anche a motivi puramente didattici, ho preso i sorgenti di TableView e l'ho riscritta, utilizzando come base la classe UserControl.
Ad ogni modo, ho riscritto questa classe in modo da poter gestire graficamente più tipologie di dato, diversamente da quanto impostato nella classe originale TableView, aggiungendo vari ComboBox, ButtonBox, CheckBox, CurrencyBox, DateBox, DateTimeBox, IPAddressBox, MaskBox, NumberBox, PercentBox, SpinBox, TextBox e TimeBox. Oggetti che di norma si mettono in una form, e che possono essere sicuramente utili gestiti anche in una griglia di dati.
Molti dei componenti che ho menzionato sono stati da me creati, alcuni riscrivendo oggetti già presenti in Gambas, ecc.
Per poter gestire le classi nascoste, sono dovuto ricorrere a sistemi articolati, creando opportuni oggetti e gestendone gli eventi alla modifica di una qualsiasi loro proprietà. Questo mi ha permesso di gestire in modo dinamico le classi nascoste (es. ".GridViewData").
Sia il rendering (ovvero la presentazione del dato nella griglia), sia l'editing, vengono gestiti da opportune classi manipolate a livello di programmazione. Da queste è anche possibile derivarne di ulteriori aggiungendo ulteriori caratteristiche. La classe madre CTable gestirà le cose per voi, ma senza sapere cosa accade nelle sottoclassi.
Prima di procedere nella creazione della tabella (o griglia), è necessario creare una serie di colonne (a vostra discrezione) utilizzando per ognuna la classe CTableColumn e aggiungerle alla CTable attraverso le funzioni preposte. Per ogni colonna ho inserito anche la possibilità di renderla visibile o meno, questo perchè l'array dei dati potrebbe avere dei campi che devono essere mantenuti nascosti. Altre caratteristiche sono prese dalle proprietà .GridViewColumns e .GridViewColumn.
Ho anche aggiunto la funzione di sorting su singola colonna, che tiene conto del tipo e cerca di ottimizzare la procedura di sort.
Una volta definite le colonne, per visualizzare una rappresentazione dei vostri dati, basta passare a CTable un array di tipo Variant[] (righe), e in ogni elemento un'altro array di Variant[] (colonne).
Comunque, nel file compresso è presente anche una form di esempio. Non è proprio completa, ma dà un'idea delle funzionalità.
Nota per l'esperto di creazione classi di esportazioni (sapete chi... ):Nonostante abbia gestito le cose per poter creare classi esportabili, ho qualche problema nel caricarle come librerie esterne di altri progetti. Se hai tempo, magari gli dai un'occhiata, e vedi dove sbaglio.
NOTA IMPORTANTE!!!La libreria è stata creata utilizzando Gambas3 e, nonostante i vari checkout dal repository, non mi ha dato problemi con le librerie, ma sicuramente ha altri problemi che spero risolvano. Devo dire che è migliorato in qualche cosina, specialmente riguardo lo sviluppo di applicazioni, ma di cose da fare ce ne sono...
Ragazzi! Un salutone a tutti.
[se volete scrivetemi direttamente alla mia mail, quella la leggo costantemente...]