Création UI

classic Classic list List threaded Threaded
4 messages Options
Frédéric FERRERE Frédéric FERRERE
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Création UI

Bonjour,

j'essai de créer un petit compteur dans une fenêtre StandardWindow,
j'ai 2 boutons + et - pour modifier la valeur du compteur.
Et je n'arrive pas à trouver comment mettre à jour l'affichage.

1) Comment puis-je raffraichir newTextEntryFor ?

2) L'utilisation de "newTextEntryFor" est elle juste ?
ou faut il utiliser un autre élément (newLabel par exemple) ?

Ci-dessous le code :

Object subclass: #TNumber
    instanceVariableNames: 'tnumber window tnumberRow'
    classVariableNames: ''
    poolDictionaries: ''
    category: NTest'


disableTnumber
    ^ false

initialize
   super initialize.

   tnumber := 12.
   self window addMorph: self tnumberRow frame: (0@0.1 corner: 1@0.9).
   self window openInWorld.
   self window  extent: 120@120

tnumber
    ^ tnumber.

tnumberDec
    tnumber := tnumber - 1.
   
tnumberInc
    tnumber := tnumber + 1.

tnumberRow
   ^ tnumberRow ifNil: [
          tnumberRow := self window newColumn: {
        self window newLabel: 'Compteur'.
        self window newRow: {           
            self window newButtonFor: self
                getState: nil
                action: #tnumberDec
                arguments: nil
                getEnabled: nil
                label: '-'
                help: nil.
            self window
                newTextEntryFor: self
                getText: #tnumber
                setText: nil
                getEnabled: #disableTnumber
                help: nil.
            self window
                newButtonFor: self
                getState: nil
                action: #tnumberInc
                arguments: nil
                getEnabled: nil
                label: '+'
                help: nil.
        }.}.
        tnumberRow.].

window
   ^ window ifNil: [
      window := StandardWindow labelled: 'TNumber'.
      window
   ]


Merci.

Cordialement.
laurent laffont laurent laffont
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Création UI

Salut,

2011/4/11 Frédéric FERRERE <[hidden email]>
Bonjour,

j'essai de créer un petit compteur dans une fenêtre StandardWindow,
j'ai 2 boutons + et - pour modifier la valeur du compteur.
Et je n'arrive pas à trouver comment mettre à jour l'affichage.

1) Comment puis-je raffraichir newTextEntryFor ?


tnumberDec
    tnumber := tnumber - 1.
    self changed: #tnumber.  "qui correspond au sélecteur passé dans newTextEntryFor."
    
tnumberInc
    tnumber := tnumber + 1.
    self changed: #tnumber.

 

2) L'utilisation de "newTextEntryFor" est elle juste ?
ou faut il utiliser un autre élément (newLabel par exemple) ?

Etant donné que le widget est juste un affichage, un label semble plus approprié.





Laurent Laffont - @lolgzs

Pharo Smalltalk Screencasts: http://www.pharocasts.com/
Blog: http://magaloma.blogspot.com/

 

Ci-dessous le code :

Object subclass: #TNumber
    instanceVariableNames: 'tnumber window tnumberRow'
    classVariableNames: ''
    poolDictionaries: ''
    category: NTest'


disableTnumber
    ^ false

initialize
   super initialize.

   tnumber := 12.
   self window addMorph: self tnumberRow frame: (0@0.1 corner: 1@0.9).
   self window openInWorld.
   self window  extent: 120@120

tnumber
    ^ tnumber.

tnumberDec
    tnumber := tnumber - 1.
   
tnumberInc
    tnumber := tnumber + 1.

tnumberRow
   ^ tnumberRow ifNil: [
          tnumberRow := self window newColumn: {
        self window newLabel: 'Compteur'.
        self window newRow: {           
            self window newButtonFor: self
                getState: nil
                action: #tnumberDec
                arguments: nil
                getEnabled: nil
                label: '-'
                help: nil.
            self window
                newTextEntryFor: self
                getText: #tnumber
                setText: nil
                getEnabled: #disableTnumber
                help: nil.
            self window
                newButtonFor: self
                getState: nil
                action: #tnumberInc
                arguments: nil
                getEnabled: nil
                label: '+'
                help: nil.
        }.}.
        tnumberRow.].

window
   ^ window ifNil: [
      window := StandardWindow labelled: 'TNumber'.
      window
   ]


Merci.

Cordialement.

laurent laffont laurent laffont
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Création UI

2011/4/12 Frédéric FERRERE <[hidden email]>


Le 12 avril 2011 07:54, laurent laffont <[hidden email]> a écrit :

Salut,

2011/4/11 Frédéric FERRERE <[hidden email]>
Bonjour,

j'essai de créer un petit compteur dans une fenêtre StandardWindow,
j'ai 2 boutons + et - pour modifier la valeur du compteur.
Et je n'arrive pas à trouver comment mettre à jour l'affichage.

1) Comment puis-je raffraichir newTextEntryFor ?


tnumberDec
    tnumber := tnumber - 1.
    self changed: #tnumber.  "qui correspond au sélecteur passé dans newTextEntryFor."
    
tnumberInc
    tnumber := tnumber + 1.
    self changed: #tnumber.



J'avais essayé avec ça :

self window changed: #tnumber. 


ça me paraissait plus logique d'envoyer le message de rafraichissement sur l'élément graphique window (StandardWindow).
Il y a des choses qui m'échappent :)

Non car ça utilise le dependency model / design pattern observer.

C'est à dire que le widget "s'abonne" au model lorsque

self window 
                newTextEntryFor: self  "<- le modèle  "
                getText: #tnumber
                setText: nil
                getEnabled: #disableTnumber
                help: nil.

et donc le changed: permet de notifier tous les abonnés.

Regarde Object>>changed:, Object>>addDependent: et MorphicModel>>model:

Laurent.

 
 

2) L'utilisation de "newTextEntryFor" est elle juste ?
ou faut il utiliser un autre élément (newLabel par exemple) ?

Etant donné que le widget est juste un affichage, un label semble plus approprié.





Oui, hier soir, avant d'envoyer le mail.
Très intéressant pour l'utilisation du debugger pour créer les méthodes manquantes.

Merci.

Cordialement.



 

Damien Cassou Damien Cassou
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Création UI

2011/4/12 laurent laffont <[hidden email]>:
>> J'avais essayé avec ça :
>>
>> self window changed: #tnumber.
>>
>> ça me paraissait plus logique d'envoyer le message de rafraichissement sur
>> l'élément graphique window (StandardWindow).
>> Il y a des choses qui m'échappent :)

En fait, #changed: permet simplement d'indiquer que les données (le
modèle) ont changées. Chaque vue se met alors à jour si besoin.
Regarde http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur

--
Damien Cassou
http://damiencassou.seasidehosting.st

"Lambdas are relegated to relative obscurity until Java makes them
popular by not having them." James Iry
Loading...