Home | History | Annotate | Download | only in bookmarks
      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