blob: 97eec88288745373c65d7db6ae5ba4bb63160aaa [file] [log] [blame]
[email protected]7f856be2008-10-29 23:38:061// Copyright (c) 2006-2008 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_BOOKMARKS_BOOKMARK_UTILS_H_
6#define CHROME_BROWSER_BOOKMARKS_BOOKMARK_UTILS_H_
7
8#include <vector>
9
[email protected]d7e85c52009-02-25 17:28:3010#include "base/gfx/native_widget_types.h"
[email protected]7f856be2008-10-29 23:38:0611#include "chrome/browser/bookmarks/bookmark_drag_data.h"
[email protected]140aea052009-05-05 00:35:0912#include "chrome/browser/bookmarks/bookmark_editor.h"
[email protected]9333f182008-12-09 17:34:1713#include "chrome/browser/history/snippet.h"
[email protected]7f856be2008-10-29 23:38:0614#include "webkit/glue/window_open_disposition.h"
15
[email protected]9333f182008-12-09 17:34:1716class BookmarkModel;
[email protected]7f856be2008-10-29 23:38:0617class BookmarkNode;
18class PageNavigator;
[email protected]44b2c8852009-03-18 00:57:4919class PrefService;
[email protected]7f856be2008-10-29 23:38:0620class Profile;
21
[email protected]7aa4c002009-03-12 19:10:2222namespace views {
23class DropTargetEvent;
24}
25
[email protected]7f856be2008-10-29 23:38:0626// A collection of bookmark utility functions used by various parts of the UI
27// that show bookmarks: bookmark manager, bookmark bar view ...
28namespace bookmark_utils {
29
[email protected]f28cbb72008-11-04 19:29:0830// Calculates the drop operation given |source_operations| and the ideal
31// set of drop operations (|operations|). This prefers the following ordering:
32// COPY, LINK then MOVE.
33int PreferredDropOperation(int source_operations, int operations);
[email protected]7f856be2008-10-29 23:38:0634
[email protected]7aa4c002009-03-12 19:10:2235// Returns the drag operations for the specified node.
[email protected]b3c33d462009-06-26 22:29:2036int BookmarkDragOperation(const BookmarkNode* node);
[email protected]7aa4c002009-03-12 19:10:2237
38// Returns the preferred drop operation on a bookmark menu/bar.
39// |parent| is the parent node the drop is to occur on and |index| the index the
40// drop is over.
41int BookmarkDropOperation(Profile* profile,
[email protected]fa5dfaf2009-06-02 22:12:0642 const views::DropTargetEvent& event,
43 const BookmarkDragData& data,
[email protected]b3c33d462009-06-26 22:29:2044 const BookmarkNode* parent,
[email protected]fa5dfaf2009-06-02 22:12:0645 int index);
[email protected]7aa4c002009-03-12 19:10:2246
47// Performs a drop of bookmark data onto |parent_node| at |index|. Returns the
48// type of drop the resulted.
49int PerformBookmarkDrop(Profile* profile,
[email protected]fa5dfaf2009-06-02 22:12:0650 const BookmarkDragData& data,
[email protected]b3c33d462009-06-26 22:29:2051 const BookmarkNode* parent_node,
[email protected]fa5dfaf2009-06-02 22:12:0652 int index);
[email protected]7aa4c002009-03-12 19:10:2253
[email protected]7f856be2008-10-29 23:38:0654// Returns true if the bookmark data can be dropped on |drop_parent| at
55// |index|. A drop from a separate profile is always allowed, where as
56// a drop from the same profile is only allowed if none of the nodes in
57// |data| are an ancestor of |drop_parent| and one of the nodes isn't already
58// a child of |drop_parent| at |index|.
59bool IsValidDropLocation(Profile* profile,
60 const BookmarkDragData& data,
[email protected]b3c33d462009-06-26 22:29:2061 const BookmarkNode* drop_parent,
[email protected]7f856be2008-10-29 23:38:0662 int index);
63
64// Clones drag data, adding newly created nodes to |parent| starting at
65// |index_to_add_at|.
66void CloneDragData(BookmarkModel* model,
67 const std::vector<BookmarkDragData::Element>& elements,
[email protected]b3c33d462009-06-26 22:29:2068 const BookmarkNode* parent,
[email protected]7f856be2008-10-29 23:38:0669 int index_to_add_at);
70
71// Recursively opens all bookmarks. |initial_disposition| dictates how the
72// first URL is opened, all subsequent URLs are opened as background tabs.
73// |navigator| is used to open the URLs. If |navigator| is NULL the last
74// tabbed browser with the profile |profile| is used. If there is no browser
75// with the specified profile a new one is created.
[email protected]6128eae2009-05-27 22:00:3976void OpenAll(gfx::NativeView parent,
[email protected]7f856be2008-10-29 23:38:0677 Profile* profile,
78 PageNavigator* navigator,
[email protected]b3c33d462009-06-26 22:29:2079 const std::vector<const BookmarkNode*>& nodes,
[email protected]7f856be2008-10-29 23:38:0680 WindowOpenDisposition initial_disposition);
81
82// Convenience for opening a single BookmarkNode.
[email protected]6128eae2009-05-27 22:00:3983void OpenAll(gfx::NativeView parent,
[email protected]7f856be2008-10-29 23:38:0684 Profile* profile,
85 PageNavigator* navigator,
[email protected]b3c33d462009-06-26 22:29:2086 const BookmarkNode* node,
[email protected]7f856be2008-10-29 23:38:0687 WindowOpenDisposition initial_disposition);
88
[email protected]fafc8a422008-11-07 17:53:0989// Copies nodes onto the clipboard. If |remove_nodes| is true the nodes are
90// removed after copied to the clipboard. The nodes are copied in such a way
91// that if pasted again copies are made.
92void CopyToClipboard(BookmarkModel* model,
[email protected]b3c33d462009-06-26 22:29:2093 const std::vector<const BookmarkNode*>& nodes,
[email protected]fafc8a422008-11-07 17:53:0994 bool remove_nodes);
95
96// Pastes from the clipboard. The new nodes are added to |parent|, unless
97// |parent| is null in which case this does nothing. The nodes are inserted
98// at |index|. If |index| is -1 the nodes are added to the end.
99void PasteFromClipboard(BookmarkModel* model,
[email protected]b3c33d462009-06-26 22:29:20100 const BookmarkNode* parent,
[email protected]fafc8a422008-11-07 17:53:09101 int index);
102
103// Returns true if the user can copy from the pasteboard.
[email protected]b3c33d462009-06-26 22:29:20104bool CanPasteFromClipboard(const BookmarkNode* node);
[email protected]fafc8a422008-11-07 17:53:09105
[email protected]9333f182008-12-09 17:34:17106// Returns a vector containing up to |max_count| of the most recently modified
107// groups. This never returns an empty vector.
[email protected]b3c33d462009-06-26 22:29:20108std::vector<const BookmarkNode*> GetMostRecentlyModifiedGroups(
109 BookmarkModel* model, size_t max_count);
[email protected]9333f182008-12-09 17:34:17110
111// Returns the most recently added bookmarks. This does not return groups,
112// only nodes of type url.
113void GetMostRecentlyAddedEntries(BookmarkModel* model,
114 size_t count,
[email protected]b3c33d462009-06-26 22:29:20115 std::vector<const BookmarkNode*>* nodes);
[email protected]9333f182008-12-09 17:34:17116
117// Used by GetBookmarksMatchingText to return a matching node and the location
118// of the match in the title.
119struct TitleMatch {
[email protected]b3c33d462009-06-26 22:29:20120 const BookmarkNode* node;
[email protected]9333f182008-12-09 17:34:17121
122 // Location of the matching words in the title of the node.
123 Snippet::MatchPositions match_positions;
124};
125
[email protected]9333f182008-12-09 17:34:17126// Returns true if |n1| was added more recently than |n2|.
[email protected]b3c33d462009-06-26 22:29:20127bool MoreRecentlyAdded(const BookmarkNode* n1, const BookmarkNode* n2);
[email protected]9333f182008-12-09 17:34:17128
[email protected]cb362ccc2008-12-10 17:22:32129// Returns up to |max_count| bookmarks from |model| whose url or title contains
[email protected]fa5dfaf2009-06-02 22:12:06130// the text |text|. |languages| is user's accept-language setting to decode
131// IDN.
[email protected]cb362ccc2008-12-10 17:22:32132void GetBookmarksContainingText(BookmarkModel* model,
133 const std::wstring& text,
134 size_t max_count,
[email protected]fa5dfaf2009-06-02 22:12:06135 const std::wstring& languages,
[email protected]b3c33d462009-06-26 22:29:20136 std::vector<const BookmarkNode*>* nodes);
[email protected]cb362ccc2008-12-10 17:22:32137
138// Returns true if |node|'s url or title contains the string |text|.
[email protected]fa5dfaf2009-06-02 22:12:06139// |languages| is user's accept-language setting to decode IDN.
[email protected]b3c33d462009-06-26 22:29:20140bool DoesBookmarkContainText(const BookmarkNode* node,
[email protected]fa5dfaf2009-06-02 22:12:06141 const std::wstring& text,
142 const std::wstring& languages);
[email protected]cb362ccc2008-12-10 17:22:32143
[email protected]140aea052009-05-05 00:35:09144// Modifies a bookmark node (assuming that there's no magic that needs to be
[email protected]a8d71b02009-07-07 00:36:34145// done regarding moving from one folder to another). If the URL changed or a
146// new node is explicitly being added, returns a pointer to the new node that
147// was created. Otherwise the return value is identically |node|.
148const BookmarkNode* ApplyEditsWithNoGroupChange(
149 BookmarkModel* model,
150 const BookmarkNode* parent,
151 const BookmarkNode* node,
152 const std::wstring& new_title,
153 const GURL& new_url,
154 BookmarkEditor::Handler* handler);
[email protected]140aea052009-05-05 00:35:09155
156// Modifies a bookmark node assuming that the parent of the node may have
[email protected]a8d71b02009-07-07 00:36:34157// changed and the node will need to be removed and reinserted. If the URL
158// changed or a new node is explicitly being added, returns a pointer to the
159// new node that was created. Otherwise the return value is identically |node|.
160const BookmarkNode* ApplyEditsWithPossibleGroupChange(
161 BookmarkModel* model,
162 const BookmarkNode* new_parent,
163 const BookmarkNode* node,
164 const std::wstring& new_title,
165 const GURL& new_url,
166 BookmarkEditor::Handler* handler);
[email protected]140aea052009-05-05 00:35:09167
[email protected]44b2c8852009-03-18 00:57:49168// Toggles whether the bookmark bar is shown only on the new tab page or on
169// all tabs. This is a preference modifier, not a visual modifier.
170void ToggleWhenVisible(Profile* profile);
171
[email protected]1e7bab72009-06-03 17:23:36172// Register local state prefs for bookmark bar view.
173void RegisterPrefs(PrefService* prefs);
174
[email protected]44b2c8852009-03-18 00:57:49175// Register user prefs for BookmarkBar, BookmarkView, ...
176void RegisterUserPrefs(PrefService* prefs);
177
[email protected]f785ad12008-11-19 23:01:28178// Number of bookmarks we'll open before prompting the user to see if they
179// really want to open all.
180//
181// NOTE: treat this as a const. It is not const as various tests change the
182// value.
183extern int num_urls_before_prompting;
184
[email protected]7f856be2008-10-29 23:38:06185} // namespace bookmark_utils
186
187#endif // CHROME_BROWSER_BOOKMARKS_BOOKMARK_UTILS_H_