Index: chrome/browser/ui/gtk/keyword_editor_view.h |
diff --git a/chrome/browser/ui/gtk/keyword_editor_view.h b/chrome/browser/ui/gtk/keyword_editor_view.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0346afc37dd1137bbd066e9feb39d943baffba3d |
--- /dev/null |
+++ b/chrome/browser/ui/gtk/keyword_editor_view.h |
@@ -0,0 +1,167 @@ |
+// 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_KEYWORD_EDITOR_VIEW_H_ |
+#define CHROME_BROWSER_UI_GTK_KEYWORD_EDITOR_VIEW_H_ |
+#pragma once |
+ |
+#include <gtk/gtk.h> |
+ |
+#include "app/table_model_observer.h" |
+#include "base/basictypes.h" |
+#include "base/gtest_prod_util.h" |
+#include "base/scoped_ptr.h" |
+#include "base/string16.h" |
+#include "chrome/browser/search_engines/edit_search_engine_controller.h" |
+#include "chrome/browser/search_engines/template_url_model_observer.h" |
+ |
+class AccessibleWidgetHelper; |
+class KeywordEditorController; |
+class Profile; |
+class TemplateURLTableModel; |
+ |
+class KeywordEditorView : public TableModelObserver, |
+ public TemplateURLModelObserver, |
+ public EditSearchEngineControllerDelegate { |
+ public: |
+ virtual ~KeywordEditorView(); |
+ |
+ // Create (if necessary) and show the keyword editor window. |
+ static void Show(Profile* profile); |
+ |
+ // Overriden from EditSearchEngineControllerDelegate. |
+ virtual void OnEditedKeyword(const TemplateURL* template_url, |
+ const string16& title, |
+ const string16& keyword, |
+ const std::string& url); |
+ private: |
+ // Column ids for |list_store_|. |
+ enum { |
+ COL_FAVICON, |
+ COL_TITLE, |
+ COL_KEYWORD, |
+ COL_IS_HEADER, |
+ COL_IS_SEPARATOR, |
+ COL_WEIGHT, |
+ COL_WEIGHT_SET, |
+ COL_COUNT, |
+ }; |
+ |
+ explicit KeywordEditorView(Profile* profile); |
+ void Init(); |
+ |
+ // Enable buttons based on selection state. |
+ void EnableControls(); |
+ |
+ // Set the column values for |row| of |table_model_| in the |list_store_| at |
+ // |iter|. |
+ void SetColumnValues(int row, GtkTreeIter* iter); |
+ |
+ // Get the row number in the GtkListStore corresponding to |model_row|. |
+ int GetListStoreRowForModelRow(int model_row) const; |
+ |
+ // Get the row number in the TemplateURLTableModel corresponding to |path|. |
+ int GetModelRowForPath(GtkTreePath* path) const; |
+ |
+ // Get the row number in the TemplateURLTableModel corresponding to |iter|. |
+ int GetModelRowForIter(GtkTreeIter* iter) const; |
+ |
+ // Get the row number in the TemplateURLTableModel of the current selection, |
+ // or -1 if no row is selected. |
+ int GetSelectedModelRow() const; |
+ |
+ // Select the row in the |tree_| corresponding to |model_row|. |
+ void SelectModelRow(int model_row); |
+ |
+ // Add the values from |row| of |table_model_|. |
+ void AddNodeToList(int row); |
+ |
+ // TableModelObserver implementation. |
+ virtual void OnModelChanged(); |
+ virtual void OnItemsChanged(int start, int length); |
+ virtual void OnItemsAdded(int start, int length); |
+ virtual void OnItemsRemoved(int start, int length); |
+ |
+ // TemplateURLModelObserver notification. |
+ virtual void OnTemplateURLModelChanged(); |
+ |
+ // Callback for window destruction. |
+ static void OnWindowDestroy(GtkWidget* widget, KeywordEditorView* window); |
+ |
+ // Callback for dialog buttons. |
+ static void OnResponse(GtkDialog* dialog, int response_id, |
+ KeywordEditorView* window); |
+ |
+ // Callback checking whether a row should be drawn as a separator. |
+ static gboolean OnCheckRowIsSeparator(GtkTreeModel* model, |
+ GtkTreeIter* iter, |
+ gpointer user_data); |
+ |
+ // Callback checking whether a row may be selected. We use some rows in the |
+ // table as headers/separators for the groups, which should not be selectable. |
+ static gboolean OnSelectionFilter(GtkTreeSelection* selection, |
+ GtkTreeModel* model, |
+ GtkTreePath* path, |
+ gboolean path_currently_selected, |
+ gpointer user_data); |
+ |
+ // Callback for when user selects something. |
+ static void OnSelectionChanged(GtkTreeSelection* selection, |
+ KeywordEditorView* editor); |
+ |
+ // Callbacks for user actions modifying the table. |
+ static void OnRowActivated(GtkTreeView* tree_view, |
+ GtkTreePath* path, |
+ GtkTreeViewColumn* column, |
+ KeywordEditorView* editor); |
+ static void OnAddButtonClicked(GtkButton* button, |
+ KeywordEditorView* editor); |
+ static void OnEditButtonClicked(GtkButton* button, |
+ KeywordEditorView* editor); |
+ static void OnRemoveButtonClicked(GtkButton* button, |
+ KeywordEditorView* editor); |
+ static void OnMakeDefaultButtonClicked(GtkButton* button, |
+ KeywordEditorView* editor); |
+ |
+ // The table listing the search engines. |
+ GtkWidget* tree_; |
+ GtkListStore* list_store_; |
+ GtkTreeSelection* selection_; |
+ |
+ // Buttons for acting on the table. |
+ GtkWidget* add_button_; |
+ GtkWidget* edit_button_; |
+ GtkWidget* remove_button_; |
+ GtkWidget* make_default_button_; |
+ |
+ // The containing dialog. |
+ GtkWidget* dialog_; |
+ |
+ // The profile. |
+ Profile* profile_; |
+ |
+ scoped_ptr<KeywordEditorController> controller_; |
+ |
+ TemplateURLTableModel* table_model_; |
+ |
+ // We store our own index of the start of the second group within the model, |
+ // as when OnItemsRemoved is called the value in the model is already updated |
+ // but we need the old value to know which row to remove from the |
+ // |list_store_|. |
+ int model_second_group_index_; |
+ |
+ // Helper object to manage accessibility metadata. |
+ scoped_ptr<AccessibleWidgetHelper> accessible_widget_helper_; |
+ |
+ friend class KeywordEditorViewTest; |
+ FRIEND_TEST_ALL_PREFIXES(KeywordEditorViewTest, Empty); |
+ FRIEND_TEST_ALL_PREFIXES(KeywordEditorViewTest, Add); |
+ FRIEND_TEST_ALL_PREFIXES(KeywordEditorViewTest, MakeDefault); |
+ FRIEND_TEST_ALL_PREFIXES(KeywordEditorViewTest, Remove); |
+ FRIEND_TEST_ALL_PREFIXES(KeywordEditorViewTest, Edit); |
+ |
+ DISALLOW_COPY_AND_ASSIGN(KeywordEditorView); |
+}; |
+ |
+#endif // CHROME_BROWSER_UI_GTK_KEYWORD_EDITOR_VIEW_H_ |