OVH Cloud OVH Cloud

[RubyCocoa]NSButton enabled|disabled

2 réponses
Avatar
pere.noel
je fais des :

@nonVideButtonGauche.setEnabled true
et

@nonVideButtonGauche.setEnabled false

avec ou sans :

@nonVideButtonGauche.setNeedsDisplay true


que le bouton soit enablé ou non, ça tronche ne change pas ?

par ailleurs j'ai essayé de mettre tous mes boutons dans une Array :

@buttons = [@nonVideButtonGauche, @uniqueButtonGauche,
@fusionButtonGauche ... ]

si je fais une boucle each sur buttons, la class de chanque bouton et à
NilClasss.

par contre, chaque bouton pris individuellement, c'est ok j'ai bien un
NSButton ?

là aussi il faut en passer par un proxy ???
--
une bévue

2 réponses

Avatar
luc
Une bévue wrote:

[snip]
là aussi il faut en passer par un proxy ???


C'est vraiment très très vague tout ça (et pas en français en plus :>).

--
Luc Heinrich

Avatar
pere.noel
Luc Heinrich wrote:

C'est vraiment très très vague tout ça (et pas en français en plus :>).


j'ai trouvé un remède (grâce à la liste RubyCocoa Jonathan Paisley) en
RubyCocoa il faut faire :

@buttons.each { |b|
b.setEnabled(false)
b.oc_display
}

càd #oc_display au lieu de #display déjà utilisé par Ruby...

maintenant, la visualisation des boutons montre qu'ils ne sont pas|plus
"autorisés".


MAIS, à ma grande surprise, ils mémorisent quand même les clicks souris,
si bien que l'action correspondante est prise en compte après que
l'action en cours soit terminée...

je voudrais vraiment inhiber les boutons quand une action longue est en
cours.

j'ai essayé :

@mainWindow.discardEventsMatchingMask_beforeEvent(OSX::NSAnyEventMask,
OSX::NSKeyUpMask)

qui m'a donné une erreur :

[Session started at 2006-02-22 13:13:18 +0100.]
2006-02-22 13:13:24.417 BookmarksMerge[22686] *** -[NSDecimalNumber
_cgsEventTime]: selector not recognized [self = 0x4bb0af0]
/Library/Frameworks/RubyCocoa.framework/Versions/A/Resources/ruby/osx/ob
jc/oc_wrapper.rb:17:in `NSApplicationMain': NSApplicationMain -
NSInvalidArgumentException - *** -[NSDecimalNumber _cgsEventTime]:
selector not recognized [self = 0x4bb0af0] (OSX::OCException)
from
/Users/yvon/work/RubyCocoa/BookmarksMerge/build/Development/BookmarksMer
ge.app/Contents/Resources/rb_main.rb:46

BookmarksMerge has exited with status 1.

Jonathan Paisley dit que ça ne peut pas marcher...

mais je viens de me rendre compte qu'il y a une erreur d'argument (le
second) :
OSX::NSKeyUpMask est un mask donc un entier, la spec précise :

Removes all events matching mask and generated before lastEvent from the
event queue.
- (void)discardEventsMatchingMask:(unsigned int)mask
beforeEvent:(NSEvent *)lastEvent


donc comment choisir l'event correspondant à KeyUp ?

j'ai essayé OSX::NSEvent(mouseUp) pas bon...

comment en Obj-C on récupère mouseUp ?


tjs Jonathan Paisley m'a conseillé d'utiliser, plutôt :

Instead look at "- (NSEvent *)nextEventMatchingMask:(unsigned int)mask
untilDate:(NSDate *)expiration inMode:(NSString *)mode
dequeue:(BOOL)flag" and call it repeatedly with dequeue:YES and try
different values for untilDate: NSDate.date, NSDate.distantFuture or
NSData.distantPast. Stop calling it when it returns no events.


là c'est RTFM...

par contre kimura wataru me donne une autre idée :

def loadDroite(sender)
disableAllButtons ####### inhibe les boutons
Thread.new {
loadXmlDroite("firefox.xml", "Barre personnelle")
@xmlDroite="firefox.xml"
@labelDroite.setStringValue "Firefox"
enableAllButtons ####### dés-inhibe les boutons
}
end

mais me prévient que le Thread ruby peuvent crasher...

voila où j'en suis...
--
une bévue