// Copyright (c) 2011 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. #include "chrome/browser/sync/sync_ui_util_mac.h" #import <Cocoa/Cocoa.h> #include "base/logging.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sync/sync_ui_util.h" #include "grit/generated_resources.h" #include "ui/base/l10n/l10n_util_mac.h" namespace sync_ui_util { void UpdateSyncItem(id syncItem, BOOL syncEnabled, Profile* profile) { ProfileSyncService* syncService = profile->GetOriginalProfile()->GetProfileSyncService(); UpdateSyncItemForStatus(syncItem, syncEnabled, sync_ui_util::GetStatus(syncService)); } void UpdateSyncItemForStatus(id syncItem, BOOL syncEnabled, sync_ui_util::MessageType status) { DCHECK([syncItem isKindOfClass:[NSMenuItem class]]); NSMenuItem* syncMenuItem = static_cast<NSMenuItem*>(syncItem); // Look for a separator immediately after the menu item. NSMenuItem* followingSeparator = nil; NSMenu* menu = [syncItem menu]; if (menu) { NSInteger syncItemIndex = [menu indexOfItem:syncMenuItem]; DCHECK_NE(syncItemIndex, -1); if ((syncItemIndex + 1) < [menu numberOfItems]) { NSMenuItem* menuItem = [menu itemAtIndex:(syncItemIndex + 1)]; if ([menuItem isSeparatorItem]) { followingSeparator = menuItem; } } } // TODO(akalin): consolidate this code with the equivalent Windows code in // chrome/browser/ui/views/toolbar_view.cc. int titleId; switch (status) { case sync_ui_util::SYNCED: titleId = IDS_SYNC_MENU_SYNCED_LABEL; break; case sync_ui_util::SYNC_ERROR: titleId = IDS_SYNC_MENU_SYNC_ERROR_LABEL; break; case sync_ui_util::PRE_SYNCED: titleId = IDS_SYNC_START_SYNC_BUTTON_LABEL; break; default: NOTREACHED(); // Needed to prevent release-mode warnings. titleId = IDS_SYNC_START_SYNC_BUTTON_LABEL; break; } NSString* title = l10n_util::GetNSStringWithFixup(titleId); [syncMenuItem setTitle:title]; // If we don't have a sync service, hide any sync-related menu // items. However, sync_menu_item is enabled/disabled outside of this // function so we don't touch it here, and separators are always disabled. [syncMenuItem setHidden:!syncEnabled]; [followingSeparator setHidden:!syncEnabled]; } } // namespace sync_ui_util