Index: ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h |
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h b/ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..af28381b87b8c122bde95dc88488487db35673d6 |
--- /dev/null |
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h |
@@ -0,0 +1,193 @@ |
+// Copyright (c) 2014 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 IOS_CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_UTILS_IOS_H_ |
+#define IOS_CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_UTILS_IOS_H_ |
+ |
+#import <UIKit/UIKit.h> |
+#include <set> |
+#include <vector> |
+ |
+#include "base/memory/scoped_vector.h" |
+#include "base/strings/string16.h" |
+#include "base/time/time.h" |
+ |
+@class BookmarkCell; |
+@class BookmarkMenuItem; |
+@class BookmarkPositionCache; |
+class GURL; |
+ |
+namespace bookmarks { |
+class BookmarkModel; |
+class BookmarkNode; |
+} // namespace bookmarks |
+ |
+namespace ios { |
+class ChromeBrowserState; |
+} // namespace ios |
+ |
+namespace bookmark_utils_ios { |
+ |
+typedef std::vector<const bookmarks::BookmarkNode*> NodeVector; |
+typedef std::set<const bookmarks::BookmarkNode*> NodeSet; |
+ |
+// The iOS code is doing some munging of the bookmark folder names in order |
+// to display a slighly different wording for the default folders. |
+NSString* TitleForBookmarkNode(const bookmarks::BookmarkNode* node); |
+ |
+// Returns the default color for |url| when no image is available. |
+UIColor* DefaultColor(const GURL& url); |
+ |
+// Returns the subtitle relevant to the bookmark navigation ui. |
+NSString* subtitleForBookmarkNode(const bookmarks::BookmarkNode* node); |
+ |
+// This margin is designed to align with the menu button in the navigation bar. |
+extern const CGFloat menuMargin; |
+// The margin from the left of the screen for the title of the navigation bar. |
+extern const CGFloat titleMargin; |
+// The distance between the icon in hamburger menu and the menu item title. |
+extern const CGFloat titleToIconDistance; |
+// The amount of time it takes to show or hide the bookmark menu. |
+extern const CGFloat menuAnimationDuration; |
+ |
+// On iPad, background color can be transparent. Wrapper for the light grey |
+// background color. |
+UIColor* mainBackgroundColor(); |
+// Returns the menu's background color. White when the menu is in a slide over |
+// panel, transparent otherwise. |
+UIColor* menuBackgroundColor(); |
+// Primary title labels use this color. |
+UIColor* darkTextColor(); |
+// Secondary title labels use this color. |
+UIColor* lightTextColor(); |
+// The color to use if the text needs to change color when highlighted. |
+UIColor* highlightedDarkTextColor(); |
+// The color used for the editing bar. |
+UIColor* blueColor(); |
+// The color used for the navigation bar. |
+UIColor* GrayColor(); |
+// The gray color for line separators. |
+UIColor* separatorColor(); |
+// The black color for the folder labels. |
+UIColor* FolderLabelColor(); |
+ |
+// Returns the current status bar height. |
+CGFloat StatusBarHeight(); |
+ |
+// Returns whether the bookmark menu should be presented in a slide in panel. |
+BOOL bookmarkMenuIsInSlideInPanel(); |
+ |
+// Creates a drop shadow with the given width. |
+UIView* dropShadowWithWidth(CGFloat width); |
+ |
+#pragma mark - Updating Bookmarks |
+ |
+// Creates the bookmark if |node| is NULL. Otherwise updates |node|. |
+// |folder| is the intended parent of |node|. |
+// A snackbar is presented, that let the user undo the changes. |
+void CreateOrUpdateBookmarkWithUndoToast( |
+ const bookmarks::BookmarkNode* node, |
+ NSString* title, |
+ const GURL& url, |
+ const bookmarks::BookmarkNode* folder, |
+ bookmarks::BookmarkModel* bookmark_model, |
+ ios::ChromeBrowserState* browser_state); |
+ |
+// Deletes all bookmarks in |model| that are in |bookmarks|, and presents a |
+// snackbar with an undo action. |
+void DeleteBookmarksWithUndoToast( |
+ const std::set<const bookmarks::BookmarkNode*>& bookmarks, |
+ bookmarks::BookmarkModel* model, |
+ ios::ChromeBrowserState* browser_state); |
+ |
+// Deletes all nodes in |bookmarks|. |
+void DeleteBookmarks(const std::set<const bookmarks::BookmarkNode*>& bookmarks, |
+ bookmarks::BookmarkModel* model); |
+ |
+// Move all |bookmarks| to the given |folder|, and presents a snackbar with an |
+// undo action. |
+void MoveBookmarksWithUndoToast( |
+ const std::set<const bookmarks::BookmarkNode*>& bookmarks, |
+ bookmarks::BookmarkModel* model, |
+ const bookmarks::BookmarkNode* folder, |
+ ios::ChromeBrowserState* browser_state); |
+ |
+// Move all |bookmarks| to the given |folder|. |
+// Returns whether this method actually moved bookmarks (for example, only |
+// moving a folder to its parent will return |false|). |
+bool MoveBookmarks(const std::set<const bookmarks::BookmarkNode*>& bookmarks, |
+ bookmarks::BookmarkModel* model, |
+ const bookmarks::BookmarkNode* folder); |
+ |
+// Category name for all bookmarks related snackbars. |
+extern NSString* const kBookmarksSnackbarCategory; |
+ |
+// Returns the parent, if all the bookmarks are siblings. |
+// Otherwise returns the mobile_node. |
+const bookmarks::BookmarkNode* defaultMoveFolder( |
+ const std::set<const bookmarks::BookmarkNode*>& bookmarks, |
+ bookmarks::BookmarkModel* model); |
+ |
+#pragma mark - Segregation of nodes by time. |
+ |
+// A container for nodes which have been aggregated by some time property. |
+// e.g. (creation date) or (last access date). |
+class NodesSection { |
+ public: |
+ NodesSection(); |
+ virtual ~NodesSection(); |
+ |
+ // |vector| is sorted by the relevant time property. |
+ NodeVector vector; |
+ // A representative time of all nodes in vector. |
+ base::Time time; |
+ // A string representation of |time|. |
+ // e.g. (March 2014) or (4 March 2014). |
+ std::string timeRepresentation; |
+}; |
+ |
+// Given the nodes in |vector|, segregates them by some time property into |
+// NodesSections. |
+// Automatically clears, populates and sorts |nodesSectionVector|. |
+// This method is not thread safe - it should only be called from the ui thread. |
+void segregateNodes(const NodeVector& vector, |
+ ScopedVector<NodesSection>& nodesSectionVector); |
+ |
+#pragma mark - Useful bookmark manipulation. |
+ |
+// Sorts a vector full of folders by title. |
+void SortFolders(NodeVector* vector); |
+ |
+// Returns a vector of root level folders and all their folder descendants, |
+// sorted depth-first, then alphabetically. The returned nodes are visible, and |
+// are guaranteed to not be descendants of any nodes in |obstructions|. |
+NodeVector VisibleNonDescendantNodes(const NodeSet& obstructions, |
+ bookmarks::BookmarkModel* model); |
+ |
+// Whether |vector1| contains only elements of |vector2| in the same order. |
+BOOL IsSubvectorOfNodes(const NodeVector& vector1, const NodeVector& vector2); |
+ |
+// Returns the indices in |vector2| of the items in |vector2| that are not |
+// present in |vector1|. |
+// |vector1| MUST be a subvector of |vector2| in the sense of |IsSubvector|. |
+std::vector<NodeVector::size_type> MissingNodesIndices( |
+ const NodeVector& vector1, |
+ const NodeVector& vector2); |
+ |
+#pragma mark - Cache position in collection view. |
+ |
+// Caches the active menu item, and the position in the collection view. |
+void CachePosition(CGFloat position, BookmarkMenuItem* item); |
+// Returns YES if a valid cache exists. |
+// |model| must be loaded. |
+// |item| and |position| are out variables, only populated if the return is YES. |
+BOOL GetPositionCache(bookmarks::BookmarkModel* model, |
+ BookmarkMenuItem** item, |
+ CGFloat* position); |
+// Method exists for testing. |
+void ClearPositionCache(); |
+ |
+} // namespace bookmark_utils_ios |
+ |
+#endif // IOS_CHROME_BROWSER_UI_BOOKMARKS_BOOKMARK_UTILS_IOS_H_ |