summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/toolbar_star_toggle.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/views/toolbar_star_toggle.h')
-rw-r--r--chrome/browser/views/toolbar_star_toggle.h85
1 files changed, 85 insertions, 0 deletions
diff --git a/chrome/browser/views/toolbar_star_toggle.h b/chrome/browser/views/toolbar_star_toggle.h
new file mode 100644
index 0000000..4966655
--- /dev/null
+++ b/chrome/browser/views/toolbar_star_toggle.h
@@ -0,0 +1,85 @@
+// Copyright (c) 2010 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.
+
+#ifndef CHROME_BROWSER_VIEWS_TOOLBAR_STAR_TOGGLE_H_
+#define CHROME_BROWSER_VIEWS_TOOLBAR_STAR_TOGGLE_H_
+
+#include "base/time.h"
+#include "chrome/browser/views/info_bubble.h"
+#include "views/controls/button/image_button.h"
+
+class BubblePositioner;
+class GURL;
+class Profile;
+
+namespace views {
+class ButtonListener;
+class View;
+} // namespace views
+
+// ToolbarStarToggle is used for the star button on the toolbar, allowing the
+// user to star the current page. ToolbarStarToggle manages showing the
+// InfoBubble and rendering the appropriate state while the bubble is visible.
+
+class ToolbarStarToggle : public views::ToggleImageButton,
+ public InfoBubbleDelegate {
+ public:
+ explicit ToolbarStarToggle(views::ButtonListener* listener);
+
+ void set_profile(Profile* profile) { profile_ = profile; }
+ void set_host_view(views::View* host_view) { host_view_ = host_view; }
+ void set_bubble_positioner(BubblePositioner* bubble_positioner) {
+ bubble_positioner_ = bubble_positioner;
+ }
+
+ // Sets up all labels for the button.
+ void Init();
+
+ // Sets up all images for the button.
+ void LoadImages();
+
+ // If the bubble isn't showing, shows it.
+ void ShowStarBubble(const GURL& url, bool newly_bookmarked);
+
+ // Overridden to update ignore_click_ based on whether the mouse was clicked
+ // quickly after the bubble was hidden.
+ virtual bool OnMousePressed(const views::MouseEvent& e);
+
+ // Overridden to set ignore_click_ to false.
+ virtual void OnMouseReleased(const views::MouseEvent& e, bool canceled);
+ virtual void OnDragDone();
+
+ protected:
+ // Only invokes super if ignore_click_ is true and the bubble isn't showing.
+ virtual void NotifyClick(const views::Event& event);
+
+ // Overridden to so that we appear pressed while the bubble is showing.
+ virtual SkBitmap GetImageToPaint();
+
+ private:
+ // InfoBubbleDelegate.
+ virtual void InfoBubbleClosing(InfoBubble* info_bubble,
+ bool closed_by_escape);
+ virtual bool CloseOnEscape();
+
+ // Profile with bookmarks info.
+ Profile* profile_;
+
+ // View that hosts us.
+ views::View* host_view_;
+
+ // Positioner for bookmark bubble.
+ BubblePositioner* bubble_positioner_;
+
+ // Time the bubble last closed.
+ base::TimeTicks bubble_closed_time_;
+
+ // If true NotifyClick does nothing. This is set in OnMousePressed based on
+ // the amount of time between when the bubble clicked and now.
+ bool ignore_click_;
+
+ DISALLOW_COPY_AND_ASSIGN(ToolbarStarToggle);
+};
+
+#endif // CHROME_BROWSER_VIEWS_TOOLBAR_STAR_TOGGLE_H_