summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync/sync_ui_util_mac.mm
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/sync/sync_ui_util_mac.mm')
-rw-r--r--chrome/browser/sync/sync_ui_util_mac.mm75
1 files changed, 75 insertions, 0 deletions
diff --git a/chrome/browser/sync/sync_ui_util_mac.mm b/chrome/browser/sync/sync_ui_util_mac.mm
new file mode 100644
index 0000000..1e04b22
--- /dev/null
+++ b/chrome/browser/sync/sync_ui_util_mac.mm
@@ -0,0 +1,75 @@
+// Copyright (c) 2009 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 "app/l10n_util_mac.h"
+#include "base/logging.h"
+#include "chrome/browser/profile.h"
+#include "chrome/browser/sync/sync_ui_util.h"
+#include "grit/generated_resources.h"
+
+namespace sync_ui_util {
+
+void UpdateSyncItem(id syncItem, BOOL syncEnabled, Profile* profile) {
+ ProfileSyncService* syncService =
+ profile->GetOriginalProfile()->GetProfileSyncService();
+ // TODO(timsteele): Need a ui helper method to just get the type
+ // without needing labels.
+ string16 label, link;
+ sync_ui_util::MessageType status =
+ sync_ui_util::GetStatusLabels(syncService, &label, &link);
+ UpdateSyncItemForStatus(syncItem, syncEnabled, status);
+}
+
+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/views/toolbar_view.cc.
+ int titleId;
+ switch (status) {
+ case sync_ui_util::SYNCED:
+ titleId = IDS_SYNC_MENU_BOOKMARKS_SYNCED_LABEL;
+ break;
+ case sync_ui_util::SYNC_ERROR:
+ titleId = IDS_SYNC_MENU_BOOKMARK_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