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

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #210 il: 21 Novembre 2011, 10:20:33 »
Stasera vedo gli errori nella dialog e la lingua.

Riguardo i progetti, al momento è in piedi un abbozzo che mi serve solo per testare la parte grafica. Infatti, non creo alcun progetto, nè oggetti database, oltre al fatto che ho anche disabilitato le relative voci nel menu e nella toolbar.

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #211 il: 26 Novembre 2011, 21:21:06 »
Rev 473
PgApplication.OpenDialogConfig()

la linea 1555 devi modificarla da:
Codice: [Seleziona]
$configManager.Set(PgConfigManager.CFG_LANGUAGE, PgLanguageManager.FindDescription(Str(dlg.GetValue(PgConfigManager.CFG_LANGUAGE))).Code)
in
Codice: [Seleziona]
$configManager.Set(PgConfigManager.CFG_LANGUAGE, $languageManager.FindDescription(Str(dlg.GetValue(PgConfigManager.CFG_LANGUAGE))).Code)
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 #212 il: 27 Novembre 2011, 11:23:58 »
Ok, fatto!!!
Era un refuso, in quanto avevo iniziato a pensare PgLangaugeManager come classe statica, poi ci ho ripensato.

Nell'ultima versione aggiornata ieri, noterai che ho riscritto la gestione dei log e degli errori. Ora PgLogManager e PgErrorManager sono statiche, a cui aggancio delle classi handler apposite.
Diciamo che stò prendendo spunto dalla logica delle classi Java, in particolare ho tradotto in parte il pacchetto Log4J, che è il più utilizzato con questo linguaggio, ed è abbastanza dinamico.

Per gli errori, la cosa che manca a mio avviso in Gambas, è la possibilità di derivare classi personalizzate dalla Error. Così com'è impostata, oltre che statica, è molto limitante.

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #213 il: 19 Gennaio 2012, 15:02:51 »
Ciao, ufficialmente finito il periodo di letargo, eccomi di nuovo a spulciare il codice di pgDesigner3 che ho notato hai sviluppato principalmente nelle funzioni dei driver.
Prima dell'inverno ci siamo lasciati con una nota sulla gestione della lingua e mi sembra più che giusto ripartire da lì.
Nella fase di inizializzazione della lingua in pgLanguageManager._new() popoli l'array $languages con le specifiche Nome, Codice e Descrizione. Ebbene il parametro Codice deve contenere anche il set ".utf8", altrimenti la traduzione non viene caricata. Stessa condizione sussiste in PgLanguageManager.Initialize() dove aggiungi a $languages le ulteriori traduzioni.

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 #214 il: 19 Gennaio 2012, 16:44:48 »
Se non vado errato (non ora il codice sottomano, vado a memoria), il secondo parametro lo estraggo dalla lingua di sistema.
Questo anche perchè non vorrei censire tutte le estensioni di lingua all'interno del programma.
Ad ogni modo, tieni conto che molte delle funzioni che sembrano già attive, in realtà saranno soggette in futuro ad un vaglio più accurato.

E' un piacere per me che tu ti sia svegliato dal letargo... era ora!!!  :evil:

Ehehhe, scherzo ovviamente.  :-*

Comunque, è vero che stò lavorando esclusivamente sui diver, il che è di per sè alquanto oneroso. Il fatto è che in questo periodo ho veramente pochissimo spazio libero, sia a causa del lavoro, ma in particolare perchè stò cambiando casa (vendat/acquisto/documenti/notai/etc.etc...). Quindi, la testa non è proprio libera da pensieri, e stò pensando di stoppare temporaneamente lo sviluppo, altrimenti mi ricoverano... A volte mi ci metto per svagarmi, ma poi non è quello che avviene...  :-\

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #215 il: 20 Gennaio 2012, 08:42:40 »
Ti capisco perfettamente, anch'io sono alla ricerca di una nuova casa e già il tempo dedicato alle visite è notevole; senza parlare delle proposte indecenti di certi pseudo immobiliaristi. In ogni caso, nel poco tempo libero che mi rimane proverò a scorrere il codice. Se trovo altre situazioni anomale te lo comunico.
in attesa di tempi migliori... :(
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 #216 il: 25 Gennaio 2012, 13:12:27 »
Citazione
stò pensando di stoppare temporaneamente lo sviluppo, altrimenti mi ricoverano
allo scopo di evitarti l'esaurimento, mantenendo però l'allenamento, ;D ti sottopongo due anomalie riscontrate nelle ultime prove.

- PgConfigItem.Encode()
  nelle righe di verifica dei valori numerici usi la funzione IsDigit(Value), questa potrebbe darti problemi se passi come
  parametro un numero negativo. Non sarebbe meglio usare IsNumber()?

- PgApplication.AddProject()
  la riga:

 
Codice: gambas [Seleziona]
With projectPanel = New PgProjectPanel($mainPanel.GetTab(index), w, h) As "ProjectPanel"


  dovrebbe essere, credo,
 
Codice: gambas [Seleziona]
With projectPanel = New PgProjectPanel($mainPanel.SetTabIndex(index), w, h) As "ProjectPanel"


  inoltre l'errore UnknowMethod generato poichè il metodo GetTab non esiste nella classe PgMainPanel
  non viene registrato nel log poichè nella sub PgLogFileWriter.Write() esegui il controllo:
 
 
Codice: gambas [Seleziona]
If (messageEvent.Level.IsGreater(Me.MaxLevel)) Then


  dove ME.MaxLevel="Info" mentre messageEvent.Level= "Error"

  non so se la cosa è intenzionale in questa fase.
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 #217 il: 11 Febbraio 2012, 12:17:34 »
Perdona il ritardo, ma come ti avevo accennato, in questo periodo sono alquanto preso da cose più importanti, per cui ho ancora meno tempo per dedicarmi al progetto.
Ad ogni modo, ti sono grato per le note e i suggerimenti, che vedrò di applicare quanto prima.
Ho messo appunto un remember sull'item di questa discussione, in modo da tenerlo sempre presente per la prox volta che mi metterò a fare modifiche.
Ogni tanto cerco di scrivere qualcosa, e lo puoi notare dagli aggiornamenti sul repository, ma è alquanto dura. Per farlo devo concentrarmi ovviamente sul problema, e se ho poco tempo, la cosa mi resta alquanto difficile, per cui spesso lascio perdere e rimando alla prox.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #218 il: 11 Febbraio 2012, 12:58:38 »
Citazione
stò pensando di stoppare temporaneamente lo sviluppo, altrimenti mi ricoverano
allo scopo di evitarti l'esaurimento, mantenendo però l'allenamento, ;D ti sottopongo due anomalie riscontrate nelle ultime prove.

- PgConfigItem.Encode()
  nelle righe di verifica dei valori numerici usi la funzione IsDigit(Value), questa potrebbe darti problemi se passi come
  parametro un numero negativo. Non sarebbe meglio usare IsNumber()?

- PgApplication.AddProject()
  la riga:

 
Codice: gambas [Seleziona]
With projectPanel = New PgProjectPanel($mainPanel.GetTab(index), w, h) As "ProjectPanel"


  dovrebbe essere, credo,
 
Codice: gambas [Seleziona]
With projectPanel = New PgProjectPanel($mainPanel.SetTabIndex(index), w, h) As "ProjectPanel"


  inoltre l'errore UnknowMethod generato poichè il metodo GetTab non esiste nella classe PgMainPanel
  non viene registrato nel log poichè nella sub PgLogFileWriter.Write() esegui il controllo:
 
 
Codice: gambas [Seleziona]
If (messageEvent.Level.IsGreater(Me.MaxLevel)) Then


  dove ME.MaxLevel="Info" mentre messageEvent.Level= "Error"

  non so se la cosa è intenzionale in questa fase.
Ho effettuato subito un controllo, e ho verificato che:

1) i controlli in Encode erano in effetti un pò vaghi e non proprio corretti. Le funzioni che mette a disposizione Gambas non sono tutte adatte, e alcune non sono neppure presenti, nonostante siano menzionate nella documentazione. Ad ogni modo ho riscritto il metodo, e mi sono basato sulla gestione degli errori, in modo da far lavorare Gambas al posto mio.
2) il metodo GetTab in effetti non esiste, anzi esisteva ma è stato sostituito dalla funzione GetTabPanel, più indicativa. Ho corretto il problema.
3) La gestione del log presentava un errore, che stavo appunto correggendo. Se vuoi un log più dettagliato, basta impostarlo nella finestra delle impostazioni, oppure modificare la voce DEBUG nel file di configurazione, inserendo la stringa "ALL" o "TRACE". I livelli ammessi sono:
OFF, FATAL, ERROR, WARNING, INFO, DEBUG, TRACE, ALL. Per default è impostato su INFO.

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #219 il: 14 Febbraio 2012, 18:41:04 »
Ciao md9327,
ho visto le modifiche e dato una occhiata alla gestione del log, bel lavoraccio...
Bisogna riconoscerti uno sforzo non indifferente nella scrittura di questa nuova versione di pgd.
A proposito di log ho notato che gli eventi relativi a:
-MainMenuBar
-MainPanel
-MainStatusBar
-MainWindow

vengono scatenati due volte, a causa delle dichiarazioni di osservatori alle righe da 265 a 268. Infatti nelle righe precedenti laddove istanzi gli oggetti associ già lo stesso osservatore. Puoi verificarlo nel file di log, dove trovi le voci ripetute degli eventi "Unknown method Action_Activate".

Codice: gambas [Seleziona]
 With $mainPanel = New PgMainPanel As "MainPanel"
...
...
hObs = New Observer($mainPanel) As "MainPanel"


Scusami se ti segnalo le anomalie che riscontro in modo un poco disordinato, ma approfitto del tempo libero e purtroppo questo è una risorsa in esaurimento... :'(
...
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 #220 il: 14 Febbraio 2012, 20:40:00 »
Stai scherzando?!?

Mi sei di immenso aiuto, dato il periodo e il lavoro da fare...

Comunque, quei messaggi li avevo notati anche io, ma non riesco a capire come vengono scatenati. Ho seguito il processo con il debug, ma non vedo il motivo di ciò... boh?

Sulla gestione dei log e degli errori ci stò studiando parecchio, anche a causa della poca libertà di movimento che mi lascia Gambas, specialmente per gli errori. La classe Error è statica e non può venir subclassata con classi più specializzate, a differenza di linguaggi più evoluti. Per intercettare gli errori devo usare forzatamente il TRY...CATCH, e usare una classe statica per salvare lo stato di Error. Devo utilizzare una classe statica in quanto deve essere già attiva all'avvio del programma, altrimenti non cattura i dati di Error, che verrebbero altrimenti resettati alla chiamata di un metodo.
Per il log credo di aver creato una libreria decente, e utilizzabile in modo generallizzato con altri programmi. L'idea è derivata da alcune classi componenti la libreria j4log di Java, da cui ho estratto un condensato ad-hoc per Gambas. Sicuramente potrebbe essere espansa, e infatti le classi che ho creato possono venir specializzate.

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #221 il: 14 Febbraio 2012, 20:47:49 »
Riguardo i messaggi di Unknown Method presumo siano scatenati da Gambas stesso, che associa il metodo Activate in modo automatico ad ogni Action. Mancando una routine Action_Activate in pgd viene scatenato l'evento Unknown.
Ad ogni modo ritengo sia un problema marginale.
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 #222 il: 15 Febbraio 2012, 10:13:06 »
E' quello che pensavo anche io.
Il problema è che non sò come lokkarlo temporaneamente (in fase di avvio), in alternativa mi vedo costretto a creare un metodo vuoto inutile...
La cosa anche strana è che viene segnalato due volte. Le action che creo sono svariate, per cui mi aspetterei due siatuazioni, ovvero un solo messaggio oppure uno per ogni action dichiarata...

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Progetto pgDesigner 2
« Risposta #223 il: 15 Febbraio 2012, 12:16:46 »
Citazione
La cosa anche strana è che viene segnalato due volte.
Questo è sicuramente dovuto al doppio osservatore; ho provato a commentarne uno e l'evento si scatena una sola volta.
A presto.
edit...
per maggiore chiarezza:
prova a commentare la linea 265 nella pgapplication.init(). (rev 494)

PS già che ci sei modifica il formato di Timestamp da "mm/dd/yyyy hh:mm:ss" in "mm/dd/yyyy hh:nn:ss"
in questo modo nella stringa otterrai i minuti invece del mese; le classi interessate sono:
- PgLogHtmlFormat riga 26
- PgLogTextFormat riga 28
« Ultima modifica: 15 Febbraio 2012, 13:09:07 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 #224 il: 15 Febbraio 2012, 15:21:18 »
Vedrò per gli eventi...

Riguardo al formato data, reminiscenze di altri linguaggi...  ;D

Correggo!

Grazie e continua così...  :ok: