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

Unified Diff: ui/app_list/views/folder_header_view.cc

Issue 27777002: Implement app list folder management page UI. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix nits. Created 7 years, 2 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
Index: ui/app_list/views/folder_header_view.cc
diff --git a/ui/app_list/views/folder_header_view.cc b/ui/app_list/views/folder_header_view.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d600a46c840b90b96cea16327b1ea0b2e5333589
--- /dev/null
+++ b/ui/app_list/views/folder_header_view.cc
@@ -0,0 +1,179 @@
+// Copyright (c) 2013 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 "ui/app_list/views/folder_header_view.h"
+
+#include "base/strings/utf_string_conversions.h"
+#include "grit/ui_resources.h"
+#include "grit/ui_strings.h"
+#include "ui/app_list/app_list_constants.h"
+#include "ui/app_list/app_list_folder_item.h"
+#include "ui/app_list/views/app_list_folder_view.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/canvas.h"
+#include "ui/views/controls/button/image_button.h"
+#include "ui/views/controls/textfield/textfield.h"
+
+namespace app_list {
+
+namespace {
+
+const int kPreferredWidth = 360;
+const int kPreferredHeight = 48;
+const int kIconDimension = 32;
+const int kPadding = 14;
+const int kFolderNameWidth = 150;
+const int kFolderNameHeight = 30;
+const int kBottomSeparatorWidth = 380;
+const int kBottomSeparatorHeight = 1;
+
+const SkColor kHintTextColor = SkColorSetRGB(0xA0, 0xA0, 0xA0);
+
+} // namespace
+
+class FolderHeaderView::FolderNameView : public views::Textfield {
+ public:
+ FolderNameView() {
+ set_border(views::Border::CreateEmptyBorder(1, 1, 1, 1));
+ }
+
+ virtual ~FolderNameView() {
+ }
+
+ // Overridden from views::View:
+ virtual gfx::Size GetPreferredSize() OVERRIDE {
+ return gfx::Size(kFolderNameWidth, kFolderNameHeight);
+ }
+
+ virtual void OnPaintFocusBorder(gfx::Canvas* canvas) OVERRIDE {
+ const SkColor kFocusBorderColor = SkColorSetRGB(64, 128, 250);
+ if (HasFocus() && focusable()) {
+ gfx::Rect rect = GetLocalBounds();
+ rect.Inset(0, 0, 1, 1);
+ canvas->DrawRect(rect, kFocusBorderColor);
+ }
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(FolderNameView);
+};
+
+FolderHeaderView::FolderHeaderView(FolderHeaderViewDelegate* delegate)
+ : folder_item_(NULL),
+ back_button_(new views::ImageButton(this)),
+ folder_name_view_(new FolderNameView),
+ delegate_(delegate) {
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ back_button_->SetImage(views::ImageButton::STATE_NORMAL,
+ rb.GetImageSkiaNamed(IDR_APP_LIST_FOLDER_BACK_NORMAL));
+ back_button_->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
+ views::ImageButton::ALIGN_MIDDLE);
+ AddChildView(back_button_);
+
+ folder_name_view_->SetFont(rb.GetFont(ui::ResourceBundle::MediumFont));
+ folder_name_view_->set_placeholder_text_color(kHintTextColor);
+ folder_name_view_->set_placeholder_text(
+ rb.GetLocalizedString(IDS_APP_LIST_FOLDER_NAME_PLACEHOLDER));
+ folder_name_view_->RemoveBorder();
+ folder_name_view_->SetBackgroundColor(kContentsBackgroundColor);
+ folder_name_view_->SetController(this);
+ AddChildView(folder_name_view_);
+}
+
+FolderHeaderView::~FolderHeaderView() {
+ if (folder_item_)
+ folder_item_->RemoveObserver(this);
+}
+
+void FolderHeaderView::SetFolderItem(AppListFolderItem* folder_item) {
+ if (folder_item_)
+ folder_item_->RemoveObserver(this);
+
+ folder_item_ = folder_item;
+ if (!folder_item_)
+ return;
+ folder_item_->AddObserver(this);
+
+ Update();
+}
+
+void FolderHeaderView::Update() {
+ if (!folder_item_)
+ return;
+
+ folder_name_view_->SetText(UTF8ToUTF16(folder_item_->title()));
+}
+
+gfx::Size FolderHeaderView::GetPreferredSize() {
+ return gfx::Size(kPreferredWidth, kPreferredHeight);
+}
+
+void FolderHeaderView::Layout() {
+ gfx::Rect rect(GetContentsBounds());
+ if (rect.IsEmpty())
+ return;
+
+ gfx::Rect back_bounds(rect);
+ back_bounds.set_width(kIconDimension + 2 * kPadding);
+ back_button_->SetBoundsRect(back_bounds);
+
+ gfx::Rect text_bounds(rect);
+ int text_width = folder_name_view_->GetPreferredSize().width();
+ text_bounds.set_x(back_bounds.x() + (rect.width() - text_width) / 2);
+ text_bounds.set_width(text_width);
+ text_bounds.ClampToCenteredSize(gfx::Size(text_bounds.width(),
+ folder_name_view_->GetPreferredSize().height()));
+ folder_name_view_->SetBoundsRect(text_bounds);
+}
+
+void FolderHeaderView::OnPaint(gfx::Canvas* canvas) {
+ views::View::OnPaint(canvas);
+
+ gfx::Rect rect(GetContentsBounds());
+ if (rect.IsEmpty())
+ return;
+
+ // Draw bottom separator line.
+ rect.set_x((rect.width() - kBottomSeparatorWidth) / 2 + rect.x());
+ rect.set_y(rect.y() + rect.height() - kBottomSeparatorHeight);
+ rect.set_width(kBottomSeparatorWidth);
+ rect.set_height(kBottomSeparatorHeight);
+ canvas->FillRect(rect, kTopSeparatorColor);
+}
+
+void FolderHeaderView::ContentsChanged(views::Textfield* sender,
+ const base::string16& new_contents) {
+ // Temporarily remove from observer to ignore data change caused by us.
+ if (!folder_item_)
+ return;
+
+ folder_item_->RemoveObserver(this);
+ std::string name = UTF16ToUTF8(folder_name_view_->text());
+ folder_item_->SetTitleAndFullName(name, name);
+ folder_item_->AddObserver(this);
+}
+
+void FolderHeaderView::ButtonPressed(views::Button* sender,
+ const ui::Event& event) {
+ delegate_->NavigateBack(folder_item_, event);
+}
+
+void FolderHeaderView::ItemIconChanged() {
+}
+
+void FolderHeaderView::ItemTitleChanged() {
+ Update();
+}
+
+void FolderHeaderView::ItemHighlightedChanged() {
+}
+
+void FolderHeaderView::ItemIsInstallingChanged() {
+}
+
+void FolderHeaderView::ItemPercentDownloadedChanged() {
+}
+
+} // namespace app_list
+

Powered by Google App Engine
This is Rietveld 408576698