mirror of
https://bitbucket.org/smil3y/kde-extraapps.git
synced 2025-02-24 10:52:53 +00:00

specials keys outside the Qt::Key_Space-Qt::Key_ydiaeresis range, Katie uses values that equal those used by X11 for keys aswell (i.e. the map is redundant) Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
147 lines
4.7 KiB
C++
147 lines
4.7 KiB
C++
/*
|
|
* Copyright 2008 Petri Damsten <damu@iki.fi>
|
|
*
|
|
* 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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "list.h"
|
|
#include "sendkeys.h"
|
|
#include "configdata.h"
|
|
#include "pastemacroexpander.h"
|
|
|
|
#include <QTimer>
|
|
#include <QStandardItemModel>
|
|
#include <QApplication>
|
|
#include <QClipboard>
|
|
|
|
#include <KWindowSystem>
|
|
#include <KDebug>
|
|
#include <KGlobalSettings>
|
|
#include <KIconLoader>
|
|
#include <KIcon>
|
|
|
|
#include <Plasma/Delegate>
|
|
#include <Plasma/Theme>
|
|
|
|
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<WId> 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::send(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"
|