Skip to content
This repository has been archived by the owner on Dec 17, 2017. It is now read-only.

Commit

Permalink
Improved (hopefuly) layout and look of config-fileassociations, appli…
Browse files Browse the repository at this point in the history
…cation chooser
  • Loading branch information
surlykke committed Apr 30, 2013
1 parent 546babf commit 7efa6c9
Show file tree
Hide file tree
Showing 4 changed files with 252 additions and 90 deletions.
2 changes: 1 addition & 1 deletion libraries/qtxdg/xdgdesktopfile.cpp
Expand Up @@ -1355,7 +1355,7 @@ void XdgDesktopFileCache::initialize(const QString& dirName)
m_fileCache.insert(f.absoluteFilePath(), df);
}

QStringList mimes = df->value("MimeType").toString().split(';', QString::SkipEmptyParts);
QStringList mimes = df->value("MimeType").toString().split(';', QString::SkipEmptyParts);

foreach (QString mime, mimes)
{
Expand Down
Expand Up @@ -23,7 +23,6 @@
*
* END_COMMON_COPYRIGHT_HEADER */

#include <QTreeWidget>
#include <QDialogButtonBox>
#include <QPushButton>
#include <QSettings>
Expand All @@ -34,6 +33,7 @@
#include "libraries/qtxdg/xdgmime.h"
#include "applicationchooser.h"

Q_DECLARE_METATYPE(XdgDesktopFile*)

ApplicationChooser::ApplicationChooser(XdgMimeInfo* mimeInfo, QSettings* defaultsList, QObject *parent, QString uri) :
m_MimeInfo(mimeInfo),
Expand All @@ -46,8 +46,7 @@ ApplicationChooser::ApplicationChooser(XdgMimeInfo* mimeInfo, QSettings* default
widget.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
fillApplicationListWidget();
connect(widget.buttonBox, SIGNAL(accepted()), this, SLOT(ok()));
connect(widget.applicationListWidget, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
this, SLOT(selectionChanged(QListWidgetItem*, QListWidgetItem*)));
connect(widget.applicationListWidget, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(selectionChanged()));
}

ApplicationChooser::~ApplicationChooser()
Expand Down Expand Up @@ -88,44 +87,88 @@ void ApplicationChooser::fillApplicationListWidget()
QListWidgetItem *item = new QListWidgetItem();
item->setIcon(desktopFile->icon());
item->setText(desktopFile->name());
QString filenameNoPath = QFileInfo(desktopFile->fileName()).fileName();
item->setData(32, filenameNoPath);

item->setData(32, QVariant::fromValue<XdgDesktopFile*>(desktopFile));

if (desktopFile == currentDefaultApplication)
{
widget.applicationListWidget->insertItem(0, item);
item->setSelected(true);
}
else
{
widget.applicationListWidget->addItem(item);
item->setSelected(false);
}

addedApps.insert(desktopFile);
}


selectionChanged();

widget.applicationListWidget->setFocus();
}
}

void ApplicationChooser::ok()
{
QString desktopfile = widget.applicationListWidget->currentItem()->data(32).toString();
if (! desktopfile.isEmpty())
XdgDesktopFile* desktopfile = widget.applicationListWidget->currentItem()->data(32).value<XdgDesktopFile*>();
if (desktopfile)
{
qDebug() << "Ok called, selecting: " << desktopfile;
QString fileNameNoPath = QFileInfo(desktopfile->fileName()).fileName();
m_DefaultsList->beginGroup("Default Applications");
m_DefaultsList->setValue(m_MimeInfo->mimeType(), desktopfile);
m_DefaultsList->setValue(m_MimeInfo->mimeType(), fileNameNoPath);
m_DefaultsList->endGroup();
}
}

void ApplicationChooser::selectionChanged(QListWidgetItem* newItem, QListWidgetItem* oldItem)
void ApplicationChooser::selectionChanged()
{
widget.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
if (newItem && (! newItem->data(32).toString().isEmpty()))
widget.appIconLabel->clear();
widget.appNameLabel->clear();
widget.handlesLabel->hide();
widget.mimetypeListWidget->clear();
widget.mimetypeListWidget->setVisible(false);

QListWidgetItem* newItem = widget.applicationListWidget->currentItem();
qDebug() << newItem;
if (newItem) {
qDebug() << newItem->isSelected();
qDebug() << newItem->data(32).toInt();
}
if (newItem && newItem->data(32).value<XdgDesktopFile*>())
{
XdgDesktopFile* desktopFile = newItem->data(32).value<XdgDesktopFile*>();

QIcon icon = desktopFile->icon();
if (! icon.isNull())
{
widget.appIconLabel->setPixmap(icon.pixmap(widget.appIconLabel->size()));
}

widget.appNameLabel->setText(desktopFile->name());

widget.handlesLabel->show();

QSet<QString> mimeTypeComments;
foreach (QString mimeType, desktopFile->value("MimeType").toString().split(";", QString::SkipEmptyParts))
{
XdgMimeInfo* mimeInfo = XdgMimeInfoCache::xdgMimeInfo(mimeType);
if (mimeInfo)
{
mimeTypeComments.insert(mimeInfo->comment());
}
}
QList<QString> mimetypeCommentsList = mimeTypeComments.toList();
qSort(mimetypeCommentsList);
foreach (QString mimetypeComment, mimetypeCommentsList)
{
QListWidgetItem* item = new QListWidgetItem(mimetypeComment, widget.mimetypeListWidget);
item->setFlags(0);
}

widget.mimetypeListWidget->setVisible(true);

widget.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
}
}
Expand Up @@ -42,7 +42,7 @@ class ApplicationChooser : public QDialog

private slots:
void ok();
void selectionChanged(QListWidgetItem *newItem, QListWidgetItem *oldItem);
void selectionChanged();

private:
XdgMimeInfo* m_MimeInfo;
Expand Down

0 comments on commit 7efa6c9

Please sign in to comment.