| 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
|
|
|