/* * Copyright 2008 Petri Damsten * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "list.h" #include "sendkeys.h" #include "configdata.h" #include "pastemacroexpander.h" #include #include #include #include #include #include #include #include #include #include #include ListForm::ListForm(QWidget *parent) : QWidget(parent), m_hide(false), cfg(0) { setupUi(this); setAttribute(Qt::WA_NoSystemBackground); icon->setPixmap(KIcon("edit-paste").pixmap(KIconLoader::SizeSmall, KIconLoader::SizeSmall)); Plasma::Delegate *delegate = new Plasma::Delegate; delegate->setRoleMapping(Plasma::Delegate::SubTitleRole, SubTitleRole); delegate->setRoleMapping(Plasma::Delegate::SubTitleMandatoryRole, SubTitleMandatoryRole); treeView->setItemDelegate(delegate); m_listModel = new QStandardItemModel(this); treeView->setModel(m_listModel); treeView->setFocusPolicy(Qt::NoFocus); if (KGlobalSettings::singleClick()) { connect(treeView, SIGNAL(clicked(QModelIndex)), this, SLOT(clicked(QModelIndex))); } else { connect(treeView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(clicked(QModelIndex))); } connect(Plasma::Theme::defaultTheme(), SIGNAL(themeChanged()), this, SLOT(themeChanged())); themeChanged(); } ListForm::~ListForm() { } void ListForm::setData(const ConfigData &data) { m_listModel->clear(); foreach (const QString &txt, data.snippets.keys()) { QStandardItem *item = new QStandardItem(); QString tmp = data.snippets[txt][ConfigData::Text]; item->setData(txt, Qt::DisplayRole); item->setData(false, SubTitleMandatoryRole); item->setData(tmp.replace('\n', ' '), SubTitleRole); item->setData(data.snippets[txt][ConfigData::Text], DataRole); item->setData(KIcon(data.snippets[txt][ConfigData::Icon]), Qt::DecorationRole); m_listModel->insertRow(0, item); } if (data.autoPaste) { label->setText(i18n("Text &snippets (Click to paste text):")); } else { label->setText(i18n("Text &snippets (Click to copy text to clipboard):")); } cfg = &data; } void ListForm::clicked(const QModelIndex &index) { QList windows = KWindowSystem::stackingOrder(); KWindowInfo info; static const QStringList classes = QStringList() << "Plasma" << "Plasma-desktop" << "Plasmoidviewer"; // Don't paste to plasma windows for (int i = windows.count() - 1; i >= 0; --i) { info = KWindowSystem::windowInfo(windows[i], 0, NET::WM2WindowClass); //kDebug() << info.windowClassClass(); if (classes.contains(info.windowClassClass())) { if (i > 0) { continue; } return; } break; } QString txt = m_listModel->data(index, DataRole).toString(); PasteMacroExpander::instance().expandMacros(txt); //kDebug() << txt; QApplication::clipboard()->setText(txt); emit textCopied(); if (m_hide) { hide(); } if (cfg->autoPaste) { // Macro expander might change windows focus so activate windows after that KWindowSystem::activateWindow(info.win()); if (cfg->specialApps.contains(info.windowClassClass())) { m_pasteKey = cfg->specialApps[info.windowClassClass()]; } else { m_pasteKey = cfg->pasteKey; } QTimer::singleShot(200, this, SLOT(paste())); } treeView->selectionModel()->clear(); } void ListForm::paste() { SendKeys::self() << m_pasteKey; } void ListForm::themeChanged() { label->setStyleSheet(QString("QLabel{color:%1;}") .arg(Plasma::Theme::defaultTheme()->color(Plasma::Theme::TextColor).name())); setStyleSheet(QString(".ListForm{background-color:%1;}") .arg(Plasma::Theme::defaultTheme()->color(Plasma::Theme::BackgroundColor).name())); } void ListForm::setHideAfterClick(bool hide) { m_hide = hide; } #include "moc_list.cpp"