Home | History | Annotate | Download | only in bookmarks
      1 // Copyright (c) 2010 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_EDITOR_H_
      6 #define CHROME_BROWSER_BOOKMARKS_BOOKMARK_EDITOR_H_
      7 #pragma once
      8 
      9 #include <utility>
     10 #include <vector>
     11 
     12 #include "base/string16.h"
     13 #include "ui/gfx/native_widget_types.h"
     14 
     15 class BookmarkNode;
     16 class GURL;
     17 class Profile;
     18 
     19 // Small, cross platform interface that shows the correct platform specific
     20 // bookmark editor dialog.
     21 class BookmarkEditor {
     22  public:
     23   // An enumeration of the possible configurations offered.
     24   enum Configuration {
     25     SHOW_TREE,
     26     NO_TREE
     27   };
     28 
     29   // Describes what the user is editing.
     30   struct EditDetails {
     31     enum Type {
     32       // The user is editing an existing node in the model. The node the user
     33       // is editing is set in |existing_node|.
     34       EXISTING_NODE,
     35 
     36       // A new bookmark should be created if the user accepts the edit.
     37       // |existing_node| is null in this case.
     38       NEW_URL,
     39 
     40       // A new folder bookmark should be created if the user accepts the edit.
     41       // The contents of the folder should be that of |urls|.
     42       // |existing_node| is null in this case.
     43       NEW_FOLDER
     44     };
     45 
     46     EditDetails();
     47     explicit EditDetails(const BookmarkNode* node);
     48     ~EditDetails();
     49 
     50     // See description of enum value for details.
     51     Type type;
     52 
     53     // If type == EXISTING_NODE this gives the existing node.
     54     const BookmarkNode* existing_node;
     55 
     56     // If type == NEW_FOLDER, this is the urls/title pairs to add to the
     57     // folder.
     58     std::vector<std::pair<GURL, string16> > urls;
     59   };
     60 
     61   // Shows the bookmark editor. The bookmark editor allows editing an
     62   // existing node or creating a new bookmark node (as determined by
     63   // |details.type|). If |configuration| is SHOW_TREE, a tree is shown allowing
     64   // the user to choose the parent of the node.
     65   // |parent| gives the initial parent to select in the tree for the node.
     66   // |parent| is only used if |details.existing_node| is null.
     67   static void Show(gfx::NativeWindow parent_window,
     68                    Profile* profile,
     69                    const BookmarkNode* parent,
     70                    const EditDetails& details,
     71                    Configuration configuration);
     72 };
     73 
     74 #endif  // CHROME_BROWSER_BOOKMARKS_BOOKMARK_EDITOR_H_
     75