Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: chrome/browser/views/bookmark_folder_tree_view.h

Issue 1730015: Windows/Views: delete native bookmark manager code. (Closed)
Patch Set: Patch with fixed file perms. Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // 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_VIEWS_BOOKMARK_FOLDER_TREE_VIEW_H_
6 #define CHROME_BROWSER_VIEWS_BOOKMARK_FOLDER_TREE_VIEW_H_
7
8 #include "base/timer.h"
9 #include "chrome/browser/bookmarks/bookmark_drag_data.h"
10 #include "chrome/browser/bookmarks/bookmark_drop_info.h"
11 #include "chrome/browser/bookmarks/bookmark_folder_tree_model.h"
12 #include "views/controls/tree/tree_view.h"
13
14 class BookmarkModel;
15 class BookmarkNode;
16 class OSExchangeData;
17 class Profile;
18
19 // BookmarkFolderTreeView is used to show the contents of a
20 // BookmarkFolderTreeModel and provides drag and drop support.
21 class BookmarkFolderTreeView : public views::TreeView {
22 public:
23 BookmarkFolderTreeView(Profile* profile, BookmarkFolderTreeModel* model);
24
25 // Drag and drop methods.
26 virtual bool CanDrop(const OSExchangeData& data);
27 virtual void OnDragEntered(const views::DropTargetEvent& event);
28 virtual int OnDragUpdated(const views::DropTargetEvent& event);
29 virtual void OnDragExited();
30 virtual int OnPerformDrop(const views::DropTargetEvent& event);
31
32 // Returns the selected node as a BookmarkNode. This returns NULL if the
33 // selected node is not of type BookmarkFolderTreeModel::BOOKMARK or
34 // nothing is selected.
35 const BookmarkNode* GetSelectedBookmarkNode();
36
37 protected:
38 // Overriden to start a drag.
39 virtual LRESULT OnNotify(int w_param, LPNMHDR l_param);
40
41 private:
42 // DropPosition identifies where the drop should occur. A DropPosition
43 // consists of the following: the parent FolderNode the drop is to occur at,
44 // whether the drop is on the parent, and the index into the parent the drop
45 // should occur at.
46 //
47 // WARNING: the index is in terms of the BookmarkFolderTreeModel, which is
48 // not the same as the BookmarkModel.
49 struct DropPosition {
50 DropPosition() : parent(NULL), index(-1), on(false) {}
51 DropPosition(FolderNode* parent, int index, bool on)
52 : parent(parent),
53 index(index),
54 on(on) {}
55
56 // Returns true if |position| equals this.
57 bool equals(const DropPosition& position) const {
58 return (position.parent == parent && position.index == index &&
59 position.on == on);
60 }
61
62 FolderNode* parent;
63 int index;
64 bool on;
65 };
66
67 // Provides information used during a drop.
68 class DropInfo : public BookmarkDropInfo {
69 public:
70 explicit DropInfo(BookmarkFolderTreeView* view)
71 : BookmarkDropInfo(view->GetNativeControlHWND(), 0),
72 view_(view),
73 only_folders_(true) {}
74
75 virtual void Scrolled();
76
77 // Does drag_data consists of folders only?
78 void set_only_folders(bool only_folders) { only_folders_ = only_folders; }
79 bool only_folders() const { return only_folders_; }
80
81 // Position of the drop.
82 void set_position(const DropPosition& position) { position_ = position; }
83 const DropPosition& position() const { return position_; }
84
85 private:
86 BookmarkFolderTreeView* view_;
87 DropPosition position_;
88 bool only_folders_;
89
90 DISALLOW_COPY_AND_ASSIGN(DropInfo);
91 };
92 friend class DropInfo;
93
94 // Updates drop info. This is invoked both from OnDragUpdated and when we
95 // autoscroll during a drop.
96 int UpdateDropInfo();
97
98 // Starts a drag operation for the specified node.
99 void BeginDrag(const BookmarkNode* node);
100
101 // Calculates the drop position.
102 DropPosition CalculateDropPosition(int y, bool only_folders);
103
104 // Determines the appropriate drop operation. This returns DRAG_NONE
105 // if the position is not valid.
106 int CalculateDropOperation(const DropPosition& position);
107
108 // Performs the drop operation.
109 void OnPerformDropImpl();
110
111 // Sets the drop position.
112 void SetDropPosition(const DropPosition& position);
113
114 // Returns the model as a BookmarkFolderTreeModel.
115 BookmarkFolderTreeModel* folder_model() const;
116
117 // Converts FolderNode into a BookmarkNode.
118 const BookmarkNode* TreeNodeAsBookmarkNode(FolderNode* node);
119
120 // Converts the position in terms of the BookmarkFolderTreeModel to an index
121 // in terms of the BookmarkModel. The returned index is the index the drop
122 // should occur at in terms of the BookmarkModel.
123 int FolderIndexToBookmarkIndex(const DropPosition& position);
124
125 Profile* profile_;
126
127 // Non-null during a drop.
128 scoped_ptr<DropInfo> drop_info_;
129
130 // Did we originate the drag?
131 bool is_dragging_;
132
133 DISALLOW_COPY_AND_ASSIGN(BookmarkFolderTreeView);
134 };
135
136 #endif // CHROME_BROWSER_VIEWS_BOOKMARK_FOLDER_TREE_VIEW_H_
OLDNEW
« no previous file with comments | « chrome/browser/views/bookmark_context_menu_controller_views.cc ('k') | chrome/browser/views/bookmark_folder_tree_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698