• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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