Autore Topic: Classe CTable  (Letto 10967 volte)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Classe CTable
« Risposta #15 il: 25 Febbraio 2011, 15:06:11 »
Perfetto md...ho inserito l'immagine....

Però tu un giorno imparerai a scrivere il mio nick?  ;D

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Classe CTable
« Risposta #16 il: 26 Febbraio 2011, 01:35:03 »
Non ci penso nemmeno...  :P

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Classe CTable
« Risposta #17 il: 26 Febbraio 2011, 17:14:18 »
Altra aggiustatina al codice, alcune novità, e inseriti alcuni esempi per mostrarle.

Per ricapitolare, la libreria fornisce la classe base CTable, e una serie di classi e oggetti di contorno, ed essenziali (o quasi) al corretto utilizzo di CTable. A parte alcune classi necessarie a CTable, ho diviso le funzionalità di gestione della griglia/tabella in due blocchi distinti: editor e renderer, ovvero oggetti che gestiscono il dato in modalità di editing, e altri che ne gestiscono la presentazione a video. Alcuni di questi oggetti possono avere abilità di esecuzione, ovvero al doppio-click lanciare un'apposito evento Click, con cui è possibile effettuare alcune operazioni nel resto dell'applicazione, oppure anche di sola presentazione (es. un'etichetta senza alcuno scopo attivo).
Nella lista seguente l'elenco degli oggetti esportati dalla libreria e una nota sulla loro funzionalità.

CTableE' la classe principale, ovvero la griglia di gestione e presentazione dei dati. I dati da manipolare vengono forniti come array multidimensionale4 (righe,colonne), e possono essere di verso tipo, più o meno tutte le tipologie base gestite da Gambas (Integer, Date, Float, String).
CTableCellClasse usato da CTable per passare e gestire informazioni riguardanti una singola cella.
CTableColumnClasse usata per definire le proprietà di un'intera colonna (header e altro...). L'oggetto viene creato a parte e aggiunto poi alla CTable tramite le apposite funzioni.
CTableColumnsClasse usato da CTable per passare e gestire informazioni riguardanti le colonne della tabella.
CTableDataClasse usato da CTable per passare e gestire informazioni riguardanti una singola cella, in modalità rendering.
CTableRowClasse usato da CTable per passare e gestire informazioni riguardanti una singola riga.
CTableRowsClasse usato da CTable per passare e gestire informazioni riguardanti le righe della tabella.
CCellEditorClasse base per gli oggetti editor.
CCellButtonEditorDerivata da CCellEditor, permette di eseguire funzioni esterne tramite intercettazione dell'evento Click (ad esempio aprire una Dialog). Si presenta come un pulsante
CCellCheckEditorClasse di editing per valori Boolean tramite CheckBox
CCellColorEditorClasse per la selezione di colori tramite ColorBox.
CCellComboEditorClasse per la selezione di valori all'interno di una ComboBox (non editabile).
CCellCurrencyEditorClasse per la gestione di valori in virgola mobile.
CCellDateEditorClasse per la gestione di valori di tipo Date (solo anno, mese e giorno).
CCellDateTimeEditorClasse per la gestione di valori di tipo Date/Time.
CCellIPAddressEditorClasse per la gestione di indirizzi IP.
CCellMaskEditorClasse per la gestione di valori di tipo String tramite MaskBox.
CCellNumberEditorClasse per la gestione di valori di tipo Float tramite TextBox.
CCellPercentEditorClasse per la gestione di valori di tipo percentuale (0/100%).
CCellPictureEditorDerivata da CCellEditor, permette di eseguire funzioni esterne tramite intercettazione dell'evento Click (ad esempio aprire una Dialog). Si presenta con una immagine.
CCellProgressEditorClasse per la gestione di valori Float (compresi tra 0 e 1).
CCellSelectEditorClasse per la gestione di valori di tipo String tramite ButtonBox.
CCellSpinEditorClasse per la gestione di valori di tipo Integer tramite SpinBox.
CCellTextEditorClasse per la gestione di valori di tipo String tramite TextBox.
CCellTimeEditorClasse per la gestione di valori di tipo Time.
CCellRendererClasse base per gli oggetti di rendering.
CCellButtonRendererVisualizza una String (es. quella editata con CCellButtonEditor).
CCellCheckRendererVisualizza un valore Boolean.
CCellColorRendererVisualizza un valore Color.
CCellComboRendererVisualizza un valore String.
CCellCurrencyRendererVisualizza un valore Float in formato valuta.
CCellDateRendererVisualizza un valore Date.
CCellDateTimeRendererVisualizza un valore Date/Time.
CCellImageRendererVisualizza un'immagine.
CCellIPAddressRendererVisualizza un indirizzo IP.
CCellMaskRendererVisualizza una String nel formato definito nella Mask.
CCellNumberRendererVisualizza un Float con il numero di decimali stabilito.
CCellPercentRendererVisualizza una percentuale.
CCellPictureRendererVisualizza un'immagine.
CCellProgressRendererVisualizza un valore Integer tramite una barra colorata (0/100%).
CCellSelectRendererVisualizza un valore String.
CCellSpinRendererVisualizza un valore Integer.
CCellTextRendererVisualizza un valore String.
CCellTimeRendererVisualizza un valore Time.
CSelectAggiunge alcune opzioni alla classe Select di Gambas, utili per CTable.
CSortCostanti statiche per il sorting dei dati in CTable.
CTableHorizontalMoveColumnControlsPannello orizzontale con pulsanti di movimento per le colonne in una CTable. Il collegamento alla CTable avviene tramite la proprietà Table. L'oggetto può essere inserito in qualsiasi punto di una Form.
CTableVerticalMoveColumnControlsPannello verticale con pulsanti di movimento per le colonne in una CTable. Il collegamento alla CTable avviene tramite la proprietà Table. L'oggetto può essere inserito in qualsiasi punto di una Form.
CTableHorizontalMoveRowControlsPannello orizzontale con pulsanti di movimento per le righe in una CTable. Il collegamento alla CTable avviene tramite la proprietà Table. L'oggetto può essere inserito in qualsiasi punto di una Form.
CTableVerticalMoveRowControlsPannello verticale con pulsanti di movimento per le righe in una CTable. Il collegamento alla CTable avviene tramite la proprietà Table. L'oggetto può essere inserito in qualsiasi punto di una Form.

NOTA: alcuni degli oggetti di rendering sono stati creati pensando all'assonanza con le relative classi di editing. In alcuni casi il legame è molto stretto, per cui si consiglia di utilizzare per lo stesso dato la coppia renderer/editor.

Le classi di rendering e di editing le ho create cercando di coniugare l'aspetto grafico (es. i controlli utilizzati di base), e l'effettiva utilità pratica all'interno della griglia. Al momento, ho praticamente usato tutti i controlli, ma questo non preclude la possibilità di implementarne di nuovi, o di specializzati derivandoli da quelli già esistenti. A voi lascio la fantasia di crearne di nuovi.
La logica che ho implementato credo sia abbastanza malleabile da permettere di aggiungere ulteriori caratteristiche, senza dover necessariamente andare a mettere le mani sulla classe CTable. Come ho accennato nel primo post, l'idea è derivata dall'ambiente java e dall'esperienza e lo studio delle librerie utilizzate da questo linguaggio, e cercando di trasferirne la tecnologia anche su Gambas.
E' ovvio che alcuni limiti ci sono, per cui al momento la grafica è quella che è...

Bye
« Ultima modifica: 26 Febbraio 2011, 17:16:43 da md9327 »

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Classe CTable
« Risposta #18 il: 01 Marzo 2011, 11:13:20 »
E che ne sò? ...  :D

Bè, ho voluto provare la G3, e l'ho fatto creando questa classe.

Adesso non sò se funzionerebbe sulla G2, cosa che puoi provare creandoti un progetto e mettendoci dentro i sorgenti (solo le classi e le form).

Stasera magari ci provo, e poi ti dico...

sono interessato anche io...stto ancora sviluppando sotto g2, anche xche' alcune cose di g3 non le sopporto proprio

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Classe CTable
« Risposta #19 il: 01 Marzo 2011, 12:56:34 »
Ciao Md9327!! sono contento di rileggerti  :2birre:
Ho dato un'occhiata veloce al tuo progetto, ho poco tempo in questo periodo...
Mi sembra che sia molto simile (correggimi se sbaglio) al progetto di milio, GridBox.
Hai mai provato questo componente? Dico questo perchè magari invece di 2 progetti simili si potrebbe fare un unico megaprogetto.
Questo è solo il mio pensiero, dimmi se sbaglio.

Intanto ti auguro di continuare serenamente con i tuoi progetti
Ciao  :2birre: :2birre:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Classe CTable
« Risposta #20 il: 01 Marzo 2011, 13:44:34 »
Ciao Golia,

bè, siamo nello stesso binario... ma morto... ehehehe

Scherzo, no, faccio ammenda ma non ho mai dato uno sguardo a GridBox, anche se ogni tanto ne leggevo i post.
In effetti, poi ci ho pensato ricordandomi di quel progetto, ma siccome dire che sono fuso e dire poco, ormai avevo messo in piedi la cosa e sono andato avanti.

Comunque, dietro cospargimento di cenere sul capo, provvederò quanto prima a scaricarmi GridView, così da vederne le funzionalità e dove sono arrivati.

Ma, a parte questo, la mia idea iniziale è stata quella di costruire una serie di librerie, in particolare legate al database. Nella fattispecie, e in un prox futuro, espanderò la CTable per gestire tabelle (e viste) su db. Infatti, ho già pronta una nuova libreria CDatabase che, seppur basandosi sulle classi Gambas, permette di gestire in maniera più autonoma l'interazione con i database.

Appena ho un attimo posto anche questa.

Dopodiche penserò ad espandere CTable, aggiungendo anche controlli grafici per il movimento, la paginazione, la gestione (inserimento, modifica e cancellazione), e via dicendo.

Avevo fatto stà cosa con java, e mò la riporterò anche su gambas, con l'aggiunta dell'esperienza fatta con pgDesigner... (quest'ultima dovrò prima o poi renderla ufficiale, perchè ormai è terminata...).

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Classe CTable
« Risposta #21 il: 01 Marzo 2011, 23:07:48 »
A nome di Tutti un grazie grande come un casale in Toscana ...è doveroso

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Classe CTable
« Risposta #22 il: 02 Marzo 2011, 21:48:54 »
Ho aggiunto un'altro controllo: CCellTextAreaEditor

Questo controllo, in edit, apre un piccolo pannello con una TextArea, che permette di inserire testi complessi, diversamente dalla TextBox. Date le caratteristiche di questo controllo, nel pannello sono presenti due pulsanti: save e cancel, rispettivamente salvano il testo modificato o annulla la modifica. Al termine l'editor viene chiuso.
Al momento le dimensioni del pannellino sono fisse, poi penserò ad aggiungere le proprietà adatte, anche se comunque è possibile sovrascrivere il metodo Show(), modificando opportunamente le dimensioni.
Ho anche fatto in modo che il pannellino rientri in qualche modo nell'area della CTable, se questo viene rilevato (es. l'editing sull'ultima colonna della CTable). Ovviamente è soggetto a correzione, nel caso l'area della CTable sia troppo piccola (sarebbe possibile, ovviamente). Ci penserò su...

Bye

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Classe CTable
« Risposta #23 il: 03 Marzo 2011, 19:41:59 »
a me da questo errore all' avvio :(



anke a me stesso errore, anche con l'ultima versione uplodata da md, pero', ricompilando g3, l'errore se ne e' andato:-)!!
« Ultima modifica: 03 Marzo 2011, 20:09:41 da andy60 »

Offline Taurus dei miracoli

  • Maestro Gambero
  • ****
  • Post: 334
  • In omnia pericula tasta testicula
    • Mostra profilo
Re: Classe CTable
« Risposta #24 il: 03 Marzo 2011, 20:22:13 »
Ho provato ad implementare il componente in un progetto ma non sono riuscito... :hatecomputer:
...come devo fare? :(
"penso spesso ad acquiloni,
a grandi imprese,
ad una thailandese...
...ma l'impresa eccezionale,
dammi retta,
è essere normale"
(L. Dalla)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Classe CTable
« Risposta #25 il: 04 Marzo 2011, 09:45:33 »
Al momento la libreria è utilizzabile includendola direttamente nel progetto.

L'unico oggetto grafico che è possibile aggiungere in una Form è la CTable, gli altri oggetti, seppur visibili nella toolbar di gambas, non sono gestiti all'interno dell'ide. La codifica deve essere effettuata a livello di codice, ed è per questo che all'interno ho lasciato degli esempi.

La cosa che potete provare, per prima cosa, è provare direttamente gli esempi allegati. Se funzionano, significa che la versione gambas3 è corretta, altrimenti è inutile utilizzarla (ricordo che gambas3 è ancora in fase di sviluppo...).

Comunque, gli aggiornamenti che compilo, mi danno anomalie diverse ogni volta, ma in particolare con l'ide. Una cosa fastidiosa che ho notato è che a volte non intercetta gli errori, fermandosi di blocco senza dire nulla. Solo inserendo una CATCH la cosa viene gestita (parlo sempre all'interno dell'ide).
Inoltre, spesso e volentieri l'ambiente ide và in crash e sparisce, come anche la funzione di autocompletamento.

Ovviamente queste anomalie sono comprensibili...

Fatemi sapere se almeno gli esempi funzionano.

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Classe CTable
« Risposta #26 il: 12 Marzo 2011, 08:28:14 »
@md***

Ciao Luigi mi chiedevo cosa pensi delle seguenti caratteristiche:

1. sort per colonna con un piccolo bottone sulla riga delle intestazioni. Sarebbe molto utile.
2. possibilità di cliccare con il tasto dx del mouse su una singola intestazione e di far scomparire/comparire una colonna

Sempre un caro saluto :2birre:


Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Classe CTable
« Risposta #27 il: 13 Marzo 2011, 15:02:17 »
Ciao Andy,

1. il sort è già presente, basta il doppio click sull'intestazione. Ovviamente è valido solo se i dati sono sortabili (una Picture ovviamente no)
2. la funzione può essere eseguita utilizzando l'evento ColumnClick, tramite la cui intercettazione puoi attivare l'hide della colonna.

Non ho implementato menu popup, appunto per lasciare libero arbitrio allo sviluppatore. I metodi ci sono, come anche le proprietà adatte. Implementare un qualcosa di troppo specializzato, credo sia un pò limitativo.

Nella prox, cercherò di implementare ulteriori controlli, legati a CTable che, come per i pulsanti di movimento (inclusi nella libreria), permettono di agire direttamente sui dati della griglia (es. insert, update, delete, ecc.). A seguire penso di aggiungere alcune funzioni che permettono di collegare un db alla CTable. La classe CDatabase l'ho preparata apposta per questo, anche se non è completamente terminata.

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Classe CTable
« Risposta #28 il: 13 Marzo 2011, 21:18:20 »
Ciao Andy,

1. il sort è già presente, basta il doppio click sull'intestazione. Ovviamente è valido solo se i dati sono sortabili (una Picture ovviamente no)
2. la funzione può essere eseguita utilizzando l'evento ColumnClick, tramite la cui intercettazione puoi attivare l'hide della colonna.

Non ho implementato menu popup, appunto per lasciare libero arbitrio allo sviluppatore. I metodi ci sono, come anche le proprietà adatte. Implementare un qualcosa di troppo specializzato, credo sia un pò limitativo.

Nella prox, cercherò di implementare ulteriori controlli, legati a CTable che, come per i pulsanti di movimento (inclusi nella libreria), permettono di agire direttamente sui dati della griglia (es. insert, update, delete, ecc.). A seguire penso di aggiungere alcune funzioni che permettono di collegare un db alla CTable. La classe CDatabase l'ho preparata apposta per questo, anche se non è completamente terminata.

cool

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Classe CTable
« Risposta #29 il: 14 Marzo 2011, 20:15:19 »
In questa versione ho aggiunto altri due controlli:

CTableHorizontalEditControls
CTableVerticalEditControls

che sono due panelli contenenti i pulsanti per le azioni di modifica della CTable: Add, Edit e Delete.
Come per quelli di movimento, li ho separati in due per posizionamento: orizzontale o verticale.
Diversamente però da quelli di movimento, è necessario intercettare gli eventi dei pulsanti (vedi esempio allegato), e agire in modo da aggiornare l'array dati (vedere sempre esempio per come fare).

Bye