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

Unified Diff: chrome/browser/ui/gtk/browser_actions_toolbar_gtk.h

Issue 6099014: Move chrome/browser/gtk to chrome/browser/ui/gtk (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Move browser/gtk/ to browser/ui/gtk/, leave header stubs, update new header guards Created 9 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
Index: chrome/browser/ui/gtk/browser_actions_toolbar_gtk.h
diff --git a/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.h b/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.h
new file mode 100644
index 0000000000000000000000000000000000000000..e9058c695f15fd74dc98e2cd09ea36c403bf6e11
--- /dev/null
+++ b/chrome/browser/ui/gtk/browser_actions_toolbar_gtk.h
@@ -0,0 +1,223 @@
+// 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_UI_GTK_BROWSER_ACTIONS_TOOLBAR_GTK_H_
+#define CHROME_BROWSER_UI_GTK_BROWSER_ACTIONS_TOOLBAR_GTK_H_
+#pragma once
+
+#include <map>
+#include <string>
+
+#include "app/gtk_signal.h"
+#include "app/gtk_signal_registrar.h"
+#include "app/menus/simple_menu_model.h"
+#include "base/linked_ptr.h"
+#include "base/task.h"
+#include "chrome/browser/extensions/extension_toolbar_model.h"
+#include "chrome/browser/gtk/custom_button.h"
+#include "chrome/browser/gtk/menu_gtk.h"
+#include "chrome/browser/gtk/overflow_button.h"
+#include "chrome/browser/gtk/owned_widget_gtk.h"
+#include "chrome/common/notification_observer.h"
+#include "chrome/common/notification_registrar.h"
+#include "ui/base/animation/animation_delegate.h"
+#include "ui/base/animation/slide_animation.h"
+
+class Browser;
+class BrowserActionButton;
+class Extension;
+class GtkThemeProvider;
+class Profile;
+
+typedef struct _GdkDragContext GdkDragContext;
+typedef struct _GtkWidget GtkWidget;
+
+class BrowserActionsToolbarGtk : public ExtensionToolbarModel::Observer,
+ public ui::AnimationDelegate,
+ public MenuGtk::Delegate,
+ public menus::SimpleMenuModel::Delegate,
+ public NotificationObserver {
+ public:
+ explicit BrowserActionsToolbarGtk(Browser* browser);
+ virtual ~BrowserActionsToolbarGtk();
+
+ GtkWidget* widget() { return hbox_.get(); }
+ GtkWidget* chevron() { return overflow_button_->widget(); }
+
+ // Returns the widget in use by the BrowserActionButton corresponding to
+ // |extension|. Used in positioning the ExtensionInstalledBubble for
+ // BrowserActions.
+ GtkWidget* GetBrowserActionWidget(const Extension* extension);
+
+ int button_count() { return extension_button_map_.size(); }
+
+ Browser* browser() { return browser_; }
+
+ // Returns the currently selected tab ID, or -1 if there is none.
+ int GetCurrentTabId();
+
+ // Update the display of all buttons.
+ void Update();
+
+ // NotificationObserver implementation.
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
+ bool animating() {
+ return resize_animation_.is_animating();
+ }
+
+ private:
+ friend class BrowserActionButton;
+
+ // Initialize drag and drop.
+ void SetupDrags();
+
+ // Query the extensions service for all extensions with browser actions,
+ // and create the UI for them.
+ void CreateAllButtons();
+
+ // Sets the width of the container and overflow state according to the model.
+ void SetContainerWidth();
+
+ // Create the UI for a single browser action. This will stick the button
+ // at the end of the toolbar.
+ void CreateButtonForExtension(const Extension* extension, int index);
+
+ // Delete resources associated with UI for a browser action.
+ void RemoveButtonForExtension(const Extension* extension);
+
+ // Change the visibility of widget() based on whether we have any buttons
+ // to show.
+ void UpdateVisibility();
+
+ // Hide the extension popup, if any.
+ void HidePopup();
+
+ // Animate the toolbar to show the given number of icons. This assumes the
+ // visibility of the overflow button will not change.
+ void AnimateToShowNIcons(int count);
+
+ // Returns true if this extension should be shown in this toolbar. This can
+ // return false if we are in an incognito window and the extension is disabled
+ // for incognito.
+ bool ShouldDisplayBrowserAction(const Extension* extension);
+
+ // ExtensionToolbarModel::Observer implementation.
+ virtual void BrowserActionAdded(const Extension* extension, int index);
+ virtual void BrowserActionRemoved(const Extension* extension);
+ virtual void BrowserActionMoved(const Extension* extension, int index);
+ virtual void ModelLoaded();
+
+ // ui::AnimationDelegate implementation.
+ virtual void AnimationProgressed(const ui::Animation* animation);
+ virtual void AnimationEnded(const ui::Animation* animation);
+
+ // SimpleMenuModel::Delegate implementation.
+ // In our case, |command_id| is be the index into the model's extension list.
+ virtual bool IsCommandIdChecked(int command_id) const;
+ virtual bool IsCommandIdEnabled(int command_id) const;
+ virtual bool GetAcceleratorForCommandId(
+ int command_id,
+ menus::Accelerator* accelerator);
+ virtual void ExecuteCommand(int command_id);
+
+ // MenuGtk::Delegate implementation.
+ virtual void StoppedShowing();
+ virtual bool AlwaysShowIconForCmd(int command_id) const;
+
+ // Called by the BrowserActionButton in response to drag-begin.
+ void DragStarted(BrowserActionButton* button, GdkDragContext* drag_context);
+
+ // Sets the width of the button area of the toolbar to |new_width|, clamping
+ // it to appropriate values.
+ void SetButtonHBoxWidth(int new_width);
+
+ // Shows or hides the chevron as appropriate.
+ void UpdateChevronVisibility();
+
+ CHROMEGTK_CALLBACK_4(BrowserActionsToolbarGtk, gboolean, OnDragMotion,
+ GdkDragContext*, gint, gint, guint);
+ CHROMEGTK_CALLBACK_1(BrowserActionsToolbarGtk, void, OnDragEnd,
+ GdkDragContext*);
+ CHROMEGTK_CALLBACK_2(BrowserActionsToolbarGtk, gboolean, OnDragFailed,
+ GdkDragContext*, GtkDragResult);
+ CHROMEGTK_CALLBACK_1(BrowserActionsToolbarGtk, void, OnHierarchyChanged,
+ GtkWidget*);
+ CHROMEGTK_CALLBACK_1(BrowserActionsToolbarGtk, void, OnSetFocus, GtkWidget*);
+ CHROMEGTK_CALLBACK_1(BrowserActionsToolbarGtk, gboolean,
+ OnGripperMotionNotify, GdkEventMotion*);
+ CHROMEGTK_CALLBACK_1(BrowserActionsToolbarGtk, gboolean, OnGripperExpose,
+ GdkEventExpose*);
+ CHROMEGTK_CALLBACK_1(BrowserActionsToolbarGtk, gboolean,
+ OnGripperEnterNotify, GdkEventCrossing*);
+ CHROMEGTK_CALLBACK_1(BrowserActionsToolbarGtk, gboolean,
+ OnGripperLeaveNotify, GdkEventCrossing*);
+ CHROMEGTK_CALLBACK_1(BrowserActionsToolbarGtk, gboolean,
+ OnGripperButtonRelease, GdkEventButton*);
+ CHROMEGTK_CALLBACK_1(BrowserActionsToolbarGtk, gboolean,
+ OnGripperButtonPress, GdkEventButton*);
+ // The overflow button is pressed.
+ CHROMEGTK_CALLBACK_1(BrowserActionsToolbarGtk, gboolean,
+ OnOverflowButtonPress, GdkEventButton*);
+ // The user presses a mouse button over the popped up overflow menu.
+ CHROMEGTK_CALLBACK_1(BrowserActionsToolbarGtk, gboolean,
+ OnOverflowMenuButtonPress, GdkEventButton*);
+ CHROMEGTK_CALLBACK_0(BrowserActionsToolbarGtk, void, OnButtonShowOrHide);
+
+ Browser* browser_;
+
+ Profile* profile_;
+ GtkThemeProvider* theme_provider_;
+
+ ExtensionToolbarModel* model_;
+
+ // Contains the drag gripper, browser action buttons, and overflow chevron.
+ OwnedWidgetGtk hbox_;
+
+ // Contains the browser action buttons.
+ OwnedWidgetGtk button_hbox_;
+
+ // The overflow button for chrome theme mode.
+ scoped_ptr<CustomDrawButton> overflow_button_;
+ // The separator just next to the overflow button. Only shown in GTK+ theme
+ // mode. In Chrome theme mode, the overflow button has a separator built in.
+ GtkWidget* separator_;
+ scoped_ptr<MenuGtk> overflow_menu_;
+ scoped_ptr<menus::SimpleMenuModel> overflow_menu_model_;
+ GtkWidget* overflow_area_;
+ // A widget for adding extra padding to the left of the overflow button.
+ GtkWidget* overflow_alignment_;
+
+ // The button that is currently being dragged, or NULL.
+ BrowserActionButton* drag_button_;
+
+ // The new position of the button in the drag, or -1.
+ int drop_index_;
+
+ // Map from extension ID to BrowserActionButton, which is a wrapper for
+ // a chrome button and related functionality. There should be one entry
+ // for every extension that has a browser action.
+ typedef std::map<std::string, linked_ptr<BrowserActionButton> >
+ ExtensionButtonMap;
+ ExtensionButtonMap extension_button_map_;
+
+ // We use this animation for the smart resizing of the toolbar.
+ ui::SlideAnimation resize_animation_;
+ // This is the final width we are animating towards.
+ int desired_width_;
+ // This is the width we were at when we started animating.
+ int start_width_;
+
+ GtkSignalRegistrar signals_;
+
+ NotificationRegistrar registrar_;
+
+ ScopedRunnableMethodFactory<BrowserActionsToolbarGtk> method_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(BrowserActionsToolbarGtk);
+};
+
+#endif // CHROME_BROWSER_UI_GTK_BROWSER_ACTIONS_TOOLBAR_GTK_H_
« no previous file with comments | « chrome/browser/ui/gtk/bookmark_utils_gtk_unittest.cc ('k') | chrome/browser/ui/gtk/browser_actions_toolbar_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698