Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1301)

Unified Diff: chrome/browser/ui/panels/panel_browser_frame_view.cc

Issue 6975062: Update Panel UI looks on Windows. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/panels/panel_browser_frame_view.h ('k') | chrome/browser/ui/panels/panel_browser_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/panels/panel_browser_frame_view.cc
===================================================================
--- chrome/browser/ui/panels/panel_browser_frame_view.cc (revision 87324)
+++ chrome/browser/ui/panels/panel_browser_frame_view.cc (working copy)
@@ -4,11 +4,14 @@
#include "chrome/browser/ui/panels/panel_browser_frame_view.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/themes/theme_service.h"
-#include "chrome/browser/ui/panels/about_panel_bubble.h"
#include "chrome/browser/ui/panels/panel.h"
#include "chrome/browser/ui/panels/panel_browser_view.h"
#include "chrome/browser/ui/panels/panel_manager.h"
+#include "chrome/common/extensions/extension.h"
+#include "chrome/common/url_constants.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "grit/app_resources.h"
#include "grit/generated_resources.h"
@@ -20,7 +23,9 @@
#include "ui/base/resource/resource_bundle.h"
#include "ui/gfx/canvas_skia.h"
#include "views/controls/button/image_button.h"
+#include "views/controls/button/menu_button.h"
#include "views/controls/label.h"
+#include "views/controls/menu/menu_2.h"
#include "views/painter.h"
#include "views/screen.h"
#include "views/window/window.h"
@@ -88,7 +93,7 @@
}
};
-ButtonResources info_button_resources;
+ButtonResources settings_button_resources;
ButtonResources close_button_resources;
EdgeResources frame_edges;
EdgeResources client_edges;
@@ -96,8 +101,7 @@
gfx::Font* inactive_font = NULL;
void LoadImageResources() {
- // TODO(jianli): Use the right icon for the info button.
- info_button_resources.SetResources(
+ settings_button_resources.SetResources(
IDR_BALLOON_WRENCH, 0, IDR_BALLOON_WRENCH_H, IDR_BALLOON_WRENCH_P);
close_button_resources.SetResources(
@@ -191,26 +195,25 @@
frame_(frame),
browser_view_(browser_view),
paint_state_(NOT_PAINTED),
- info_button_(NULL),
+ settings_button_(NULL),
close_button_(NULL),
title_icon_(NULL),
title_label_(NULL) {
EnsureResourcesInitialized();
frame_->set_frame_type(views::Window::FRAME_TYPE_FORCE_CUSTOM);
- info_button_ = new views::ImageButton(this);
- info_button_->SetImage(views::CustomButton::BS_NORMAL,
- info_button_resources.normal_image);
- info_button_->SetImage(views::CustomButton::BS_HOT,
- info_button_resources.hover_image);
- info_button_->SetImage(views::CustomButton::BS_PUSHED,
- info_button_resources.pushed_image);
- info_button_->SetTooltipText(
- UTF16ToWide(l10n_util::GetStringUTF16(IDS_ACCNAME_ABOUT_PANEL)));
- info_button_->SetAccessibleName(
- l10n_util::GetStringUTF16(IDS_ACCNAME_ABOUT_PANEL));
- info_button_->SetVisible(false);
- AddChildView(info_button_);
+ settings_button_ = new views::MenuButton(NULL, std::wstring(), this, false);
+ settings_button_->SetIcon(*(settings_button_resources.normal_image));
+ settings_button_->SetHoverIcon(*(settings_button_resources.hover_image));
+ settings_button_->SetPushedIcon(*(settings_button_resources.pushed_image));
+ settings_button_->set_alignment(views::TextButton::ALIGN_CENTER);
+ settings_button_->set_border(NULL);
+ settings_button_->SetTooltipText(
+ UTF16ToWide(l10n_util::GetStringUTF16(IDS_NEW_TAB_APP_SETTINGS)));
+ settings_button_->SetAccessibleName(
+ l10n_util::GetStringUTF16(IDS_NEW_TAB_APP_SETTINGS));
+ settings_button_->SetVisible(false);
+ AddChildView(settings_button_);
close_button_ = new views::ImageButton(this);
close_button_->SetImage(views::CustomButton::BS_NORMAL,
@@ -324,14 +327,6 @@
}
void PanelBrowserFrameView::Layout() {
- // Now that we know we have a parent, we can safely set our theme colors.
- SkColor title_color =
- GetThemeProvider()->GetColor(ThemeService::COLOR_TAB_TEXT);
- title_label_->SetColor(title_color);
- close_button_->SetBackground(title_color,
- close_button_resources.normal_image,
- close_button_resources.mask_image);
-
// Layout the close button.
gfx::Size close_button_size = close_button_->GetPreferredSize();
close_button_->SetBounds(
@@ -341,13 +336,13 @@
close_button_size.width(),
close_button_size.height());
- // Layout the info button.
- gfx::Size info_button_size = info_button_->GetPreferredSize();
- info_button_->SetBounds(
- close_button_->x() - kButtonSpacing - info_button_size.width(),
- (NonClientTopBorderHeight() - info_button_size.height()) / 2,
- info_button_size.width(),
- info_button_size.height());
+ // Layout the settings button.
+ gfx::Size settings_button_size = settings_button_->GetPreferredSize();
+ settings_button_->SetBounds(
+ close_button_->x() - kButtonSpacing - settings_button_size.width(),
+ (NonClientTopBorderHeight() - settings_button_size.height()) / 2,
+ settings_button_size.width(),
+ settings_button_size.height());
// Layout the icon.
int icon_y = (NonClientTopBorderHeight() - kIconSize) / 2;
@@ -363,7 +358,7 @@
title_label_->SetBounds(
title_x,
icon_y + ((kIconSize - title_height - 1) / 2),
- std::max(0, info_button_->x() - kButtonSpacing - title_x),
+ std::max(0, settings_button_->x() - kButtonSpacing - title_x),
title_height);
// Calculate the client area bounds.
@@ -408,18 +403,88 @@
const views::Event& event) {
if (sender == close_button_)
frame_->Close();
- else if (sender == info_button_) {
- gfx::Point origin(info_button_->bounds().origin());
- views::View::ConvertPointToScreen(this, &origin);
- AboutPanelBubble::Show(
- GetWidget(),
- gfx::Rect(origin, info_button_->bounds().size()),
- BubbleBorder::BOTTOM_RIGHT,
- GetFaviconForTabIconView(),
- browser_view_->browser());
+}
+
+void PanelBrowserFrameView::RunMenu(View* source, const gfx::Point& pt) {
+ EnsureCreateSettingsMenu();
jennb 2011/06/01 23:45:53 usual wording is EnsureSettingsMenuCreated()
+ settings_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
+}
+
+bool PanelBrowserFrameView::IsCommandIdChecked(int command_id) const {
+ // Nothing in the menu is checked.
+ return false;
+}
+
+bool PanelBrowserFrameView::IsCommandIdEnabled(int command_id) const {
+ const Extension* extension = GetExtension();
+ if (!extension)
+ return false;
+
+ switch (command_id) {
+ case COMMAND_NAME:
+ // The NAME links to the Homepage URL. If the extension doesn't have a
+ // homepage, we just disable this menu item.
+ return extension->GetHomepageURL().is_valid();
+ case COMMAND_CONFIGURE:
+ return extension->options_url().spec().length() > 0;
+ case COMMAND_DISABLE:
+ case COMMAND_UNINSTALL:
+ // Some extension types can not be disabled or uninstalled.
+ return Extension::UserMayDisable(extension->location());
+ case COMMAND_MANAGE:
+ return true;
+ default:
+ NOTREACHED();
+ return false;
}
}
+bool PanelBrowserFrameView::GetAcceleratorForCommandId(
+ int command_id, ui::Accelerator* accelerator) {
+ return false;
+}
+
+void PanelBrowserFrameView::ExecuteCommand(int command_id) {
+ const Extension* extension = GetExtension();
+ if (!extension)
+ return;
+
+ Browser* browser = browser_view_->browser();
+ switch (command_id) {
+ case COMMAND_NAME:
+ browser->OpenURL(extension->GetHomepageURL(),
+ GURL(),
+ NEW_FOREGROUND_TAB,
+ PageTransition::LINK);
+ break;
+ case COMMAND_CONFIGURE:
+ DCHECK(!extension->options_url().is_empty());
+ browser->GetProfile()->GetExtensionProcessManager()->OpenOptionsPage(
+ extension, browser);
+ break;
+ case COMMAND_DISABLE:
+ browser->GetProfile()->GetExtensionService()->DisableExtension(
+ extension->id());
+ break;
+ case COMMAND_UNINSTALL:
+ // TODO(jianli): Need to handle the case that the extension API requests
+ // the panel to be closed when the uninstall dialog is still showing.
+ extension_uninstall_dialog_.reset(new ExtensionUninstallDialog(
+ browser->GetProfile()));
+ extension_uninstall_dialog_->ConfirmUninstall(this, extension);
+ break;
+ case COMMAND_MANAGE:
+ browser->OpenURL(GURL(chrome::kChromeUIExtensionsURL),
+ GURL(),
+ SINGLETON_TAB,
+ PageTransition::LINK);
+ break;
+ default:
+ NOTREACHED();
+ break;
+ }
+}
+
bool PanelBrowserFrameView::ShouldTabIconViewAnimate() const {
// This function is queried during the creation of the window as the
// TabIconView we host is initialized, so we need to NULL check the selected
@@ -432,6 +497,17 @@
return frame_->window_delegate()->GetWindowIcon();
}
+void PanelBrowserFrameView::ExtensionDialogAccepted() {
+ const Extension* extension = GetExtension();
+ if (extension) {
+ browser_view_->browser()->GetProfile()->GetExtensionService()->
+ UninstallExtension(extension->id(), false, NULL);
+ }
+}
+
+void PanelBrowserFrameView::ExtensionDialogCanceled() {
+}
+
int PanelBrowserFrameView::NonClientBorderThickness() const {
return kFrameBorderThickness + kClientEdgeThickness;
}
@@ -447,13 +523,23 @@
return;
paint_state_ = paint_state;
- // For now, the only indication is whether the font is bold or not.
+ SkColor title_color = GetThemeProvider()->
+ GetColor(paint_state == PAINT_AS_ACTIVE ?
+ ThemeService::COLOR_TAB_TEXT :
+ ThemeService::COLOR_BACKGROUND_TAB_TEXT);
+ title_label_->SetColor(title_color);
title_label_->SetFont(
paint_state == PAINT_AS_ACTIVE ? *active_font : *inactive_font);
+
+ close_button_->SetBackground(title_color,
+ close_button_resources.normal_image,
+ close_button_resources.mask_image);
}
void PanelBrowserFrameView::PaintFrameBorder(gfx::Canvas* canvas) {
- SkBitmap* theme_frame = GetThemeProvider()->GetBitmapNamed(IDR_THEME_TOOLBAR);
+ SkBitmap* theme_frame = GetThemeProvider()->GetBitmapNamed(
+ (paint_state_ == PAINT_AS_ACTIVE) ? IDR_THEME_TOOLBAR
+ : IDR_THEME_TAB_BACKGROUND);
// Draw the theme frame.
canvas->TileImageInt(*theme_frame, 0, 0, width(), height());
@@ -545,16 +631,50 @@
}
void PanelBrowserFrameView::OnActivationChanged(bool active) {
- UpdateInfoButtonVisibility(active, mouse_watcher_->IsCursorInViewBounds());
+ UpdateSettingsButtonVisibility(active,
+ mouse_watcher_->IsCursorInViewBounds());
SchedulePaint();
}
void PanelBrowserFrameView::OnMouseEnterOrLeaveWindow(bool mouse_entered) {
- UpdateInfoButtonVisibility(browser_view_->panel()->IsActive(),
- mouse_entered);
+ // Panel might be closed when we still watch the mouse event.
+ if (!browser_view_->panel())
+ return;
+ UpdateSettingsButtonVisibility(browser_view_->panel()->IsActive(),
+ mouse_entered);
}
-void PanelBrowserFrameView::UpdateInfoButtonVisibility(bool active,
- bool cursor_in_view) {
- info_button_->SetVisible(active || cursor_in_view);
+void PanelBrowserFrameView::UpdateSettingsButtonVisibility(
+ bool active, bool cursor_in_view) {
+ settings_button_->SetVisible(active || cursor_in_view);
}
+
+const Extension* PanelBrowserFrameView::GetExtension() const {
+ return Panel::GetExtension(browser_view_->browser());
+}
+
+void PanelBrowserFrameView::EnsureCreateSettingsMenu() {
+ if (settings_menu_.get())
+ return;
+
+ const Extension* extension = GetExtension();
+ if (!extension)
+ return;
+
+ settings_menu_contents_.reset(new ui::SimpleMenuModel(this));
+
+ settings_menu_contents_->AddItem(
+ COMMAND_NAME, UTF8ToUTF16(extension->name()));
+ settings_menu_contents_->AddSeparator();
+ settings_menu_contents_->AddItem(
+ COMMAND_CONFIGURE, l10n_util::GetStringUTF16(IDS_EXTENSIONS_OPTIONS));
+ settings_menu_contents_->AddItem(
+ COMMAND_DISABLE, l10n_util::GetStringUTF16(IDS_EXTENSIONS_DISABLE));
+ settings_menu_contents_->AddItem(
+ COMMAND_UNINSTALL, l10n_util::GetStringUTF16(IDS_EXTENSIONS_UNINSTALL));
+ settings_menu_contents_->AddSeparator();
+ settings_menu_contents_->AddItem(
+ COMMAND_MANAGE, l10n_util::GetStringUTF16(IDS_MANAGE_EXTENSIONS));
+
+ settings_menu_.reset(new views::Menu2(settings_menu_contents_.get()));
+}
« no previous file with comments | « chrome/browser/ui/panels/panel_browser_frame_view.h ('k') | chrome/browser/ui/panels/panel_browser_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698