Index: chrome/browser/ui/cocoa/toolbar/reload_button.mm |
diff --git a/chrome/browser/ui/cocoa/toolbar/reload_button.mm b/chrome/browser/ui/cocoa/toolbar/reload_button.mm |
deleted file mode 100644 |
index 0231579ce9f1b9105096e456ac332cda4d8f45aa..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/cocoa/toolbar/reload_button.mm |
+++ /dev/null |
@@ -1,265 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#import "chrome/browser/ui/cocoa/toolbar/reload_button.h" |
- |
-#include "chrome/app/chrome_command_ids.h" |
-#import "chrome/browser/ui/cocoa/accelerators_cocoa.h" |
-#import "chrome/browser/ui/cocoa/view_id_util.h" |
-#include "chrome/browser/command_updater.h" |
-#include "chrome/grit/generated_resources.h" |
-#include "grit/theme_resources.h" |
-#include "ui/base/accelerators/platform_accelerator_cocoa.h" |
-#include "ui/base/l10n/l10n_util.h" |
-#include "ui/base/l10n/l10n_util_mac.h" |
-#import "ui/events/event_utils.h" |
- |
-namespace { |
- |
-// Constant matches Windows. |
-NSTimeInterval kPendingReloadTimeout = 1.35; |
- |
-// Contents of the Reload drop-down menu. |
-const int kReloadMenuItems[] = { |
- IDS_RELOAD_MENU_NORMAL_RELOAD_ITEM, |
- IDS_RELOAD_MENU_HARD_RELOAD_ITEM, |
- IDS_RELOAD_MENU_EMPTY_AND_HARD_RELOAD_ITEM, |
-}; |
-// Note: must have the same size as |kReloadMenuItems|. |
-const int kReloadMenuCommands[] = { |
- IDC_RELOAD, |
- IDC_RELOAD_IGNORING_CACHE, |
- IDC_RELOAD_CLEARING_CACHE, |
-}; |
- |
-} // namespace |
- |
-@interface ReloadButton () |
-- (void)invalidatePendingReloadTimer; |
-- (void)forceReloadState:(NSTimer *)timer; |
-- (void)populateMenu; |
-@end |
- |
-@implementation ReloadButton |
- |
-+ (Class)cellClass { |
- return [ClickHoldButtonCell class]; |
-} |
- |
-- (id)initWithFrame:(NSRect)frameRect { |
- if ((self = [super initWithFrame:frameRect])) { |
- // Since this is not a custom view, -awakeFromNib won't be called twice. |
- [self awakeFromNib]; |
- } |
- return self; |
-} |
- |
-- (void)viewWillMoveToWindow:(NSWindow *)newWindow { |
- // If this view is moved to a new window, reset its state. |
- [self setIsLoading:NO force:YES]; |
- [super viewWillMoveToWindow:newWindow]; |
-} |
- |
-- (void)awakeFromNib { |
- // Don't allow multi-clicks, because the user probably wouldn't ever |
- // want to stop+reload or reload+stop. |
- [self setIgnoresMultiClick:YES]; |
- |
- [self setOpenMenuOnRightClick:YES]; |
- [self setOpenMenuOnClick:NO]; |
- |
- menu_.reset([[NSMenu alloc] initWithTitle:@""]); |
- [self populateMenu]; |
-} |
- |
-- (void)invalidatePendingReloadTimer { |
- [pendingReloadTimer_ invalidate]; |
- pendingReloadTimer_ = nil; |
-} |
- |
-- (void)updateTag:(NSInteger)anInt { |
- if ([self tag] == anInt) |
- return; |
- |
- // Forcibly remove any stale tooltip which is being displayed. |
- [self removeAllToolTips]; |
- id cell = [self cell]; |
- [self setTag:anInt]; |
- if (anInt == IDC_RELOAD) { |
- [cell setImageID:IDR_RELOAD |
- forButtonState:image_button_cell::kDefaultState]; |
- [cell setImageID:IDR_RELOAD_H |
- forButtonState:image_button_cell::kHoverState]; |
- [cell setImageID:IDR_RELOAD_P |
- forButtonState:image_button_cell::kPressedState]; |
- // The stop button has a disabled image but the reload button doesn't. To |
- // unset it we have to explicilty change the image ID to 0. |
- [cell setImageID:0 |
- forButtonState:image_button_cell::kDisabledState]; |
- [self setToolTip:l10n_util::GetNSStringWithFixup(IDS_TOOLTIP_RELOAD)]; |
- } else if (anInt == IDC_STOP) { |
- [cell setImageID:IDR_STOP |
- forButtonState:image_button_cell::kDefaultState]; |
- [cell setImageID:IDR_STOP_H |
- forButtonState:image_button_cell::kHoverState]; |
- [cell setImageID:IDR_STOP_P |
- forButtonState:image_button_cell::kPressedState]; |
- [cell setImageID:IDR_STOP_D |
- forButtonState:image_button_cell::kDisabledState]; |
- [self setToolTip:l10n_util::GetNSStringWithFixup(IDS_TOOLTIP_STOP)]; |
- } else { |
- NOTREACHED(); |
- } |
-} |
- |
-- (id)accessibilityAttributeValue:(NSString *)attribute { |
- if ([attribute isEqualToString:NSAccessibilityEnabledAttribute] && |
- pendingReloadTimer_) { |
- return [NSNumber numberWithBool:NO]; |
- } else { |
- return [super accessibilityAttributeValue:attribute]; |
- } |
-} |
- |
-- (void)setIsLoading:(BOOL)isLoading force:(BOOL)force { |
- // Can always transition to stop mode. Only transition to reload |
- // mode if forced or if the mouse isn't hovering. Otherwise, note |
- // that reload mode is desired and disable the button. |
- if (isLoading) { |
- [self invalidatePendingReloadTimer]; |
- [self updateTag:IDC_STOP]; |
- } else if (force) { |
- [self invalidatePendingReloadTimer]; |
- [self updateTag:IDC_RELOAD]; |
- } else if ([self tag] == IDC_STOP && |
- !pendingReloadTimer_ && |
- [[self cell] isMouseInside]) { |
- id cell = [self cell]; |
- [cell setImageID:IDR_STOP_D |
- forButtonState:image_button_cell::kDefaultState]; |
- [cell setImageID:IDR_STOP_D |
- forButtonState:image_button_cell::kDisabledState]; |
- [cell setImageID:IDR_STOP_D |
- forButtonState:image_button_cell::kHoverState]; |
- [cell setImageID:IDR_STOP_D |
- forButtonState:image_button_cell::kPressedState]; |
- pendingReloadTimer_ = |
- [NSTimer timerWithTimeInterval:kPendingReloadTimeout |
- target:self |
- selector:@selector(forceReloadState:) |
- userInfo:nil |
- repeats:NO]; |
- // Must add the timer to |NSRunLoopCommonModes| because |
- // it should run in |NSEventTrackingRunLoopMode| as well as |
- // |NSDefaultRunLoopMode|. |
- [[NSRunLoop currentRunLoop] addTimer:pendingReloadTimer_ |
- forMode:NSRunLoopCommonModes]; |
- } else { |
- [self invalidatePendingReloadTimer]; |
- [self updateTag:IDC_RELOAD]; |
- } |
- [self setEnabled:pendingReloadTimer_ == nil]; |
-} |
- |
-- (void)setMenuEnabled:(BOOL)enabled { |
- [self setAttachedMenu:(enabled ? menu_ : nil)]; |
-} |
- |
-- (void)setCommandUpdater:(CommandUpdater*)commandUpdater { |
- commandUpdater_ = commandUpdater; |
-} |
- |
-- (void)forceReloadState:(NSTimer *)timer { |
- DCHECK_EQ(timer, pendingReloadTimer_); |
- [self setIsLoading:NO force:YES]; |
- // Verify that |pendingReloadTimer_| is nil so it is not left dangling. |
- DCHECK(!pendingReloadTimer_); |
-} |
- |
-- (BOOL)sendAction:(SEL)theAction to:(id)theTarget { |
- if ([self tag] == IDC_STOP) { |
- if (pendingReloadTimer_) { |
- // If |pendingReloadTimer_| then the control is currently being |
- // drawn in a disabled state, so just return. The control is NOT actually |
- // disabled, otherwise mousetracking (courtesy of the NSButtonCell) |
- // would not work. |
- return YES; |
- } else { |
- // When the stop is processed, immediately change to reload mode, |
- // even though the IPC still has to bounce off the renderer and |
- // back before the regular |-setIsLoaded:force:| will be called. |
- // [This is how views and gtk do it.] |
- BOOL ret = [super sendAction:theAction to:theTarget]; |
- if (ret) |
- [self forceReloadState:pendingReloadTimer_]; |
- return ret; |
- } |
- } |
- |
- return [super sendAction:theAction to:theTarget]; |
-} |
- |
-- (ViewID)viewID { |
- return VIEW_ID_RELOAD_BUTTON; |
-} |
- |
-- (void)mouseInsideStateDidChange:(BOOL)isInside { |
- [pendingReloadTimer_ fire]; |
-} |
- |
-- (void)populateMenu { |
- [menu_ setAutoenablesItems:NO]; |
- // 0-th item must be blank. (This is because we use a pulldown list, for which |
- // Cocoa uses the 0-th item as "title" in the button.) |
- [menu_ addItemWithTitle:@"" |
- action:nil |
- keyEquivalent:@""]; |
- AcceleratorsCocoa* keymap = AcceleratorsCocoa::GetInstance(); |
- for (size_t i = 0; i < arraysize(kReloadMenuItems); ++i) { |
- NSString* title = l10n_util::GetNSStringWithFixup(kReloadMenuItems[i]); |
- base::scoped_nsobject<NSMenuItem> item( |
- [[NSMenuItem alloc] initWithTitle:title |
- action:@selector(executeMenuItem:) |
- keyEquivalent:@""]); |
- |
- const ui::Accelerator* accelerator = |
- keymap->GetAcceleratorForCommand(kReloadMenuCommands[i]); |
- if (accelerator) { |
- const ui::PlatformAcceleratorCocoa* platform = |
- static_cast<const ui::PlatformAcceleratorCocoa*>( |
- accelerator->platform_accelerator()); |
- if (platform) { |
- [item setKeyEquivalent:platform->characters()]; |
- [item setKeyEquivalentModifierMask:platform->modifier_mask()]; |
- } |
- } |
- |
- [item setTag:kReloadMenuCommands[i]]; |
- [item setTarget:self]; |
- [item setEnabled:YES]; |
- |
- [menu_ addItem:item]; |
- } |
-} |
- |
-// Action for menu items. |
-- (void)executeMenuItem:(id)sender { |
- if (!commandUpdater_) |
- return; |
- DCHECK([sender isKindOfClass:[NSMenuItem class]]); |
- int command = [sender tag]; |
- int event_flags = ui::EventFlagsFromNative([NSApp currentEvent]); |
- commandUpdater_->ExecuteCommandWithDisposition( |
- command, ui::DispositionFromEventFlags(event_flags)); |
-} |
- |
-@end // ReloadButton |
- |
-@implementation ReloadButton (Testing) |
- |
-+ (void)setPendingReloadTimeout:(NSTimeInterval)seconds { |
- kPendingReloadTimeout = seconds; |
-} |
- |
-@end |