Autore Topic: Progetto pgDesigner 2/3  (Letto 86669 volte)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #195 il: 26 Settembre 2011, 14:03:56 »
No, le prove le ho fatte con progetti locali. Dato che erano solo degli studi, non ho ritenuto opportuno metterli su sf.

Magari stasera, faccio un paio di tar, e li metto in questa discussione...

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Progetto pgDesigner 2
« Risposta #196 il: 26 Settembre 2011, 16:46:04 »
Non entro spessissimo e rileggo il tuo post sulla nuova versione di pgdesigner, se ti serve aiuto (nei miei limiti) chiedimi...

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #197 il: 28 Settembre 2011, 10:12:15 »
In questi giorni, nel tempo libero disponibile, stò cercando di convertire pgDesigner su Gambas3.
Mi stà facendo abbastanza impazzire, in quanto le cose cambiate sono molte, e certe cose non esistono pure più, per cui mi devo inventare alternative valide.
Tutto questo per poter accedere alle migliori funzionalità della nuova versione che, come ho scritto nelle precedenti, mi sarebbero molto di aiuto.

Ti ringrazio per l'offerta ma, dato che nel repository sourceforge c'è già la versione 2 di pgDesigner, e non voglio sporcarla con le procedure di conversione finchè non vedo che và tutto, non ho modo di farti entrare per contribuire allo sviluppo.
Pensavo fosse qualcosa di più semplice e, nonostante sia stata migliorata la procedura di conversione dei progetti in Gambas3, il 90% tocca gestirlo a mano, tenendo presente che molti concetti sono cambiati, e quindi tocca rivedere alcune logiche.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #198 il: 28 Settembre 2011, 17:47:02 »
C...avolo (mi autocensuro...)!!!???!!!  :evil: >:( (e altri smile a scelta...)

Stò impazzendo, la conversione è a dir poco un "riscrivere" tutta l'applicazione. Le logiche sono cambiate completamente, l'interpretazione dei parametri è completamente diversa e segue una dinamica tutta particolare (stò parlando della versione da repository presa due giorni fà). Le variabili su oggetti si comportano in maniera anomala, diversa da come era intesa prima con la versione 2, insomma, faccio prima a rifare tutto pgDesigner2 (cosa per altro che stò già iniziando...).

Resoconto: mettere mano a quanto fatto finora credo sia ormai una cosa altamente negativa (non funge nulla...), per cui in questo momento ho deciso che la versione pgDesigner2 si fermerà all'ultima release di Gambas2, e di conseguenza parto a fare la pgDesigner3 su Gambas3.

Intendiamoci, a parte qualche logichetta che non capisco perchè è stata stravolta, tutto il pacchetto Gambas3 è notevolmente cambiato, e in meglio.
A questo punto, visto anche l'approssimarsi del rilascio definitivo, mi metterò a lavorare solo sulla 3.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #199 il: 21 Ottobre 2011, 20:19:18 »
Dopo aver tentato di intraprendere la strada della conversione pgDesigner2 (ancora in fase BETA) in Gambas3, e di aver fatto prove con le librerie OpenGL, alla fine sono giunto alla conclusione che forse è il caso di studiare la cosa partendo nuovamente da zero, o quasi.

Dopo aver costruito un ambiente di test, ho iniziato a costruire la versione pgDesigner3 che, oltre al numero ad indicare il passaggio a Gambas3, mi permette di riscrivere un codice più pulito e funzionalmente più fluido. Le nuove caratteristiche della nuova versione di Gambas3 (che spero esca a breve) alla fine mi permettono di scrivere un qualcosa di meglio. E' ovvio che gli errori fatti nel passato, le incomprensioni con alcuni aspetti del linguaggio, e l'esperienza acquisita mi saranno molto utili per questa nuova versione.

Per l'appunto, nelle fasi di test con l'ambiente di prova, ho appurato molti aspetti graditi, in particolare per l'aspetto grafico (vedi Paint).
A seguito di questo, ho potuto costruire una libreria di base che ho già agganciato alla struttura iniziale dell'applicazione, che è già in lavorazione e inizia pure a funzionare alla grande (il che non è poco...).

Ho prestato molta cura nella gestione degli oggetti, e in particolare nell'intercettazione degli eventi (nativi e costruiti), che mi permette di avere un maggiore controllo sullo stato applicativo. Questo e altro sono stati aspetti non molto approfonditi da me nel passato, e ad ogni modo non erano poi così ben impostati nelle versioni precedenti di Gambas. Adesso pare che la cosa funzioni a dovere, per cui lo studio ha avuto il successo sperato.

Al momento sono nella fase di creazione della base del progetto, ovvero l'applicazione, a cui ho già agganciato la parte grafica (la libreria di cui sopra...). La cosa stà già funzionando, ma occorrerà un pò di tempo e studio per implementarla in modo completo e pulito. La parte di gestione dei database non è ancora stata aggiunta, in quanto devo ricostruire una libreria più dinamica di quelle precedenti, tenendo presente che vorrei fare in modo che sia il più possibile scalabile verso più rdbms. Già con pgDesigner2 avevo aggiunto la possibilità di gestire i tre db più noti soto Linux, ovvero PostgreSQL, MySQL e SQLite, ma l'idea sarebbe quella di poter in futuro espandere questa possibilità, magari integrando motori tipo Oracle o ODBC.

Ad ogni modo, ho aggiunto queste note nel forum sperando che qualcuno possa aiutarmi in qualche modo, magari anche con suggerimenti vaqri. Già l'amico sotema ha avuto modo di aiutarmi nei test negli ultimi periodi, che mi ha permesso di migliorare alcune cose di pgDesigner2 ma, visto l'esito dei miei tentativi di porting, ho deciso di riscrivere tutto ex-novo, ovviamente servendomi della base di codice già fatta, e delle logiche.

Se qualcuno ha possibilità, i sorgenti sono disponibili su sorceforge, e può utilizzare il seguente comando per scaricarseli sul proprio computer:
Codice: [Seleziona]
svn checkout https://pgdesigner.svn.sourceforge.net/svnroot/pgdesigner/pgdesigner/branches/3.0-alpha pgDesigner3
Nel progetto è presente il modulo "PgDesigner.module", che deve essere impostato come classe di avvio. Nel caso interessi, nella cartella "Sorgenti/graphic/test" è presente la form "FMainGraphic" che mi è servita per testare la libreria grafica, e che ho lasciato nel repository come utilità, anche se non è collegata con l'applicazione vera e propria.

Nel caso a qualcuno interessi, è possibile anche scaricarsi il mio fallito tentativo di porting:
Codice: [Seleziona]
svn checkout https://pgdesigner.svn.sourceforge.net/svnroot/pgdesigner/pgdesigner/branches/2.0-G3 pgDesigner2-G3
anche se la cosa credo sia poco utile.

Inoltre, ricordo che è sempre presente anche la versione BETA di pgDesigner2:
Codice: [Seleziona]
svn checkout https://pgdesigner.svn.sourceforge.net/svnroot/pgdesigner/pgdesigner/branches/2.0
magari può servire per vedere i cambiamenti fatti rispetto a pgDesigner3.

Bye

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #200 il: 21 Ottobre 2011, 21:21:17 »
Detto, fatto.
Aspettavo questo evento. Ho scaricato ora la versione 3. Da domani ci guardo
Buon lavoro
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #201 il: 22 Ottobre 2011, 10:45:32 »
Meraviglioso!!!  :D

Come ho scritto nella precedente, per ora è in costruzione solo la parte interfaccia grafica, per cui nessuna funzionalità db...
Per quella ci devo studiare sopra, perchè come l'avevo impostata era di difficile manutenzione e implementazione.

Un paio di note per l'utilizzo:

1) creando un progetto, si apre una tab, in cui sulla destra è presente come nelle precedenti versioni un navigatore. Solo alcune funzione sono già attive, tra cui lo zoom e la creazione di alcuni oggetti. Ho abilitato il drag&drop, che è fattibile per tutti tranne che per le relazioni. Per creare una relazione basta cliccare sul relativo pulsante e poi premere il destro del mouse sul primo oggetto di tipo tabella presente nella canvas, dopodiche tenere premuto il destro fino alla seconda tabella. Se, per caso, gli oggetti puntati non corrispondono a tabelle avrai un messaggio di errore e l'esecuzione della relazione viene abortito.
2) il tab principale, ovvero quello dei progetti, ha un suo menu popup (tasto destro), come anche il tab relativo ai canvas. Ogni progetto ha un suo conteiner, come anche ogni canvas. A differenza delle precedenti versioni, ho adottato un sistema separato perchè più gestibile e perchè ogni classe fà per se, lasciando all'application di gestire i soli eventi comuni a tutti e quelli di gestione della main form.
3) Dipedentemente dal tipo di oggetto che viene creato, è possibile effettura anche ridimensionamenti direttamente sulla canvas. Se abilitato, il puntatore del mouse cambierà aspetto in corrispondenza dei bordi dell'oggetto. Dato che il bordo considera un solo pixel di margine, il puntamento potrebbe risultare un pò difficoltoso.
4) Le relazioni si possono effettuare in diverse modalità grafiche. Al momento ho abilitato la modalità multilinea verticale. Tieni conto che ho anche creato la possibilità di modificare graficamente (con il mouse) i segmenti della linea. Posizionando il mouse sopra le varie rotture, si visualizzerà un pallino. Cliccandoci sopra si potrà trascinare lo spigolo in modo da adattarlo ai propri desideri. E' ovvio che se viene spostato uno degli oggetti in relazione, la linea riprenderà la forma di default.

La velocità con cui Paint disegna è veramente notevole. E' quasi paragonabile a OpenGL (quasi...), e utilizza algoritmi di disegno lontani anni luce dal vecchio Draw. Questo almeno da quanto verificato finora. Devo però dire che Gambas3 occupa parecchia memoria in fase di esecuzione e ho notato che in ambiente IDE, a volte conviene chiudere tutto e riaprire l'ambiente perchè il sistema tende a rallentamenti che rendono Gambas3 praticamente inutilizzabile. Ho 8Gbyte di ram e un QuadCore, per cui la cosa un pò mi spaventa, ma spero che l'eseguibile finale non sia affetto da questo tipo di problemi.

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #202 il: 22 Ottobre 2011, 16:33:28 »
Ho fatto le prime prove e come è giusto aspettarsi in questo stadio ho riscontrato alcuni problemi.
1. in pgActionManager configuri le azioni di Menu e Pulsanti passando i parametri alla SUB _action(...); purtroppo in gambas3 il parametro
    text viene visualizzato nei pulsanti, cosa che non succedeva con gambas2. Credo tu debba utilizzare due metodi separati, uno per i Menu
    ed uno per i pulsanti. Questo vale sia per il toolbox che per i pulsanti di menu.
2. Creata la prima tabella non ho capito come popolarne i campi.
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #203 il: 22 Ottobre 2011, 18:39:40 »
Quello delle azioni è un problema che ho già visto, ma al momento ho tralasciato, quindi lo vediamo più tardi...

Riguardo le tabelle, come ti avevo accennato, ma forse non ero stato chiaro, non c'è ancora una gestione vera. In realtà ci sono già le funzioni per poter gestire i campi, ma non le ancora attivate.

Se provi a eseguire la form di test, sotto graphic, vedrai che ho creato un mucchio di funzioni ad-hoc, tra cui pure quelle per le tabelle. Inoltre ce ne sono molte altre per le linee, di relazione e non, con varie particolarità.
La finestra di test fà vedere parecchie delle caratteristiche della libreria, ma non tutte, solo quelle più evidenti. Se poi dai un'occhiata al codice dell'oggetto PgCanvas, potrai fartene un'idea. La cosa bella è che il tutto è espandibile, dato che ogni oggetto viene definito di aposite classi indipendenti dalla canvas. Alcune, come ad esempio le linee e le relazioni, derivano da oggetti comuni.

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #204 il: 23 Ottobre 2011, 17:23:22 »
OK,
mi aveva tratto in inganno il discorso circa le relazioni.
Ho dato un'occhiata al codice, constatando che utilizzi classi e metodi specializzati per le singole azioni. La struttura mi appare più lineare ed ordinata rispetto alla versione 2 e capisco cosa intendi quando parli di  espandibilità. La velocità con cui gli oggetti vengono disegnati è notevolmente superiore.

Gli oggetti vengono disegnati ogni volta con una dimensione diversa, mi chiedo se è voluto; magari mi guardo il codice...
Accade solo nella form di test.

Ho notato anche che fai ampio uso dei metodi speciali e mi è tornato alla memoria un messaggio di alcuni mesi orsono nella Mailing List.
Il messaggio riguardava l'utilizzo del metodo _unknown con le Proprietà. Per brevità ti cito solo la soluzione finale introdotta da Benoìt:
Citazione
Here is the solution I propose:

A new special method, named "_property" must be implemented if you want to
handle unknown properties.

This function takes no argument, and must return a boolean. The name of the
unknown symbol is stored in Param.Name, and the function must return if the
symbol is actually a property or not (i.e. a method).

If _property is not implemented, all unknown symbols are methods.
Confesso che i metodi speciali, e non solo quelli, sono un argomento parecchio oscuro per me, non so se tutto ciò potrebbe rappresentare un problema latente con il tuo codice
Codice: [Seleziona]
Public Sub _unknown(...) As Variant
  If (Param.Count = 0) Then
    Me.RaiseUnknownProperty(Param.Name)
  Else
    Me.RaiseUnknownMethod(Param.Name)
  Endif
  Return Null
End
se vuoi ti giro tutti i messaggi correlati.
A presto
« Ultima modifica: 23 Ottobre 2011, 18:51:15 da sotema »
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #205 il: 23 Ottobre 2011, 20:21:14 »
Riguardo alle dimensioni, la gestione è stata implementata volutamente nella form di test che, se vai a vedere il codice, utilizza un random per generare sia le dimensioni, che la posizione iniziale e il font. Mi è servito per verificare il comportamento delle funzioni di ridimensionamento e gestione degli oggetti grafici, in particolare le form, che devo contenere poi svariate righe (i campi).

Per quanto riguarda i metodi nascosti li ho utilizzati già dalle prime versioni di Gambas2. In verità ne ho utilizzati solo alcuni, in quanto mi riportavano alle logiche implementate in altri linguaggi, ovvero quelle riguardanti i metodi di costruzione e distruzione di un oggetto.
In gambas è stato implementato un sistema che permette di catturare eventuali chiamate errate, e qui torna utile il metodo _unknown. Tempo fà l'avevo studiato un pochino, ma con la versione Gambas3 ho voluto approfondire, e poi l'ho applicato. In realtà credo non sia ancora veramente completo, per cui, come hai ben notato, ho dovuto scrivere due righe di codice per capire se l'errore riguarda un metodo o una proprietà. Come si nota dal codice che hai postato, faccio una verifica se ci sono parametri, se questo è vero vuol dire che è una chiamata ad un metodo, altrimenti è una call ad una proprietà. E' possibile che vi siano alcune eccezioni a questo, ma la cosa a poca importante per ora, perchè mi serve solo per catturare l'anomalia e, eventualmente, loggarla da qualche parte.

La cosa, ovvero la cattura di chiamate errate, sarebbe utile solo in caso di costruzione dinamica di oggetti, ma dato che in Gambas3 hanno modificato qualcosa nelle fasi di compilazione, spesso e volentieri il compiler non si accorge di eventuali riferimenti errati, se questi si riferiscono a metodi contenuti in altre classi. Non sò se questo verrà risolto, ad ogni modo ho utilizzato questo metodo per scongiurare eventuali anomalie.

Se dai un'occhiata più a fondo nel codice, noterai pure altre implementazioni, che ho migliorato e specializzato rispetto a prima. Gambas non ha mai avuto una vera gestione degli errori, e il controllo viene fatto in modo nativo, non permettendo di trattare in maniera più dinamica la cosa, ad esempio catturando gli errori e loggarli da qualche parte. Dopo l'esperienza fatta in precedenza, ho voluto approfondire la cosa, cercando di integrare una logica che mi permettesse di gestire gli errori applicativi con specifiche classi, indi per cui loggarli su un file e/o messaggiarli a video. Credo di esserci riuscito in qualche modo, e pure in modo pulito. Riguardo poi al log, ne ho fatto una classe specializzata, e pure credo funzionale, e utilizzabile in qualsiasi altra applicazione.

Insomma, l'idea è quella di fare una cosa pulita e dinamica, anche a costo di metterci più tempo, e che possa essere presa e utilizzata per altri programmi, magari solo estrapolando determinate funzionalità (es. appunto il logging di cui sopra).

Ti ringrazio per i tuoi appunti, perchè mi servono per capire se stò andando per la giusta strada. Eventuali idee, o spunti, o pezzi di codice, che potrebbero venirti in mente, fammelo sapere! Oltre ovviamente a eventuali stupidaggini trovate nel programma...  ;D

NOTE: Ti faccio presente che aggiorno il repository quasi ogni giorno, perchè stò lavorando al progetto nei frammenti di spazio che ho a disposizione. Questo anche perchè ho agganciato il progetto direttamente al repository di sourceforge, anzichè collegarlo al mio server svn. In definitiva ho applicato in modo inverso la logica che ho utilizzato finora per i miei progetti. Questo mi permette di lavorarci sia a casa che sul lavoro quando ho un pochino di tempo.

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #206 il: 13 Novembre 2011, 16:09:00 »
Ciao md9327,
dopo parecchio tempo ho ripreso in mano il codice di pgDesigner3. La versione scaricata oggi è la 468.
L'esecuzione si blocca alla splash form, credo poichè in pgApplication alla linea 171 è scritto:
Codice: vb [Seleziona]
With splashDialog = New PgDialogSplash As "DialogSplash"

così facendo l'evento timer non si scatena mai. Dovresti gestire l'evento DialogSplash_Timer oppure, visto che la sola funzione dello splash screen è la segnalazione di avvio applicazione, eliminare il gestore eventi dalla linea 171

Sempre in pgApplication alla linea 111 crei il percorso per i dati temporanei; se il tuo intento è  quello di creare il direttorio "temp" all'interno di ".pgDesigner3" l'istruzione dovrebbe essere:
Codice: vb [Seleziona]
PgFile.CreatePath(File.Dir($configPath &/ "temp/"))

altrimenti la cartella non viene creata.

In pgFile modificherei la funzione CreatePath alla linea 17 in:
Codice: vb.net [Seleziona]
  Dim list As String[] = Split(path, "/", "", True)

in questo modo eviti di avere un valore nullo in list[0]

Ho notato che ogniqualvolta attivi un'azione dal menu o dalla MainBar al termine della esecuzione si scatena l'evento Unknown Method Action_Activate. E' probabile che ciò sia dovuto alla gestione  delle action di Gambas. Indagando sulla cosa ho scoperto però un problema nella gestione dei metodi _unknown() che utilizzi per registrare nel log l'evento; nelle sub  ***_UnknownMethodEvent({method} As String) utilizzi la seguente istruzione:
Codice: [Seleziona]
$logManager.Write(PgLogMessage.Error(Object.Type(Last), "Unknown Method <" & {method} & ">"))
ebbene il testo contenuto tra i simboli "<" e ">" viene interpretato come marcatori html quando carichi il file nella textedit1 della form PgDialogRichText, di conseguenza non viene visualizzato. Puoi verificarlo con un semplice "$ tail pgdesigner3.log"
Potersti sostituire la riga con:
Codice: [Seleziona]
$logManager.Write(PgLogMessage.Error(Object.Type(Last), "Unknown Method: <b>" & {method} & "</b>"))
oppure
Codice: [Seleziona]
$logManager.Write(PgLogMessage.Error(Object.Type(Last), "Unknown Method: <i>" & {method} & "</i>"))
così da evidenziare il metodo richiamato.
Lo stesso dicasi per le sub ***_UnknownPropertyEvent({property} As String)

Infine una curiosità, perchè non utilizzare una sub unica di gestione tipo:
Codice: [Seleziona]
Static Private Sub _unknownMethodEvent({method} as string)
$logManager.Write(PgLogMessage.Error(Object.Type(Last), "Unknown Method: <i>" & {method} & "</i>"))
End
richiamata dalle singole sub pubbliche?
« Ultima modifica: 19 Novembre 2011, 00:35:14 da sotema »
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #207 il: 19 Novembre 2011, 17:22:53 »
In attesa delle tue osservazioni sul mio post precedente, continuo con i test e l'analisi del codice. Proprio seguendo il flusso di esecuzione ho evidenziato un potenziale problemino.
In PgApplication._init() hai inserito la gestione degli errori per registrare l'evento nel log e terminare l'applicazione. In realtà a fronte di un errore in questa fase l'applicazione prosegue l'esecuzione del metodo Run chiamato da PgDesigner.Main() scatenando un errore di "Null Object alla riga 581 $timerLogging.Start() e si blocca senza terminare correttamente.

Potresti ovviare impostando una Variabile globale boolean (ad esempio $onError) da settare a true nella Catch, e utilizzarla nella Run all'interno di una struttura IF ... ENDIF
Codice: [Seleziona]
...
Static Private $onError As Boolean
...
...
Static Public Sub _init()
...

 Catch
 $onError = true
 ...

e quindi...
Codice: [Seleziona]
Static Public Sub Run()
  If (Not $onError) Then
    $logManager.Write(PgLogMessage.Info(Me, "Start Application"))
    $timerLogging.Start()
    If ($configManager.Get(PgConfigManager.CFG_AUTOSAVINGENABLE)) Then
      $timerSaving.Start()
    Endif
    If ($configManager.Get(PgConfigManager.CFG_ANIMATIONENABLE)) Then
      $timerAnimation.Start()
    Endif
    PgApplication.MainWindow.Show()
  Endif
End
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #208 il: 20 Novembre 2011, 12:06:30 »
Perdona il ritardo, ma in questo periodo ho un mucchio di problemi da risolvere...
Nei ritagli di tempo, cerco di mettere mano al codice, ma spesso non ho la testa per farlo e quindi abbandono dopo poco.
Comunque, ho letto i tuoi appunti e anche seguito i tuoi consigli, quindi ti rispondo per punti sui due ultimi messaggi, partendo dal più vecchio:

1) hai ragione sullo splash, e ho corretto il problema. In effetti volevo trasferire il controllo della dialog nell'application, ma poi ci ho ripensato, e ho lasciato la cosa a metà... Devo ancora trasferire le variazioni sul repository...
2) anche sulla directory temporanea c'era l'errore che ho corretto come da tuo suggerimento, e ora funziona.
3) ho modificato anche i messaggi di log, relativi a property e method, mettendo in bold il nome della variabile.
4) riguardo alla creazione dei messaggi (3), ho ritenuto inserirli nell'application, in quanto stò cercando di isolare il più possibile gli oggetti tra loro, e gestire il tutto nella classe Application. In realtà, questo sarà valido in base al layer su cui si trova l'oggetto. Per esempio, la parte grafica sarà gestita dal pannello del progetto, tramite gli eventi, e le funzioni del pannello saranno gestire dall'oggetto PgProject. E' ovvio che, il comportamento degli oggetti Project saranno invece gestiti globalmente da Application, e sempre tramite eventi.
5) in effetti, in caso di errore, la Main non si accorge del problema, e manda in esecuzione Run(). Come da tuo suggerimento ho provveduto ad inserire una variabile privata static in Application, che controlla eventuali crash nell'Init, bloccando le fasi operative dell'oggetto. Il metodo Close() intercetta questa variabile e, se false, esegue tutte le procedure di chiusura normali o, se false, evita di farle. Ovviamente blocca i timer. Nel metodo Run fà la stessa cosa.

Ti ringrazio per l'aiuto che, come vedi, mi è di essenziale.

Al momento stò lavorando sulla costruzione dei driver di database, e i relativi oggetti, senza ancora integrarli con la parte grafica. Stò cercando di evitare l'eccessiva inherenza delle classi che, come avrai notato nella versione 1 e 2, stava un pò andando fuori controllo. Purtroppo, ma anche per fortuna, i database si evolvono, e escono sempre release nuove. Il problema è stargli dietro, ma senza esagerare. I limiti di Gambas sull'integrazione delle classi, mi porta a fare cose un pò fuori regola, causando un problema nella gestibilità e manutenibilità degli oggetti.
Ad ogni modo, la versione 3 ha parecchie belle cosette, e con questo progetto stò cercando di capirle e integrarle. Vediamo se riesco completamente nell'intento.

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #209 il: 20 Novembre 2011, 15:32:14 »
Citazione
Perdona il ritardo
ma ti pare. Anche per me questo è un periodo critico, e poi mica hai una data di consegna per pgDesigner...
Sono contento di poterti aiutare.
Al momento sto studiando il codice e mi limito a testare le funzioni implementate alla ricerca di eventuali errori. La logica degli eventi che stai utilizzando mi risulta un poco difficile da seguire, con tutti quegli Osservatori che ci sono. A volte mi perdo.
Comunque ogni qualvolta riscontro un problema te lo segnalo, in modo che tu possa correggerlo al prossimo aggiornamento, o inserirlo in una lista todo.

Nella procedura PgApplication.OpenDialogConfig è presente un errore nelle istruzioni:
Codice: [Seleziona]
IF(dlg.ISModified ...) then
che trattano valori numerici, devi sostituire Int(...) con CInt(...).
Essendo parecchie le correzioni allego la sola procedura già modificata.

Sempre in OpenDialogConfig, alla linea 1625 salvi la configurazione della lingua, richiamando la procedura  PgLanguageManager.FindDescription(...) che non essendo Static genera errore. In effetti nessuna delle procedure in PgLanguage è definita Static.

Ho anche notato che alla creazione di un nuovo progetto questo non viene inserito nell'array $project di PgProjectManager, è una scelta voluta?

Per oggi basta.
 :coder:
« Ultima modifica: 20 Novembre 2011, 16:23:33 da sotema »
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein