172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/gtk/bookmarks/bookmark_bar_instructions_gtk.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/observer_list.h"
872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/gtk_chrome_link_button.h"
972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/gtk_chrome_shrinkable_hbox.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/gtk/gtk_theme_service.h"
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/gtk_util.h"
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_service.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h"
1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochBookmarkBarInstructionsGtk::BookmarkBarInstructionsGtk(Delegate* delegate,
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                       Profile* profile)
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    : delegate_(delegate),
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      profile_(profile),
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      theme_service_(GtkThemeService::GetFrom(profile_)) {
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  instructions_hbox_ = gtk_chrome_shrinkable_hbox_new(FALSE, FALSE, 0);
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gtk_widget_set_size_request(instructions_hbox_, 0, -1);
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  instructions_label_ = gtk_label_new(
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      l10n_util::GetStringUTF8(IDS_BOOKMARKS_NO_ITEMS).c_str());
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gtk_misc_set_alignment(GTK_MISC(instructions_label_), 0, 0.5);
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gtk_util::CenterWidgetInHBox(instructions_hbox_, instructions_label_,
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               false, 1);
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  g_signal_connect(instructions_label_, "map",
303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                   G_CALLBACK(gtk_util::InitLabelSizeRequestAndEllipsizeMode),
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                   NULL);
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  instructions_link_ = gtk_chrome_link_button_new(
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      l10n_util::GetStringUTF8(IDS_BOOKMARK_BAR_IMPORT_LINK).c_str());
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gtk_misc_set_alignment(
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GTK_MISC(GTK_CHROME_LINK_BUTTON(instructions_link_)->label), 0, 0.5);
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  g_signal_connect(instructions_link_, "clicked",
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                   G_CALLBACK(OnButtonClickThunk), this);
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gtk_util::SetButtonTriggersNavigation(instructions_link_);
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Until we switch to vector graphics, force the font size.
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // 13.4px == 10pt @ 96dpi
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gtk_util::ForceFontSizePixels(
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GTK_CHROME_LINK_BUTTON(instructions_link_)->label, 13.4);
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gtk_util::CenterWidgetInHBox(instructions_hbox_, instructions_link_,
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               false, 6);
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  g_signal_connect(GTK_CHROME_LINK_BUTTON(instructions_link_)->label, "map",
473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                   G_CALLBACK(gtk_util::InitLabelSizeRequestAndEllipsizeMode),
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                   NULL);
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED,
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 NotificationService::AllSources());
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  theme_service_->InitThemesFor(this);
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BookmarkBarInstructionsGtk::Observe(NotificationType type,
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         const NotificationSource& source,
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         const NotificationDetails& details) {
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (type == NotificationType::BROWSER_THEME_CHANGED)
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    UpdateColors();
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BookmarkBarInstructionsGtk::OnButtonClick(GtkWidget* button) {
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  delegate_->ShowImportDialog();
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BookmarkBarInstructionsGtk::UpdateColors() {
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gtk_chrome_link_button_set_use_gtk_theme(
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GTK_CHROME_LINK_BUTTON(instructions_link_),
69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      theme_service_->UseGtkTheme());
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  GdkColor bookmark_color = theme_service_->GetGdkColor(
72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      ThemeService::COLOR_BOOKMARK_TEXT);
73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (theme_service_->UseGtkTheme()) {
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_util::SetLabelColor(instructions_label_, NULL);
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_chrome_link_button_set_normal_color(
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        GTK_CHROME_LINK_BUTTON(instructions_link_), NULL);
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else {
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gtk_util::SetLabelColor(instructions_label_, &bookmark_color);
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // When using a non-standard, non-gtk theme, we make the link color match
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // the bookmark text color. Otherwise, standard link blue can look very
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // bad for some dark themes.
83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    if (theme_service_->GetColor(ThemeService::COLOR_BOOKMARK_TEXT) ==
84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        ThemeService::GetDefaultColor(
85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            ThemeService::COLOR_BOOKMARK_TEXT)) {
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      gtk_chrome_link_button_set_normal_color(
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          GTK_CHROME_LINK_BUTTON(instructions_link_), NULL);
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    } else {
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      gtk_chrome_link_button_set_normal_color(
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          GTK_CHROME_LINK_BUTTON(instructions_link_), &bookmark_color);
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
94