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

Unified Diff: chrome/browser/chromeos/compact_location_bar_view.cc

Issue 543215: Added Star button to compact navigation mode.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 11 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/chromeos/compact_location_bar_view.h ('k') | chrome/browser/views/star_toggle.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/compact_location_bar_view.cc
===================================================================
--- chrome/browser/chromeos/compact_location_bar_view.cc (revision 38044)
+++ chrome/browser/chromeos/compact_location_bar_view.cc (working copy)
@@ -8,31 +8,41 @@
#include <algorithm>
#include "app/l10n_util.h"
+#include "app/drag_drop_types.h"
#include "base/gfx/point.h"
#include "chrome/app/chrome_dll_resource.h"
+#include "chrome/browser/bookmarks/bookmark_drag_data.h"
+#include "chrome/browser/bookmarks/bookmark_model.h"
#include "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h"
#include "chrome/browser/browser_list.h"
#include "chrome/browser/browser_theme_provider.h"
#include "chrome/browser/chromeos/compact_location_bar_host.h"
+#include "chrome/browser/metrics/user_metrics.h"
#include "chrome/browser/profile.h"
+#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/view_ids.h"
#include "chrome/browser/views/event_utils.h"
#include "chrome/browser/views/frame/browser_view.h"
+#include "chrome/browser/views/toolbar_star_toggle.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "views/background.h"
#include "views/controls/button/image_button.h"
#include "views/controls/native/native_view_host.h"
+#include "views/drag_utils.h"
#include "views/widget/widget.h"
#include "views/window/window.h"
namespace chromeos {
+
const int kCompactLocationBarDefaultWidth = 700;
+const int kWidgetsSeparatorWidth = 2;
CompactLocationBarView::CompactLocationBarView(CompactLocationBarHost* host)
: DropdownBarView(host),
- reload_(NULL) {
+ reload_(NULL),
+ star_(NULL) {
set_background(views::Background::CreateStandardPanelBackground());
SetFocusable(true);
}
@@ -98,7 +108,14 @@
location_entry_view_->set_focus_view(this);
location_entry_view_->Attach(location_entry_->widget());
- // TODO(oshima): Add Star Button
+ star_ = new ToolbarStarToggle(this);
+ star_->SetDragController(this);
+ star_->set_profile(browser()->profile());
+ star_->set_host_view(this);
+ star_->set_bubble_positioner(this);
+ star_->Init();
+ AddChildView(star_);
+
location_entry_->Update(browser()->GetSelectedTabContents());
}
@@ -109,9 +126,14 @@
if (!reload_)
return gfx::Size(); // Not initialized yet, do nothing.
- gfx::Size sz = reload_->GetPreferredSize();
+ gfx::Size reload_size = reload_->GetPreferredSize();
+ gfx::Size star_size = star_->GetPreferredSize();
+ gfx::Size location_size = location_entry_view_->GetPreferredSize();
- return gfx::Size(500, sz.height());
+ int max_height = std::max(reload_size.height(),
+ std::max(star_size.height(),
+ location_size.height()));
+ return gfx::Size(500, max_height);
}
void CompactLocationBarView::Layout() {
@@ -119,17 +141,22 @@
return; // Not initialized yet, do nothing.
int cur_x = 0;
+ gfx::Size reload_size = reload_->GetPreferredSize();
+ int reload_height = std::min(reload_size.height(), height());
+ reload_->SetBounds(cur_x, (height() - reload_height) / 2,
+ reload_size.width(), reload_height);
+ cur_x += reload_size.width() + kWidgetsSeparatorWidth;
- gfx::Size sz = reload_->GetPreferredSize();
- reload_->SetBounds(cur_x, 0, sz.width(), sz.height());
- cur_x += sz.width();
+ gfx::Size star_size = star_->GetPreferredSize();
+ int star_height = std::min(star_size.height(), height());
+ star_->SetBounds(cur_x, (height() - star_height) / 2,
+ star_size.width(), star_height);
+ cur_x += star_size.width();
- cur_x += 2;
-
- // The location bar gets the rest of the space in the middle.
- location_entry_view_->SetBounds(cur_x, 0, width() - cur_x * 2 - 2, height());
-
- cur_x = width() - sz.width();
+ // The location bar is located exactly to the right of the star button and
+ // takes all the space to the right except for small margin at the end.
+ int location_width = width() - cur_x - kWidgetsSeparatorWidth;
+ location_entry_view_->SetBounds(cur_x, 0, location_width, height());
}
void CompactLocationBarView::Paint(gfx::Canvas* canvas) {
@@ -198,4 +225,55 @@
return popup.AdjustToFit(GetWidget()->GetWindow()->GetBounds());
}
+////////////////////////////////////////////////////////////////////////////////
+// views::DragController overrides:
+void CompactLocationBarView::WriteDragData(views::View* sender,
+ int press_x,
+ int press_y,
+ OSExchangeData* data) {
+ DCHECK(
+ GetDragOperations(sender, press_x, press_y) != DragDropTypes::DRAG_NONE);
+
+ UserMetrics::RecordAction("CompactLocationBar_DragStar",
+ browser()->profile());
+
+ // If there is a bookmark for the URL, add the bookmark drag data for it. We
+ // do this to ensure the bookmark is moved, rather than creating an new
+ // bookmark.
+ TabContents* tab = browser()->GetSelectedTabContents();
+ if (tab) {
+ Profile* profile = browser()->profile();
+ if (profile && profile->GetBookmarkModel()) {
+ const BookmarkNode* node = profile->GetBookmarkModel()->
+ GetMostRecentlyAddedNodeForURL(tab->GetURL());
+ if (node) {
+ BookmarkDragData bookmark_data(node);
+ bookmark_data.Write(profile, data);
+ }
+ }
+
+ drag_utils::SetURLAndDragImage(tab->GetURL(),
+ UTF16ToWideHack(tab->GetTitle()),
+ tab->GetFavIcon(),
+ data);
+ }
+}
+
+int CompactLocationBarView::GetDragOperations(views::View* sender,
+ int x,
+ int y) {
+ DCHECK(sender == star_);
+ TabContents* tab = browser()->GetSelectedTabContents();
+ if (!tab || !tab->ShouldDisplayURL() || !tab->GetURL().is_valid()) {
+ return DragDropTypes::DRAG_NONE;
+ }
+ Profile* profile = browser()->profile();
+ if (profile && profile->GetBookmarkModel() &&
+ profile->GetBookmarkModel()->IsBookmarked(tab->GetURL())) {
+ return DragDropTypes::DRAG_MOVE | DragDropTypes::DRAG_COPY |
+ DragDropTypes::DRAG_LINK;
+ }
+ return DragDropTypes::DRAG_COPY | DragDropTypes::DRAG_LINK;
+}
+
} // namespace chromeos
« no previous file with comments | « chrome/browser/chromeos/compact_location_bar_view.h ('k') | chrome/browser/views/star_toggle.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698