]> cloud.milkyroute.net Git - dolphin.git/blob - src/bookmarkssettingspage.cpp
commited initial version of Dolphin
[dolphin.git] / src / bookmarkssettingspage.cpp
1 /***************************************************************************
2 * Copyright (C) 2006 by Peter Penz *
3 * peter.penz@gmx.at *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
20
21 #include "bookmarkssettingspage.h"
22
23 #include <assert.h>
24
25 #include <qlayout.h>
26 #include <qlabel.h>
27 #include <qlineedit.h>
28 #include <q3vbox.h>
29 //Added by qt3to4:
30 #include <QPixmap>
31 #include <Q3VBoxLayout>
32
33 #include <kbookmark.h>
34 #include <kbookmarkmanager.h>
35 #include <kdialog.h>
36 #include <kiconloader.h>
37 #include <klistview.h>
38 #include <klocale.h>
39 #include <kpushbutton.h>
40
41 #include "dolphinsettings.h"
42 #include "editbookmarkdialog.h"
43
44 BookmarksSettingsPage::BookmarksSettingsPage(QWidget*parent) :
45 SettingsPageBase(parent),
46 m_addButton(0),
47 m_removeButton(0),
48 m_moveUpButton(0),
49 m_moveDownButton(0)
50 {
51 Q3VBoxLayout* topLayout = new Q3VBoxLayout(parent, 2, KDialog::spacingHint());
52
53 const int spacing = KDialog::spacingHint();
54
55 Q3HBox* hBox = new Q3HBox(parent);
56 hBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
57 hBox->setSpacing(spacing);
58 hBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Ignored);
59
60 m_listView = new KListView(hBox);
61 m_listView->addColumn(i18n("Icon"));
62 m_listView->addColumn(i18n("Name"));
63 m_listView->addColumn(i18n("Location"));
64 m_listView->setResizeMode(Q3ListView::LastColumn);
65 m_listView->setColumnAlignment(0, Qt::AlignHCenter);
66 m_listView->setAllColumnsShowFocus(true);
67 m_listView->setSorting(-1);
68 connect(m_listView, SIGNAL(selectionChanged()),
69 this, SLOT(updateButtons()));
70 connect(m_listView, SIGNAL(pressed(Q3ListViewItem*)),
71 this, SLOT(slotBookmarkPressed(Q3ListViewItem*)));
72 connect(m_listView, SIGNAL(doubleClicked(Q3ListViewItem*, const QPoint&, int)),
73 this, SLOT(slotBookmarkDoubleClicked(Q3ListViewItem*, const QPoint&, int)));
74
75 Q3VBox* buttonBox = new Q3VBox(hBox);
76 buttonBox->setSpacing(spacing);
77
78 const QSizePolicy buttonSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
79
80 m_addButton = new KPushButton(i18n("Add..."), buttonBox);
81 connect(m_addButton, SIGNAL(clicked()),
82 this, SLOT(slotAddButtonClicked()));
83 m_addButton->setSizePolicy(buttonSizePolicy);
84
85 m_editButton = new KPushButton(i18n("Edit..."), buttonBox);
86 connect(m_editButton, SIGNAL(clicked()),
87 this, SLOT(slotEditButtonClicked()));
88 m_editButton->setSizePolicy(buttonSizePolicy);
89
90 m_removeButton = new KPushButton(i18n("Remove"), buttonBox);
91 connect(m_removeButton, SIGNAL(clicked()),
92 this, SLOT(slotRemoveButtonClicked()));
93 m_removeButton->setSizePolicy(buttonSizePolicy);
94
95 m_moveUpButton = new KPushButton(i18n("Move Up"), buttonBox);
96 connect(m_moveUpButton, SIGNAL(clicked()),
97 this, SLOT(slotMoveUpButtonClicked()));
98 m_moveUpButton->setSizePolicy(buttonSizePolicy);
99
100 m_moveDownButton = new KPushButton(i18n("Move Down"), buttonBox);
101 connect(m_moveDownButton, SIGNAL(clicked()),
102 this, SLOT(slotMoveDownButtonClicked()));
103 m_moveDownButton->setSizePolicy(buttonSizePolicy);
104
105 // Add a dummy widget with no restriction regarding a vertical resizing.
106 // This assures that the spacing between the buttons is not increased.
107 new QWidget(buttonBox);
108
109 topLayout->addWidget(hBox);
110
111 // insert all editable bookmarks.
112 KBookmarkGroup root = DolphinSettings::instance().bookmarkManager()->root();
113 KBookmark bookmark = root.first();
114
115 Q3ListViewItem* prev = 0;
116 while (!bookmark.isNull()) {
117 Q3ListViewItem* item = new Q3ListViewItem(m_listView);
118 item->setPixmap(PixmapIdx, SmallIcon(bookmark.icon()));
119 item->setText(NameIdx, bookmark.text());
120 item->setText(URLIdx, bookmark.url().prettyURL());
121
122 // add hidden column to be able to retrieve the icon name again
123 item->setText(IconIdx, bookmark.icon());
124
125 m_listView->insertItem(item);
126 if (prev != 0) {
127 item->moveItem(prev);
128 }
129 prev = item;
130
131 bookmark = root.next(bookmark);
132 }
133 m_listView->setSelected(m_listView->firstChild(), true);
134
135 updateButtons();
136 }
137
138
139 BookmarksSettingsPage::~BookmarksSettingsPage()
140 {
141 }
142
143 void BookmarksSettingsPage::applySettings()
144 {
145 // delete all bookmarks
146 KBookmarkManager* manager = DolphinSettings::instance().bookmarkManager();
147 KBookmarkGroup root = manager->root();
148 KBookmark bookmark = root.first();
149 while (!bookmark.isNull()) {
150 root.deleteBookmark(bookmark);
151 bookmark = root.first();
152 }
153
154 // add all items as bookmarks
155 Q3ListViewItem* item = m_listView->firstChild();
156 while (item != 0) {
157 root.addBookmark(manager,
158 item->text(NameIdx),
159 KURL(item->text(URLIdx)),
160 item->text(IconIdx)); // hidden column
161 item = item->itemBelow();
162 }
163
164 manager->emitChanged(root);
165 }
166
167 void BookmarksSettingsPage::updateButtons()
168 {
169 const Q3ListViewItem* selectedItem = m_listView->selectedItem();
170 const bool hasSelection = (selectedItem != 0);
171
172 m_editButton->setEnabled(hasSelection);
173 m_removeButton->setEnabled(hasSelection);
174
175 const bool enableMoveUp = hasSelection &&
176 (selectedItem != m_listView->firstChild());
177 m_moveUpButton->setEnabled(enableMoveUp);
178
179 const bool enableMoveDown = hasSelection &&
180 (selectedItem != m_listView->lastChild());
181 m_moveDownButton->setEnabled(enableMoveDown);
182 }
183
184 void BookmarksSettingsPage::slotBookmarkDoubleClicked(Q3ListViewItem*,
185 const QPoint&,
186 int)
187 {
188 slotEditButtonClicked();
189 }
190
191 void BookmarksSettingsPage::slotBookmarkPressed(Q3ListViewItem* item)
192 {
193 if (item == 0) {
194 m_listView->setSelected(m_listView->currentItem(), true);
195 }
196 }
197
198 void BookmarksSettingsPage::slotAddButtonClicked()
199 {
200 KBookmark bookmark = EditBookmarkDialog::getBookmark(i18n("Add Bookmark"),
201 i18n("New bookmark"),
202 KURL(),
203 "bookmark");
204 if (!bookmark.isNull()) {
205 // insert bookmark into listview
206 Q3ListViewItem* item = new Q3ListViewItem(m_listView);
207 item->setPixmap(PixmapIdx, SmallIcon(bookmark.icon()));
208 item->setText(NameIdx, bookmark.text());
209 item->setText(URLIdx, bookmark.url().prettyURL());
210 item->setText(IconIdx, bookmark.icon());
211 m_listView->insertItem(item);
212
213 Q3ListViewItem* lastItem = m_listView->lastChild();
214 if (lastItem != 0) {
215 item->moveItem(lastItem);
216 }
217
218 m_listView->setSelected(item, true);
219 updateButtons();
220 }
221 }
222
223 void BookmarksSettingsPage::slotEditButtonClicked()
224 {
225 Q3ListViewItem* item = m_listView->selectedItem();
226 assert(item != 0); // 'edit' may not get invoked when having no items
227
228 KBookmark bookmark = EditBookmarkDialog::getBookmark(i18n("Edit Bookmark"),
229 item->text(NameIdx),
230 KURL(item->text(URLIdx)),
231 item->text(IconIdx));
232 if (!bookmark.isNull()) {
233 item->setPixmap(PixmapIdx, SmallIcon(bookmark.icon()));
234 item->setText(NameIdx, bookmark.text());
235 item->setText(URLIdx, bookmark.url().prettyURL());
236 item->setText(IconIdx, bookmark.icon());
237 }
238 }
239
240 void BookmarksSettingsPage::slotRemoveButtonClicked()
241 {
242 Q3ListViewItem* selectedItem = m_listView->selectedItem();
243 assert(selectedItem != 0);
244 Q3ListViewItem* nextItem = selectedItem->itemBelow();
245 if (nextItem == 0) {
246 nextItem = selectedItem->itemAbove();
247 }
248
249 m_listView->takeItem(selectedItem);
250 if (nextItem != 0) {
251 m_listView->setSelected(nextItem, true);
252 }
253 }
254
255 void BookmarksSettingsPage::slotMoveUpButtonClicked()
256 {
257 moveBookmark(-1);
258 }
259
260 void BookmarksSettingsPage::slotMoveDownButtonClicked()
261 {
262 moveBookmark(+1);
263 }
264
265 int BookmarksSettingsPage::selectedBookmarkIndex() const
266 {
267 int index = -1;
268
269 Q3ListViewItem* selectedItem = m_listView->selectedItem();
270 if (selectedItem != 0) {
271 index = 0;
272 Q3ListViewItem* item = m_listView->firstChild();
273 while (item != selectedItem) {
274 item = item->nextSibling();
275 ++index;
276 }
277 }
278
279 return index;
280 }
281
282 void BookmarksSettingsPage::moveBookmark(int direction)
283 {
284 // this implementation currently only allows moving of bookmarks
285 // one step up or down
286 assert((direction >= -1) && (direction <= +1));
287
288 // swap bookmarks in listview
289 Q3ListViewItem* selectedItem = m_listView->selectedItem();
290 assert(selectedItem != 0);
291 Q3ListViewItem* item = (direction < 0) ? selectedItem->itemAbove() :
292 selectedItem->itemBelow();
293 assert(item != 0);
294
295 QPixmap pixmap;
296 if (item->pixmap(0) != 0) {
297 pixmap = *(item->pixmap(0));
298 }
299 QString name(item->text(NameIdx));
300 QString url(item->text(URLIdx));
301 QString icon(item->text(IconIdx));
302
303 if (selectedItem->pixmap(0) != 0) {
304 item->setPixmap(PixmapIdx, *(selectedItem->pixmap(0)));
305 }
306 item->setText(NameIdx, selectedItem->text(NameIdx));
307 item->setText(URLIdx, selectedItem->text(URLIdx));
308 item->setText(IconIdx, selectedItem->text(IconIdx));
309
310 selectedItem->setPixmap(PixmapIdx, pixmap);
311 selectedItem->setText(NameIdx, name);
312 selectedItem->setText(URLIdx, url);
313 selectedItem->setText(IconIdx, icon);
314
315 m_listView->setSelected(item, true);
316 }
317
318 #include "bookmarkssettingspage.moc"