Home | History | Annotate | Download | only in toolbar
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_UI_COCOA_TOOLBAR_RELOAD_BUTTON_H_
      6 #define CHROME_BROWSER_UI_COCOA_TOOLBAR_RELOAD_BUTTON_H_
      7 #pragma once
      8 
      9 #import <Cocoa/Cocoa.h>
     10 
     11 #import "base/memory/scoped_nsobject.h"
     12 #import "chrome/browser/ui/cocoa/toolbar/toolbar_button.h"
     13 
     14 // ToolbarButton subclass which defers certain state changes when the mouse
     15 // is hovering over it.
     16 
     17 @interface ReloadButton : ToolbarButton {
     18  @private
     19   // Tracks whether the mouse is hovering for purposes of not making
     20   // unexpected state changes.
     21   BOOL isMouseInside_;
     22   scoped_nsobject<NSTrackingArea> trackingArea_;
     23 
     24   // Timer used when setting reload mode while the mouse is hovered.
     25   scoped_nsobject<NSTimer> pendingReloadTimer_;
     26 }
     27 
     28 // Returns YES if the mouse is currently inside the bounds.
     29 - (BOOL)isMouseInside;
     30 
     31 // Update the tag, and the image and tooltip to match.  If |anInt|
     32 // matches the current tag, no action is taken.  |anInt| must be
     33 // either |IDC_STOP| or |IDC_RELOAD|.
     34 - (void)updateTag:(NSInteger)anInt;
     35 
     36 // Update the button to be a reload button or stop button depending on
     37 // |isLoading|.  If |force|, always sets the indicated mode.  If
     38 // |!force|, and the mouse is over the button, defer the transition
     39 // from stop button to reload button until the mouse has left the
     40 // button, or until |pendingReloadTimer_| fires.  This prevents an
     41 // inadvertent click _just_ as the state changes.
     42 - (void)setIsLoading:(BOOL)isLoading force:(BOOL)force;
     43 
     44 @end
     45 
     46 @interface ReloadButton (PrivateTestingMethods)
     47 + (void)setPendingReloadTimeout:(NSTimeInterval)seconds;
     48 - (NSTrackingArea*)trackingArea;
     49 @end
     50 
     51 #endif  // CHROME_BROWSER_UI_COCOA_TOOLBAR_RELOAD_BUTTON_H_
     52