Mouse-tracking (NSCell)

19:33 modifié dans API AppKit #1
Bonjour,

Je tente désespérément d'intercepter les events souris sur un NSPathCell... Voulant un peu faire évoluer son fonctionnement, j'ai overridé les méthodes suivantes comme l'indique la doc :

If you want to implement your own mouse-tracking or mouse-up behavior, consider overriding startTrackingAt:inView:, continueTracking:at:inView:, and stopTracking:at:inView:mouseIsUp:


<br />- (BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView<br />{<br />	NSLog(@&quot;Start&quot;);<br />	return [super startTrackingAt:startPoint inView:controlView];<br />}<br /><br />- (BOOL)continueTracking:(NSPoint)lastPoint at:(NSPoint)currentPoint inView:(NSView *)controlView<br />{<br />	NSLog(@&quot;Continue&quot;);<br />	<br />	return [super continueTracking:lastPoint at:currentPoint inView:controlView];<br />}<br /><br />- (void)stopTracking:(NSPoint)lastPoint at:(NSPoint)stopPoint inView:(NSView *)controlView mouseIsUp:(BOOL)flag<br />{<br />	NSLog(@&quot;Stop&quot;);<br />	[super stopTracking:lastPoint at:stopPoint inView:controlView mouseIsUp:flag];<br />}<br /><br />


Mais rien n'y fait !
En revanche, j'arrive à  récupérer l'event suivant :
<br />- (BOOL)trackMouse:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView untilMouseUp:(BOOL)untilMouseUp<br />


Mais ça ne me suffit pas à  savoir si la souris est relâchée, ou si elle sort de la zone, etc...

Réponses

  • MickMick Membre
    19:33 modifié #2
    Bonjour,

    Sur une custom view, j'ai utilisé la méthode
    trackRect=[self addTrackingRect:[self bounds] owner:self userData:NULL assumeInside:YES];
    
    , trackRect étant une variable d'instance.

    Une fois avoir dit que la vue accepte le firstResponder, et bien les méthodes mouseEntered: et mouseExited: sont appelées automatiquement. En les souclassant on a donc l'info.

    Peut-être que je réponds à  coté ?
  • 19:33 modifié #3
    Oui car tu avais fait une customView, c'est assez différent.
    Je parle de NSCell. Je customize en fait un NSPathControl. On va donc éviter de réinventer la roue (cà d sous-classer directement NSPathControl ou faire une vue carrément à  part). Je sous-classe pour l'instant NSPathCell et NSPathComponentCell.

    Pour l'instant je reste totalement dans le floue. Google ne m'a aidé que dans le cas où une personne avait overridé une cell contenue dans une outlineview. il fallait dans ce cas là  utiliser : - (BOOL)outlineView:(NSOutlineView *)outlineView shouldTrackCell:(NSCell *)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item
Connectez-vous ou Inscrivez-vous pour répondre.