mirror of
https://github.com/arcan1s/awesome-widgets.git
synced 2025-04-24 23:47:20 +00:00
* add preview function
* more comments inside * variables renaming * unite several lists to one hash * add build_future definition checking to source code
This commit is contained in:
parent
dddc3962a5
commit
95b6b2d9e9
@ -17,6 +17,7 @@
|
||||
|
||||
import QtQuick 2.0
|
||||
import QtQuick.Controls 1.3 as QtControls
|
||||
import QtQuick.Dialogs 1.2 as QtDialogs
|
||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||
|
||||
import org.kde.plasma.private.awesomewidget 1.0
|
||||
@ -42,6 +43,7 @@ Item {
|
||||
property alias cfg_text: textPattern.text
|
||||
|
||||
signal dropSource(string sourceName)
|
||||
signal needTextUpdate(string newText)
|
||||
|
||||
|
||||
Column {
|
||||
@ -197,7 +199,7 @@ Item {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.ComboBox {
|
||||
width: (parent.width - addTagButton.width - showValueButton.width - addLambdaButton.width) / 2
|
||||
width: parent.width * 1 / 5
|
||||
textRole: "label"
|
||||
model: [
|
||||
{
|
||||
@ -262,10 +264,10 @@ Item {
|
||||
}
|
||||
QtControls.ComboBox {
|
||||
id: tags
|
||||
width: (parent.width - addTagButton.width - showValueButton.width - addLambdaButton.width) / 2
|
||||
width: parent.width * 1 / 5
|
||||
}
|
||||
QtControls.Button {
|
||||
id: addTagButton
|
||||
width: parent.width * 1 / 5
|
||||
text: i18n("Add")
|
||||
|
||||
onClicked: {
|
||||
@ -278,7 +280,7 @@ Item {
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
id: showValueButton
|
||||
width: parent.width * 1 / 5
|
||||
text: i18n("Show value")
|
||||
|
||||
onClicked: {
|
||||
@ -293,7 +295,7 @@ Item {
|
||||
}
|
||||
}
|
||||
QtControls.Button {
|
||||
id: addLambdaButton
|
||||
width: parent.width * 1 / 5
|
||||
text: i18n("Add lambda")
|
||||
|
||||
onClicked: {
|
||||
@ -310,10 +312,18 @@ Item {
|
||||
height: implicitHeight
|
||||
width: parent.width
|
||||
QtControls.Button {
|
||||
width: parent.width
|
||||
width: parent.width * 3 / 5
|
||||
text: i18n("Edit bars")
|
||||
onClicked: awKeys.editItem("graphicalitem")
|
||||
}
|
||||
QtControls.Button {
|
||||
width: parent.width * 2 / 5
|
||||
text: i18n("Preview")
|
||||
onClicked: {
|
||||
awKeys.initKeys(textPattern.text)
|
||||
awKeys.needToBeUpdated()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QtControls.TextArea {
|
||||
@ -325,6 +335,12 @@ Item {
|
||||
}
|
||||
}
|
||||
|
||||
QtDialogs.MessageDialog {
|
||||
id: compiledText
|
||||
modality: Qt.NonModal
|
||||
title: i18n("Preview")
|
||||
}
|
||||
|
||||
// we need to initializate DataEngines here too
|
||||
// because we need to get keys and values
|
||||
PlasmaCore.DataSource {
|
||||
@ -346,6 +362,8 @@ Item {
|
||||
interval: 5000
|
||||
|
||||
onNewData: {
|
||||
// even after a disconnect it is possible that we'll receive an update
|
||||
if (sourceName == "update") return
|
||||
if (debug) console.debug("Update source", sourceName)
|
||||
awKeys.dataUpdateReceived(sourceName, data)
|
||||
}
|
||||
@ -369,6 +387,7 @@ Item {
|
||||
// drop "update" source which does not required by this page
|
||||
extsysmonDE.disconnectSource("update")
|
||||
awKeys.dropSourceFromDataengine.connect(dropSource)
|
||||
awKeys.needTextToBeUpdated.connect(needTextUpdate)
|
||||
// init submodule
|
||||
awKeys.initKeys(plasmoid.configuration.text)
|
||||
awKeys.setAggregatorProperty("acOffline", plasmoid.configuration.acOffline)
|
||||
@ -385,4 +404,11 @@ Item {
|
||||
|
||||
systemmonitorDE.disconnectSource(sourceName)
|
||||
}
|
||||
|
||||
onNeedTextUpdate: {
|
||||
if (debug) console.debug()
|
||||
|
||||
compiledText.text = newText.replace(/ /g, " ")
|
||||
compiledText.open()
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +55,10 @@ AWActions::~AWActions()
|
||||
void AWActions::checkUpdates(const bool showAnyway)
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
qCDebug(LOG_AW) << "Show anyway" << showAnyway;
|
||||
|
||||
// showAnyway options requires to show message if no updates found on direct
|
||||
// request. In case of automatic check no message will be shown
|
||||
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
|
||||
connect(manager, &QNetworkAccessManager::finished,
|
||||
[showAnyway, this](QNetworkReply *reply) {
|
||||
@ -77,6 +80,7 @@ bool AWActions::dropCache() const
|
||||
}
|
||||
|
||||
|
||||
// HACK: since QML could not use QLoggingCategory I need this hack
|
||||
bool AWActions::isDebugEnabled() const
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
@ -85,18 +89,18 @@ bool AWActions::isDebugEnabled() const
|
||||
}
|
||||
|
||||
|
||||
void AWActions::runCmd(const QString cmd) const
|
||||
bool AWActions::runCmd(const QString cmd) const
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
qCDebug(LOG_AW) << "Cmd" << cmd;
|
||||
|
||||
QProcess command;
|
||||
sendNotification(QString("Info"), i18n("Run %1", cmd));
|
||||
|
||||
command.startDetached(cmd);
|
||||
return QProcess::startDetached(cmd);
|
||||
}
|
||||
|
||||
|
||||
// HACK: this method uses variable from version.h
|
||||
void AWActions::showReadme() const
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
@ -105,6 +109,7 @@ void AWActions::showReadme() const
|
||||
}
|
||||
|
||||
|
||||
// HACK: this method uses variables from version.h
|
||||
QString AWActions::getAboutText(const QString type) const
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
@ -184,6 +189,8 @@ QVariantMap AWActions::readDataEngineConfiguration() const
|
||||
configuration[QString("PLAYERSYMBOLS")] = settings.value(QString("PLAYERSYMBOLS"), QString("10"));
|
||||
settings.endGroup();
|
||||
|
||||
qCInfo(LOG_AW) << "Configuration" << configuration;
|
||||
|
||||
return configuration;
|
||||
}
|
||||
|
||||
@ -212,6 +219,7 @@ void AWActions::writeDataEngineConfiguration(const QVariantMap configuration) co
|
||||
}
|
||||
|
||||
|
||||
// to avoid additional object definition this method is static
|
||||
void AWActions::sendNotification(const QString eventId, const QString message)
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
@ -259,6 +267,7 @@ void AWActions::versionReplyRecieved(QNetworkReply *reply, const bool showAnyway
|
||||
qCDebug(LOG_AW);
|
||||
qCDebug(LOG_AW) << "Return code" << reply->error();
|
||||
qCDebug(LOG_AW) << "Reply error message" << reply->errorString();
|
||||
qCDebug(LOG_AW) << "Show anyway" << showAnyway;
|
||||
|
||||
QJsonParseError error;
|
||||
QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll(), &error);
|
||||
@ -275,6 +284,7 @@ void AWActions::versionReplyRecieved(QNetworkReply *reply, const bool showAnyway
|
||||
version.remove(QString("V."));
|
||||
qCInfo(LOG_AW) << "Found version" << version;
|
||||
|
||||
// FIXME: possible there is a better way to check versions
|
||||
int old_major = QString(VERSION).split(QChar('.')).at(0).toInt();
|
||||
int old_minor = QString(VERSION).split(QChar('.')).at(1).toInt();
|
||||
int old_patch = QString(VERSION).split(QChar('.')).at(2).toInt();
|
||||
|
@ -36,7 +36,7 @@ public:
|
||||
Q_INVOKABLE void checkUpdates(const bool showAnyway = false);
|
||||
Q_INVOKABLE bool dropCache() const;
|
||||
Q_INVOKABLE bool isDebugEnabled() const;
|
||||
Q_INVOKABLE void runCmd(const QString cmd = QString("/usr/bin/true")) const;
|
||||
Q_INVOKABLE bool runCmd(const QString cmd = QString("/usr/bin/true")) const;
|
||||
Q_INVOKABLE void showReadme() const;
|
||||
// configuration slots
|
||||
Q_INVOKABLE QString getAboutText(const QString type = QString("header")) const;
|
||||
@ -52,8 +52,6 @@ private slots:
|
||||
void showInfo(const QString version) const;
|
||||
void showUpdates(const QString version) const;
|
||||
void versionReplyRecieved(QNetworkReply *reply, const bool showAnyway) const;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
|
@ -34,8 +34,8 @@ AWDataAggregator::AWDataAggregator(QObject *parent)
|
||||
|
||||
initScene();
|
||||
|
||||
connect(this, SIGNAL(updateData(QHash<QString, QString>)),
|
||||
this, SLOT(dataUpdate(QHash<QString, QString>)));
|
||||
connect(this, SIGNAL(const updateData(QHash<QString, QString>)),
|
||||
this, SLOT(const dataUpdate(QHash<QString, QString>)));
|
||||
}
|
||||
|
||||
|
||||
@ -56,14 +56,6 @@ QList<float> AWDataAggregator::getData(const QString key) const
|
||||
}
|
||||
|
||||
|
||||
QSize AWDataAggregator::getTooltipSize() const
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
QString AWDataAggregator::htmlImage(const QPixmap source) const
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
@ -82,9 +74,10 @@ void AWDataAggregator::setParameters(QVariantMap settings)
|
||||
qCDebug(LOG_AW);
|
||||
qCDebug(LOG_AW) << "Settings" << settings;
|
||||
|
||||
// cast from QVariantMap to QVariantHash without data lost
|
||||
configuration = qvariant_cast<QVariantHash>(settings);
|
||||
|
||||
enablePopup = configuration[QString("notify")].toBool();
|
||||
m_enablePopup = configuration[QString("notify")].toBool();
|
||||
|
||||
counts += configuration[QString("cpuTooltip")].toInt();
|
||||
counts += configuration[QString("cpuclTooltip")].toInt();
|
||||
@ -92,6 +85,8 @@ void AWDataAggregator::setParameters(QVariantMap settings)
|
||||
counts += configuration[QString("swapTooltip")].toInt();
|
||||
counts += configuration[QString("downTooltip")].toInt();
|
||||
counts += configuration[QString("batTooltip")].toInt();
|
||||
// resize tooltip image
|
||||
toolTipView->resize(100.0 * counts, 105.0);
|
||||
|
||||
boundaries[QString("cpuTooltip")] = 100.0;
|
||||
boundaries[QString("cpuclTooltip")] = 4000.0;
|
||||
@ -100,8 +95,6 @@ void AWDataAggregator::setParameters(QVariantMap settings)
|
||||
boundaries[QString("downTooltip")] = 1.0;
|
||||
boundaries[QString("upTooltip")] = 1.0;
|
||||
boundaries[QString("batTooltip")] = 100.0;
|
||||
size.setHeight(105.0);
|
||||
size.setWidth(100.0 * counts);
|
||||
|
||||
if (configuration[QString("cpuTooltip")].toBool()) requiredKeys.append(QString("cpuTooltip"));
|
||||
if (configuration[QString("cpuclTooltip")].toBool()) requiredKeys.append(QString("cpuclTooltip"));
|
||||
@ -122,10 +115,9 @@ QPixmap AWDataAggregator::tooltipImage()
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
|
||||
toolTipView->resize(size);
|
||||
// create image
|
||||
toolTipScene->clear();
|
||||
QPen pen = QPen();
|
||||
QPen pen;
|
||||
bool down = false;
|
||||
foreach(QString key, requiredKeys) {
|
||||
// create frame
|
||||
@ -158,7 +150,7 @@ QPixmap AWDataAggregator::tooltipImage()
|
||||
}
|
||||
|
||||
|
||||
void AWDataAggregator::dataUpdate(QHash<QString, QString> values)
|
||||
void AWDataAggregator::dataUpdate(const QHash<QString, QString> values)
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
|
||||
@ -187,7 +179,8 @@ void AWDataAggregator::dataUpdate(QHash<QString, QString> values)
|
||||
}
|
||||
|
||||
|
||||
void AWDataAggregator::checkValue(const QString source, const float value, const float extremum) const
|
||||
void AWDataAggregator::checkValue(const QString source, const float value,
|
||||
const float extremum) const
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
qCDebug(LOG_AW) << "Notification source" << source;
|
||||
@ -195,23 +188,24 @@ void AWDataAggregator::checkValue(const QString source, const float value, const
|
||||
qCDebug(LOG_AW) << "Called with extremum" << extremum;
|
||||
|
||||
if (value >= 0.0) {
|
||||
if ((enablePopup) && (value > extremum) && (data[source].last() < extremum))
|
||||
if ((m_enablePopup) && (value > extremum) && (data[source].last() < extremum))
|
||||
return AWActions::sendNotification(QString("event"), notificationText(source, value));
|
||||
} else {
|
||||
if ((enablePopup) && (value < extremum) && (data[source].last() > extremum))
|
||||
if ((m_enablePopup) && (value < extremum) && (data[source].last() > extremum))
|
||||
return AWActions::sendNotification(QString("event"), notificationText(source, value));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void AWDataAggregator::checkValue(const QString source, const QString current, const QString received) const
|
||||
void AWDataAggregator::checkValue(const QString source, const QString current,
|
||||
const QString received) const
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
qCDebug(LOG_AW) << "Notification source" << source;
|
||||
qCDebug(LOG_AW) << "Current value" << current;
|
||||
qCDebug(LOG_AW) << "Received value" << received;
|
||||
|
||||
if ((enablePopup) && (current != received))
|
||||
if ((m_enablePopup) && (current != received))
|
||||
return AWActions::sendNotification(QString("event"), notificationText(source, received));
|
||||
}
|
||||
|
||||
@ -238,10 +232,7 @@ QString AWDataAggregator::notificationText(const QString source, const float val
|
||||
|
||||
QString output;
|
||||
if (source == QString("batTooltip")) {
|
||||
if (value > 0.0)
|
||||
output = i18n("AC online");
|
||||
else
|
||||
output = i18n("AC offline");
|
||||
output = value > 0.0 ? i18n("AC online") : i18n("AC offline");
|
||||
} else if (source == QString("cpuTooltip")) {
|
||||
output = i18n("High CPU load");
|
||||
} else if (source == QString("memTooltip")) {
|
||||
|
@ -35,17 +35,16 @@ public:
|
||||
explicit AWDataAggregator(QObject *parent = nullptr);
|
||||
virtual ~AWDataAggregator();
|
||||
QList<float> getData(const QString key) const;
|
||||
QSize getTooltipSize() const;
|
||||
QString htmlImage(const QPixmap source) const;
|
||||
void setParameters(QVariantMap settings);
|
||||
QPixmap tooltipImage();
|
||||
|
||||
signals:
|
||||
void updateData(QHash<QString, QString> values);
|
||||
void toolTipPainted(QString image);
|
||||
void updateData(const QHash<QString, QString> values);
|
||||
void toolTipPainted(const QString image) const;
|
||||
|
||||
private slots:
|
||||
void dataUpdate(QHash<QString, QString> values);
|
||||
void dataUpdate(const QHash<QString, QString> values);
|
||||
|
||||
private:
|
||||
// ui
|
||||
@ -66,9 +65,8 @@ private:
|
||||
QString currentNetworkDevice = QString("lo");
|
||||
QHash<QString, float> boundaries;
|
||||
QHash<QString, QList<float>> data;
|
||||
bool enablePopup = false;
|
||||
bool m_enablePopup = false;
|
||||
QStringList requiredKeys;
|
||||
QSize size;
|
||||
};
|
||||
|
||||
|
||||
|
@ -49,8 +49,8 @@ AWKeys::AWKeys(QObject *parent)
|
||||
dataAggregator = new AWDataAggregator(this);
|
||||
connect(this, SIGNAL(needToBeUpdated()), this, SLOT(dataUpdate()));
|
||||
// transfer signal from AWDataAggregator object to QML ui
|
||||
connect(dataAggregator, SIGNAL(toolTipPainted(QString)),
|
||||
this, SIGNAL(needToolTipToBeUpdated(QString)));
|
||||
connect(dataAggregator, SIGNAL(toolTipPainted(const QString)),
|
||||
this, SIGNAL(needToolTipToBeUpdated(const QString)));
|
||||
}
|
||||
|
||||
|
||||
@ -84,10 +84,10 @@ void AWKeys::initKeys(const QString currentPattern)
|
||||
qCDebug(LOG_AW) << "Pattern" << currentPattern;
|
||||
|
||||
// init
|
||||
pattern = currentPattern;
|
||||
m_pattern = currentPattern;
|
||||
// update network and hdd list
|
||||
addKeyToCache(QString("Hdd"));
|
||||
addKeyToCache(QString("Network"));
|
||||
addKeyToCache(QString("hdd"));
|
||||
addKeyToCache(QString("net"));
|
||||
loadKeysFromCache();
|
||||
}
|
||||
|
||||
@ -100,30 +100,12 @@ void AWKeys::setAggregatorProperty(const QString key, const QVariant value)
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AWKeys::setPopupEnabled(const bool popup)
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
qCDebug(LOG_AW) << "Is popup enabled" << popup;
|
||||
|
||||
enablePopup = popup;
|
||||
}
|
||||
|
||||
|
||||
void AWKeys::setWrapNewLines(const bool wrap)
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
qCDebug(LOG_AW) << "Is wrapping enabled" << wrap;
|
||||
|
||||
wrapNewLines = wrap;
|
||||
}
|
||||
|
||||
|
||||
QSize AWKeys::toolTipSize() const
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
|
||||
return dataAggregator->getTooltipSize();
|
||||
m_wrapNewLines = wrap;
|
||||
}
|
||||
|
||||
|
||||
@ -138,13 +120,13 @@ void AWKeys::addDevice(const QString source)
|
||||
if (source.contains(diskRegexp)) {
|
||||
QString device = source;
|
||||
device.remove(QString("/Rate/rblk"));
|
||||
addKeyToCache(QString("Disk"), device);
|
||||
addKeyToCache(QString("disk"), device);
|
||||
} else if (source.contains(mountRegexp)) {
|
||||
QString device = source;
|
||||
device.remove(QString("partitions")).remove(QString("/filllevel"));
|
||||
addKeyToCache(QString("Mount"), device);
|
||||
addKeyToCache(QString("mount"), device);
|
||||
} else if (source.startsWith(QString("lmsensors"))) {
|
||||
addKeyToCache(QString("Temp"), source);
|
||||
addKeyToCache(QString("temp"), source);
|
||||
}
|
||||
}
|
||||
|
||||
@ -182,7 +164,7 @@ QStringList AWKeys::dictKeys(const bool sorted, const QString regexp) const
|
||||
allKeys.append(QString("cpucl"));
|
||||
allKeys.append(QString("cpu"));
|
||||
// temperature
|
||||
for (int i=tempDevices.count()-1; i>=0; i--)
|
||||
for (int i=m_devices[QString("temp")].count()-1; i>=0; i--)
|
||||
allKeys.append(QString("temp%1").arg(i));
|
||||
// gputemp
|
||||
allKeys.append(QString("gputemp"));
|
||||
@ -207,7 +189,7 @@ QStringList AWKeys::dictKeys(const bool sorted, const QString regexp) const
|
||||
allKeys.append(QString("swaptotgb"));
|
||||
allKeys.append(QString("swap"));
|
||||
// hdd
|
||||
for (int i=mountDevices.count()-1; i>=0; i--) {
|
||||
for (int i=m_devices[QString("mount")].count()-1; i>=0; i--) {
|
||||
allKeys.append(QString("hddmb%1").arg(i));
|
||||
allKeys.append(QString("hddgb%1").arg(i));
|
||||
allKeys.append(QString("hddfreemb%1").arg(i));
|
||||
@ -217,15 +199,15 @@ QStringList AWKeys::dictKeys(const bool sorted, const QString regexp) const
|
||||
allKeys.append(QString("hdd%1").arg(i));
|
||||
}
|
||||
// hdd speed
|
||||
for (int i=diskDevices.count()-1; i>=0; i--) {
|
||||
for (int i=m_devices[QString("disk")].count()-1; i>=0; i--) {
|
||||
allKeys.append(QString("hddr%1").arg(i));
|
||||
allKeys.append(QString("hddw%1").arg(i));
|
||||
}
|
||||
// hdd temp
|
||||
for (int i=hddDevices.count()-1; i>=0; i--)
|
||||
for (int i=m_devices[QString("hdd")].count()-1; i>=0; i--)
|
||||
allKeys.append(QString("hddtemp%1").arg(i));
|
||||
// network
|
||||
for (int i=networkDevices.count()-1; i>=0; i--) {
|
||||
for (int i=m_devices[QString("net")].count()-1; i>=0; i--) {
|
||||
allKeys.append(QString("downunits%1").arg(i));
|
||||
allKeys.append(QString("upunits%1").arg(i));
|
||||
allKeys.append(QString("downkb%1").arg(i));
|
||||
@ -310,8 +292,8 @@ QStringList AWKeys::getHddDevices() const
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
|
||||
QStringList devices = hddDevices;
|
||||
// required by ui interface
|
||||
QStringList devices = m_devices[QString("hdd")];
|
||||
// required by selector in the UI
|
||||
devices.insert(0, QString("disable"));
|
||||
devices.insert(0, QString("auto"));
|
||||
|
||||
@ -325,11 +307,14 @@ void AWKeys::dataUpdateReceived(const QString sourceName, const QVariantMap data
|
||||
qCDebug(LOG_AW) << "Source" << sourceName;
|
||||
qCDebug(LOG_AW) << "Data" << data;
|
||||
|
||||
if (sourceName == QString("update")) return emit(needToBeUpdated());
|
||||
|
||||
// run concurrent data update
|
||||
#ifdef BUILD_FUTURE
|
||||
QtConcurrent::run([this, sourceName, data]() {
|
||||
return setDataBySource(sourceName, data);
|
||||
});
|
||||
#else /* BUILD_FUTURE */
|
||||
return setDataBySource(sourceName, data);
|
||||
#endif /* BUILD_FUTURE */
|
||||
}
|
||||
|
||||
|
||||
@ -340,35 +325,29 @@ QString AWKeys::infoByKey(QString key) const
|
||||
|
||||
key.remove(QRegExp(QString("^bar[0-9]{1,}")));
|
||||
if (key.startsWith(QString("custom")))
|
||||
foreach(ExtScript *item, extScripts->items()) {
|
||||
if (item->tag(QString("custom")) != key) continue;
|
||||
return item->executable();
|
||||
}
|
||||
return extScripts->itemByTagNumber(key.remove(QString("custom")).toInt())->uniq();
|
||||
else if (key.contains(QRegExp(QString("^hdd[rw]"))))
|
||||
return QString("%1").arg(diskDevices[key.remove(QRegExp(QString("hdd[rw]"))).toInt()]);
|
||||
return QString("%1").arg(m_devices[QString("disk")][key.remove(QRegExp(QString("hdd[rw]"))).toInt()]);
|
||||
else if (key.contains(QRegExp(QString("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))))
|
||||
return QString("%1").arg(mountDevices[key.remove(QRegExp(QString("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))).toInt()]);
|
||||
return QString("%1").arg(m_devices[QString("mount")][key.remove(QRegExp(QString("^hdd([0-9]|mb|gb|freemb|freegb|totmb|totgb)"))).toInt()]);
|
||||
else if (key.startsWith(QString("hddtemp")))
|
||||
return QString("%1").arg(hddDevices[key.remove(QString("hddtemp")).toInt()]);
|
||||
return QString("%1").arg(m_devices[QString("hdd")][key.remove(QString("hddtemp")).toInt()]);
|
||||
else if (key.contains(QRegExp(QString("^(down|up)[0-9]"))))
|
||||
return QString("%1").arg(networkDevices[key.remove(QRegExp(QString("^(down|up)"))).toInt()]);
|
||||
return QString("%1").arg(m_devices[QString("net")][key.remove(QRegExp(QString("^(down|up)"))).toInt()]);
|
||||
else if (key.startsWith(QString("pkgcount")))
|
||||
foreach(ExtUpgrade *item, extUpgrade->items()) {
|
||||
if (item->tag(QString("pkgcount")) != key) continue;
|
||||
return item->executable();
|
||||
}
|
||||
return extUpgrade->itemByTagNumber(key.remove(QString("pkgcount")).toInt())->uniq();
|
||||
else if (key.contains(QRegExp(QString("(^|perc)(ask|bid|price)(chg|)"))))
|
||||
foreach(ExtQuotes *item, extQuotes->items()) {
|
||||
if (item->number() != key.remove(QRegExp(QString("(^|perc)(ask|bid|price)(chg|)"))).toInt()) continue;
|
||||
return item->ticker();
|
||||
}
|
||||
return extQuotes->itemByTagNumber(key.remove(QRegExp(QString("(^|perc)(ask|bid|price)(chg|)"))).toInt())->uniq();
|
||||
else if (key.contains(QRegExp(QString("(weather|weatherId|humidity|pressure|temperature)"))))
|
||||
return extWeather->itemByTagNumber(key.remove(QRegExp(QString("(weather|weatherId|humidity|pressure|temperature)"))).toInt())->uniq();
|
||||
else if (key.startsWith(QString("temp")))
|
||||
return QString("%1").arg(tempDevices[key.remove(QString("temp")).toInt()]);
|
||||
return QString("%1").arg(m_devices[QString("temp")][key.remove(QString("temp")).toInt()]);
|
||||
|
||||
return QString("(none)");
|
||||
}
|
||||
|
||||
|
||||
// HACK this method requires to define tag value from bar from UI interface
|
||||
QString AWKeys::valueByKey(QString key) const
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
@ -403,8 +382,7 @@ void AWKeys::dataUpdate()
|
||||
qCDebug(LOG_AW);
|
||||
|
||||
calculateValues();
|
||||
calculateLambdas();
|
||||
emit(needTextToBeUpdated(parsePattern()));
|
||||
emit(needTextToBeUpdated(parsePattern(m_pattern)));
|
||||
emit(dataAggregator->updateData(values));
|
||||
}
|
||||
|
||||
@ -418,35 +396,13 @@ void AWKeys::loadKeysFromCache()
|
||||
qCInfo(LOG_AW) << "Cache file" << fileName;
|
||||
QSettings cache(fileName, QSettings::IniFormat);
|
||||
|
||||
cache.beginGroup(QString("Disk"));
|
||||
diskDevices.clear();
|
||||
foreach(QString key, cache.allKeys())
|
||||
diskDevices.append(cache.value(key).toString());
|
||||
cache.endGroup();
|
||||
|
||||
cache.beginGroup(QString("Hdd"));
|
||||
hddDevices.clear();
|
||||
foreach(QString key, cache.allKeys())
|
||||
hddDevices.append(cache.value(key).toString());
|
||||
cache.endGroup();
|
||||
|
||||
cache.beginGroup(QString("Mount"));
|
||||
mountDevices.clear();
|
||||
foreach(QString key, cache.allKeys())
|
||||
mountDevices.append(cache.value(key).toString());
|
||||
cache.endGroup();
|
||||
|
||||
cache.beginGroup(QString("Network"));
|
||||
networkDevices.clear();
|
||||
foreach(QString key, cache.allKeys())
|
||||
networkDevices.append(cache.value(key).toString());
|
||||
cache.endGroup();
|
||||
|
||||
cache.beginGroup(QString("Temp"));
|
||||
tempDevices.clear();
|
||||
foreach(QString key, cache.allKeys())
|
||||
tempDevices.append(cache.value(key).toString());
|
||||
cache.endGroup();
|
||||
foreach(QString group, cache.childGroups()) {
|
||||
cache.beginGroup(group);
|
||||
m_devices.remove(group);
|
||||
foreach(QString key, cache.allKeys())
|
||||
m_devices[group].append(cache.value(key).toString());
|
||||
cache.endGroup();
|
||||
}
|
||||
|
||||
return reinitKeys();
|
||||
}
|
||||
@ -474,7 +430,7 @@ void AWKeys::reinitKeys()
|
||||
QStringList allKeys = dictKeys();
|
||||
|
||||
// not documented feature - place all available tags
|
||||
pattern = pattern.replace(QString("$ALL"), [allKeys](){
|
||||
m_pattern = m_pattern.replace(QString("$ALL"), [allKeys](){
|
||||
QStringList strings;
|
||||
foreach(QString tag, allKeys)
|
||||
strings.append(QString("%1: $%1").arg(tag));
|
||||
@ -483,7 +439,7 @@ void AWKeys::reinitKeys()
|
||||
|
||||
// append lists
|
||||
// bars
|
||||
foundBars = [allKeys](QString pattern) {
|
||||
m_foundBars = [allKeys](QString pattern) {
|
||||
QStringList selectedKeys;
|
||||
foreach(QString key, allKeys)
|
||||
if ((key.startsWith(QString("bar"))) &&
|
||||
@ -493,10 +449,10 @@ void AWKeys::reinitKeys()
|
||||
}
|
||||
if (selectedKeys.isEmpty()) qCWarning(LOG_AW) << "No bars found";
|
||||
return selectedKeys;
|
||||
}(pattern);
|
||||
}(m_pattern);
|
||||
|
||||
// main key list
|
||||
foundKeys = [allKeys](QString pattern) {
|
||||
m_foundKeys = [allKeys](QString pattern) {
|
||||
QStringList selectedKeys;
|
||||
foreach(QString key, allKeys)
|
||||
if ((!key.startsWith(QString("bar"))) &&
|
||||
@ -506,10 +462,10 @@ void AWKeys::reinitKeys()
|
||||
}
|
||||
if (selectedKeys.isEmpty()) qCWarning(LOG_AW) << "No keys found";
|
||||
return selectedKeys;
|
||||
}(pattern);
|
||||
}(m_pattern);
|
||||
|
||||
// lambdas
|
||||
foundLambdas = [](QString pattern) {
|
||||
m_foundLambdas = [](QString pattern) {
|
||||
QStringList selectedKeys;
|
||||
// substring inside ${{ }} (with brackets) which should not contain ${{
|
||||
QRegularExpression lambdaRegexp(QString("\\$\\{\\{((?!\\$\\{\\{).)*?\\}\\}"));
|
||||
@ -528,18 +484,10 @@ void AWKeys::reinitKeys()
|
||||
}
|
||||
if (selectedKeys.isEmpty()) qCWarning(LOG_AW) << "No lambdas found";
|
||||
return selectedKeys;
|
||||
}(pattern);
|
||||
}(m_pattern);
|
||||
|
||||
// set key data to aggregator
|
||||
aggregator->setDevices([this]() {
|
||||
QHash<QString, QStringList> deviceList;
|
||||
deviceList[QString("disk")] = diskDevices;
|
||||
deviceList[QString("hdd")] = hddDevices;
|
||||
deviceList[QString("mount")] = mountDevices;
|
||||
deviceList[QString("net")] = networkDevices;
|
||||
deviceList[QString("temp")] = tempDevices;
|
||||
return deviceList;
|
||||
}());
|
||||
aggregator->setDevices(m_devices);
|
||||
}
|
||||
|
||||
|
||||
@ -558,7 +506,7 @@ void AWKeys::addKeyToCache(const QString type, const QString key)
|
||||
foreach(QString key, cache.allKeys())
|
||||
cachedValues.append(cache.value(key).toString());
|
||||
|
||||
if (type == QString("Hdd")) {
|
||||
if (type == QString("hdd")) {
|
||||
QStringList allDevices = QDir(QString("/dev")).entryList(QDir::System, QDir::Name);
|
||||
QStringList devices = allDevices.filter(QRegExp(QString("^[hms]d[a-z]$")));
|
||||
foreach(QString dev, devices) {
|
||||
@ -567,7 +515,7 @@ void AWKeys::addKeyToCache(const QString type, const QString key)
|
||||
qCInfo(LOG_AW) << "Found new key" << device << "for type" << type;
|
||||
cache.setValue(QString("%1").arg(cache.allKeys().count(), 3, 10, QChar('0')), device);
|
||||
}
|
||||
} else if (type == QString("Network")) {
|
||||
} else if (type == QString("net")) {
|
||||
QList<QNetworkInterface> rawInterfaceList = QNetworkInterface::allInterfaces();
|
||||
foreach(QNetworkInterface interface, rawInterfaceList) {
|
||||
QString device = interface.name();
|
||||
@ -587,29 +535,6 @@ void AWKeys::addKeyToCache(const QString type, const QString key)
|
||||
}
|
||||
|
||||
|
||||
void AWKeys::calculateLambdas()
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
|
||||
foreach(QString key, foundLambdas)
|
||||
values[key] = [this](QString key) {
|
||||
QScriptEngine engine;
|
||||
// apply $this values
|
||||
key.replace(QString("$this"), values[key]);
|
||||
foreach(QString lambdaKey, foundKeys)
|
||||
key.replace(QString("$%1").arg(lambdaKey), values[lambdaKey]);
|
||||
qCInfo(LOG_AW) << "Expression" << key;
|
||||
QScriptValue result = engine.evaluate(key);
|
||||
if (engine.hasUncaughtException()) {
|
||||
int line = engine.uncaughtExceptionLineNumber();
|
||||
qCWarning(LOG_AW) << "Uncaught exception at line" << line << ":" << result.toString();
|
||||
return QString();
|
||||
} else
|
||||
return result.toString();
|
||||
}(key);
|
||||
}
|
||||
|
||||
|
||||
// HACK this method is required since I could not define some values by using
|
||||
// specified pattern. Usually they are values which depend on several others
|
||||
void AWKeys::calculateValues()
|
||||
@ -617,8 +542,8 @@ void AWKeys::calculateValues()
|
||||
qCDebug(LOG_AW);
|
||||
|
||||
// hddtot*
|
||||
foreach(QString device, hddDevices) {
|
||||
int index = hddDevices.indexOf(device);
|
||||
foreach(QString device, m_devices[QString("mount")]) {
|
||||
int index = m_devices[QString("mount")].indexOf(device);
|
||||
values[QString("hddtotmb%1").arg(index)] = QString("%1").arg(
|
||||
values[QString("hddfreemb%1").arg(index)].toFloat() +
|
||||
values[QString("hddmb%1").arg(index)].toFloat(), 5, 'f', 0);
|
||||
@ -638,7 +563,7 @@ void AWKeys::calculateValues()
|
||||
5, 'f', 1);
|
||||
|
||||
// up, down, upkb, downkb, upunits, downunits
|
||||
int netIndex = networkDevices.indexOf(values[QString("netdev")]);
|
||||
int netIndex = m_devices[QString("net")].indexOf(values[QString("netdev")]);
|
||||
values[QString("down")] = values[QString("down%1").arg(netIndex)];
|
||||
values[QString("downkb")] = values[QString("downkb%1").arg(netIndex)];
|
||||
values[QString("downunits")] = values[QString("downunits%1").arg(netIndex)];
|
||||
@ -655,23 +580,41 @@ void AWKeys::calculateValues()
|
||||
values[QString("swap")] = QString("%1").arg(
|
||||
100.0 * values[QString("swapmb")].toFloat() / values[QString("swaptotmb")].toFloat(),
|
||||
5, 'f', 1);
|
||||
|
||||
// lambdas
|
||||
foreach(QString key, m_foundLambdas)
|
||||
values[key] = [this](QString key) {
|
||||
QScriptEngine engine;
|
||||
// apply $this values
|
||||
key.replace(QString("$this"), values[key]);
|
||||
foreach(QString lambdaKey, m_foundKeys)
|
||||
key.replace(QString("$%1").arg(lambdaKey), values[lambdaKey]);
|
||||
qCInfo(LOG_AW) << "Expression" << key;
|
||||
QScriptValue result = engine.evaluate(key);
|
||||
if (engine.hasUncaughtException()) {
|
||||
int line = engine.uncaughtExceptionLineNumber();
|
||||
qCWarning(LOG_AW) << "Uncaught exception at line" << line << ":" << result.toString();
|
||||
return QString();
|
||||
} else
|
||||
return result.toString();
|
||||
}(key);
|
||||
}
|
||||
|
||||
|
||||
QString AWKeys::parsePattern() const
|
||||
QString AWKeys::parsePattern(QString pattern) const
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
|
||||
QString parsed = pattern;
|
||||
parsed.replace(QString("$$"), QString("$\\$\\"));
|
||||
// screen sign
|
||||
pattern.replace(QString("$$"), QString("$\\$\\"));
|
||||
|
||||
// lambdas
|
||||
foreach(QString key, foundLambdas)
|
||||
parsed.replace(QString("${{%1}}").arg(key), values[key]);
|
||||
foreach(QString key, m_foundLambdas)
|
||||
pattern.replace(QString("${{%1}}").arg(key), values[key]);
|
||||
|
||||
// main keys
|
||||
foreach(QString key, foundKeys)
|
||||
parsed.replace(QString("$%1").arg(key), [](QString key, QString value) {
|
||||
foreach(QString key, m_foundKeys)
|
||||
pattern.replace(QString("$%1").arg(key), [](QString key, QString value) {
|
||||
if ((!key.startsWith(QString("custom"))) &&
|
||||
(!key.startsWith(QString("weather"))))
|
||||
value.replace(QString(" "), QString(" "));
|
||||
@ -679,37 +622,41 @@ QString AWKeys::parsePattern() const
|
||||
}(key, values[key]));
|
||||
|
||||
// bars
|
||||
foreach(QString bar, foundBars) {
|
||||
foreach(QString bar,m_foundBars) {
|
||||
GraphicalItem *item = graphicalItems->itemByTag(bar);
|
||||
QString key = bar;
|
||||
key.remove(QRegExp(QString("^bar[0-9]{1,}")));
|
||||
if (item->type() == GraphicalItem::Graph)
|
||||
parsed.replace(QString("$%1").arg(bar), item->image([](const QList<float> data) {
|
||||
pattern.replace(QString("$%1").arg(bar), item->image([](const QList<float> data) {
|
||||
return QVariant::fromValue<QList<float>>(data);
|
||||
}(dataAggregator->getData(key))));
|
||||
else
|
||||
parsed.replace(QString("$%1").arg(bar), item->image(values[key]));
|
||||
pattern.replace(QString("$%1").arg(bar), item->image(values[key]));
|
||||
}
|
||||
|
||||
|
||||
// prepare strings
|
||||
parsed.replace(QString("$\\$\\"), QString("$$"));
|
||||
if (wrapNewLines) parsed.replace(QString("\n"), QString("<br>"));
|
||||
pattern.replace(QString("$\\$\\"), QString("$$"));
|
||||
if (m_wrapNewLines) pattern.replace(QString("\n"), QString("<br>"));
|
||||
|
||||
return parsed;
|
||||
return pattern;
|
||||
}
|
||||
|
||||
|
||||
void AWKeys::setDataBySource(const QString sourceName, const QVariantMap data)
|
||||
{
|
||||
#ifdef BUILD_FUTURE
|
||||
// check if data stream is locked
|
||||
lock = ((lock) && (queue > 0));
|
||||
if (lock) return;
|
||||
#endif /* BUILD_FUTURE */
|
||||
|
||||
qCDebug(LOG_AW);
|
||||
qCDebug(LOG_AW) << "Source" << sourceName;
|
||||
qCDebug(LOG_AW) << "Data" << data;
|
||||
|
||||
// update
|
||||
if (sourceName == QString("update")) return emit(needToBeUpdated());
|
||||
|
||||
// drop if limits are reached
|
||||
if (++queue > QUEUE_LIMIT) {
|
||||
qCWarning(LOG_AW) << "Messages queue" << queue-- << "more than limits" << QUEUE_LIMIT << ", lock";
|
||||
@ -718,7 +665,7 @@ void AWKeys::setDataBySource(const QString sourceName, const QVariantMap data)
|
||||
}
|
||||
|
||||
// first list init
|
||||
QStringList tags = aggregator->keyFromSource(sourceName);
|
||||
QStringList tags = aggregator->keysFromSource(sourceName);
|
||||
if (tags.isEmpty())
|
||||
tags = aggregator->registerSource(sourceName, data[QString("units")].toString());
|
||||
|
||||
|
@ -42,12 +42,10 @@ public:
|
||||
explicit AWKeys(QObject *parent = nullptr);
|
||||
virtual ~AWKeys();
|
||||
|
||||
Q_INVOKABLE void initKeys(const QString currentPattern);
|
||||
Q_INVOKABLE void initDataAggregator(const QVariantMap tooltipParams);
|
||||
Q_INVOKABLE void initKeys(const QString currentPattern);
|
||||
Q_INVOKABLE void setAggregatorProperty(const QString key, const QVariant value);
|
||||
Q_INVOKABLE void setPopupEnabled(const bool popup = false);
|
||||
Q_INVOKABLE void setWrapNewLines(const bool wrap = false);
|
||||
Q_INVOKABLE QSize toolTipSize() const;
|
||||
// keys
|
||||
Q_INVOKABLE void addDevice(const QString source);
|
||||
Q_INVOKABLE QStringList dictKeys(const bool sorted = false,
|
||||
@ -74,14 +72,12 @@ private slots:
|
||||
private:
|
||||
// methods
|
||||
void addKeyToCache(const QString type, const QString key = QString(""));
|
||||
void calculateLambdas();
|
||||
void calculateValues();
|
||||
QString parsePattern() const;
|
||||
QString parsePattern(QString pattern) const;
|
||||
void setDataBySource(const QString sourceName, const QVariantMap data);
|
||||
AWKeysAggregator *aggregator = nullptr;
|
||||
AWDataAggregator *dataAggregator = nullptr;
|
||||
bool enablePopup = false;
|
||||
bool wrapNewLines = false;
|
||||
bool m_wrapNewLines = false;
|
||||
ExtItemAggregator<GraphicalItem> *graphicalItems = nullptr;
|
||||
ExtItemAggregator<ExtQuotes> *extQuotes = nullptr;
|
||||
ExtItemAggregator<ExtScript> *extScripts = nullptr;
|
||||
@ -89,10 +85,10 @@ private:
|
||||
ExtItemAggregator<ExtWeather> *extWeather = nullptr;
|
||||
bool lock = false;
|
||||
int queue = 0;
|
||||
QString pattern;
|
||||
QStringList foundBars, foundKeys, foundLambdas;
|
||||
QString m_pattern;
|
||||
QStringList m_foundBars, m_foundKeys, m_foundLambdas;
|
||||
QHash<QString, QString> values;
|
||||
QStringList diskDevices, hddDevices, mountDevices, networkDevices, tempDevices;
|
||||
QHash<QString, QStringList> m_devices;
|
||||
};
|
||||
|
||||
|
||||
|
@ -90,7 +90,7 @@ QString AWKeysAggregator::formater(const QVariant data, const QString key) const
|
||||
case Quotes:
|
||||
// first cast
|
||||
output = QString("%1").arg(data.toDouble(), 0, 'f');
|
||||
output = output.leftJustified(8, QLatin1Char(' '), true);
|
||||
output = output.rightJustified(8, QLatin1Char(' '), true);
|
||||
break;
|
||||
case Temperature:
|
||||
output = QString("%1").arg(temperature(data.toFloat()), 5, 'f', 1);
|
||||
@ -140,7 +140,7 @@ QString AWKeysAggregator::formater(const QVariant data, const QString key) const
|
||||
}
|
||||
|
||||
|
||||
QStringList AWKeysAggregator::keyFromSource(const QString source) const
|
||||
QStringList AWKeysAggregator::keysFromSource(const QString source) const
|
||||
{
|
||||
qCDebug(LOG_AW);
|
||||
qCDebug(LOG_AW) << "Search for source" << source;
|
||||
@ -502,7 +502,7 @@ QStringList AWKeysAggregator::registerSource(const QString source, const QString
|
||||
m_formater[key] = NoFormat;
|
||||
}
|
||||
|
||||
return keyFromSource(source);
|
||||
return keysFromSource(source);
|
||||
}
|
||||
|
||||
|
||||
|
@ -65,7 +65,7 @@ public:
|
||||
virtual ~AWKeysAggregator();
|
||||
// get methods
|
||||
QString formater(const QVariant data, const QString key) const;
|
||||
QStringList keyFromSource(const QString source) const;
|
||||
QStringList keysFromSource(const QString source) const;
|
||||
// set methods
|
||||
void setAcOffline(const QString inactive);
|
||||
void setAcOnline(const QString active);
|
||||
|
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
|
||||
"POT-Creation-Date: 2015-09-11 22:03+0300\n"
|
||||
"POT-Creation-Date: 2015-09-14 10:03+0300\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -312,6 +312,9 @@ msgstr ""
|
||||
msgid "Edit bars"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preview"
|
||||
msgstr ""
|
||||
|
||||
msgid "Run %1"
|
||||
msgstr ""
|
||||
|
||||
|
@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
|
||||
"POT-Creation-Date: 2015-09-11 22:03+0300\n"
|
||||
"PO-Revision-Date: 2015-09-11 22:03+0300\n"
|
||||
"POT-Creation-Date: 2015-09-14 10:03+0300\n"
|
||||
"PO-Revision-Date: 2015-09-14 10:04+0300\n"
|
||||
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
|
||||
"Language-Team: English <kde-russian@lists.kde.ru>\n"
|
||||
"Language: ru\n"
|
||||
@ -317,6 +317,9 @@ msgstr "Add lambda"
|
||||
msgid "Edit bars"
|
||||
msgstr "Edit bars"
|
||||
|
||||
msgid "Preview"
|
||||
msgstr "Preview"
|
||||
|
||||
msgid "Run %1"
|
||||
msgstr "Run %1"
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
|
||||
"POT-Creation-Date: 2015-09-11 22:03+0300\n"
|
||||
"POT-Creation-Date: 2015-09-14 10:03+0300\n"
|
||||
"PO-Revision-Date: 2015-07-31 22:13+0300\n"
|
||||
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
|
||||
"Language-Team: Spanish <kde-russian@lists.kde.ru>\n"
|
||||
@ -328,6 +328,9 @@ msgstr ""
|
||||
msgid "Edit bars"
|
||||
msgstr "Editar barras"
|
||||
|
||||
msgid "Preview"
|
||||
msgstr ""
|
||||
|
||||
msgid "Run %1"
|
||||
msgstr "Ejecutar %1"
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
|
||||
"POT-Creation-Date: 2015-09-11 22:03+0300\n"
|
||||
"POT-Creation-Date: 2015-09-14 10:03+0300\n"
|
||||
"PO-Revision-Date: 2015-07-31 22:16+0300\n"
|
||||
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
|
||||
"Language-Team: French <kde-russian@lists.kde.ru>\n"
|
||||
@ -330,6 +330,9 @@ msgstr ""
|
||||
msgid "Edit bars"
|
||||
msgstr "Modifier les barres"
|
||||
|
||||
msgid "Preview"
|
||||
msgstr ""
|
||||
|
||||
msgid "Run %1"
|
||||
msgstr "Éxecuter %1"
|
||||
|
||||
|
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Awesome widgets\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
|
||||
"POT-Creation-Date: 2015-09-11 22:03+0300\n"
|
||||
"POT-Creation-Date: 2015-09-14 10:03+0300\n"
|
||||
"PO-Revision-Date: 2015-08-20 22:52+0300\n"
|
||||
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
|
||||
"Language-Team: Dutch <kde-i18n-nl@kde.org>\n"
|
||||
@ -329,6 +329,9 @@ msgstr ""
|
||||
msgid "Edit bars"
|
||||
msgstr "Balken bewerken"
|
||||
|
||||
msgid "Preview"
|
||||
msgstr ""
|
||||
|
||||
msgid "Run %1"
|
||||
msgstr "%1 uitvoeren"
|
||||
|
||||
|
@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
|
||||
"POT-Creation-Date: 2015-09-11 22:03+0300\n"
|
||||
"POT-Creation-Date: 2015-09-14 10:03+0300\n"
|
||||
"PO-Revision-Date: 2015-07-31 22:21+0300\n"
|
||||
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
|
||||
"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
|
||||
@ -328,6 +328,9 @@ msgstr ""
|
||||
msgid "Edit bars"
|
||||
msgstr "Editar barras"
|
||||
|
||||
msgid "Preview"
|
||||
msgstr ""
|
||||
|
||||
msgid "Run %1"
|
||||
msgstr "Rodar %1"
|
||||
|
||||
|
@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
|
||||
"POT-Creation-Date: 2015-09-11 22:03+0300\n"
|
||||
"PO-Revision-Date: 2015-09-11 22:03+0300\n"
|
||||
"POT-Creation-Date: 2015-09-14 10:03+0300\n"
|
||||
"PO-Revision-Date: 2015-09-14 10:04+0300\n"
|
||||
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
|
||||
"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
|
||||
"Language: ru\n"
|
||||
@ -317,6 +317,9 @@ msgstr "Добавить лямбду"
|
||||
msgid "Edit bars"
|
||||
msgstr "Редактировать бары"
|
||||
|
||||
msgid "Preview"
|
||||
msgstr "Предварительный просмотр"
|
||||
|
||||
msgid "Run %1"
|
||||
msgstr "Запуск %1"
|
||||
|
||||
|
@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
|
||||
"POT-Creation-Date: 2015-09-11 22:03+0300\n"
|
||||
"POT-Creation-Date: 2015-09-14 10:03+0300\n"
|
||||
"PO-Revision-Date: 2015-07-31 22:23+0300\n"
|
||||
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
|
||||
"Language-Team: Ukrainian <kde-russian@lists.kde.ru>\n"
|
||||
@ -328,6 +328,9 @@ msgstr ""
|
||||
msgid "Edit bars"
|
||||
msgstr "Редагувати бари"
|
||||
|
||||
msgid "Preview"
|
||||
msgstr ""
|
||||
|
||||
msgid "Run %1"
|
||||
msgstr "Запуск %1"
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/arcan1s/awesome-widgets/issues\n"
|
||||
"POT-Creation-Date: 2015-09-11 22:03+0300\n"
|
||||
"POT-Creation-Date: 2015-09-14 10:03+0300\n"
|
||||
"PO-Revision-Date: 2015-07-31 22:24+0300\n"
|
||||
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
|
||||
"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
|
||||
@ -330,6 +330,9 @@ msgstr ""
|
||||
msgid "Edit bars"
|
||||
msgstr "可编辑的"
|
||||
|
||||
msgid "Preview"
|
||||
msgstr ""
|
||||
|
||||
msgid "Run %1"
|
||||
msgstr ""
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user