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