Home | History | Annotate | Download | only in sync
      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 #include "chrome/browser/sync/sync_ui_util_mac.h"
      6 
      7 #import <Cocoa/Cocoa.h>
      8 
      9 #include "base/logging.h"
     10 #include "chrome/browser/profiles/profile.h"
     11 #include "chrome/browser/sync/sync_ui_util.h"
     12 #include "grit/generated_resources.h"
     13 #include "ui/base/l10n/l10n_util_mac.h"
     14 
     15 namespace sync_ui_util {
     16 
     17 void UpdateSyncItem(id syncItem, BOOL syncEnabled, Profile* profile) {
     18   ProfileSyncService* syncService =
     19     profile->GetOriginalProfile()->GetProfileSyncService();
     20   UpdateSyncItemForStatus(syncItem, syncEnabled,
     21                           sync_ui_util::GetStatus(syncService));
     22 }
     23 
     24 void UpdateSyncItemForStatus(id syncItem, BOOL syncEnabled,
     25                              sync_ui_util::MessageType status) {
     26   DCHECK([syncItem isKindOfClass:[NSMenuItem class]]);
     27   NSMenuItem* syncMenuItem = static_cast<NSMenuItem*>(syncItem);
     28   // Look for a separator immediately after the menu item.
     29   NSMenuItem* followingSeparator = nil;
     30   NSMenu* menu = [syncItem menu];
     31   if (menu) {
     32     NSInteger syncItemIndex = [menu indexOfItem:syncMenuItem];
     33     DCHECK_NE(syncItemIndex, -1);
     34     if ((syncItemIndex + 1) < [menu numberOfItems]) {
     35       NSMenuItem* menuItem = [menu itemAtIndex:(syncItemIndex + 1)];
     36       if ([menuItem isSeparatorItem]) {
     37         followingSeparator = menuItem;
     38       }
     39     }
     40   }
     41 
     42   // TODO(akalin): consolidate this code with the equivalent Windows code in
     43   // chrome/browser/ui/views/toolbar_view.cc.
     44   int titleId;
     45   switch (status) {
     46     case sync_ui_util::SYNCED:
     47       titleId = IDS_SYNC_MENU_SYNCED_LABEL;
     48       break;
     49     case sync_ui_util::SYNC_ERROR:
     50       titleId = IDS_SYNC_MENU_SYNC_ERROR_LABEL;
     51       break;
     52     case sync_ui_util::PRE_SYNCED:
     53       titleId = IDS_SYNC_START_SYNC_BUTTON_LABEL;
     54       break;
     55     default:
     56       NOTREACHED();
     57       // Needed to prevent release-mode warnings.
     58       titleId = IDS_SYNC_START_SYNC_BUTTON_LABEL;
     59       break;
     60   }
     61   NSString* title = l10n_util::GetNSStringWithFixup(titleId);
     62   [syncMenuItem setTitle:title];
     63 
     64   // If we don't have a sync service, hide any sync-related menu
     65   // items.  However, sync_menu_item is enabled/disabled outside of this
     66   // function so we don't touch it here, and separators are always disabled.
     67   [syncMenuItem setHidden:!syncEnabled];
     68   [followingSeparator setHidden:!syncEnabled];
     69 }
     70 
     71 }  // namespace sync_ui_util
     72