Autore Topic: Modifica set di icone da applicazione  (Letto 1279 volte)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Modifica set di icone da applicazione
« il: 31 Agosto 2010, 12:42:07 »
Ci stò pensando, ma nonostante i miei tentativi, mi scontro con alcuni problemi, legati ad alcune ristrizioni di Gambas2 (almeno io le considero tali).

Vediamo se qualcuno esce fuori con una bella idea...  :-[

Il problema, come da oggetto, è il seguente:

1) ho la mia bella applicazione, composta da classi e form grafiche;
2) nel codice delle classi non grafiche, gestisco tranquillamente le immagini e le icone dell'applicazione
3) nelle form (dialogo e non) sono impostate a livello di IDE le immagini visualizzate che, ovviamente puntano ad una dir del progetto stesso.

il punto è questo: come cambiare il blocco di icone gestire da tutti gli oggetti del programma, sulla base di una scelta dell'utente, memorizzata da qualche parte?

Riguardo alla gestione dell'impostazione in sè stessa, ovviamente, non è il problema. Il problema reale è che l'intero progetto, ivi comprese le sottocartelle, viene inglobato tutto all'interno dell'eseguibile. Questo ovviamente permette di leggere il contenuto della struttura memorizzata, ma non di scriverci sopra (è un file compilato!).

Ammesso che ioimposti una serie di sottocartelle, ognuna contenente un diverso set di icone, come dire a gambas di usare l'una piuttosto che l'altra?
La cosa, ovviamente, sarebbe piuttosto semplice farla per il puro codice, ma per le form come la mettiamo, visto che puntano a path ben precise?

Ho provato anche a studiare l'oggetto Stock che dovrebbe compire un qualcosa utile allo scopo, ma invece non lo è. Inoltre ho proovato ad impostare nelle form, delle icone che puntassero a directory, magari create all'avvio dell'applicazione e popolate in base alla configurazione definita, ma l'IDE non permette di selezionare immagini al di fuori dell'ambito del progetto, ovvero la sua cartella e relative sottocartelle.

Ho anche provato a capire come funziona la selezione delle icone dagli Stock messi a disposizione da Gambas, ma ho visto che la cosa mi porta molto fuori strada.

Insomma, inizialmente avevo pensato fosse una cosa semplice, ma in effetti alcune restrizioni complicano la cosa. Ovviamente il tutto sarebbe più semplice, se le form non esisterebbero, oppure fossero create run-time, ma questa è un'ipotesi da scartare dato l'elevato numero i form.

Detto questo, e buttato nel forum questo bel dilemma, spero che qualcuno tiri fuori un'idea per risolvere.
Ovviamente, se il quesito non è chiaro, sono qui pronto per le spiegazioni.

Bye

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Modifica set di icone da applicazione
« Risposta #1 il: 31 Agosto 2010, 13:12:02 »
io per ogni form caricho all' avvio dello stesso tutte le icone tramite una istruzione tipo
Codice: gambas [Seleziona]
button1.picture=picture.load("img/" & nomeset & "/imgbutton1.png"


naturalmente la variabile nomeset sarà quella che permetterà di cambiare i set di icone  e verrà salvata tramite il solito settings.

io ho sempre utilizzato questo metodo nei programmi in cui si potevano scegliere più set grafici, sicuramente non è molto veloce e forse neppure il siostema migliore

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Modifica set di icone da applicazione
« Risposta #2 il: 31 Agosto 2010, 13:56:48 »
Ciao "f"!

Bè, come ho scritto, questo è la cosa che di norma si fà, ma a livello di codice.
Il problema è che se hai un certo numero di form, con un certo numero di controlli, cambiarli tutti diventa un bel lavoro.
Quello che mi piacerebbe fare, è di switchare il set di icone con una sola istruzione, più o meno come si fà per la lingua di sistema, i font, ecc.

Purtroppo, più ci penso, meno soluzioni intravedo, anche provando sul campo...

Unica idea che mi è venuta, è quella di usare la temp, per memorizzarci sopra tutte le icone. In fase di sviluppo, ovviamente, dovrei popolare la stessa cartella, in modo che dall'ide vedo le icone. La cosa sarebbe fattibile, se non fosse che non è possibile selezionare oggetti al di fuori del progetto.

...mannaggia...

Se non trovo il sistema, mi toccherà usare il codice, e inserire un mucchio di istruzioni, che poi sarebbe doppie rispetto a quello che già fà gambas quando associ le picture agli oggetti dall'ide.

...brutto, proprio brutto...  :'(

 :D :D :D

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Modifica set di icone da applicazione
« Risposta #3 il: 31 Agosto 2010, 14:43:24 »
La soluzione secondo me è scrivere in un modulo una funzione per ogni set di icone esistente. In questo modo in un file di setting ti salvi giusto il nome del set ed in base a quello impostato dall'utente e lo carichi da lì.

La cosa non è difficile...anzi....

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Modifica set di icone da applicazione
« Risposta #4 il: 01 Settembre 2010, 12:02:39 »
A "cesko", ma allora non mi capisci quando scrivo!  :evil: >:(

Il problema non è sicuramente il salvataggio delle impostazioni e la posizione dei vari set. In realtà le form mantengono scritto a fuoco, inciso nel marmo, la Picture che hai impostato quando disegni la form. Questa impostazione viene scritta nel file .form, che viene poi compilato nell'eseguibile finale. Questo file, anche se possibile modificarlo con un semplice editor, in realtà nessuno lo tocca, e NON bisogna toccarlo, a meno di non farlo con gambas2 chiuso, questo perchè comunque gambas se lo mantiene in cache, e quindi te lo ritrovi riaggiornato al successivo avvio.

Comunque, e ovviamente scherzavo quanto ho messo quegli smile rabbiosi, per metterla sul particolare, l'unico modo per gestire lo switching, è quello di gestirlo completamente da codice (ovvero quello che tu scrivi a livello di comandi). E questo vuol dire che: i menu li scrivi a codice, le toolbar pure, le icone delle form le imposti in creazione, i dialog idem con patate, insomma, per dirla tutta, e dare la soluzione, il tutto si fà costruendo una funzione di utility, a cui passi il nome dell'icona che ti interessa, e questa funzione determina dove la deve prendere, in base alla configurazione dell'applicazione (dicasi "theme"), quindi ritorna la picture bella e pronta. Nelle form, o dove tu vuoi, basta inserire le giuste chiamate alla funzione, e impostare tutti gli oggetti che necessitano di un'icona, e qui termina il discorso.

Il bello della cosa, è che l'oggetto Application, almeno quello contenuto nella gb.kde, ha una proprietà "theme" di tipo String, che non si capisce è cosa in effetti fà, se veramente viene utilizzata, quali sono le interazioni con altri oggetti. La documentazione a riguardo, come al solito, pecca alla grande, e le mie prove non hanno portato alcunchè.

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Modifica set di icone da applicazione
« Risposta #5 il: 01 Settembre 2010, 13:33:35 »
Io farebbi così. Variabile globale = parte del path delle sottocartelle e uso di suddetta variabile
in tutti i picture.load. Cambi la variabile globale et voilà. Piccolo banale esempio allegato.
« Ultima modifica: 01 Settembre 2010, 13:37:30 da giulio »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Modifica set di icone da applicazione
« Risposta #6 il: 01 Settembre 2010, 14:15:19 »
Come ho risposto prima, il problema non è l'indirizzamento da codice, bensì lo schema delle form, che viene decodificato in fase di compilazione. Se tu inserisci un'icona, agendo sulla toolbar di Gambas, nella proprietà Icon (o Picture, o qualsiasi similare), questa viene memorizzata nella struttura della form (nel file .form, e non nel codice).

Comunque, ti ringrazio per il suggerimento, ma ti faccio un paio di precisazioni, che ti potrebbero essere utili per una migliore programmazione:

1) evitare il più possibile variabili globali. Primo perchè occupano staticamente memoria, secondo perchè escono fuori dal concetto di programmazione ad oggetti. Sò bene, e l'ho notato più volte nelle varie discussioni, che per risolvere un problema di logica, non avendo sufficienti conoscenze di un linguaggio, in questo caso Gambas, si ricorre all'uso di variabili globali.
2) usare anche la classe Application. Questa classe, anche per chi costruisce programmi impostando una form come form principale, viene sempre e comunque creata, ed è l'oggetto che fà funzionare il tutto. Se un programma fà uso di dati di configurazione, di norma è l'Application che li gestisce, o che comunque fà da riferimento per tutto il resto del programma. Dai programmi che ho letto, ho notato che questo viene evitato come la peste, ma l'uso diretto faciliterebbe tutta la codifica del programma. In effetti la classe Application è un oggetto statico, e dovrebbe essere il più possibile l'unica variabile pubblica e statica, su cui tutto fà e deve fare riferimento.

I mie sono ovviamente dei suggerimenti per una migliore programmazione, che non dipendono dal singolo linguaggio. E' ovvio che poi ognuno fà quello che deve in base alle sue conoscenze ed esperienze. I particolari, come nel caso di questo thread, sono poi ricerche di soluzioni ottimali, e ricerche di trucchi insiti nel particolare linguaggio, in questo caso il nostro Gambas.

Diciamo che questo thread l'ho aperto anche un pò per capire e confrontarci nel modus operandi di ciascuno, per poter condividere e migliorare la propria conoscenza. Spero che nessuno se ne abbia a male... :-\

Per finire, e come ho scritto nella precedente, credo che adotterò proprio la mia idea, anche perchè l'unica possibile (ho già valutato un mucchio di possibilità, senza ovviamente smontare Gambas... ;D )

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Modifica set di icone da applicazione
« Risposta #7 il: 01 Settembre 2010, 22:47:55 »
Io ti consiglio di aprire l'IDE da...... dentro l'IDE di Gambas...  :o
Io ci ho dato un'occhiata, perché se ben ti ricordi fra le preferenze si possono scegliere le icone Qt o GTK, e c'è una sorpresa.... La path delle icone dei pulsanti dell'IDE è icon:/qualcosa/qualcosa.... "Icon:", non "/home/pinco" o "/opt/...".
Quindi il modo ci dev'essere.

Non fornisco per ora info maggiori perché sto studiando la cosa anch'io.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Modifica set di icone da applicazione
« Risposta #8 il: 01 Settembre 2010, 23:05:26 »
Riguardando un po' ho notato che la cosa viene risolta utilizzando Settings per salvare il tema di icone da caricare e poi semplicemente chiedendo all'utente di riavviare Gambas (cosa che non mi ricordavo).
Quindi nessun cambio in tempo reale, indi per cui o:
1) costruisci i form in real-time;  :hard:
2) ricarichi tutte le icone  :rolleyes:
Visita il mio sito personale: http://www.leonardomiliani.com

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Modifica set di icone da applicazione
« Risposta #9 il: 02 Settembre 2010, 10:46:25 »
Esatto leo!

Infatti avevo fatto pure quei tentativi, ma li avevo abbandonati perchè troppo laboriosi e potevano creare problemi di compatibilità, dopotutto il codice è open, e spiegare che tocca pure smanettare sui sorgenti di gambas mi è sembrato fuori luogo.

Bè, come ho detto prima, l'unica è scrivere codice...
In effetti lo stesso problema esiste anche, ad esempio, in Java, che crea un pacchetto che è in definitiva l'applicativo in uno zippone, e nello zippone non posso scriverci sopra.

Nell'applicazione avevo già inserito un mucchio di mie funzioni, allo scopo di ovviare a problemi simili. Vuol dire che aggiungerò anche queste altre...  :-\

Sai, un'altra cosa che mancherebbe a gambas: la possibilità di definire la stessa funzione con diversi cast, con in C++/Java. Ad esempio, la possibilità di aggiungere un metodo Function(qualcosa AS String), ma anche un Function(qualcosa AS Integer). In Gambas può essere gestito con le Variant, ma poi all'interno del codice tocca analizzare il tipo reale della variabile.
Questo piccolo problemino crea delle grosse limitazioni nella creazione degli oggetti, e in pgDesigner mi tocca fare salti pindarici per risolvere in qualche modo.

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Modifica set di icone da applicazione
« Risposta #10 il: 02 Settembre 2010, 19:10:31 »
Sai, un'altra cosa che mancherebbe a gambas: la possibilità di definire la stessa funzione con diversi cast, con in C++/Java. Ad esempio, la possibilità di aggiungere un metodo Function(qualcosa AS String), ma anche un Function(qualcosa AS Integer). In Gambas può essere gestito con le Variant, ma poi all'interno del codice tocca analizzare il tipo reale della variabile.
Questo piccolo problemino crea delle grosse limitazioni nella creazione degli oggetti, e in pgDesigner mi tocca fare salti pindarici per risolvere in qualche modo.

E' vero...proponete a Benoit per Gambas 3.....

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Modifica set di icone da applicazione
« Risposta #11 il: 06 Settembre 2010, 20:41:28 »
Ritorno a cecio, visto che ho rimescolato l'applicazione pgDesigner2...

Ho inserito le modifiche così come le avevo pensate, e devo dire che funzionano alla grande...
E' stato un lavoraccio, ma ne è valsa la pena, specialmente per togliere i vari riferimenti nelle form. COmunque, in un'oretta tutto è compiuto...  ;D

Ora l'impostazione è demandata all'utente, ma ho fatto in modo che, comunque e male che vada, il set di icone venga comunque preso.
Se qualcuno desidera saperne di più, non esiti a chiedere, cercherò di dare maggiori delucidazioni a riguardo.

Il nostro tangoku stà lavorando su un nuovo set, e devo dire che il pupo stà venendo su bene. Dategli uno sgurdo, e fateci sapere le vostre impressioni. Devo avvertire che, comunque, il lavoro fatto è ancora in fase embrionale, nel senso che non è completo, e dobbiamo ancora decidere se e come dare un pò di colore, comunque mi sembra che l'amico tangoku stia facendo un'ottimo lavoro.

Bye