1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_UI_GTK_BOOKMARKS_BOOKMARK_UTILS_GTK_H_ 6 #define CHROME_BROWSER_UI_GTK_BOOKMARKS_BOOKMARK_UTILS_GTK_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/strings/string16.h" 12 #include "ui/base/glib/glib_integers.h" 13 14 class BookmarkModel; 15 class BookmarkNode; 16 class GtkThemeService; 17 class GURL; 18 class Profile; 19 20 typedef struct _GdkDragContext GdkDragContext; 21 typedef struct _GdkPixbuf GdkPixbuf; 22 typedef struct _GtkSelectionData GtkSelectionData; 23 typedef struct _GtkWidget GtkWidget; 24 25 namespace bookmark_utils { 26 27 extern const char kBookmarkNode[]; 28 29 // Get the image that is used to represent the node. This function adds a ref 30 // to the returned pixbuf, so it requires a matching call to g_object_unref(). 31 GdkPixbuf* GetPixbufForNode(const BookmarkNode* node, BookmarkModel* model, 32 bool native); 33 34 // Returns a GtkWindow with a visual hierarchy for passing to 35 // gtk_drag_set_icon_widget(). 36 GtkWidget* GetDragRepresentation(GdkPixbuf* pixbuf, 37 const string16& title, 38 GtkThemeService* provider); 39 GtkWidget* GetDragRepresentationForNode(const BookmarkNode* node, 40 BookmarkModel* model, 41 GtkThemeService* provider); 42 43 // Helper function that sets visual properties of GtkButton |button| to the 44 // contents of |node|. 45 void ConfigureButtonForNode(const BookmarkNode* node, BookmarkModel* model, 46 GtkWidget* button, GtkThemeService* provider); 47 48 // Helper function to set the visual properties for the apps page shortcut 49 // |button|. 50 void ConfigureAppsShortcutButton(GtkWidget* button, GtkThemeService* provider); 51 52 // Returns the tooltip. 53 std::string BuildTooltipFor(const BookmarkNode* node); 54 55 // Returns the label that should be in pull down menus. 56 std::string BuildMenuLabelFor(const BookmarkNode* node); 57 58 // Returns the "bookmark-node" property of |widget| casted to the correct type. 59 const BookmarkNode* BookmarkNodeForWidget(GtkWidget* widget); 60 61 // Set the colors on |label| as per the theme. 62 void SetButtonTextColors(GtkWidget* label, GtkThemeService* provider); 63 64 // Drag and drop. -------------------------------------------------------------- 65 66 // Get the DnD target mask for a bookmark drag. This will vary based on whether 67 // the node in question is a folder. 68 int GetCodeMask(bool folder); 69 70 // Pickle a node into a GtkSelection. 71 void WriteBookmarkToSelection(const BookmarkNode* node, 72 GtkSelectionData* selection_data, 73 guint target_type, 74 Profile* profile); 75 76 // Pickle a vector of nodes into a GtkSelection. 77 void WriteBookmarksToSelection(const std::vector<const BookmarkNode*>& nodes, 78 GtkSelectionData* selection_data, 79 guint target_type, 80 Profile* profile); 81 82 // Un-pickle node(s) from a GtkSelection. 83 // The last two arguments are out parameters. 84 std::vector<const BookmarkNode*> GetNodesFromSelection( 85 GdkDragContext* context, 86 GtkSelectionData* selection_data, 87 guint target_type, 88 Profile* profile, 89 gboolean* delete_selection_data, 90 gboolean* dnd_success); 91 92 // Unpickle a new bookmark of the CHROME_NAMED_URL drag type, and put it in 93 // the appropriate location in the model. 94 bool CreateNewBookmarkFromNamedUrl( 95 GtkSelectionData* selection_data, 96 BookmarkModel* model, 97 const BookmarkNode* parent, 98 int idx); 99 100 // Add the URIs in |selection_data| into the model at the given position. They 101 // will be added whether or not the URL is valid. 102 bool CreateNewBookmarksFromURIList( 103 GtkSelectionData* selection_data, 104 BookmarkModel* model, 105 const BookmarkNode* parent, 106 int idx); 107 108 // Add the "url\ntitle" combination into the model at the given position. 109 bool CreateNewBookmarkFromNetscapeURL( 110 GtkSelectionData* selection_data, 111 BookmarkModel* model, 112 const BookmarkNode* parent, 113 int idx); 114 115 // Returns a name for the given URL. Used for drags into bookmark areas when 116 // the source doesn't specify a title. 117 string16 GetNameForURL(const GURL& url); 118 119 } // namespace bookmark_utils 120 121 #endif // CHROME_BROWSER_UI_GTK_BOOKMARKS_BOOKMARK_UTILS_GTK_H_ 122