#include <KMenu>
#include <KMessageBox>
#include <KNotification>
+#include "placesitem.h"
#include "placesitemeditdialog.h"
#include "placesitemlistgroupheader.h"
#include "placesitemlistwidget.h"
m_model = new PlacesItemModel(this);
m_model->setGroupedSorting(true);
m_model->setSortRole("group");
+ connect(m_model, SIGNAL(errorMessage(QString)),
+ this, SIGNAL(errorMessage(QString)));
KStandardItemListView* view = new KStandardItemListView();
view->setWidgetCreator(new KItemListWidgetCreator<PlacesItemListWidget>());
{
const KUrl url = m_model->data(index).value("url").value<KUrl>();
if (!url.isEmpty()) {
- emit placeActivated(url);
+ emit placeActivated(PlacesItemModel::convertedUrl(url));
}
}
{
const KUrl url = m_model->data(index).value("url").value<KUrl>();
if (!url.isEmpty()) {
- emit placeMiddleClicked(url);
+ emit placeMiddleClicked(PlacesItemModel::convertedUrl(url));
}
}
void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos)
{
- const QHash<QByteArray, QVariant> data = m_model->data(index);
- const QString label = data.value("text").toString();
+ PlacesItem* item = m_model->placesItem(index);
+ if (!item) {
+ return;
+ }
KMenu menu(this);
QAction* addAction = 0;
QAction* mainSeparator = 0;
QAction* editAction = 0;
- QAction* tearDownAction = 0;
+ QAction* teardownAction = 0;
QAction* ejectAction = 0;
- const bool isSystemItem = m_model->isSystemItem(index);
- const bool isDevice = !data.value("udi").toString().isEmpty();
+ const QString label = item->text();
+
+ const bool isDevice = !item->udi().isEmpty();
if (isDevice) {
ejectAction = m_model->ejectAction(index);
if (ejectAction) {
menu.addAction(ejectAction);
}
- tearDownAction = m_model->tearDownAction(index);
- if (tearDownAction) {
- tearDownAction->setParent(&menu);
- menu.addAction(tearDownAction);
+ teardownAction = m_model->teardownAction(index);
+ if (teardownAction) {
+ teardownAction->setParent(&menu);
+ menu.addAction(teardownAction);
}
- if (tearDownAction || ejectAction) {
+ if (teardownAction || ejectAction) {
mainSeparator = menu.addSeparator();
}
} else {
- if (data.value("url").value<KUrl>() == KUrl("trash:/")) {
+ if (item->url() == KUrl("trash:/")) {
emptyTrashAction = menu.addAction(KIcon("trash-empty"), i18nc("@action:inmenu", "Empty Trash"));
KConfig trashConfig("trashrc", KConfig::SimpleConfig);
emptyTrashAction->setEnabled(!trashConfig.group("Status").readEntry("Empty", true));
openInNewTabAction->setIcon(KIcon("tab-new"));
QAction* removeAction = 0;
- if (!isDevice && !isSystemItem) {
+ if (!isDevice && !item->isSystemItem()) {
removeAction = menu.addAction(KIcon("edit-delete"), i18nc("@item:inmenu", "Remove '%1'", label));
}
QAction* hideAction = menu.addAction(i18nc("@item:inmenu", "Hide '%1'", label));
hideAction->setCheckable(true);
- hideAction->setChecked(data.value("isHidden").toBool());
+ hideAction->setChecked(item->isHidden());
QAction* showAllAction = 0;
if (m_model->hiddenCount() > 0) {
} else if (action == removeAction) {
m_model->removeItem(index);
} else if (action == hideAction) {
- m_model->setItemHidden(index, hideAction->isChecked());
+ item->setHidden(hideAction->isChecked());
} else if (action == openInNewTabAction) {
const KUrl url = m_model->item(index)->dataValue("url").value<KUrl>();
emit placeMiddleClicked(url);
} else if (action == showAllAction) {
m_model->setHiddenItemsShown(showAllAction->isChecked());
- } else if (action == tearDownAction) {
+ } else if (action == teardownAction) {
+ m_model->requestTeardown(index);
} else if (action == ejectAction) {
+ m_model->requestEject(index);
}
}
void PlacesPanel::slotTrashUpdated(KJob* job)
{
if (job->error()) {
- // TODO: Show error-string inside Dolphin, don't use job->ui->showErrorMessage().
+ emit errorMessage(job->errorString());
}
org::kde::KDirNotify::emitFilesAdded("trash:/");
}
dialog->setAllowGlobal(true);
dialog->setUrl(url);
if (dialog->exec() == QDialog::Accepted) {
- KStandardItem* item = createStandardItemFromDialog(dialog);
+ PlacesItem* item = m_model->createPlacesItem(dialog->text(), dialog->url(), dialog->icon());
// Insert the item as last item of the corresponding group.
int i = 0;
- while (i < m_model->count() && m_model->item(i)->group() != item->group()) {
+ while (i < m_model->count() && m_model->placesItem(i)->group() != item->group()) {
++i;
}
bool inserted = false;
while (!inserted && i < m_model->count()) {
- if (m_model->item(i)->group() != item->group()) {
+ if (m_model->placesItem(i)->group() != item->group()) {
m_model->insertItem(i, item);
inserted = true;
}
dialog->setUrl(data.value("url").value<KUrl>());
dialog->setAllowGlobal(true);
if (dialog->exec() == QDialog::Accepted) {
- KStandardItem* oldItem = m_model->item(index);
+ PlacesItem* oldItem = m_model->placesItem(index);
if (oldItem) {
- KStandardItem* item = createStandardItemFromDialog(dialog);
- // Although the user might have changed the URL of the item in a way
- // that another group should be assigned, we still apply the old
- // group to keep the same position for the item.
- item->setGroup(oldItem->group());
- m_model->replaceItem(index, item);
+ oldItem->setText(dialog->text());
+ oldItem->setUrl(dialog->url());
+ oldItem->setIcon(dialog->icon());
}
}
selectionManager->setSelected(index);
}
-KStandardItem* PlacesPanel::createStandardItemFromDialog(PlacesItemEditDialog* dialog) const
-{
- Q_ASSERT(dialog);
-
- const KUrl newUrl = dialog->url();
- KStandardItem* item = new KStandardItem();
- item->setIcon(KIcon(dialog->icon()));
- item->setText(dialog->text());
- item->setDataValue("url", newUrl);
- item->setGroup(m_model->groupName(newUrl));
-
- return item;
-}
-
#include "placespanel.moc"