annotate demos/browser/bookmarks.d @ 45:71b382c10ef6

add coarse and incomplete QT browser port
author mandel
date Sun, 17 May 2009 18:49:59 +0000
parents
children b149ef2cb18b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1 /****************************************************************************
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
2 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
4 ** Contact: Qt Software Information (qt-info@nokia.com)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
5 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
6 ** This file is part of the demonstration applications of the Qt Toolkit.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
7 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
8 ** $QT_BEGIN_LICENSE:LGPL$
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
9 ** Commercial Usage
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
10 ** Licensees holding valid Qt Commercial licenses may use this file in
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
11 ** accordance with the Qt Commercial License Agreement provided with the
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
12 ** Software or, alternatively, in accordance with the terms contained in
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
13 ** a written agreement between you and Nokia.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
14 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
15 ** GNU Lesser General Public License Usage
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
16 ** Alternatively, this file may be used under the terms of the GNU Lesser
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
17 ** General Public License version 2.1 as published by the Free Software
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
18 ** Foundation and appearing in the file LICENSE.LGPL included in the
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
19 ** packaging of this file. Please review the following information to
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
20 ** ensure the GNU Lesser General Public License version 2.1 requirements
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
21 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
22 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
23 ** In addition, as a special exception, Nokia gives you certain
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
24 ** additional rights. These rights are described in the Nokia Qt LGPL
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
26 ** package.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
27 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
28 ** GNU General Public License Usage
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
29 ** Alternatively, this file may be used under the terms of the GNU
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
30 ** General Public License version 3.0 as published by the Free Software
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
31 ** Foundation and appearing in the file LICENSE.GPL included in the
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
32 ** packaging of this file. Please review the following information to
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
33 ** ensure the GNU General Public License version 3.0 requirements will be
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
34 ** met: http://www.gnu.org/copyleft/gpl.html.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
35 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
36 ** If you are unsure which license is appropriate for your use, please
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
37 ** contact the sales department at qt-sales@nokia.com.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
38 ** $QT_END_LICENSE$
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
39 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
40 ****************************************************************************/
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
41
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
42 import QtCore.QObject;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
43 import QtCore.QAbstractItemModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
44
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
45 import QtGui.QUndoCommand;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
46
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
47
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
48 import bookmarks;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
49
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
50 import autosaver;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
51 import browserapplication;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
52 import history;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
53 import xbel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
54
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
55 import QtCore.QBuffer;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
56 import QtCore.QFile;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
57 import QtCore.QMimeData;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
58
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
59 import QtGui.QDesktopServices;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
60 import QtGui.QDragEnterEvent;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
61 import QtGui.QFileDialog;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
62 import QtGui.QHeaderView;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
63 import QtGui.QIcon;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
64 import QtGui.QMessageBox;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
65 import QtGui.QToolButton;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
66
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
67 import QtWebKit.QWebSettings;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
68
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
69 import QtCore.QDebug;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
70
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
71 const char[] BOOKMARKBAR = "Bookmarks Bar";
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
72 const char[] BOOKMARKMENU = "Bookmarks Menu";
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
73
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
74
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
75 /*!
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
76 Bookmark manager, owner of the bookmarks, loads, saves and basic tasks
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
77 */
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
78 /*
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
79 class AutoSaver;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
80 class BookmarkNode;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
81 class BookmarksModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
82 */
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
83 class BookmarksManager : public QObject
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
84 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
85 Q_OBJECT
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
86
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
87 signals:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
88 void entryAdded(BookmarkNode *item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
89 void entryRemoved(BookmarkNode *parent, int row, BookmarkNode *item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
90 void entryChanged(BookmarkNode *item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
91
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
92 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
93 BookmarksManager(QObject *parent = null)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
94 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
95 super(parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
96 m_loaded = false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
97 m_saveTimer = new AutoSaver(this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
98 m_bookmarkRootNode = null;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
99 m_bookmarkModel = null;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
100 connect(this, SIGNAL(entryAdded(BookmarkNode *)),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
101 m_saveTimer, SLOT(changeOccurred()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
102 connect(this, SIGNAL(entryRemoved(BookmarkNode *, int, BookmarkNode *)),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
103 m_saveTimer, SLOT(changeOccurred()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
104 connect(this, SIGNAL(entryChanged(BookmarkNode *)),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
105 m_saveTimer, SLOT(changeOccurred()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
106 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
107
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
108
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
109 ~this()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
110 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
111 m_saveTimer.saveIfNeccessary();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
112 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
113
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
114
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
115 void addBookmark(BookmarkNode *parent, BookmarkNode *node, int row = -1)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
116 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
117 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
118 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
119 Q_ASSERT(parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
120 InsertBookmarksCommand *command = new InsertBookmarksCommand(this, parent, node, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
121 m_commands.push(command);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
122 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
123
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
124
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
125 void removeBookmark(BookmarkNode *node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
126 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
127 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
128 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
129
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
130 Q_ASSERT(node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
131 BookmarkNode *parent = node.parent();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
132 int row = parent.children().indexOf(node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
133 RemoveBookmarksCommand *command = new RemoveBookmarksCommand(this, parent, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
134 m_commands.push(command);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
135 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
136
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
137 void setTitle(BookmarkNode *node, QString &newTitle);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
138 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
139 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
140 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
141
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
142 Q_ASSERT(node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
143 ChangeBookmarkCommand *command = new ChangeBookmarkCommand(this, node, newTitle, true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
144 m_commands.push(command);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
145 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
146
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
147
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
148 void setUrl(BookmarkNode *node, QString &newUrl);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
149 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
150 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
151 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
152
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
153 Q_ASSERT(node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
154 ChangeBookmarkCommand *command = new ChangeBookmarkCommand(this, node, newUrl, false);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
155 m_commands.push(command);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
156 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
157
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
158
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
159 void changeExpanded()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
160 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
161 m_saveTimer.changeOccurred();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
162 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
163
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
164 BookmarkNode *bookmarks();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
165 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
166 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
167 load();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
168 return m_bookmarkRootNode;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
169 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
170
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
171 BookmarkNode *menu();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
172 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
173 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
174 load();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
175
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
176 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
177 BookmarkNode *node = m_bookmarkRootNode.children().at(i);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
178 if (node.title == tr(BOOKMARKMENU))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
179 return node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
180 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
181 Q_ASSERT(false);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
182 return 0;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
183 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
184
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
185 BookmarkNode *toolbar();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
186 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
187 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
188 load();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
189
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
190 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
191 BookmarkNode *node = m_bookmarkRootNode.children().at(i);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
192 if (node.title == tr(BOOKMARKBAR))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
193 return node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
194 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
195 Q_ASSERT(false);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
196 return 0;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
197 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
198
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
199 BookmarksModel* bookmarksModel()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
200 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
201 if (!m_bookmarkModel)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
202 m_bookmarkModel = new BookmarksModel(this, this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
203 return m_bookmarkModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
204 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
205
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
206 QUndoStack *undoRedoStack() { return &m_commands; };
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
207
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
208 public slots:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
209 void importBookmarks()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
210 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
211 QString fileName = QFileDialog::getOpenFileName(0, tr("Open File"),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
212 QString(),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
213 tr("XBEL (*.xbel *.xml)"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
214 if (fileName.isEmpty())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
215 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
216
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
217 XbelReader reader;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
218 BookmarkNode *importRootNode = reader.read(fileName);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
219 if (reader.error() != QXmlStreamReader::NoError) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
220 QMessageBox::warning(0, QLatin1String("Loading Bookmark"),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
221 tr("Error when loading bookmarks on line %1, column %2:\n"
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
222 "%3").arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.errorString()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
223 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
224
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
225 importRootNode.setType(BookmarkNode::Folder);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
226 importRootNode.title = (tr("Imported %1").arg(QDate::currentDate().toString(Qt.SystemLocaleShortDate)));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
227 addBookmark(menu(), importRootNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
228 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
229
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
230
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
231 void exportBookmarks()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
232 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
233 QString fileName = QFileDialog::getSaveFileName(0, tr("Save File"),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
234 tr("%1 Bookmarks.xbel").arg(QCoreApplication::applicationName()),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
235 tr("XBEL (*.xbel *.xml)"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
236 if (fileName.isEmpty())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
237 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
238
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
239 XbelWriter writer;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
240 if (!writer.write(fileName, m_bookmarkRootNode))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
241 QMessageBox::critical(0, tr("Export error"), tr("error saving bookmarks"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
242 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
243
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
244 private slots:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
245 void save()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
246 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
247 if (!m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
248 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
249
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
250 XbelWriter writer;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
251 QString dir = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
252 QString bookmarkFile = dir + QLatin1String("/bookmarks.xbel");
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
253 if (!writer.write(bookmarkFile, m_bookmarkRootNode))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
254 qWarning() << "BookmarkManager: error saving to" << bookmarkFile;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
255 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
256
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
257 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
258 void load()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
259 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
260 if (m_loaded)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
261 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
262 m_loaded = true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
263
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
264 QString dir = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
265 QString bookmarkFile = dir + QLatin1String("/bookmarks.xbel");
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
266 if (!QFile::exists(bookmarkFile))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
267 bookmarkFile = QLatin1String(":defaultbookmarks.xbel");
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
268
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
269 XbelReader reader;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
270 m_bookmarkRootNode = reader.read(bookmarkFile);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
271 if (reader.error() != QXmlStreamReader::NoError) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
272 QMessageBox::warning(0, QLatin1String("Loading Bookmark"),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
273 tr("Error when loading bookmarks on line %1, column %2:\n"
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
274 "%3").arg(reader.lineNumber()).arg(reader.columnNumber()).arg(reader.errorString()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
275 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
276
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
277 BookmarkNode *toolbar = null;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
278 BookmarkNode *menu = null;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
279 QList<BookmarkNode*> others;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
280 for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
281 BookmarkNode *node = m_bookmarkRootNode.children().at(i);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
282 if (node.type() == BookmarkNode::Folder) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
283 // Automatically convert
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
284 if (node.title == tr("Toolbar Bookmarks") && !toolbar) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
285 node.title = tr(BOOKMARKBAR);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
286 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
287 if (node.title == tr(BOOKMARKBAR) && !toolbar) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
288 toolbar = node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
289 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
290
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
291 // Automatically convert
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
292 if (node.title == tr("Menu") && !menu) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
293 node.title = tr(BOOKMARKMENU);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
294 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
295 if (node.title == tr(BOOKMARKMENU) && !menu) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
296 menu = node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
297 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
298 } else {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
299 others.append(node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
300 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
301 m_bookmarkRootNode.remove(node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
302 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
303 Q_ASSERT(m_bookmarkRootNode.children().count() == 0);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
304 if (!toolbar) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
305 toolbar = new BookmarkNode(BookmarkNode::Folder, m_bookmarkRootNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
306 toolbar.title = tr(BOOKMARKBAR);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
307 } else {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
308 m_bookmarkRootNode.add(toolbar);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
309 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
310
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
311 if (!menu) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
312 menu = new BookmarkNode(BookmarkNode::Folder, m_bookmarkRootNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
313 menu.title = tr(BOOKMARKMENU);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
314 } else {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
315 m_bookmarkRootNode.add(menu);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
316 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
317
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
318 for (int i = 0; i < others.count(); ++i)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
319 menu.add(others.at(i));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
320 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
321
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
322
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
323 bool m_loaded;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
324 AutoSaver *m_saveTimer;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
325 BookmarkNode *m_bookmarkRootNode;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
326 BookmarksModel *m_bookmarkModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
327 QUndoStack m_commands;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
328
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
329 friend class RemoveBookmarksCommand;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
330 friend class ChangeBookmarkCommand;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
331 };
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
332
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
333 class RemoveBookmarksCommand : public QUndoCommand
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
334 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
335
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
336 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
337 this(BookmarksManager *m_bookmarkManagaer, BookmarkNode *parent, int row)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
338 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
339 super(BookmarksManager::tr("Remove Bookmark"))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
340 m_row = row;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
341 m_bookmarkManagaer = m_bookmarkManagaer;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
342 m_node = parent.children().value(row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
343 m_parent = parent;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
344 m_done = false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
345 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
346
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
347 ~this()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
348 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
349 if (m_done && !m_node.parent()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
350 delete m_node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
351 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
352 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
353
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
354 void undo()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
355 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
356 m_parent.add(m_node, m_row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
357 emit m_bookmarkManagaer.entryAdded(m_node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
358 m_done = false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
359 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
360
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
361 void redo()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
362 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
363 m_parent.remove(m_node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
364 emit m_bookmarkManagaer.entryRemoved(m_parent, m_row, m_node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
365 m_done = true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
366 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
367
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
368 protected:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
369 int m_row;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
370 BookmarksManager *m_bookmarkManagaer;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
371 BookmarkNode *m_node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
372 BookmarkNode *m_parent;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
373 bool m_done;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
374 };
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
375
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
376 class InsertBookmarksCommand : public RemoveBookmarksCommand
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
377 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
378
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
379 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
380 this(BookmarksManager *m_bookmarkManagaer,
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
381 BookmarkNode *parent, BookmarkNode *node, int row)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
382 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
383 super(m_bookmarkManagaer, parent, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
384
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
385 setText(BookmarksManager::tr("Insert Bookmark"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
386 m_node = node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
387 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
388
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
389 void undo() { RemoveBookmarksCommand::redo(); }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
390 void redo() { RemoveBookmarksCommand::undo(); }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
391 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
392
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
393 class ChangeBookmarkCommand : public QUndoCommand
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
394 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
395
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
396 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
397 this(BookmarksManager *m_bookmarkManagaer,
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
398 BookmarkNode *node, QString &newValue, bool title)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
399 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
400 super();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
401 m_bookmarkManagaer = m_bookmarkManagaer;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
402 m_title = title;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
403 m_newValue = newValue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
404 m_node = node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
405 if (m_title) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
406 m_oldValue = m_node.title;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
407 setText(BookmarksManager::tr("Name Change"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
408 } else {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
409 m_oldValue = m_node.url;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
410 setText(BookmarksManager::tr("Address Change"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
411 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
412 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
413
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
414 void undo()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
415 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
416 if (m_title)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
417 m_node.title = m_oldValue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
418 else
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
419 m_node.url = m_oldValue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
420 emit m_bookmarkManagaer.entryChanged(m_node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
421 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
422
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
423 void redo()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
424 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
425 if (m_title)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
426 m_node.title = m_newValue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
427 else
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
428 m_node.url = m_newValue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
429 emit m_bookmarkManagaer.entryChanged(m_node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
430 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
431
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
432 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
433 BookmarksManager *m_bookmarkManagaer;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
434 bool m_title;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
435 QString m_oldValue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
436 QString m_newValue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
437 BookmarkNode *m_node;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
438 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
439
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
440 /*!
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
441 BookmarksModel is a QAbstractItemModel wrapper around the BookmarkManager
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
442 */
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
443 import QtGui/QIcon;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
444 class BookmarksModel : public QAbstractItemModel
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
445 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
446 Q_OBJECT
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
447
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
448 public slots:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
449 void entryAdded(BookmarkNode *item)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
450 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
451 Q_ASSERT(item && item.parent());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
452 int row = item.parent().children().indexOf(item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
453 BookmarkNode *parent = item.parent();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
454 // item was already added so remove beore beginInsertRows is called
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
455 parent.remove(item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
456 beginInsertRows(index(parent), row, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
457 parent.add(item, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
458 endInsertRows();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
459 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
460
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
461
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
462 void entryRemoved(BookmarkNode *parent, int row, BookmarkNode *item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
463 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
464 // item was already removed, re-add so beginRemoveRows works
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
465 parent.add(item, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
466 beginRemoveRows(index(parent), row, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
467 parent.remove(item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
468 endRemoveRows();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
469 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
470
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
471 void entryChanged(BookmarkNode *item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
472 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
473 QModelIndex idx = index(item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
474 emit dataChanged(idx, idx);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
475 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
476 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
477 enum Roles {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
478 TypeRole = Qt.UserRole + 1,
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
479 UrlRole = Qt.UserRole + 2,
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
480 UrlStringRole = Qt.UserRole + 3,
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
481 SeparatorRole = Qt.UserRole + 4
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
482 };
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
483
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
484 BookmarksModel(BookmarksManager *bookmarkManager, QObject *parent = null)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
485 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
486 super(parent)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
487 m_endMacro = false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
488 m_bookmarksManager = bookmarkManager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
489 connect(bookmarkManager, SIGNAL(entryAdded(BookmarkNode *)),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
490 this, SLOT(entryAdded(BookmarkNode *)));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
491 connect(bookmarkManager, SIGNAL(entryRemoved(BookmarkNode *, int, BookmarkNode *)),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
492 this, SLOT(entryRemoved(BookmarkNode *, int, BookmarkNode *)));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
493 connect(bookmarkManager, SIGNAL(entryChanged(BookmarkNode *)),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
494 this, SLOT(entryChanged(BookmarkNode *)));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
495 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
496
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
497
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
498 inline BookmarksManager *bookmarksManager() { return m_bookmarksManager; }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
499
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
500 QVariant headerData(int section, Qt.Orientation orientation, int role = Qt.DisplayRole);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
501 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
502 if (orientation == Qt.Horizontal && role == Qt.DisplayRole) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
503 switch (section) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
504 case 0: return tr("Title");
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
505 case 1: return tr("Address");
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
506 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
507 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
508 return QAbstractItemModel::headerData(section, orientation, role);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
509 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
510
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
511
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
512 QVariant data(QModelIndex &index, int role = Qt.DisplayRole)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
513 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
514 if (!index.isValid() || index.model() != this)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
515 return QVariant();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
516
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
517 BookmarkNode *bookmarkNode = node(index);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
518 switch (role) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
519 case Qt.EditRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
520 case Qt.DisplayRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
521 if (bookmarkNode.type() == BookmarkNode::Separator) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
522 switch (index.column()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
523 case 0: return QString(50, 0xB7);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
524 case 1: return QString();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
525 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
526 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
527
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
528 switch (index.column()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
529 case 0: return bookmarkNode.title;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
530 case 1: return bookmarkNode.url;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
531 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
532 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
533 case BookmarksModel::UrlRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
534 return QUrl(bookmarkNode.url);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
535 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
536 case BookmarksModel::UrlStringRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
537 return bookmarkNode.url;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
538 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
539 case BookmarksModel::TypeRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
540 return bookmarkNode.type();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
541 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
542 case BookmarksModel::SeparatorRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
543 return (bookmarkNode.type() == BookmarkNode::Separator);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
544 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
545 case Qt.DecorationRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
546 if (index.column() == 0) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
547 if (bookmarkNode.type() == BookmarkNode::Folder)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
548 return QApplication::style().standardIcon(QStyle::SP_DirIcon);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
549 return BrowserApplication::instance().icon(bookmarkNode.url);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
550 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
551 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
552
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
553 return QVariant();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
554 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
555
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
556 int columnCount(QModelIndex &parent = QModelIndex())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
557 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
558 return (parent.column() > 0) ? 0 : 2;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
559 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
560
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
561 int rowCount(QModelIndex &parent = QModelIndex())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
562 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
563 if (parent.column() > 0)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
564 return 0;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
565
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
566 if (!parent.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
567 return m_bookmarksManager.bookmarks().children().count();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
568
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
569 const BookmarkNode *item = static_cast<BookmarkNode*>(parent.internalPointer());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
570 return item.children().count();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
571 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
572
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
573 QModelIndex index(int, int, QModelIndex& = QModelIndex())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
574 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
575 if (row < 0 || column < 0 || row >= rowCount(parent) || column >= columnCount(parent))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
576 return QModelIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
577
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
578 // get the parent node
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
579 BookmarkNode *parentNode = node(parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
580 return createIndex(row, column, parentNode.children().at(row));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
581 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
582
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
583 QModelIndex parent(QModelIndex& index= QModelIndex())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
584 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
585 if (!index.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
586 return QModelIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
587
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
588 BookmarkNode *itemNode = node(index);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
589 BookmarkNode *parentNode = (itemNode ? itemNode.parent() : 0);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
590 if (!parentNode || parentNode == m_bookmarksManager.bookmarks())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
591 return QModelIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
592
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
593 // get the parent's row
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
594 BookmarkNode *grandParentNode = parentNode.parent();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
595 int parentRow = grandParentNode.children().indexOf(parentNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
596 Q_ASSERT(parentRow >= 0);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
597 return createIndex(parentRow, 0, parentNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
598 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
599
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
600
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
601 Qt.ItemFlags flags(QModelIndex &index)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
602 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
603 if (!index.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
604 return Qt.NoItemFlags;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
605
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
606 Qt.ItemFlags flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
607
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
608 BookmarkNode *bookmarkNode = node(index);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
609
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
610 if (bookmarkNode != m_bookmarksManager.menu()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
611 && bookmarkNode != m_bookmarksManager.toolbar()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
612 flags |= Qt.ItemIsDragEnabled;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
613 if (bookmarkNode.type() != BookmarkNode::Separator)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
614 flags |= Qt.ItemIsEditable;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
615 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
616 if (hasChildren(index))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
617 flags |= Qt.ItemIsDropEnabled;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
618 return flags;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
619 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
620
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
621 Qt.DropActions supportedDropActions ();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
622 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
623 return Qt.CopyAction | Qt.MoveAction;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
624 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
625
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
626
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
627 bool removeRows(int row, int count, QModelIndex &parent = QModelIndex());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
628 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
629 if (row < 0 || count <= 0 || row + count > rowCount(parent))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
630 return false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
631
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
632 BookmarkNode *bookmarkNode = node(parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
633 for (int i = row + count - 1; i >= row; --i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
634 BookmarkNode *node = bookmarkNode.children().at(i);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
635 if (node == m_bookmarksManager.menu()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
636 || node == m_bookmarksManager.toolbar())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
637 continue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
638
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
639 m_bookmarksManager.removeBookmark(node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
640 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
641 if (m_endMacro) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
642 m_bookmarksManager.undoRedoStack().endMacro();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
643 m_endMacro = false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
644 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
645 return true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
646 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
647
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
648 bool setData(QModelIndex &index, QVariant &value, int role = Qt.EditRole)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
649 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
650 if (!index.isValid() || (flags(index) & Qt.ItemIsEditable) == 0)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
651 return false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
652
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
653 BookmarkNode *item = node(index);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
654
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
655 switch (role) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
656 case Qt.EditRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
657 case Qt.DisplayRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
658 if (index.column() == 0) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
659 m_bookmarksManager.setTitle(item, value.toString());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
660 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
661 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
662 if (index.column() == 1) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
663 m_bookmarksManager.setUrl(item, value.toString());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
664 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
665 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
666 return false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
667 case BookmarksModel::UrlRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
668 m_bookmarksManager.setUrl(item, value.toUrl().toString());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
669 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
670 case BookmarksModel::UrlStringRole:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
671 m_bookmarksManager.setUrl(item, value.toString());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
672 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
673 default:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
674 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
675 return false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
676 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
677
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
678 return true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
679 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
680
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
681
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
682 QMimeData *mimeData(QModelIndexList &indexes);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
683 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
684 QMimeData *mimeData = new QMimeData();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
685 QByteArray data;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
686 QDataStream stream(&data, QIODevice::WriteOnly);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
687 foreach (QModelIndex index, indexes) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
688 if (index.column() != 0 || !index.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
689 continue;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
690 QByteArray encodedData;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
691 QBuffer buffer(&encodedData);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
692 buffer.open(QBuffer::ReadWrite);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
693 XbelWriter writer;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
694 const BookmarkNode *parentNode = node(index);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
695 writer.write(&buffer, parentNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
696 stream << encodedData;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
697 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
698 mimeData.setData(MIMETYPE, data);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
699 return mimeData;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
700 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
701
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
702
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
703 #define MIMETYPE QLatin1String("application/bookmarks.xbel")
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
704
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
705 QStringList mimeTypes()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
706 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
707 QStringList types;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
708 types << MIMETYPE;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
709 return types;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
710 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
711
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
712 bool dropMimeData(QMimeData *data, Qt.DropAction action, int row, int column, QModelIndex &parent)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
713 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
714 if (action == Qt.IgnoreAction)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
715 return true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
716
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
717 if (!data.hasFormat(MIMETYPE)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
718 || column > 0)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
719 return false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
720
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
721 QByteArray ba = data.data(MIMETYPE);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
722 QDataStream stream(&ba, QIODevice::ReadOnly);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
723 if (stream.atEnd())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
724 return false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
725
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
726 QUndoStack *undoStack = m_bookmarksManager.undoRedoStack();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
727 undoStack.beginMacro(QLatin1String("Move Bookmarks"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
728
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
729 while (!stream.atEnd()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
730 QByteArray encodedData;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
731 stream >> encodedData;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
732 QBuffer buffer(&encodedData);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
733 buffer.open(QBuffer::ReadOnly);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
734
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
735 XbelReader reader;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
736 BookmarkNode *rootNode = reader.read(&buffer);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
737 QList<BookmarkNode*> children = rootNode.children();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
738 for (int i = 0; i < children.count(); ++i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
739 BookmarkNode *bookmarkNode = children.at(i);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
740 rootNode.remove(bookmarkNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
741 row = qMax(0, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
742 BookmarkNode *parentNode = node(parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
743 m_bookmarksManager.addBookmark(parentNode, bookmarkNode, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
744 m_endMacro = true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
745 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
746 delete rootNode;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
747 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
748 return true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
749 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
750
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
751
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
752 bool hasChildren(QModelIndex &parent = QModelIndex())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
753 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
754 if (!parent.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
755 return true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
756 const BookmarkNode *parentNode = node(parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
757 return (parentNode.type() == BookmarkNode::Folder);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
758 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
759
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
760 BookmarkNode *node(QModelIndex &index)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
761 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
762 BookmarkNode *itemNode = static_cast<BookmarkNode*>(index.internalPointer());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
763 if (!itemNode)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
764 return m_bookmarksManager.bookmarks();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
765 return itemNode;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
766 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
767
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
768 QModelIndex index(BookmarkNode *node)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
769 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
770 BookmarkNode *parent = node.parent();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
771 if (!parent)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
772 return QModelIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
773 return createIndex(parent.children().indexOf(node), 0, node);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
774 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
775
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
776 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
777
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
778 bool m_endMacro;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
779 BookmarksManager *m_bookmarksManager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
780 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
781
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
782 // Menu that is dynamically populated from the bookmarks
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
783 import modelmenu;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
784 class BookmarksMenu : public ModelMenu
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
785 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
786 Q_OBJECT
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
787
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
788 signals:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
789 void openUrl(QUrl &url);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
790
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
791 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
792 BookmarksMenu(QWidget *parent = null)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
793 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
794 super(parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
795 m_bookmarksManager = 0;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
796 connect(this, SIGNAL(activated(QModelIndex &)),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
797 this, SLOT(activated(QModelIndex &)));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
798 setMaxRows(-1);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
799 setHoverRole(BookmarksModel::UrlStringRole);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
800 setSeparatorRole(BookmarksModel::SeparatorRole);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
801 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
802 void setInitialActions(QList<QAction*> actions);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
803 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
804 m_initialActions = actions;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
805 for (int i = 0; i < m_initialActions.count(); ++i)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
806 addAction(m_initialActions.at(i));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
807 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
808 protected:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
809 bool prePopulated()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
810 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
811 m_bookmarksManager = BrowserApplication::bookmarksManager();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
812 setModel(m_bookmarksManager.bookmarksModel());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
813 setRootIndex(m_bookmarksManager.bookmarksModel().index(1, 0));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
814 // initial actions
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
815 for (int i = 0; i < m_initialActions.count(); ++i)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
816 addAction(m_initialActions.at(i));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
817 if (!m_initialActions.isEmpty())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
818 addSeparator();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
819 createMenu(model().index(0, 0), 1, this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
820 return true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
821 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
822
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
823 private slots:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
824 void activated(QModelIndex &index)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
825 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
826 emit openUrl(index.data(BookmarksModel::UrlRole).toUrl());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
827 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
828
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
829 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
830 BookmarksManager *m_bookmarksManager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
831 QList<QAction*> m_initialActions;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
832 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
833
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
834 /*
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
835 Proxy model that filters out the bookmarks so only the folders
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
836 are left behind. Used in the add bookmark dialog combobox.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
837 */
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
838 import QtGui/QSortFilterProxyModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
839 class AddBookmarkProxyModel : public QSortFilterProxyModel
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
840 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
841 Q_OBJECT
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
842 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
843 this(QObject * parent = null)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
844 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
845 super(parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
846 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
847 int columnCount(QModelIndex & parent = QModelIndex())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
848 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
849 return qMin(1, QSortFilterProxyModel::columnCount(parent));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
850 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
851 protected:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
852 bool filterAcceptsRow(int source_row, QModelIndex &source_parent)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
853 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
854 QModelIndex idx = sourceModel().index(source_row, 0, source_parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
855 return sourceModel().hasChildren(idx);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
856 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
857 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
858
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
859 /*!
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
860 Add bookmark dialog
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
861 */
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
862 import ui_addbookmarkdialog;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
863 class AddBookmarkDialog : public QDialog, public Ui_AddBookmarkDialog
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
864 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
865 Q_OBJECT
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
866
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
867 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
868 this(QString &url, QString &title, QWidget *parent = null, BookmarksManager *bookmarkManager = null)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
869 : QDialog(parent)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
870
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
871 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
872 m_url = url;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
873 m_bookmarksManager = bookmarkManager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
874
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
875 setWindowFlags(Qt.Sheet);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
876 if (!m_bookmarksManager)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
877 m_bookmarksManager = BrowserApplication::bookmarksManager();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
878 setupUi(this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
879 QTreeView *view = new QTreeView(this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
880 m_proxyModel = new AddBookmarkProxyModel(this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
881 BookmarksModel *model = m_bookmarksManager.bookmarksModel();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
882 m_proxyModel.setSourceModel(model);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
883 view.setModel(m_proxyModel);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
884 view.expandAll();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
885 view.header().setStretchLastSection(true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
886 view.header().hide();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
887 view.setItemsExpandable(false);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
888 view.setRootIsDecorated(false);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
889 view.setIndentation(10);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
890 location.setModel(m_proxyModel);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
891 view.show();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
892 location.setView(view);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
893 BookmarkNode *menu = m_bookmarksManager.menu();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
894 QModelIndex idx = m_proxyModel.mapFromSource(model.index(menu));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
895 view.setCurrentIndex(idx);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
896 location.setCurrentIndex(idx.row());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
897 name.setText(title);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
898 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
899 private slots:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
900
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
901 void accept()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
902 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
903 QModelIndex index = location.view().currentIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
904 index = m_proxyModel.mapToSource(index);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
905 if (!index.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
906 index = m_bookmarksManager.bookmarksModel().index(0, 0);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
907 BookmarkNode *parent = m_bookmarksManager.bookmarksModel().node(index);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
908 BookmarkNode *bookmark = new BookmarkNode(BookmarkNode::Bookmark);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
909 bookmark.url = m_url;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
910 bookmark.title = name.text();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
911 m_bookmarksManager.addBookmark(parent, bookmark);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
912 QDialog::accept();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
913 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
914
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
915 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
916 QString m_url;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
917 BookmarksManager *m_bookmarksManager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
918 AddBookmarkProxyModel *m_proxyModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
919 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
920
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
921 import ui_bookmarks;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
922
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
923 //class TreeProxyModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
924 class BookmarksDialog : public QDialog, public Ui_BookmarksDialog
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
925 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
926 Q_OBJECT
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
927
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
928 signals:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
929 void openUrl(QUrl &url);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
930
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
931 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
932 this(QWidget *parent = null, BookmarksManager *manager = null)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
933 : QDialog(parent)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
934 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
935 m_bookmarksManager = manager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
936 if (!m_bookmarksManager)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
937 m_bookmarksManager = BrowserApplication::bookmarksManager();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
938 setupUi(this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
939
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
940 tree.setUniformRowHeights(true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
941 tree.setSelectionBehavior(QAbstractItemView::SelectRows);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
942 tree.setSelectionMode(QAbstractItemView::ContiguousSelection);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
943 tree.setTextElideMode(Qt.ElideMiddle);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
944 m_bookmarksModel = m_bookmarksManager.bookmarksModel();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
945 m_proxyModel = new TreeProxyModel(this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
946 connect(search, SIGNAL(textChanged(QString)),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
947 m_proxyModel, SLOT(setFilterFixedString(QString)));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
948 connect(removeButton, SIGNAL(clicked()), tree, SLOT(removeOne()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
949 m_proxyModel.setSourceModel(m_bookmarksModel);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
950 tree.setModel(m_proxyModel);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
951 tree.setDragDropMode(QAbstractItemView::InternalMove);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
952 tree.setExpanded(m_proxyModel.index(0, 0), true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
953 tree.setAlternatingRowColors(true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
954 QFontMetrics fm(font());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
955 int header = fm.width(QLatin1Char('m')) * 40;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
956 tree.header().resizeSection(0, header);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
957 tree.header().setStretchLastSection(true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
958 connect(tree, SIGNAL(activated(QModelIndex&)),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
959 this, SLOT(open()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
960 tree.setContextMenuPolicy(Qt.CustomContextMenu);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
961 connect(tree, SIGNAL(customContextMenuRequested(QPoint &)),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
962 this, SLOT(customContextMenuRequested(QPoint &)));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
963 connect(addFolderButton, SIGNAL(clicked()),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
964 this, SLOT(newFolder()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
965 expandNodes(m_bookmarksManager.bookmarks());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
966 setAttribute(Qt.WA_DeleteOnClose);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
967 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
968 ~this()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
969 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
970 if (saveExpandedNodes(tree.rootIndex()))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
971 m_bookmarksManager.changeExpanded();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
972 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
973
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
974 private slots:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
975 void customContextMenuRequested(QPoint &pos)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
976 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
977 QMenu menu;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
978 QModelIndex index = tree.indexAt(pos);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
979 index = index.sibling(index.row(), 0);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
980 if (index.isValid() && !tree.model().hasChildren(index)) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
981 menu.addAction(tr("Open"), this, SLOT(open()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
982 menu.addSeparator();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
983 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
984 menu.addAction(tr("Delete"), tree, SLOT(removeOne()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
985 menu.exec(QCursor::pos());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
986 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
987 void open()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
988 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
989 QModelIndex index = tree.currentIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
990 if (!index.parent().isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
991 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
992 emit openUrl(index.sibling(index.row(), 1).data(BookmarksModel::UrlRole).toUrl());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
993 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
994
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
995 void newFolder()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
996 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
997 QModelIndex currentIndex = tree.currentIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
998 QModelIndex idx = currentIndex;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
999 if (idx.isValid() && !idx.model().hasChildren(idx))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1000 idx = idx.parent();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1001 if (!idx.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1002 idx = tree.rootIndex();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1003 idx = m_proxyModel.mapToSource(idx);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1004 BookmarkNode *parent = m_bookmarksManager.bookmarksModel().node(idx);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1005 BookmarkNode *node = new BookmarkNode(BookmarkNode::Folder);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1006 node.title = tr("New Folder");
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1007 m_bookmarksManager.addBookmark(parent, node, currentIndex.row() + 1);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1008 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1009
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1010 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1011 void expandNodes(BookmarkNode *node)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1012 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1013 for (int i = 0; i < node.children().count(); ++i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1014 BookmarkNode *childNode = node.children()[i];
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1015 if (childNode.expanded) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1016 QModelIndex idx = m_bookmarksModel.index(childNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1017 idx = m_proxyModel.mapFromSource(idx);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1018 tree.setExpanded(idx, true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1019 expandNodes(childNode);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1020 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1021 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1022 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1023
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1024 bool saveExpandedNodes(QModelIndex &parent)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1025 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1026 bool changed = false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1027 for (int i = 0; i < m_proxyModel.rowCount(parent); ++i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1028 QModelIndex child = m_proxyModel.index(i, 0, parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1029 QModelIndex sourceIndex = m_proxyModel.mapToSource(child);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1030 BookmarkNode *childNode = m_bookmarksModel.node(sourceIndex);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1031 bool wasExpanded = childNode.expanded;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1032 if (tree.isExpanded(child)) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1033 childNode.expanded = true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1034 changed |= saveExpandedNodes(child);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1035 } else {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1036 childNode.expanded = false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1037 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1038 changed |= (wasExpanded != childNode.expanded);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1039 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1040 return changed;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1041 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1042
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1043 BookmarksManager *m_bookmarksManager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1044 BookmarksModel *m_bookmarksModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1045 TreeProxyModel *m_proxyModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1046 };
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1047
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1048 import QtGui/QToolBar;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1049 class BookmarksToolBar : public QToolBar
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1050 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1051 Q_OBJECT
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1052
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1053 signals:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1054 void openUrl(QUrl &url);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1055
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1056 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1057 BookmarksToolBar(BookmarksModel *model, QWidget *parent = null)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1058 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1059 super(tr("Bookmark"), parent);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1060 m_bookmarksModel = model;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1061 connect(this, SIGNAL(actionTriggered(QAction*)), this, SLOT(triggered(QAction*)));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1062 setRootIndex(model.index(0, 0));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1063 connect(m_bookmarksModel, SIGNAL(modelReset()), this, SLOT(build()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1064 connect(m_bookmarksModel, SIGNAL(rowsInserted(QModelIndex &, int, int)), this, SLOT(build()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1065 connect(m_bookmarksModel, SIGNAL(rowsRemoved(QModelIndex &, int, int)), this, SLOT(build()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1066 connect(m_bookmarksModel, SIGNAL(dataChanged(QModelIndex &, QModelIndex &)), this, SLOT(build()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1067 setAcceptDrops(true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1068 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1069
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1070 void setRootIndex(QModelIndex &index);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1071 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1072 m_root = index;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1073 build();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1074 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1075
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1076 QModelIndex rootIndex()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1077 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1078 return m_root;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1079 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1080
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1081 protected:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1082 void dragEnterEvent(QDragEnterEvent *event)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1083 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1084 const QMimeData *mimeData = event.mimeData();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1085 if (mimeData.hasUrls())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1086 event.acceptProposedAction();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1087 QToolBar::dragEnterEvent(event);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1088 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1089
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1090 void dropEvent(QDropEvent *event)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1091 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1092 const QMimeData *mimeData = event.mimeData();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1093 if (mimeData.hasUrls() && mimeData.hasText()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1094 QList<QUrl> urls = mimeData.urls();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1095 QAction *action = actionAt(event.pos());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1096 QString dropText;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1097 if (action)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1098 dropText = action.text();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1099 int row = -1;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1100 QModelIndex parentIndex = m_root;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1101 for (int i = 0; i < m_bookmarksModel.rowCount(m_root); ++i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1102 QModelIndex idx = m_bookmarksModel.index(i, 0, m_root);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1103 QString title = idx.data().toString();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1104 if (title == dropText) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1105 row = i;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1106 if (m_bookmarksModel.hasChildren(idx)) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1107 parentIndex = idx;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1108 row = -1;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1109 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1110 break;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1111 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1112 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1113 BookmarkNode *bookmark = new BookmarkNode(BookmarkNode::Bookmark);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1114 bookmark.url = urls.at(0).toString();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1115 bookmark.title = mimeData.text();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1116
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1117 BookmarkNode *parent = m_bookmarksModel.node(parentIndex);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1118 BookmarksManager *bookmarksManager = m_bookmarksModel.bookmarksManager();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1119 bookmarksManager.addBookmark(parent, bookmark, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1120 event.acceptProposedAction();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1121 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1122 QToolBar::dropEvent(event);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1123 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1124
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1125 private slots:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1126 void triggered(QAction *action)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1127 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1128 QVariant v = action.data();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1129 if (v.canConvert<QUrl>()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1130 emit openUrl(v.toUrl());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1131 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1132 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1133
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1134 void activated(QModelIndex &index)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1135 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1136 emit openUrl(index.data(BookmarksModel::UrlRole).toUrl());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1137 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1138
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1139
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1140 void build()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1141 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1142 clear();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1143 for (int i = 0; i < m_bookmarksModel.rowCount(m_root); ++i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1144 QModelIndex idx = m_bookmarksModel.index(i, 0, m_root);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1145 if (m_bookmarksModel.hasChildren(idx)) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1146 QToolButton *button = new QToolButton(this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1147 button.setPopupMode(QToolButton::InstantPopup);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1148 button.setArrowType(Qt.DownArrow);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1149 button.setText(idx.data().toString());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1150 ModelMenu *menu = new ModelMenu(this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1151 connect(menu, SIGNAL(activated(QModelIndex &)),
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1152 this, SLOT(activated(QModelIndex &)));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1153 menu.setModel(m_bookmarksModel);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1154 menu.setRootIndex(idx);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1155 menu.addAction(new QAction(menu));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1156 button.setMenu(menu);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1157 button.setToolButtonStyle(Qt.ToolButtonTextOnly);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1158 QAction *a = addWidget(button);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1159 a.setText(idx.data().toString());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1160 } else {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1161 QAction *action = addAction(idx.data().toString());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1162 action.setData(idx.data(BookmarksModel::UrlRole));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1163 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1164 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1165 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1166
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1167 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1168 BookmarksModel *m_bookmarksModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1169 QPersistentModelIndex m_root;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1170 }