Création UI

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Création UI

Frédéric FERRERE
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.
Reply | Threaded
Open this post in threaded view
|

Re: Création UI

laurent laffont
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.

Reply | Threaded
Open this post in threaded view
|

Re: Création UI

laurent laffont
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.



 

Reply | Threaded
Open this post in threaded view
|

Re: Création UI

Damien Cassou
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