]>
cloud.milkyroute.net Git - dolphin.git/blob - src/bookmarkssettingspage.cpp
1 /***************************************************************************
2 * Copyright (C) 2006 by Peter Penz *
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. *
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. *
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 ***************************************************************************/
21 #include "bookmarkssettingspage.h"
27 #include <qlineedit.h>
31 #include <Q3VBoxLayout>
33 #include <kbookmark.h>
34 #include <kbookmarkmanager.h>
36 #include <kiconloader.h>
37 #include <klistview.h>
39 #include <kpushbutton.h>
41 #include "dolphinsettings.h"
42 #include "editbookmarkdialog.h"
44 BookmarksSettingsPage::BookmarksSettingsPage(QWidget
*parent
) :
45 SettingsPageBase(parent
),
51 Q3VBoxLayout
* topLayout
= new Q3VBoxLayout(parent
, 2, KDialog::spacingHint());
53 const int spacing
= KDialog::spacingHint();
55 Q3HBox
* hBox
= new Q3HBox(parent
);
56 hBox
->setSizePolicy(QSizePolicy::Preferred
, QSizePolicy::Fixed
);
57 hBox
->setSpacing(spacing
);
58 hBox
->setSizePolicy(QSizePolicy::Preferred
, QSizePolicy::Ignored
);
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)));
75 Q3VBox
* buttonBox
= new Q3VBox(hBox
);
76 buttonBox
->setSpacing(spacing
);
78 const QSizePolicy
buttonSizePolicy(QSizePolicy::Preferred
, QSizePolicy::Maximum
);
80 m_addButton
= new KPushButton(i18n("Add..."), buttonBox
);
81 connect(m_addButton
, SIGNAL(clicked()),
82 this, SLOT(slotAddButtonClicked()));
83 m_addButton
->setSizePolicy(buttonSizePolicy
);
85 m_editButton
= new KPushButton(i18n("Edit..."), buttonBox
);
86 connect(m_editButton
, SIGNAL(clicked()),
87 this, SLOT(slotEditButtonClicked()));
88 m_editButton
->setSizePolicy(buttonSizePolicy
);
90 m_removeButton
= new KPushButton(i18n("Remove"), buttonBox
);
91 connect(m_removeButton
, SIGNAL(clicked()),
92 this, SLOT(slotRemoveButtonClicked()));
93 m_removeButton
->setSizePolicy(buttonSizePolicy
);
95 m_moveUpButton
= new KPushButton(i18n("Move Up"), buttonBox
);
96 connect(m_moveUpButton
, SIGNAL(clicked()),
97 this, SLOT(slotMoveUpButtonClicked()));
98 m_moveUpButton
->setSizePolicy(buttonSizePolicy
);
100 m_moveDownButton
= new KPushButton(i18n("Move Down"), buttonBox
);
101 connect(m_moveDownButton
, SIGNAL(clicked()),
102 this, SLOT(slotMoveDownButtonClicked()));
103 m_moveDownButton
->setSizePolicy(buttonSizePolicy
);
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
);
109 topLayout
->addWidget(hBox
);
111 // insert all editable bookmarks.
112 KBookmarkGroup root
= DolphinSettings::instance().bookmarkManager()->root();
113 KBookmark bookmark
= root
.first();
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());
122 // add hidden column to be able to retrieve the icon name again
123 item
->setText(IconIdx
, bookmark
.icon());
125 m_listView
->insertItem(item
);
127 item
->moveItem(prev
);
131 bookmark
= root
.next(bookmark
);
133 m_listView
->setSelected(m_listView
->firstChild(), true);
139 BookmarksSettingsPage::~BookmarksSettingsPage()
143 void BookmarksSettingsPage::applySettings()
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();
154 // add all items as bookmarks
155 Q3ListViewItem
* item
= m_listView
->firstChild();
157 root
.addBookmark(manager
,
159 KURL(item
->text(URLIdx
)),
160 item
->text(IconIdx
)); // hidden column
161 item
= item
->itemBelow();
164 manager
->emitChanged(root
);
167 void BookmarksSettingsPage::updateButtons()
169 const Q3ListViewItem
* selectedItem
= m_listView
->selectedItem();
170 const bool hasSelection
= (selectedItem
!= 0);
172 m_editButton
->setEnabled(hasSelection
);
173 m_removeButton
->setEnabled(hasSelection
);
175 const bool enableMoveUp
= hasSelection
&&
176 (selectedItem
!= m_listView
->firstChild());
177 m_moveUpButton
->setEnabled(enableMoveUp
);
179 const bool enableMoveDown
= hasSelection
&&
180 (selectedItem
!= m_listView
->lastChild());
181 m_moveDownButton
->setEnabled(enableMoveDown
);
184 void BookmarksSettingsPage::slotBookmarkDoubleClicked(Q3ListViewItem
*,
188 slotEditButtonClicked();
191 void BookmarksSettingsPage::slotBookmarkPressed(Q3ListViewItem
* item
)
194 m_listView
->setSelected(m_listView
->currentItem(), true);
198 void BookmarksSettingsPage::slotAddButtonClicked()
200 KBookmark bookmark
= EditBookmarkDialog::getBookmark(i18n("Add Bookmark"),
201 i18n("New 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
);
213 Q3ListViewItem
* lastItem
= m_listView
->lastChild();
215 item
->moveItem(lastItem
);
218 m_listView
->setSelected(item
, true);
223 void BookmarksSettingsPage::slotEditButtonClicked()
225 Q3ListViewItem
* item
= m_listView
->selectedItem();
226 assert(item
!= 0); // 'edit' may not get invoked when having no items
228 KBookmark bookmark
= EditBookmarkDialog::getBookmark(i18n("Edit Bookmark"),
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());
240 void BookmarksSettingsPage::slotRemoveButtonClicked()
242 Q3ListViewItem
* selectedItem
= m_listView
->selectedItem();
243 assert(selectedItem
!= 0);
244 Q3ListViewItem
* nextItem
= selectedItem
->itemBelow();
246 nextItem
= selectedItem
->itemAbove();
249 m_listView
->takeItem(selectedItem
);
251 m_listView
->setSelected(nextItem
, true);
255 void BookmarksSettingsPage::slotMoveUpButtonClicked()
260 void BookmarksSettingsPage::slotMoveDownButtonClicked()
265 int BookmarksSettingsPage::selectedBookmarkIndex() const
269 Q3ListViewItem
* selectedItem
= m_listView
->selectedItem();
270 if (selectedItem
!= 0) {
272 Q3ListViewItem
* item
= m_listView
->firstChild();
273 while (item
!= selectedItem
) {
274 item
= item
->nextSibling();
282 void BookmarksSettingsPage::moveBookmark(int direction
)
284 // this implementation currently only allows moving of bookmarks
285 // one step up or down
286 assert((direction
>= -1) && (direction
<= +1));
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();
296 if (item
->pixmap(0) != 0) {
297 pixmap
= *(item
->pixmap(0));
299 QString
name(item
->text(NameIdx
));
300 QString
url(item
->text(URLIdx
));
301 QString
icon(item
->text(IconIdx
));
303 if (selectedItem
->pixmap(0) != 0) {
304 item
->setPixmap(PixmapIdx
, *(selectedItem
->pixmap(0)));
306 item
->setText(NameIdx
, selectedItem
->text(NameIdx
));
307 item
->setText(URLIdx
, selectedItem
->text(URLIdx
));
308 item
->setText(IconIdx
, selectedItem
->text(IconIdx
));
310 selectedItem
->setPixmap(PixmapIdx
, pixmap
);
311 selectedItem
->setText(NameIdx
, name
);
312 selectedItem
->setText(URLIdx
, url
);
313 selectedItem
->setText(IconIdx
, icon
);
315 m_listView
->setSelected(item
, true);
318 #include "bookmarkssettingspage.moc"