It is currently 8 June 2025, 20:25 Advanced search

Nuovo tema partendo da Zen

Questo forum è nato con lo scopo di raccogliere le proposte di modifica di Instant Developer e discuterne insieme.

Nuovo tema partendo da Zen

Postby morris » 8 March 2016, 10:50

Come da manuale, ho creato un nuovo tema partendo da un altro esistente e personalizzando. Ho scelto Zen perché è oggettivamente quello con più appeal. Ma il mio tema non funziona. Non può funzionare perché il framework js RD3 è pieno di istruzioni del tipo "se tema='ZEN' allora aggiusta il pixel così e così...", controllo che ovviamente fallisce con il mio nuovo tema lasciandomi di fatto le griglie disallineate e altri piccoli difetti grafici.
Ho risolto facendo un tarocco vergognoso su una classe js con un wrapper alla proprietà "tema", ma è una robaccia non distribuibile. Ci sono diverse soluzioni adottabili come factory in questo senso. Una semplice potrebbe essere lavorare sul file Desktop.htm inserendo una nuova variabile var RD3_ThemeClass = "ZEN" simile alla RD3_Mobile, andando poi a testare questa variabile nel framework per operare gli aggiustamenti del caso in quelle istruzioni "if". Ma se ne avete una migliore ben venga.
Il problema si presenta, in minor misura, anche con Seattle (nel codice del framework ho trovato solo una occorrenza di confronto).
Grazie mille!
morris
 
Posts: 131
Joined: 26 January 2016, 8:27

Re: Nuovo tema partendo da Zen

Postby gibbs » 8 March 2016, 11:28

Sarebbe ottimo.
User avatar
gibbs
 
Posts: 363
Joined: 2 February 2016, 10:52

Re: Nuovo tema partendo da Zen

Postby lucabaldini » 8 March 2016, 11:43

Io avrei provato così:
- avrei creato un file chiamato custom3.js
Lì dentro avrei scritto il codice seguente:

Code: Select all
ServerParams.prototype.LoadFromXml = function(node)
{
  // Semplicemente setto le proprieta' a partire dal nodo
  this.LoadProperties(node);
  //
  if (this.Theme === "[tuotema]")
    this.Theme = "zen";
}

per ridefinire la funzione LoadFromXml della classe ServerParams che contiene, appunto, tutti i parametri di compilazione.

In questo modo, quando il server comunica i dati del tema puoi indicare al motore grafico client che il tema in uso "estende" zen.

Purtroppo non c'è modo di sapere, lato client, se il tema che stai usando (a cui puoi dare un tuo nome qualunque) sia di "tipo" zen o meno... e il framework lo deve sapere proprio per adattare l'interfaccia grafica a dovere.

Probabilmente ci sono altri modi per farlo come quello che proponi tu... anche se la tua soluzione mi piace un po' meno perché preferirei usare il parametro server Theme piuttosto che una variabile "esterna" dentro al desktop.
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: Nuovo tema partendo da Zen

Postby morris » 8 March 2016, 13:35

Il wrapper alla proprietà "tema" che ho costruito è una cosa molto simile a quello che hai proposto tu, Luca.
Ho preso e modificato direttamente il ServerParams.js mettendolo nella cartella custom. Lo svantaggio è che col mio metodo un'eventuale aggiornamento di ServerParams.js da parte vostra vedrebbe l'override completo con una vecchia versione da parte mia. La tua proposta è sicuramente più pulita, ma tu conosci il framework meglio di me e quindi sai che il tema viene assegnato centralmente dalla LoadFromXml, mentre io ho visto spulciando nei sorgenti diverse assegnazioni della proprietà Theme fatte direttamente.
La soluzione che ho proposto io del desktop l'ho ipotizzata solo perché lì avete già messo la caratteristica "mobile o no". Era per uniformare.
Riporto comunque il codice che ho modificato.

Code: Select all
this._internalTheme = ""              // Tema grafico dell'applicazione
  //this.Theme = "";                        // Tema grafico dell'applicazione

// create property with accessor method
  Object.defineProperty(this, "Theme", {
    get: function () {
      if (_internalTheme == "[miotema]")
         return "zen";
      else
         return _internalTheme;
    },
   set: function(value) {
      _internalTheme = value;
   }
morris
 
Posts: 131
Joined: 26 January 2016, 8:27

Re: Nuovo tema partendo da Zen

Postby lucabaldini » 11 March 2016, 7:36

Beh, anche la tua modifica non è niente male... :-)))

Io, però, proverei a fare una personalizzazione senza che questa richieda di ridefinire l'intero file ServerParams.js.
Non cambia spesso... ma qualche volta può capitare... Proverei con questo frammento dentro al custom3.js:

Code: Select all
  Object.defineProperty(ServerParams.prototype, {
    Theme: {
      get: function () {
        if (this._internalTheme == "[miotema]")
          return "zen";
        else
          return this._internalTheme;
      },
      set: function(value) {
        this._internalTheme = value;
      }
    }
  }


Forse, mettendo questo codice dentro al file custom3.js potrebbe funzionare.
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: Nuovo tema partendo da Zen

Postby gibbs » 15 March 2016, 9:46

ciao
ho provato questo hack nella versione postata da luca non funziona perchè ServerParams non ha la proprietà _internalTheme, unendo le soluzioni sopra ecco come farlo nel custom3.js:


Code: Select all
/* Server Params override */
Object.defineProperty(ServerParams.prototype, '_internalTheme', {
  get: function() { return getValue; },
  set: function(setValue) { getValue = setValue; }
});
Object.defineProperty(ServerParams.prototype, 'Theme', {
   get: function () {
      if (ServerParams._internalTheme === "[miotema]")
         return "zen";
      else
         return ServerParams._internalTheme;
   },
   set: function(value) {
      ServerParams._internalTheme = value;
   }
});


ciao
User avatar
gibbs
 
Posts: 363
Joined: 2 February 2016, 10:52

Re: Nuovo tema partendo da Zen

Postby lucabaldini » 15 March 2016, 18:02

Ora l'ho provato... e funziona.
Io ho scritto questo:

Code: Select all
  Object.defineProperty(ServerParams.prototype, "Theme", {
    get: function () {
      if (this._internalTheme == "[miotema]")
        return "zen";
      else
        return this._internalTheme;
    },
    set: function(value) {
      this._internalTheme = value;
    }
  });


In pratica la proprietà _internalTheme è sì undefined ma alla prima assegnazione viene valorizzata con il setter (la prima inizializzazione, tra l'altro, la trovi alla prima riga di ServerParams nel costruttore... quindi scatta subito prima dell'avvio dell'app)
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Re: Nuovo tema partendo da Zen

Postby gibbs » 16 March 2016, 7:45

Image
User avatar
gibbs
 
Posts: 363
Joined: 2 February 2016, 10:52

Re: Nuovo tema partendo da Zen

Postby morris » 16 March 2016, 7:58

Vi ringrazio. Evidentemente, se questa è la soluzione, allora mi tocca ritirare il mio "Ho risolto facendo un tarocco vergognoso su una classe js con un wrapper alla proprietà tema, ma è una robaccia non distribuibile", classificandolo come una normale customizzazione. Buono a sapersi.
morris
 
Posts: 131
Joined: 26 January 2016, 8:27

Re: Nuovo tema partendo da Zen

Postby lucabaldini » 16 March 2016, 8:11

Beh, la domanda io l'ho letta così: "come faccio OGGI, ADESSO, IN QUESTO MOMENTO, a risolvere questo problema?" E, senza il mio intervento, la vedo come una buona soluzione ad un problema da te evidenziato. Ora, io posso anche pensare meglio alla cosa e studiare un sistema che permetta di indicare al motore grafico che il tuo tema è derivato da ZEN però questa è una soluzione (chiamalo workaround, patch, fix, come preferisci) immediata.

Tra l'altro, facendo un nuovo tema derivato da ZEN dovrai SICURAMENTE personalizzare almeno un file (css? icone?) quindi non lo vedo come un grosso problema dover inserire 11 righe in un file chiamato custom3.js... O forse non ho capito il tuo ultimo messaggio...
User avatar
lucabaldini
Pro Gamma
Pro Gamma
 
Posts: 4990
Joined: 1 October 2010, 17:03
Location: Bologna

Next

Return to Proposte di modifica

Who is online

Users browsing this forum: No registered users and 17 guests