|
|
|
|
@ -39,101 +39,30 @@ namespace Plasma |
|
|
|
|
|
|
|
|
|
OpenWidgetAssistant::OpenWidgetAssistant(QWidget *parent) |
|
|
|
|
: KAssistantDialog(parent), |
|
|
|
|
m_fileDialog(0), |
|
|
|
|
m_fileWidget(0), |
|
|
|
|
m_filePageWidget(0) |
|
|
|
|
{ |
|
|
|
|
QWidget *selectWidget = new QWidget(this); |
|
|
|
|
QVBoxLayout *selectLayout = new QVBoxLayout(selectWidget); |
|
|
|
|
QLabel *selectLabel = new QLabel(selectWidget); |
|
|
|
|
selectLabel->setText(i18n("Select the type of widget to install from the list below.")); |
|
|
|
|
m_widgetTypeList = new QListWidget(selectWidget); |
|
|
|
|
m_widgetTypeList->setSelectionMode(QAbstractItemView::SingleSelection); |
|
|
|
|
//m_widgetTypeList->setSelectionBehavior(QAbstractItemView::SelectItems);
|
|
|
|
|
connect(m_widgetTypeList, SIGNAL(itemActivated(QListWidgetItem*)), this, SLOT(next())); |
|
|
|
|
connect(m_widgetTypeList, SIGNAL(itemSelectionChanged()), this, SLOT(slotItemChanged())); |
|
|
|
|
|
|
|
|
|
QString constraint("'Applet' in [X-Plasma-ComponentTypes] and exist [X-Plasma-PackageFormat]"); |
|
|
|
|
KService::List offers = KServiceTypeTrader::self()->query("Plasma/ScriptEngine", constraint); |
|
|
|
|
|
|
|
|
|
QListWidgetItem * item = new QListWidgetItem(QIcon::fromTheme("plasma"), i18n("Plasmoid: Native plasma widget"), m_widgetTypeList); |
|
|
|
|
item->setSelected(true); |
|
|
|
|
m_widgetTypeList->setCurrentItem(item); |
|
|
|
|
|
|
|
|
|
foreach (const KService::Ptr &offer, offers) { |
|
|
|
|
QString text(offer->name()); |
|
|
|
|
if (!offer->comment().isEmpty()) { |
|
|
|
|
text.append(": ").append(offer->comment()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
item = new QListWidgetItem(text, m_widgetTypeList); |
|
|
|
|
item->setData(PackageStructureRole, offer->property("X-KDE-PluginInfo-Name")); |
|
|
|
|
|
|
|
|
|
if (!offer->icon().isEmpty()) { |
|
|
|
|
item->setIcon(QIcon::fromTheme(offer->icon())); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
m_filePageWidget = new QWidget(this); |
|
|
|
|
|
|
|
|
|
selectLayout->addWidget(selectLabel); |
|
|
|
|
selectLayout->addWidget(m_widgetTypeList); |
|
|
|
|
QVBoxLayout *layout = new QVBoxLayout(m_filePageWidget); |
|
|
|
|
m_fileWidget = new KFileWidget(QUrl(), m_filePageWidget); |
|
|
|
|
m_fileWidget->setOperationMode(KFileWidget::Opening); |
|
|
|
|
m_fileWidget->setMode(KFile::File | KFile::ExistingOnly); |
|
|
|
|
connect(this, SIGNAL(user1Clicked()), m_fileWidget, SLOT(slotOk())); |
|
|
|
|
connect(m_fileWidget, SIGNAL(accepted()), this, SLOT(finished())); |
|
|
|
|
layout->addWidget(m_fileWidget); |
|
|
|
|
|
|
|
|
|
m_typePage = new KPageWidgetItem(selectWidget, i18n("Install New Widget From File")); |
|
|
|
|
m_typePage->setIcon(QIcon::fromTheme("plasma")); |
|
|
|
|
addPage(m_typePage); |
|
|
|
|
m_fileWidget->setFilter(QString()); |
|
|
|
|
QStringList mimes; |
|
|
|
|
mimes << "application/x-plasma"; |
|
|
|
|
m_fileWidget->setMimeFilter(mimes); |
|
|
|
|
|
|
|
|
|
m_filePageWidget = new QWidget(this); |
|
|
|
|
m_filePage = new KPageWidgetItem(m_filePageWidget, i18n("Select File")); |
|
|
|
|
m_filePage = new KPageWidgetItem(m_filePageWidget, i18n("Select Plasmoid File")); |
|
|
|
|
addPage(m_filePage); |
|
|
|
|
|
|
|
|
|
connect(this, SIGNAL(currentPageChanged(KPageWidgetItem*,KPageWidgetItem*)), SLOT(prepPage(KPageWidgetItem*,KPageWidgetItem*))); |
|
|
|
|
|
|
|
|
|
//connect( this, SIGNAL(helpClicked()), this, SLOT(slotHelpClicked()) );
|
|
|
|
|
//m_widgetTypeList->setFocus();
|
|
|
|
|
resize(QSize(560, 400).expandedTo(minimumSizeHint())); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void OpenWidgetAssistant::prepPage(KPageWidgetItem *current, KPageWidgetItem *before) |
|
|
|
|
{ |
|
|
|
|
Q_UNUSED(before); |
|
|
|
|
if (m_widgetTypeList->selectedItems().isEmpty()) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (current != m_filePage) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!m_fileDialog) { |
|
|
|
|
QVBoxLayout *layout = new QVBoxLayout(m_filePageWidget); |
|
|
|
|
m_fileDialog = new KFileWidget(QUrl(), m_filePageWidget); |
|
|
|
|
m_fileDialog->setOperationMode(KFileWidget::Opening); |
|
|
|
|
m_fileDialog->setMode(KFile::File | KFile::ExistingOnly); |
|
|
|
|
connect(this, SIGNAL(user1Clicked()), m_fileDialog, SLOT(slotOk())); |
|
|
|
|
connect(m_fileDialog, SIGNAL(accepted()), this, SLOT(finished())); |
|
|
|
|
//m_fileDialog->setWindowFlags(Qt::Widget);
|
|
|
|
|
layout->addWidget(m_fileDialog); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QListWidgetItem *item = m_widgetTypeList->selectedItems().first(); |
|
|
|
|
Q_ASSERT(item); |
|
|
|
|
|
|
|
|
|
QString type = item->data(PackageStructureRole).toString(); |
|
|
|
|
|
|
|
|
|
m_fileDialog->setFilter(QString()); |
|
|
|
|
if (!type.isEmpty()) { |
|
|
|
|
QString constraint = QString("'%1' == [X-KDE-PluginInfo-Name]").arg(type); |
|
|
|
|
KService::List offers = KServiceTypeTrader::self()->query("Plasma/PackageStructure", constraint); |
|
|
|
|
|
|
|
|
|
qDebug() << "looking for a Plasma/PackageStructure with" << constraint << type; |
|
|
|
|
Q_ASSERT(offers.count() > 0); |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
QStringList mimes; |
|
|
|
|
mimes << "application/x-plasma"; |
|
|
|
|
m_fileDialog->setMimeFilter(mimes); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void OpenWidgetAssistant::slotHelpClicked() |
|
|
|
|
{ |
|
|
|
|
//enable it when doc will created
|
|
|
|
|
@ -141,8 +70,8 @@ void OpenWidgetAssistant::slotHelpClicked() |
|
|
|
|
|
|
|
|
|
void OpenWidgetAssistant::finished() |
|
|
|
|
{ |
|
|
|
|
m_fileDialog->accept(); // how interesting .. accept() must be called before the state is set
|
|
|
|
|
QString packageFilePath = m_fileDialog->selectedFile(); |
|
|
|
|
m_fileWidget->accept(); // how interesting .. accept() must be called before the state is set
|
|
|
|
|
QString packageFilePath = m_fileWidget->selectedFile(); |
|
|
|
|
if (packageFilePath.isEmpty()) { |
|
|
|
|
//TODO: user visible error handling
|
|
|
|
|
qDebug() << "hm. no file path?"; |
|
|
|
|
|