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

Unified Diff: chrome/browser/views/location_bar_view.cc

Issue 46055: RSS feed support (part 1), 2nd attempt (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 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/views/location_bar_view.h ('k') | chrome/common/render_messages.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/views/location_bar_view.cc
===================================================================
--- chrome/browser/views/location_bar_view.cc (revision 11648)
+++ chrome/browser/views/location_bar_view.cc (working copy)
@@ -91,6 +91,7 @@
keyword_hint_view_(profile),
type_to_search_view_(l10n_util::GetString(IDS_OMNIBOX_EMPTY_TEXT)),
security_image_view_(profile, model),
+ rss_image_view_(model),
popup_window_mode_(popup_window_mode),
first_run_bubble_(this) {
DCHECK(profile_);
@@ -153,6 +154,10 @@
keyword_hint_view_.SetColor(gray);
keyword_hint_view_.SetParentOwned(false);
+ AddChildView(&rss_image_view_);
+ rss_image_view_.SetVisible(false);
+ rss_image_view_.SetParentOwned(false);
+
AddChildView(&security_image_view_);
security_image_view_.SetVisible(false);
security_image_view_.SetParentOwned(false);
@@ -174,6 +179,7 @@
void LocationBarView::Update(const TabContents* tab_for_state_restoring) {
SetSecurityIcon(model_->GetIcon());
+ SetRssIconVisibility(model_->GetFeedList().get());
std::wstring info_text, info_tooltip;
SkColor text_color;
model_->GetInfoText(&info_text, &text_color, &info_tooltip);
@@ -183,6 +189,12 @@
SchedulePaint();
}
+void LocationBarView::UpdateFeedIcon() {
+ SetRssIconVisibility(model_->GetFeedList().get());
+ Layout();
+ SchedulePaint();
+}
+
void LocationBarView::Focus() {
::SetFocus(location_entry_->m_hWnd);
}
@@ -335,10 +347,16 @@
location_entry_->GetClientRect(&edit_bounds);
int entry_width = width() - (kEntryPadding * 2);
+
+ gfx::Size rss_image_size;
+ if (rss_image_view_.IsVisible()) {
+ rss_image_size = rss_image_view_.GetPreferredSize();
+ entry_width -= rss_image_size.width();
+ }
gfx::Size security_image_size;
if (security_image_view_.IsVisible()) {
security_image_size = security_image_view_.GetPreferredSize();
- entry_width -= security_image_size.width();
+ entry_width -= security_image_size.width() + kInnerPadding;
}
gfx::Size info_label_size;
if (info_label_.IsVisible()) {
@@ -365,9 +383,18 @@
location_y,
info_label_size.width(), location_height);
}
+ const int info_label_width = info_label_size.width() ?
+ info_label_size.width() + kInnerPadding : 0;
+ if (rss_image_view_.IsVisible()) {
+ rss_image_view_.SetBounds(width() - kEntryPadding -
+ info_label_width -
+ security_image_size.width() -
+ rss_image_size.width(),
+ location_y,
+ rss_image_size.width(),
+ location_height);
+ }
if (security_image_view_.IsVisible()) {
- const int info_label_width = info_label_size.width() ?
- info_label_size.width() + kInnerPadding : 0;
security_image_view_.SetBounds(width() - kEntryPadding - info_label_width -
security_image_size.width(), location_y, security_image_size.width(),
location_height);
@@ -498,6 +525,12 @@
}
}
+void LocationBarView::SetRssIconVisibility(FeedList* feeds) {
+ bool show_rss = feeds && feeds->list().size() > 0;
+ // TODO(finnur): Enable this when we have a good landing page to show feeds.
+ rss_image_view_.SetVisible(false);
+}
+
void LocationBarView::SetInfoText(const std::wstring& text,
SkColor text_color,
const std::wstring& tooltip_text) {
@@ -771,19 +804,20 @@
class LocationBarView::ShowInfoBubbleTask : public Task {
public:
- explicit ShowInfoBubbleTask(LocationBarView::SecurityImageView* image_view);
+ explicit ShowInfoBubbleTask(
+ LocationBarView::LocationBarImageView* image_view);
virtual void Run();
void Cancel();
private:
- LocationBarView::SecurityImageView* image_view_;
+ LocationBarView::LocationBarImageView* image_view_;
bool cancelled_;
DISALLOW_EVIL_CONSTRUCTORS(ShowInfoBubbleTask);
};
LocationBarView::ShowInfoBubbleTask::ShowInfoBubbleTask(
- LocationBarView::SecurityImageView* image_view)
+ LocationBarView::LocationBarImageView* image_view)
: cancelled_(false),
image_view_(image_view) {
}
@@ -842,27 +876,14 @@
bounds);
}
-// SecurityImageView------------------------------------------------------------
+// LocationBarImageView---------------------------------------------------------
-// static
-SkBitmap* LocationBarView::SecurityImageView::lock_icon_ = NULL;
-SkBitmap* LocationBarView::SecurityImageView::warning_icon_ = NULL;
-
-LocationBarView::SecurityImageView::SecurityImageView(Profile* profile,
- ToolbarModel* model)
- : profile_(profile),
- model_(model),
- show_info_bubble_task_(NULL),
- info_bubble_(NULL) {
- if (!lock_icon_) {
- ResourceBundle& rb = ResourceBundle::GetSharedInstance();
- lock_icon_ = rb.GetBitmapNamed(IDR_LOCK);
- warning_icon_ = rb.GetBitmapNamed(IDR_WARNING);
- }
- SetImageShown(LOCK);
+LocationBarView::LocationBarImageView::LocationBarImageView()
+ : show_info_bubble_task_(NULL),
+ info_bubble_(NULL) {
}
-LocationBarView::SecurityImageView::~SecurityImageView() {
+LocationBarView::LocationBarImageView::~LocationBarImageView() {
if (show_info_bubble_task_)
show_info_bubble_task_->Cancel();
@@ -873,25 +894,41 @@
}
}
-void LocationBarView::SecurityImageView::SetImageShown(Image image) {
- switch (image) {
- case LOCK:
- ImageView::SetImage(lock_icon_);
- break;
- case WARNING:
- ImageView::SetImage(warning_icon_);
- break;
- default:
- NOTREACHED();
- break;
+void LocationBarView::LocationBarImageView::OnMouseMoved(
+ const views::MouseEvent& event) {
+ if (show_info_bubble_task_) {
+ show_info_bubble_task_->Cancel();
+ show_info_bubble_task_ = NULL;
}
+
+ if (info_bubble_) {
+ // If an info bubble is currently showing, nothing to do.
+ return;
+ }
+
+ show_info_bubble_task_ = new ShowInfoBubbleTask(this);
+ MessageLoop::current()->PostDelayedTask(FROM_HERE, show_info_bubble_task_,
+ kInfoBubbleHoverDelayMs);
}
-void LocationBarView::SecurityImageView::ShowInfoBubble() {
- std::wstring text;
- SkColor text_color;
- model_->GetIconHoverText(&text, &text_color);
+void LocationBarView::LocationBarImageView::OnMouseExited(
+ const views::MouseEvent& event) {
+ if (show_info_bubble_task_) {
+ show_info_bubble_task_->Cancel();
+ show_info_bubble_task_ = NULL;
+ }
+ if (info_bubble_)
+ info_bubble_->Close();
+}
+
+void LocationBarView::LocationBarImageView::InfoBubbleClosing(
+ InfoBubble* info_bubble, bool closed_by_escape) {
+ info_bubble_ = NULL;
+}
+
+void LocationBarView::LocationBarImageView::ShowInfoBubbleImpl(
+ const std::wstring& text, SkColor text_color) {
gfx::Point location;
views::View::ConvertPointToScreen(this, &location);
gfx::Rect bounds(location.x(), location.y(), width(), height());
@@ -909,32 +946,40 @@
show_info_bubble_task_ = NULL;
}
-void LocationBarView::SecurityImageView::OnMouseMoved(
- const views::MouseEvent& event) {
- if (show_info_bubble_task_) {
- show_info_bubble_task_->Cancel();
- show_info_bubble_task_ = NULL;
- }
+// SecurityImageView------------------------------------------------------------
- if (info_bubble_) {
- // If an info bubble is currently showing, nothing to do.
- return;
+// static
+SkBitmap* LocationBarView::SecurityImageView::lock_icon_ = NULL;
+SkBitmap* LocationBarView::SecurityImageView::warning_icon_ = NULL;
+
+LocationBarView::SecurityImageView::SecurityImageView(Profile* profile,
+ ToolbarModel* model)
+ : LocationBarImageView(),
+ profile_(profile),
+ model_(model) {
+ if (!lock_icon_) {
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ lock_icon_ = rb.GetBitmapNamed(IDR_LOCK);
+ warning_icon_ = rb.GetBitmapNamed(IDR_WARNING);
}
+ SetImageShown(LOCK);
+}
- show_info_bubble_task_ = new ShowInfoBubbleTask(this);
- MessageLoop::current()->PostDelayedTask(FROM_HERE, show_info_bubble_task_,
- kInfoBubbleHoverDelayMs);
+LocationBarView::SecurityImageView::~SecurityImageView() {
}
-void LocationBarView::SecurityImageView::OnMouseExited(
- const views::MouseEvent& event) {
- if (show_info_bubble_task_) {
- show_info_bubble_task_->Cancel();
- show_info_bubble_task_ = NULL;
+void LocationBarView::SecurityImageView::SetImageShown(Image image) {
+ switch (image) {
+ case LOCK:
+ ImageView::SetImage(lock_icon_);
+ break;
+ case WARNING:
+ ImageView::SetImage(warning_icon_);
+ break;
+ default:
+ NOTREACHED();
+ break;
}
-
- if (info_bubble_)
- info_bubble_->Close();
}
bool LocationBarView::SecurityImageView::OnMousePressed(
@@ -953,12 +998,59 @@
return true;
}
-void LocationBarView::SecurityImageView::InfoBubbleClosing(
- InfoBubble* info_bubble,
- bool closed_by_escape) {
- info_bubble_ = NULL;
+void LocationBarView::SecurityImageView::ShowInfoBubble() {
+ std::wstring text;
+ SkColor text_color;
+ model_->GetIconHoverText(&text, &text_color);
+
+ ShowInfoBubbleImpl(text, text_color);
}
+// RssImageView------------------------------------------------------------
+
+// static
+SkBitmap* LocationBarView::RssImageView::rss_icon_ = NULL;
+
+LocationBarView::RssImageView::RssImageView(ToolbarModel* model)
+ : model_(model),
+ LocationBarImageView() {
+ if (!rss_icon_) {
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ rss_icon_ = rb.GetBitmapNamed(IDR_RSS_ICON);
+ }
+ ImageView::SetImage(rss_icon_);
+}
+
+LocationBarView::RssImageView::~RssImageView() {
+}
+
+bool LocationBarView::RssImageView::OnMousePressed(
+ const views::MouseEvent& event) {
+ NavigationEntry* entry =
+ BrowserList::GetLastActive()->GetSelectedTabContents()->
+ controller()->GetActiveEntry();
+ if (!entry) {
+ NOTREACHED();
+ return true;
+ }
+
+ // Navigate to the first item in the feed list.
+ scoped_refptr<FeedList> feeds = model_->GetFeedList();
+ DCHECK(feeds.get() && feeds->list().size() > 0);
+
+ // TODO(finnur): Make this do more than just display the XML in the browser.
+ BrowserList::GetLastActive()->OpenURL(feeds->list()[0].url, GURL(),
+ CURRENT_TAB, PageTransition::LINK);
+ return true;
+}
+
+void LocationBarView::RssImageView::ShowInfoBubble() {
+ // TODO(finnur): Get this string from the resources.
+ std::wstring text = L"Subscribe to this feed";
+ SkColor text_color = SK_ColorBLUE;
+ ShowInfoBubbleImpl(text, text_color);
+}
+
bool LocationBarView::OverrideAccelerator(
const views::Accelerator& accelerator) {
return location_entry_->OverrideAccelerator(accelerator);
« no previous file with comments | « chrome/browser/views/location_bar_view.h ('k') | chrome/common/render_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698