Compare commits

...

49 Commits

Author SHA1 Message Date
9c8be61855 Release 1.8.0 2014-04-09 13:07:58 +04:00
3fece265f4 yae translations 2014-04-09 12:36:10 +04:00
cc26873200 updated translations 2014-04-09 12:34:07 +04:00
2ee6949a59 edited dataengine 2014-04-09 12:22:27 +04:00
1a99c0cb3d small refactoring of de 2014-04-09 11:43:33 +04:00
a0e8f373c0 prerelease (w\o translations)
* hope release 1.8.0 will be tomorrow *
2014-04-09 01:22:15 +04:00
f53179330b edited readme 2014-04-09 00:39:58 +04:00
d1a0597b5f fixed ps 2014-04-09 00:26:22 +04:00
1c58b23fa2 added support of package managers and ps 2014-04-09 00:24:06 +04:00
4c442a7e73 at the end of work on ext-sysmon-1.8.0 2014-04-08 22:47:03 +04:00
3bfeabe537 refactoring of de 2014-04-08 21:25:40 +04:00
cd99f059ff added tags $hddmb, $hddgb 2014-04-07 21:19:32 +04:00
45de9145fb added todo list 2014-04-07 16:34:40 +04:00
21418cdd18 edited changelog 2014-04-07 12:15:16 +04:00
cc1d062fd9 added scrollbar
added AC configuration
2014-04-07 12:13:36 +04:00
c9fd746cd0 fix f*cking formats again 2014-04-07 03:53:31 +04:00
1555b22a3b edited changelog =) 2014-04-07 03:33:04 +04:00
1c772f288a release 1.7.4 2014-04-07 03:31:46 +04:00
16f4f4a8ff set correct choose of devices 2014-04-06 17:44:25 +04:00
c09da99e06 fix bug with reverse() 2014-04-06 17:40:17 +04:00
14fab265cd changes in formatLine variable 2014-04-06 12:02:13 +04:00
9ba7a2b0d5 added support of more than 10 tags 2014-04-05 22:40:38 +04:00
2c4515eb66 edited authors 2014-04-05 19:32:52 +04:00
2e7fa3689b fix typo 2014-04-05 19:24:19 +04:00
831b98f836 release 1.7.3 2014-04-05 19:21:22 +04:00
2295e80b67 commit before merging 2014-04-05 19:17:56 +04:00
f21fea1393 fix bug with none type value 2014-04-05 18:53:22 +04:00
2675beb106 fixed bugs 2014-04-05 18:44:05 +04:00
329457955d edited notifications 2014-04-05 18:11:51 +04:00
614e15d336 configuration window refactoring
type "player_name" is str now
2014-04-05 17:15:21 +04:00
2e93325601 fixed types of variables 2014-04-05 16:30:09 +04:00
6f6af548ef edited main.py 2014-04-05 15:56:03 +04:00
5dc3d4e212 Merge branch 'master' into refactoring
(fr translation)
2014-04-05 13:16:51 +04:00
d8ae9a4c2a Added french .po 2014-04-05 02:34:29 +02:00
ce74cdb2d5 intermediate commit 2014-04-05 02:17:59 +04:00
0fdb7317cc refactoring dataengine 2014-04-04 13:23:21 +04:00
c1d55962a7 start 2014-04-04 05:09:09 +04:00
7353fdfe0f created 'refactoring' branch 2014-04-03 18:48:17 +04:00
032953eac2 edited readme 2014-04-03 14:29:20 +04:00
4766ef5675 added readme directory 2014-04-03 14:28:31 +04:00
1b6c8faf49 edited readme 2014-04-03 13:27:09 +04:00
fc104b4549 change PKGBUILD 2014-04-03 13:19:45 +04:00
975b575db5 edited tooltip in configuration window 2014-04-03 13:17:08 +04:00
4547815549 added russian changelog 2014-04-03 12:58:07 +04:00
73e921a8f5 release 1.7.2
edited readme, changelog
2014-04-03 12:05:07 +04:00
7ee4a5dc9d added tooltip screenshot 2014-04-03 12:02:08 +04:00
89efe6c846 edited screenshots 2014-04-03 11:58:49 +04:00
4218a4da08 added scalling to tooltip 2014-04-03 11:46:51 +04:00
0db909d914 Prerelease 1.7.2 2014-04-03 02:32:56 +04:00
38 changed files with 6729 additions and 3948 deletions

3
.gitignore vendored
View File

@ -1,3 +1,4 @@
sources/build
sources/usr
*-src.tar.xz
*src.tar.xz
*src.tar.gz

View File

@ -1,3 +1,5 @@
Current developers:
Evgeniy Alekseev aka arcanis <esalexeev (at) gmail (dot) com>
Translators:
@Mermouy (french translations)

View File

@ -1,3 +1,35 @@
Ver.1.8.0:
+ added scrollbar to configuration interface
+ added AC lines configuration
+ added $hddmbN, %hddgbN tags
+ added support of ps ($ps, $pscount, $pstotal tags)
+ added support of package managers ($pkgcountN tags)
* refactoring of DataEngine
Ver.1.7.4:
+ added support more than 10 tags in cpu, cpuclock, hdd, hddtemp, temp labels
- format bug fixes
* changes in custom uptime format
Ver.1.7.3:
+ added tags $memgb, $swapgb
+ added readme directory
+ added french translation (@Mermouy)
- fix tooltip for custom uptime format
- fix #12
* more refactoring to the god of refactoring
* network device update interval now is 30*interval
* $swap, $swapmb and $swapgb tags now work simultaneously ($mem* tags too)
* player_name now has str type
Ver.1.7.2:
+ added tags $dd, $d, $hh, $h, $mm, $m to custom uptime format
+ added scalling to tooltips
+ added dataengine configuration from ptm
+ added custom command to dataengine
- removed custom command from ptm
- removed tags $ds, $hs, $ms
Ver.1.7.1:
- removed error label
* fix bug with zero values in tooltip
@ -59,7 +91,7 @@ Ver.1.3.2b:
Ver.1.3.2:
+ added GPU, GPU temperature, HDD and HDD temperature labels
+ added $ccpu and $ccpucl tags
* bug fixes
- bug fixes
* optimization and refactoring
Ver.1.2.2:
@ -90,9 +122,9 @@ Ver.1.1.2:
Ver.1.1.1:
+ added $swapmb, $memmb, $netdev, @@netdev=...@@ tags
- some bug fixes
* widget consists of several labels
* edited configuration interface
- some bug fixes
Ver.1.0:
First release

130
CHANGELOG-RU Normal file
View File

@ -0,0 +1,130 @@
Вер.1.8.0:
+ добавлены скроллбары в конфигурационный интерфейс
+ добавлена настройка значений AC
+ добавлены теги $hddmbN, $hddgbN
+ добавлена поддержка ps (теги $ps, $pscount, $pstotal)
+ добавлена поддержка пакетных менеджеров (теги $pkgcountN)
* рефакторинг DataEngine
Вер.1.7.4:
+ добавлена поддержка более чем 10 тэгов в полях cpu, cpuclock, hdd, hddtemp, temp
- фиксы в форматах
* изменения в кастомном формате аптайма
Вер.1.7.3:
+ добавлены тэги $memgb, $swapgb
+ добавлена директория readme
+ добавлен французский перевод (@Mermouy)
- фикс подсказки для кастомного формата аптайма
- фикс #12
* больше рефакторинга богу рефакторинга
* интервал обновления сетевого интерфейса теперь 30*interval
* тэги $swap, $swapmb и $swapgb теперь работают одновременно (тэги $mem* тоже)
* player_name теперь имеет тип str
Вер.1.7.2:
+ добавлены тэги $dd, $d, $hh, $h, $mm, $m в кастомный формат аптайма
+ добавлено масштабирование в тултипы
+ добавлена конфигурация DE из виджета
+ добавлена кастомная команда в DE
- удалена кастомная команда из виджета
- удалены тэги $ds, $hs, $ms
Вер.1.7.1:
- удалено поле с ошибкой
* пофикшен баг с нулевым значением в тултипе
Вер.1.7.0:
+ добавлена поддержка нескольких тэгов в поле температуры
+ добавлены тэги $cpuN, $cpuclN, $hddN, $tempN, $hddtempN, $up, $down
+ добавлено поле с кастомной командой
+ добавлены тултипы для полей CPU, частоты CPU, памяти, swap и сеть
- удалены тэги @@...@@, $temp, $ccpu, $ccpucl, $net
* изменения в настройках
* виджет не требует больше net-tools
* рефакторинг
Вер.1.6.1:
+ добавлена поддержка нескольких девайсов в поле hddtemp
- фикс #6
Вер.1.6.0:
+ добавлен тэг $custom в поля time и uptime (#8)
+ русский перевод
- фикс #6, #10
* лицензия изменена на GPLv3
* изменения в сборке проекта
Вер.1.5.3:
+ добавлены тэги $album, $progress и $time tags в поле плеера (#7)
- фикс бага с нулевым свопом
Вер.1.5.2:
+ добавлены тэги $isotime, $shorttime и $longtime в поле time
Вер.1.5.1:
+ добавлено поле time
Вер.1.5.0:
+ добавлено поле player
Вер.1.4.0:
+ добавлены уведомления
Вер.1.3.6:
- фикс #1, #2
Вер.1.3.5:
- фикс бага с определением сетевого устройства
Вер.1.3.4:
+ добавлено событие по двойному щелчку
+ добавлен автовыбор сетевого устройства
- фикс еще одного падения Плазмы
Вер.1.3.3:
* редактирование чтения температурного устройства
Вер.1.3.2b:
- фикс падения Плазмы
Вер.1.3.2:
+ добавлены поля GPU, GPU temp, HDD и HDD temp
+ добавлены тэги $ccpu и $ccpucl
- фикс некоторых багов
* оптимизация и рефакторинг
Вер.1.2.2:
+ добавлен тултип в строки
Вер.1.2.1:
* если батарея не существует, возвращает off
* если AC не существует, возвращает '(?)'
Вер.1.2.0:
+ добавлен тэг $ac в поле battery
+ добавлена настройка устройств батареи и AC
+ добавлена проверка ошибок
* тэг $bat теперь читается из /sys/*
Вер.1.1.4:
* изменения в парсинге acpi (поле battery)
Вер.1.1.3:
+ добавлена настройка ширины шрифта
- небольшие фиксы
* отредактирована настройка шрифта. Теперь настройки для шрифта работают нормально
Вер.1.1.2:
+ добавлено поле CPU clock
+ добавлена функция для обновления сетевого интерфейса (100*time_interval)
* изменено обновление слайдеров
Вер.1.1.1:
+ добавлены тэги $swapmb, $memmb, $netdev, @@netdev=...@@
- небольшие фиксы
* виджет теперь состоит из нескольких полей
* отредактирован конфигурационный интерфейс
Вер.1.0:
Первый релиз

View File

@ -1,35 +1,37 @@
# Author: Evgeniy "arcanis" Alexeev <esalexeev@gmail.com>
# Maintainer: Evgeniy "arcanis" Alexeev <esalexeev@gmail.com>
# Maintainer: Evgeniy "arcanis" Alexeev <arcanis.arch at gmail dot com>
pkgname=kdeplasma-applets-pytextmonitor
_pkgname=pytextmonitor
pkgver=1.7.1
pkgver=1.8.0
pkgrel=1
pkgdesc="Minimalistic Plasmoid script written on Python2. It looks like widgets in awesome-wm"
pkgdesc="Minimalistic Plasmoid script written on Python2. It looks like widgets in Awesome WM"
arch=('i686' 'x86_64')
url="http://arcanis.name/projects/pytextmonitor"
license=('GPLv3')
depends=('kdebase-workspace' 'kdebindings-python2' 'lm_sensors' 'sysstat')
optdepends=("hddtemp: for HDD temperature monitor"
"catalyst: for GPU monitor"
"nvidia-utils: for GPU monitor"
"amarok: for music player monitor"
"mpd: for music player monitor"
"qmmp: for music player monitor")
depends=('kdebase-workspace' 'kdebindings-python2' 'lm_sensors')
optdepends=("amarok: for music player monitor"
"catalyst: for GPU monitor"
"hddtemp: for HDD temperature monitor"
"mpd: for music player monitor"
"net-tools: for popup messages"
"nvidia-utils: for GPU monitor"
"qmmp: for music player monitor"
"sysstat: for popup messages")
makedepends=('automoc4' 'cmake')
source=(https://github.com/arcan1s/pytextmonitor/releases/download/V.${pkgver}/${_pkgname}-${pkgver}-src.tar.xz)
install=${pkgname}.install
md5sums=('bdc5020484c0d5cf9404cdedfb51b341')
md5sums=('9052985dc219e75ffbed88ce3ebf5a32')
backup=('usr/share/config/extsysmon.conf')
build () {
if [[ -d ${srcdir}/build ]]; then
rm -rf "${srcdir}/build"
fi
prepare() {
[[ -d ${srcdir}/build ]] && rm -rf "${srcdir}/build"
mkdir "${srcdir}/build"
}
build () {
cd "${srcdir}/build"
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` \
-DCMAKE_INSTALL_PREFIX=$(kde4-config --prefix) \
"../${_pkgname}"
make
}

167
README.md
View File

@ -10,68 +10,77 @@ PyTextMonitor is a minimalistic Plasmoid script written on Python2. It looks lik
Configuration
-------------
For edited output you must open Settings window and setup output format in lines:
* label `$time` - time in default format. For example, `fri Nov 6 04:48:01 2013`
* label `$isotime` - time in iso format
* label `$shorttime` - time in short locale format
* label `$longtime` - time in long locale format
* label `$custom` - custom time format
* label `$uptime` - uptime, <i>---d--h--m</i>
* label `$custom` - custom uptime format
* label `$cpu` - total load cpu, <i>%</i>
* label `$cpuN` - load CPU for core N, <i>%</i>. N should be in range 0 to 8
* label `$cpucl` - average cpu clock, <i>MHz</i>
* label `$cpuclN` - cpu clock for core N, <i>MHz</i>. N should be in range 0 to 8
* label `$tempN` - temperature for device N. For example, `$temp0`
* label `$gpu` - GPU usage, <i>%</i>. `aticonfig` or `nvidia-smi` must be installed
* label `$gputemp` - GPU temperature. `aticonfig` or `nvidia-smi` must be installed
* label `$mem` - usage memory, <i>%</i>
* label `$memmb` - usage memory, <i>MB</i>
* label `$swap` - swap, <i>%</i>
* label `$swapmb` - swap, <i>MB</i>
* label `$hddN` - usage for mount point N, <i>%</i>. For example, `$hdd0`
* label `$hddtempN` - temperature for HDD N. For example, `$hddtemp0`
* label `$down` - download speed, <i>KB/s</i>
* label `$up` - upload speed, <i>KB/s</i>
* label `$netdev` - current network device
* label `$bat` - battery charge, <i>%</i>
* label `$ac` - status AC device. Return <i>(*)</i> if AC device is online or <i>( )</i> if offline
* label `$album` - current song album. One of supported music players must be installed
* label `$artist` - current song artist. One of supported music players must be installed
* label `$progress` - current song progress. One of supported music players must be installed (mpd does not support yet)
* label `$time` - current song duration. One of supported music players must be installed
* label `$title` - current song title. One of supported music players must be installed
* label `$custom` - returns output for custom command
* tag `$time` - time in default format. For example, *fri Nov 6 04:48:01 2013*
* tag `$isotime` - time in iso format
* tag `$shorttime` - time in short locale format
* tag `$longtime` - time in long locale format
* tag `$custom` - custom time format
* tag `$uptime` - uptime, *---d--h--m*
* tag `$custom` - custom uptime format
* tag `$cpu` - total load cpu, *%*
* tag `$cpuN` - load CPU for core N, *%*
* tag `$cpucl` - average cpu clock, *MHz*
* tag `$cpuclN` - cpu clock for core N, *MHz*
* tag `$tempN` - temperature for device N. For example, `$temp0`
* tag `$gpu` - GPU usage, *%*. `aticonfig` or `nvidia-smi` must be installed
* tag `$gputemp` - GPU temperature. `aticonfig` or `nvidia-smi` must be installed
* tag `$mem` - usage memory, *%*
* tag `$memmb` - usage memory, *MB*
* tag `$memgb` - usage memory, *GB*
* tag `$swap` - swap, *%*
* tag `$swapmb` - swap, *MB*
* tag `$swapgb` - swap, *GB*
* tag `$hddN` - usage for mount point N, *%*. For example, `$hdd0`
* tag `$hddtempN` - temperature for HDD N. For example, `$hddtemp0`
* tag `$down` - download speed, *KB/s*
* tag `$up` - upload speed, *KB/s*
* tag `$netdev` - current network device
* tag `$bat` - battery charge, *%*
* tag `$ac` - status AC device. Return (\*) if AC device is online or *( )* if offline
* tag `$album` - current song album. One of supported music players must be installed
* tag `$artist` - current song artist. One of supported music players must be installed
* tag `$progress` - current song progress. One of supported music players must be installed
* tag `$time` - current song duration. One of supported music players must be installed
* tag `$title` - current song title. One of supported music players must be installed
* tag `$pscount` - number of running processes
* tag `$pstotal` - total number of processes
* tag `$ps` - list of running processes
* tag `$pkgcountN` - number of packages, which available to upgrade for command N. For example, `$pkgcount0`
* tag `$custom` - returns output for custom command
Label order will changed if you change slider position. HTML tags in label work normally.
**NOTE** you don't may set to show $cpu in swap label for example. <b>$cpu will work only in cpu label</b>.
**NOTE** you don't may set to show `$cpu` tag in swap label for example. **`$cpu` will work only in cpu label**.
Advanced settings
-----------------
**Custom time**
* label `$dddd` - weekday in long format
* label `$ddd` - weekday in short format
* label `$dd` - day
* label `$d` - day without zero
* label `$MMMM` - month in long format
* label `$MMM` - month in short format
* label `$MM` - month
* label `$M` - month without zero
* label `$yyyy` - year
* label `$yy` - year in short format
* label `$hh` - hours
* label `$h` - hours without zero
* label `$mm` - minutes
* label `$m` - minutes without zero
* label `$ss` - seconds
* label `$s` - seconds without zero
* tag `$dddd` - weekday in long format
* tag `$ddd` - weekday in short format
* tag `$dd` - day
* tag `$d` - day without zero
* tag `$MMMM` - month in long format
* tag `$MMM` - month in short format
* tag `$MM` - month
* tag `$M` - month without zero
* tag `$yyyy` - year
* tag `$yy` - year in short format
* tag `$hh` - hours
* tag `$h` - hours without zero
* tag `$mm` - minutes
* tag `$m` - minutes without zero
* tag `$ss` - seconds
* tag `$s` - seconds without zero
**Custom uptime**
* label `$ds` - uptime days
* label `$hs` - uptime hours
* label `$ms` - uptime minutes
* tag `$dd` - uptime days
* tag `$d` - uptime days without zero
* tag `$hh` - uptime hours
* tag `$h` - uptime hours without zero
* tag `$mm` - uptime minutes
* tag `$m` - uptime minutes without zero
**Temperature devices**
@ -97,6 +106,14 @@ Use specified device as active. Combo box items come from **network directory**.
File with battery information. File (`/sys/class/power_supply/BAT0/capacity` by default) should contain only battery charge in percent.
**AC online tag**
Line which will be shown when AC is online.
**AC offline tag**
Line which will be shown when AC is offline.
**AC device**
File with AC information. File (`/sys/class/power_supply/AC/online` by default) must contain `1` if AC is online.
@ -105,15 +122,44 @@ File with AC information. File (`/sys/class/power_supply/AC/online` by default)
Select one of supported music playes for player label.
Tooltip settings
----------------
Since version 1.7.0 CPU, CPU clock, memory, swap and network labels support graphical tooltip. To enable them just make the needed checkboxes a fully checked. The number of stored values can be set in the tab. Colors of graphs are configurable too.
DataEngine settings
-------------------
**Custom command**
*NOTE* This can cause the computer freeze.
A command, which will be run for custom label.
Tooltip settings
----------------
Since version 1.7.0 CPU, CPU clock, memory, swap and network labels support graphical tooltip. To enable them just make the needed checkboxes a fully checked. The number of stored values can be set in the tab. Colors of graphs are configurable too.
**GPU device**
Select one of supported GPU devices. `auto` will enable auto selection. Default is `auto`.
**HDD**
Select one of HDDs for HDD temperature monitor. `all` will enable monitor for all devices. Default is `all`.
**MPD address**
Address of MPD server. Default is `localhost`.
**MPD port**
Port of MPD server. Default is `6600`.
**Package manager**
List of commands, which will be run. Number of null lines is a number of unneeded lines. Defaults:
* *Arch*: `PKGCMD=pacman -Qu`, `PKGNULL=0`
* *Debian*: `PKGCMD=apt-show-versions -u -b`, `PKGNULL=0`
* *Ubuntu*: `PKGCMD=aptitude search '~U'`, `PKGNULL=0`
* *Fedora*: `PKGCMD=yum list updates`, `PKGNULL=3`
* *FreeBSD*: `PKGCMD=pkg_version -I -l '<'`, `PKGNULL=0`
* *Mandriva*: `PKGCMD=urpmq --auto-select`, `PKGNULL=0`
DataEngine configuration
------------------------
@ -126,20 +172,20 @@ Dependencies
------------
* kdebase-workspace
* kdebindings-python2
* lm_sensors (for definition temperature device)
* sysstat (for notification)
* lm_sensors (*for definition temperature device*)
* sysstat (*for notification*)
Optional dependencies
---------------------
ext-sysmon (for GPU, GPU temp, HDD temp and player labels):
* proprietary video driver
* hddtemp
* hddtemp (make sure that it may be run with `sudo` without password. Just add following line to `/etc/sudoers`: `$USERNAME ALL=NOPASSWD: /usr/bin/hddtemp`)
* music player (amarok, mpd or qmmp)
Make dependencies
-----------------
* automoc4
* cmake
* kdebase-runtime
Installation
------------
@ -150,7 +196,7 @@ Installation
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=`kde4-config --localprefix` ../
make && make install
Also you may install it to "/":
Also you may install it to `/`:
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ../
@ -159,6 +205,9 @@ Installation
Additional information
======================
TODO (wish list)
----------------
Links
-----
* [Homepage](http://arcanis.name/projects/pytextmonitor/)

View File

@ -1,5 +1,8 @@
#!/bin/bash
# update english readme
cp README.md readme/en.md
SRCDIR="sources"
VERSION=$(grep -m1 PROJECT_VERSION_MAJOR sources/CMakeLists.txt | awk '{print $3}' | cut -c 1).\
$(grep -m1 PROJECT_VERSION_MINOR sources/CMakeLists.txt | awk '{print $3}' | cut -c 1).\
@ -16,13 +19,13 @@ rm -rf "${ARCHIVE}"
# build widget
ARCHIVE="pytextmonitor"
FILES="AUTHORS CHANGELOG COPYING README.md"
FILES="AUTHORS CHANGELOG CHANGELOG-RU COPYING readme"
IGNORELIST="build usr"
# create archive
[[ -e ${ARCHIVE}-${VERSION}-src.tar.xz ]] && rm -f "${ARCHIVE}-${VERSION}-src.tar.xz"
[[ -d ${ARCHIVE} ]] && rm -rf "${ARCHIVE}"
cp -r "${SRCDIR}" "${ARCHIVE}"
for FILE in ${FILES[*]}; do cp "$FILE" "${ARCHIVE}"; done
for FILE in ${FILES[*]}; do cp -r "$FILE" "${ARCHIVE}"; done
for FILE in ${IGNORELIST[*]}; do rm -rf "${ARCHIVE}/${FILE}"; done
tar cJf "${ARCHIVE}-${VERSION}-src.tar.xz" "${ARCHIVE}"
rm -rf "${ARCHIVE}"

216
readme/en.md Normal file
View File

@ -0,0 +1,216 @@
pytextmonitor
=============
Information
-----------
PyTextMonitor is a minimalistic Plasmoid script written on Python2. It looks like widgets in awesome-wm.
**NOTE** LOOKING FOR TRANSLATORS!
Configuration
-------------
For edited output you must open Settings window and setup output format in lines:
* tag `$time` - time in default format. For example, *fri Nov 6 04:48:01 2013*
* tag `$isotime` - time in iso format
* tag `$shorttime` - time in short locale format
* tag `$longtime` - time in long locale format
* tag `$custom` - custom time format
* tag `$uptime` - uptime, *---d--h--m*
* tag `$custom` - custom uptime format
* tag `$cpu` - total load cpu, *%*
* tag `$cpuN` - load CPU for core N, *%*
* tag `$cpucl` - average cpu clock, *MHz*
* tag `$cpuclN` - cpu clock for core N, *MHz*
* tag `$tempN` - temperature for device N. For example, `$temp0`
* tag `$gpu` - GPU usage, *%*. `aticonfig` or `nvidia-smi` must be installed
* tag `$gputemp` - GPU temperature. `aticonfig` or `nvidia-smi` must be installed
* tag `$mem` - usage memory, *%*
* tag `$memmb` - usage memory, *MB*
* tag `$memgb` - usage memory, *GB*
* tag `$swap` - swap, *%*
* tag `$swapmb` - swap, *MB*
* tag `$swapgb` - swap, *GB*
* tag `$hddN` - usage for mount point N, *%*. For example, `$hdd0`
* tag `$hddtempN` - temperature for HDD N. For example, `$hddtemp0`
* tag `$down` - download speed, *KB/s*
* tag `$up` - upload speed, *KB/s*
* tag `$netdev` - current network device
* tag `$bat` - battery charge, *%*
* tag `$ac` - status AC device. Return (\*) if AC device is online or *( )* if offline
* tag `$album` - current song album. One of supported music players must be installed
* tag `$artist` - current song artist. One of supported music players must be installed
* tag `$progress` - current song progress. One of supported music players must be installed
* tag `$time` - current song duration. One of supported music players must be installed
* tag `$title` - current song title. One of supported music players must be installed
* tag `$pscount` - number of running processes
* tag `$pstotal` - total number of processes
* tag `$ps` - list of running processes
* tag `$pkgcountN` - number of packages, which available to upgrade for command N. For example, `$pkgcount0`
* tag `$custom` - returns output for custom command
Label order will changed if you change slider position. HTML tags in label work normally.
**NOTE** you don't may set to show `$cpu` tag in swap label for example. **`$cpu` will work only in cpu label**.
Advanced settings
-----------------
**Custom time**
* tag `$dddd` - weekday in long format
* tag `$ddd` - weekday in short format
* tag `$dd` - day
* tag `$d` - day without zero
* tag `$MMMM` - month in long format
* tag `$MMM` - month in short format
* tag `$MM` - month
* tag `$M` - month without zero
* tag `$yyyy` - year
* tag `$yy` - year in short format
* tag `$hh` - hours
* tag `$h` - hours without zero
* tag `$mm` - minutes
* tag `$m` - minutes without zero
* tag `$ss` - seconds
* tag `$s` - seconds without zero
**Custom uptime**
* tag `$dd` - uptime days
* tag `$d` - uptime days without zero
* tag `$hh` - uptime hours
* tag `$h` - uptime hours without zero
* tag `$mm` - uptime minutes
* tag `$m` - uptime minutes without zero
**Temperature devices**
List of devices, which will be observed in temp label (combo box items come from `sensors`). List widget is editable, delete key will remove current item.
**Mount points**
List of mount points, which will be observed in hdd label (combo box items come from `mount`). List widget is editable, delete key will remove current item.
**HDD**
List of hard disk devices, which will be observed in hddtem label (combo box items come from `find`). List widget is editable, delete key will remove current item.
**Network directory**
Path to directory, which contains network devices information. Default is `/sys/class/net`. Required for auto select network device.
**Network device**
Use specified device as active. Combo box items come from **network directory**. Will disable auto select network device.
**Battery device**
File with battery information. File (`/sys/class/power_supply/BAT0/capacity` by default) should contain only battery charge in percent.
**AC online tag**
Line which will be shown when AC is online.
**AC offline tag**
Line which will be shown when AC is offline.
**AC device**
File with AC information. File (`/sys/class/power_supply/AC/online` by default) must contain `1` if AC is online.
**Music player**
Select one of supported music playes for player label.
Tooltip settings
----------------
Since version 1.7.0 CPU, CPU clock, memory, swap and network labels support graphical tooltip. To enable them just make the needed checkboxes a fully checked. The number of stored values can be set in the tab. Colors of graphs are configurable too.
DataEngine settings
-------------------
**Custom command**
*NOTE* This can cause the computer freeze.
A command, which will be run for custom label.
**GPU device**
Select one of supported GPU devices. `auto` will enable auto selection. Default is `auto`.
**HDD**
Select one of HDDs for HDD temperature monitor. `all` will enable monitor for all devices. Default is `all`.
**MPD address**
Address of MPD server. Default is `localhost`.
**MPD port**
Port of MPD server. Default is `6600`.
**Package manager**
List of commands, which will be run. Number of null lines is a number of unneeded lines. Defaults:
* *Arch*: `PKGCMD=pacman -Qu`, `PKGNULL=0`
* *Debian*: `PKGCMD=apt-show-versions -u -b`, `PKGNULL=0`
* *Ubuntu*: `PKGCMD=aptitude search '~U'`, `PKGNULL=0`
* *Fedora*: `PKGCMD=yum list updates`, `PKGNULL=3`
* *FreeBSD*: `PKGCMD=pkg_version -I -l '<'`, `PKGNULL=0`
* *Mandriva*: `PKGCMD=urpmq --auto-select`, `PKGNULL=0`
DataEngine configuration
------------------------
You may edit DataEngine configuration. It is `/usr/share/config/extsysmon.conf` or `$HOME/share/config/extsysmon.conf` depending on the type of installation. Uncomment needed line and edit it.
Instruction
===========
Dependencies
------------
* kdebase-workspace
* kdebindings-python2
* lm_sensors (*for definition temperature device*)
* sysstat (*for notification*)
Optional dependencies
---------------------
* proprietary video driver
* hddtemp (make sure that it may be run with `sudo` without password. Just add following line to `/etc/sudoers`: `$USERNAME ALL=NOPASSWD: /usr/bin/hddtemp`)
* music player (amarok, mpd or qmmp)
Make dependencies
-----------------
* automoc4
* cmake
* kdebase-runtime
Installation
------------
* download sources
* install
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=`kde4-config --localprefix` ../
make && make install
Also you may install it to `/`:
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ../
make && sudo make install
Additional information
======================
TODO (wish list)
----------------
Links
-----
* [Homepage](http://arcanis.name/projects/pytextmonitor/)
* Plasmoid on [kde-look](http://kde-look.org/content/show.php/Py+Text+Monitor?content=157124)
* DataEngine on [kde-look](http://kde-look.org/content/show.php/Extended+Systemmonitor+DataEngine?content=158773)
* Archlinux [AUR](https://aur.archlinux.org/packages/kdeplasma-applets-pytextmonitor/) package

213
readme/ru.md Normal file
View File

@ -0,0 +1,213 @@
pytextmonitor
=============
Информация
----------
PyTextMonitor - минималистичный плазмоид, написанный на Python2. Он выглядит, как виджеты в Awesome WM.
Настройка
---------
Для редактирования внешнего виде, откройте окно настроек и установите требуемый формат в поля:
* тег `$time` - время в стандартном формате. Например, *fri Nov 6 04:48:01 2013*
* тег `$isotime` - время в ISO формате
* тег `$shorttime` - время в коротком формате
* тег `$longtime` - время в длинном формате
* тег `$custom` - свой формат времени
* тег `$uptime` - время работы, *---d--h--m*
* тег `$custom` - свой формат аптайма
* тег `$cpu` - общая загрузка CPU, *%*
* тег `$cpuN` - загрузка CPU для ядра N, *%*
* тег `$cpucl` - средняя частота CPU, *MHz*
* тег `$cpuclN` - частота CPU для ядра N, *MHz
* тег `$tempN` - температура для устройства N. Например, `$temp0`
* тег `$gpu` - использование GPU, *%*. `aticonfig` или `nvidia-smi` должны быть установлены
* тег `$gputemp` - температура GPU. `aticonfig` или `nvidia-smi` должны быть установлены
* тег `$mem` - использование RAM, *%*
* тег `$memmb` - использование RAM, *MB*
* тег `$memgb` - использование RAM, *GB*
* тег `$swap` - swap, *%*
* тег `$swapmb` - swap, *MB*
* тег `$swapgb` - swap, *GB*
* тег `$hddN` - использование точки монтирования N, *%*. Например, `$hdd0`
* тег `$hddtempN` - температура HDD N. Например, `$hddtemp0`
* тег `$down` - скорость загрузки, *KB/s*
* тег `$up` - скорость отдачи, *KB/s*
* тег `$netdev` - текущий сетевой интерфейс
* тег `$bat` - заряд батареи, *%*
* тег `$ac` - статус адаптора питания. Возвращает (\*), если AC подключен или *( )*, если нет
* тег `$album` - альбом. Один из поддерживаемых плееров должен быть установлен
* тег `$artist` - исполнитель. Один из поддерживаемых плееров должен быть установлен
* тег `$progress` - прогресс. Один из поддерживаемых плееров должен быть установлен
* тег `$time` - длительность. Один из поддерживаемых плееров должен быть установлен
* тег `$title` - название. Один из поддерживаемых плееров должен быть установлен
* тег `$pscount` - число запущенных процессов
* тег `$pstotal` - общее число процессов
* тег `$ps` - список процессов
* тег `$pkgcountN` - число пакетов, которые могут быть обновлены, для команды N. Например, `$pkgcount0`
* тег `$custom` - возвращает результат своей команды
Порядок полей изменится, если вы измените позицию слайдеров. HTML теги в полях работают корректно.
**ЗАМЕЧАНИЕ** вы не можете установить тег `$cpu`, например, в поле swap. **`$cpu` будет работать только в поле CPU**.
Расширенные настройки
---------------------
**Свой формат времени**
* тег `$dddd` - день недели в длинном формате
* тег `$ddd` - день недели в коротком формате
* тег `$dd` - день
* тег `$d` - день без нуля
* тег `$MMMM` - месяц в длинном формате
* тег `$MMM` - месяц в коротком формате
* тег `$MM` - месяц
* тег `$M` - месяц без нуля
* тег `$yyyy` - год
* тег `$yy` - год в коротком формате
* тег `$hh` - часы
* тег `$h` - часы без нуля
* тег `$mm` - минуты
* тег `$m` - минуты без нуля
* тег `$ss` - секунды
* тег `$s` - секунды без нуля
**Свой формат аптайма**
* тег `$dd` - дни аптайма
* тег `$d` - дни аптайма без нуля
* тег `$hh` - часы аптайма
* тег `$h` - часы аптайма без нуля
* тег `$mm` - минуты аптайма
* тег `$m` - минуты аптайма без нуля
**Датчики температуры**
Список датчиков, которые будут наблюдаться в поле temo (содержимое комбо бокса берется из `sensors`). Виджет редактируем, клавиша delete удалит текущую строку.
**Точки монтирования**
Список точек монтирования, которые будут наблюдаться в поле hdd (содержимое комбо бокса берется из `mount`). Виджет редактируем, клавиша delete удалит текущую строку.
**HDD**
Список HDD, которые будут наблюдаться в поле hddtemp (содержимое комбо бокса берется из `find`). Виджет редактируем, клавиша delete удалит текущую строку.
**Директория с сетевыми интерфейсами**
Путь к директории, которая содержит информацию о сетевых интерфейсах. По умолчанию `/sys/class/net`. Требуется для определения сетевого устройства.
**Сетевое устройство**
Использовать указанный интерфейс, как активный. Содержимое комбо бокса берется из **директории с сетевыми интерфейсами**. Эта опция отключит авто определение интерфейса.
**Устройство батареи**
Файл с информацией о батарее. Данный файл (`/sys/class/power_supply/BAT0/capacity` по умолчанию) должен содержать только заряд батареи в процентах.
**AC online тег**
Строка, которая будет показана, когда AC онлайн.
**AC offline тег**
Строка, которая будет показана, когда AC оффлайн.
**Устройство AC**
Файл с информацией об адапторе питания. Данный файл (`/sys/class/power_supply/AC/online` по умолчанию) должен содержать `1`, если адаптор подключен.
**Музыкальные плеер**
Выберете один из поддерживаемых музыкальных плееров.
Настройки тултипа
-----------------
Начиная с версии 1.7.0 поля CPU, частота CPU, память, swap и сеть поддерживают графический тултип. Чтобы включить их, просто сделайте требуемые чекбоксы полностью чекнутыми. Число хранимых значений может быть выставленно в данной вкладке. Цвета графиков также настраиваются.
Настройки DataEngine
--------------------
**Своя команда**
*ЗАМЕЧАНИЕ* Может вызвать зависание компьютера.
Команда, которая будет запущена для соответствующего поля.
**Устройство GPU**
Выберете одно из поддерживаемых устройств GPU. `auto` включит автоматическое определение. По умолчанию `auto`.
**HDD**
Выберете один из HDD для монитора его температуры. `all` включит монитор для всех доступных устройств. По умолчанию `all`.
**Адрес MPD**
Адрес MPD сервера. По умолчанию `localhost`.
**Порт MPD**
Порт MPD сервера. По умолчанию `6600`.
**Package manager**
Список команд, которые будут запущены. Число пустых строк - число ненужных для подсчета строк. Стандартные настройки:
* *Arch*: `PKGCMD=pacman -Qu`, `PKGNULL=0`
* *Debian*: `PKGCMD=apt-show-versions -u -b`, `PKGNULL=0`
* *Ubuntu*: `PKGCMD=aptitude search '~U'`, `PKGNULL=0`
* *Fedora*: `PKGCMD=yum list updates`, `PKGNULL=3`
* *FreeBSD*: `PKGCMD=pkg_version -I -l '<'`, `PKGNULL=0`
* *Mandriva*: `PKGCMD=urpmq --auto-select`, `PKGNULL=0`
Настройка DataEngine
--------------------
Вы можете отредактировать настройки DataEngine вручную. Откройте файл `/usr/share/config/extsysmon.conf` или `$HOME/.kde4/share/config/extsysmon.conf`, в зависимости от типа установки. Раскомментируйте требуемые строки и отредактируйте их.
Инструкция
==========
Зависимости
-----------
* kdebase-workspace
* kdebindings-python2
* lm_sensors (*для определения датчиков температуры*)
* sysstat (*для уведомлений*)
Опциональные зависимости
------------------------
* проприетарный видеодрайвер
* hddtemp (убедитесь, что может быть запущен с `sudo` без пароля. Просто добавьте следующую строку в `/etc/sudoers`: `$USERNAME ALL=NOPASSWD: /usr/bin/hddtemp`)
* музыкальный плеер (amarok, mpd или qmmp)
Зависимости сборки
------------------
* automoc4
* cmake
* kdebase-runtime
Установка
---------
* скачать исходный архив
* установить
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=`kde4-config --localprefix` ../
make && make install
Для установки в `/`:
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=`kde4-config --prefix` ../
make && sudo make install
Дополнительная информация
=========================
TODO (wish list)
----------------
Ссылки
------
* [Домашняя страница](http://arcanis.name/projects/pytextmonitor/)
* Виджет на [kde-look](http://kde-look.org/content/show.php/Py+Text+Monitor?content=157124)
* DataEngine на [kde-look](http://kde-look.org/content/show.php/Extended+Systemmonitor+DataEngine?content=158773)
* Пакет для Archlinux в [AUR](https://aur.archlinux.org/packages/kdeplasma-applets-pytextmonitor/)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
screenshots/tooltips.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

@ -7,8 +7,8 @@ cmake_policy (SET CMP0015 NEW)
project (pytextmonitor)
set (PROJECT_VERSION_MAJOR 1)
set (PROJECT_VERSION_MINOR 7)
set (PROJECT_VERSION_PATCH 1)
set (PROJECT_VERSION_MINOR 8)
set (PROJECT_VERSION_PATCH 0)
set (PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})
message (STATUS "Version: ${PROJECT_VERSION}")

View File

@ -1,6 +1,9 @@
# Configuration file for Extended Systemmonitor DataEngine
# Uncomment needed lines
# Custom command
#CUSTOM=wget -qO- http://ifconfig.me/ip
# Set GPU device
# May be 'nvidia' (for nvidia), 'ati' (for ATI RADEON), 'ignore' or 'auto'
#GPUDEV=auto
@ -11,3 +14,16 @@
# Set MPD settings
#MPDADDRESS=localhost
#MPDPORT=6600
# Package upgrade info
## from vicious
## Arch: PKGCMD=pacman -Qu PKGNULL=0
## Debian: PKGCMD=apt-show-versions -u -b PKGNULL=0
## Ubuntu: PKGCMD=aptitude search '~U' PKGNULL=0
## Fedora: PKGCMD=yum list updates PKGNULL=3
## FreeBSD: PKGCMD=pkg_version -I -l '<' PKGNULL=0
## Mandriva: PKGCMD=urpmq --auto-select PKGNULL=0
# Commands to run, comma separated
#PKGCMD=pacman -Qu
# Number of null lines for commands, comma separated
#PKGNULL=0

View File

@ -19,341 +19,468 @@
#include "extsysmon.h"
#include <Plasma/DataContainer>
#include <KDE/KGlobal>
#include <KDE/KStandardDirs>
#include <QFile>
#include <QProcess>
#include <QTextCodec>
#include <stdio.h>
#include <stdlib.h>
ExtendedSysMon::ExtendedSysMon(QObject* parent, const QVariantList& args)
: Plasma::DataEngine(parent, args)
: Plasma::DataEngine(parent, args)
{
Q_UNUSED(args)
Q_UNUSED(args)
setMinimumPollingInterval(333);
readConfiguration();
setMinimumPollingInterval(333);
readConfiguration();
}
QString ExtendedSysMon::getAllHdd()
{
QProcess command;
QStringList devices;
QString qoutput = QString("");
QString dev;
command.start("find /dev -name [hs]d[a-z]");
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput());
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
dev = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i];
devices.append(dev);
}
return devices.join(QChar(','));
}
QString ExtendedSysMon::getAutoGpu()
{
QProcess command;
QString gpu = QString("");
QString qoutput = QString("");
command.start("lspci");
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput());
if (qoutput.toLower().contains("nvidia"))
gpu = QString("nvidia");
else if (qoutput.toLower().contains("radeon"))
gpu = QString("ati");
return gpu;
}
QStringList ExtendedSysMon::sources() const
{
QStringList source;
source.append(QString("gpu"));
source.append(QString("gputemp"));
source.append(QString("hddtemp"));
source.append(QString("player"));
return source;
QStringList source;
source.append(QString("custom"));
source.append(QString("gpu"));
source.append(QString("gputemp"));
source.append(QString("hddtemp"));
source.append(QString("pkg"));
source.append(QString("player"));
source.append(QString("ps"));
return source;
}
bool ExtendedSysMon::readConfiguration()
void ExtendedSysMon::readConfiguration()
{
// pre-setup
FILE *f_out;
f_out = popen("lspci 2> /dev/null", "r");
char device[256];
QString dev;
while (fgets(device, 256, f_out) != NULL) {
dev = QString(device);
if (dev.toLower().contains("nvidia"))
gpuDev = QString("nvidia");
else if (dev.toLower().contains("radeon"))
gpuDev = QString("ati");
}
pclose(f_out);
f_out = popen("ls -1 /dev/sd[a-z] 2> /dev/null ; ls -1 /dev/hd[a-z] 2> /dev/null", "r");
while (fgets(device, 256, f_out) != NULL) {
dev = QString(device).split("\n")[0];
if (dev[0] == '/')
hddDev.append(dev);
}
pclose(f_out);
mpdAddress = QString("localhost");
mpdPort = QString("6600");
QString fileStr;
// FIXME: define configuration file
QString confFileName = QString(getenv("HOME")) + QString("/.kde4/share/config/extsysmon.conf");
QFile confFile(confFileName);
bool exists = confFile.open(QIODevice::ReadOnly);
if (!exists) {
confFileName = QString("/usr/share/config/extsysmon.conf");
confFile.setFileName(confFileName);
exists = confFile.open(QIODevice::ReadOnly);
if (!exists)
return false;
}
while (true) {
fileStr = QString(confFile.readLine());
if (fileStr[0] != '#') {
if (fileStr.split(QString("="), QString::SkipEmptyParts).count() == 2) {
if (fileStr.split(QString("="), QString::SkipEmptyParts)[0] == QString("GPUDEV")) {
if (fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed() == QString("ati"))
gpuDev = fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed();
else if (fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed() == QString("nvidia"))
gpuDev = fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed();
else if (fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed() != QString("auto"))
gpuDev = QString("ignore");
}
else if (fileStr.split(QString("="), QString::SkipEmptyParts)[0] == QString("HDDDEV")) {
if (fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed() != QString("all")) {
hddDev.clear();
for (int i=0; i<fileStr.split(QString("="), QString::SkipEmptyParts)[1].split(QString("\n"), \
QString::SkipEmptyParts)[0].split(QString(","), QString::SkipEmptyParts).count(); i++)
hddDev.append(fileStr.split(QString("="), QString::SkipEmptyParts)[1].split(QString("\n"), \
QString::SkipEmptyParts)[0].split(QString(","), QString::SkipEmptyParts)[i]);
}
}
else if (fileStr.split(QString("="), QString::SkipEmptyParts)[0] == QString("MPDADDRESS"))
mpdAddress = fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed();
else if (fileStr.split(QString("="), QString::SkipEmptyParts)[0] == QString("MPDPORT"))
mpdPort = fileStr.split(QString("="), QString::SkipEmptyParts)[1].trimmed();
}
// pre-setup
QMap<QString, QString> rawConfig;
rawConfig[QString("CUSTOM")] = QString("wget -qO- http://ifconfig.me/ip");
rawConfig[QString("GPUDEV")] = QString("auto");
rawConfig[QString("HDDDEV")] = QString("all");
rawConfig[QString("MPDADDRESS")] = QString("localhost");
rawConfig[QString("MPDPORT")] = QString("6600");
rawConfig[QString("PKGCMD")] = QString("pacman -Qu");
rawConfig[QString("PKGNULL")] = QString("0");
QString fileName = KGlobal::dirs()->findResource("config", "extsysmon.conf");
QFile confFile(fileName);
bool ok = confFile.open(QIODevice::ReadOnly);
if (!ok) {
configuration = updateConfiguration(rawConfig);
return;
}
if (confFile.atEnd())
break;
}
confFile.close();
return true;
QString fileStr;
QStringList value;
while (true) {
fileStr = QString(confFile.readLine()).trimmed();
if (fileStr[0] == QChar('#')) continue;
if (fileStr[0] == QChar(';')) continue;
if (fileStr.contains(QChar('='))) {
value.clear();
for (int i=1; i<fileStr.split(QChar('=')).count(); i++)
value.append(fileStr.split(QChar('='))[i]);
rawConfig[fileStr.split(QChar('='))[0]] = value.join(QChar('='));
}
if (confFile.atEnd())
break;
}
confFile.close();
configuration = updateConfiguration(rawConfig);
return;
}
QMap<QString, QString> ExtendedSysMon::updateConfiguration(const QMap<QString, QString> rawConfig)
{
QMap<QString, QString> config;
QString key, value;
// remove spaces and copy source map
for (int i=0; i<rawConfig.keys().count(); i++) {
key = rawConfig.keys()[i];
value = rawConfig[key];
key.remove(QChar(' '));
if ((key != QString("CUSTOM")) && (key != QString("PKGCMD")))
value.remove(QChar(' '));
config[key] = value;
}
// update values
if (config[QString("GPUDEV")] == QString("auto"))
config[QString("GPUDEV")] = getAutoGpu();
if (config[QString("HDDDEV")] == QString("all"))
config[QString("HDDDEV")] = getAllHdd();
for (int i=config[QString("PKGNULL")].split(QString(","), QString::SkipEmptyParts).count();
i<config[QString("PKGCMD")].split(QString(","), QString::SkipEmptyParts).count()+1;
i++)
config[QString("PKGNULL")] += QString(",0");
return config;
}
QString ExtendedSysMon::getCustomCmd(const QString cmd)
{
QProcess command;
QString qoutput = QString("");
command.start(QString("bash -c \"") + cmd + QString("\""));
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput()).trimmed();
return qoutput;
}
float ExtendedSysMon::getGpu(const QString device)
{
float gpu = 0.0;
if ((device != QString("nvidia")) && (device != QString("ati")))
return gpu;
QProcess command;
QString qoutput;
if (device == QString("nvidia")) {
command.start(QString("nvidia-smi -q -d UTILIZATION"));
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput());
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
if (qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i].contains(QString("Gpu"))) {
QString load = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i]
.split(QChar(' '), QString::SkipEmptyParts)[2]
.remove(QChar('%'));
gpu = load.toFloat();
}
}
}
else if (device == QString("ati")) {
command.start(QString("aticonfig --od-getclocks"));
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput());
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
if (qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i].contains(QString("load"))) {
QString load = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i]
.split(QChar(' '), QString::SkipEmptyParts)[3]
.remove(QChar('%'));
gpu = load.toFloat();
}
}
}
return gpu;
}
float ExtendedSysMon::getGpuTemp(const QString device)
{
float gpuTemp = 0.0;
if ((device != QString("nvidia")) && (device != QString("ati")))
return gpuTemp;
QProcess command;
QString qoutput;
if (device == QString("nvidia")) {
command.start(QString("nvidia-smi -q -d TEMPERATURE"));
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput());
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
if (qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i].contains(QString("Gpu"))) {
QString temp = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i]
.split(QChar(' '), QString::SkipEmptyParts)[2];
gpuTemp = temp.toFloat();
}
}
}
else if (device == QString("ati")) {
command.start(QString("aticonfig --od-gettemperature"));
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput());
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
if (qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i].contains(QString("Temperature"))) {
QString temp = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i]
.split(QChar(' '), QString::SkipEmptyParts)[4];
gpuTemp = temp.toFloat();
}
}
}
return gpuTemp;
}
float ExtendedSysMon::getHddTemp(const QString device)
{
float hddTemp = 0.0;
QProcess command;
QString qoutput = QString("");
command.start(QString("sudo hddtemp ") + device);
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput()).trimmed();
if (qoutput.split(QChar(':'), QString::SkipEmptyParts).count() >= 3) {
QString temp = qoutput.split(QChar(':'), QString::SkipEmptyParts)[2];
temp.remove(QChar(0260)).remove(QChar('C'));
hddTemp = temp.toFloat();
}
return hddTemp;
}
QStringList ExtendedSysMon::getPlayerInfo(const QString playerName,
const QString mpdAddress,
const QString mpdPort)
{
QStringList info;
// album
info.append(QString("unknown"));
// artist
info.append(QString("unknown"));
// progress
info.append(QString("0"));
// duration
info.append(QString("0"));
// title
info.append(QString("unknown"));
if ((playerName != QString("amarok")) &&
(playerName != QString("mpd")) &&
(playerName != QString("qmmp")))
return info;
QProcess command;
QString qoutput = QString("");
QString qstr;
if (playerName == QString("amarok")) {
// amarok
command.start("qdbus org.kde.amarok /Player GetMetadata");
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput());
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
qstr = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i];
if (qstr.split(QString(": "), QString::SkipEmptyParts).count() > 1) {
if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("album"))
info[0] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("artist"))
info[1] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("time"))
info[3] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("title"))
info[4] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
}
}
command.start("qdbus org.kde.amarok /Player PositionGet");
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput());
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
qstr = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i];
int time = qstr.toInt() / 1000;
info[2] = QString::number(time);
}
}
else if (playerName == QString("mpd")) {
// mpd
command.start(QString("bash -c \"echo 'currentsong\nstatus\nclose' | curl --connect-timeout 1 -fsm 3 telnet://") +
mpdAddress + QString(":") + mpdPort + QString("\""));
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput());
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
qstr = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i];
if (qstr.split(QString(": "), QString::SkipEmptyParts).count() > 1) {
if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Album"))
info[0] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Artist"))
info[1] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("time")) {
info[3] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed().split(QString(":"))[0];
info[2] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed().split(QString(":"))[1];
}
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Title"))
info[4] = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
}
}
}
else if (playerName == QString("qmmp")) {
// qmmp
command.start("qmmp --status");
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput());
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++) {
qstr = qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i];
if ((qstr.split(QString(" = "), QString::SkipEmptyParts).count() > 1) || (qstr.at(0) == QChar('['))) {
if (qstr.split(QString(" = "), QString::SkipEmptyParts)[0] == QString("ALBUM"))
info[0] = qstr.split(QString(" = "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(" = "), QString::SkipEmptyParts)[0] == QString("ARTIST"))
info[1] = qstr.split(QString(" = "), QString::SkipEmptyParts)[1].trimmed();
else if ((qstr.at(0) == QChar('[')) && (!qstr.contains("[stopped]"))) {
QString time = qstr.split(QString(" "), QString::SkipEmptyParts)[2].trimmed();
info[2] = QString::number(time.split(QString("/"), QString::SkipEmptyParts)[0].split(QString(":"), QString::SkipEmptyParts)[0].toInt() * 60 +
time.split(QString("/"), QString::SkipEmptyParts)[0].split(QString(":"), QString::SkipEmptyParts)[1].toInt());
info[3] = QString::number(time.split(QString("/"), QString::SkipEmptyParts)[1].split(QString(":"), QString::SkipEmptyParts)[0].toInt() * 60 +
time.split(QString("/"), QString::SkipEmptyParts)[1].split(QString(":"), QString::SkipEmptyParts)[1].toInt());
}
else if (qstr.split(QString(" = "), QString::SkipEmptyParts)[0] == QString("TITLE"))
info[4] = qstr.split(QString(" = "), QString::SkipEmptyParts)[1].trimmed();
}
}
}
return info;
}
QStringList ExtendedSysMon::getPsStats()
{
int psCount = 0;
QStringList psList;
QProcess command;
QString qoutput = QString("");
command.start(QString("ps --no-headers -o command"));
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput()).trimmed();
for (int i=0; i<qoutput.split(QChar('\n'), QString::SkipEmptyParts).count(); i++)
if (qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i] != QString("ps --no-headers -o command")) {
psCount++;
psList.append(qoutput.split(QChar('\n'), QString::SkipEmptyParts)[i]);
}
QStringList psStats;
psStats.append(QString::number(psCount));
psStats.append(psList.join(QString(",")));
command.start(QString("ps -e --no-headers -o command"));
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput()).trimmed();
int psTotal = qoutput.split(QChar('\n'), QString::SkipEmptyParts).count();
psStats.append(QString::number(psTotal));
return psStats;
}
int ExtendedSysMon::getUpgradeInfo(const QString pkgCommand, const int pkgNull)
{
int count = 0;
QProcess command;
QString qoutput = QString("");
command.start(QString("bash -c \"") + pkgCommand + QString("\""));
command.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(command.readAllStandardOutput()).trimmed();
count = qoutput.split(QChar('\n'), QString::SkipEmptyParts).count();
return (count - pkgNull);
}
bool ExtendedSysMon::sourceRequestEvent(const QString &name)
{
return updateSourceEvent(name);
return updateSourceEvent(name);
}
bool ExtendedSysMon::updateSourceEvent(const QString &source)
{
FILE *f_out;
QString key, out, tmp_out, value;
bool ok = false;
char output[256], val[5];
if (source == QString("gpu")) {
key = QString("GPU");
if (gpuDev == QString("nvidia")) {
f_out = popen("nvidia-smi -q -d UTILIZATION 2> /dev/null | grep Gpu | tail -n1", "r");
fgets (output, 256, f_out);
if ((output[0] == '\0') ||
(QString(output).split(QString(" "), QString::SkipEmptyParts).count() < 2))
value = QString(" N\\A");
else {
out = QString(output).split(QString(" "), QString::SkipEmptyParts)[2];
sprintf (val, "%5.1f", out.left(out.count()-2).toFloat(&ok));
value = QString(val);
}
pclose(f_out);
}
else if (gpuDev == QString("ati")) {
f_out = popen("aticonfig --od-getclocks 2> /dev/null | grep load | tail -n1", "r");
fgets (output, 256, f_out);
if ((output[0] == '\0') ||
(QString(output).split(QString(" "), QString::SkipEmptyParts).count() < 3))
value = QString(" N\\A");
else {
out = QString(output).split(QString(" "), QString::SkipEmptyParts)[3];
sprintf (val, "%5.1f", out.left(out.count()-2).toFloat(&ok));
value = QString(val);
}
pclose(f_out);
}
else {
value = QString(" N\\A");
}
if (ok == false)
value = QString(" N\\A");
value = value.split(QString(","), QString::SkipEmptyParts).join(QString("."));
setData(source, key, value);
}
else if (source == QString("gputemp")) {
key = QString("GPUTemp");
if (gpuDev == QString("nvidia")) {
f_out = popen("nvidia-smi -q -d TEMPERATURE 2> /dev/null | grep Gpu | tail -n1", "r");
fgets (output, 256, f_out);
if ((output[0] == '\0') ||
(QString(output).split(QString(" "), QString::SkipEmptyParts).count() < 2))
value = QString(" N\\A");
else {
out = QString(output).split(QString(" "), QString::SkipEmptyParts)[2];
sprintf (val, "%4.1f", out.toFloat(&ok));
value = QString(val);
}
pclose(f_out);
}
else if (gpuDev == QString("ati")) {
f_out = popen("aticonfig --od-gettemperature 2> /dev/null | grep Temperature | tail -n1", "r");
fgets (output, 256, f_out);
if ((output[0] == '\0') ||
(QString(output).split(QString(" "), QString::SkipEmptyParts).count() < 4))
value = QString(" N\\A");
else {
out = QString(output).split(QString(" "), QString::SkipEmptyParts)[4];
sprintf (val, "%4.1f", out.toFloat(&ok));
value = QString(val);
}
pclose(f_out);
}
else {
value = QString(" N\\A");
}
if (ok == false)
value = QString(" N\\A");
value = value.split(QString(","), QString::SkipEmptyParts).join(QString("."));
setData(source, key, value);
}
else if (source == QString("hddtemp")) {
char command[256], *dev;
QByteArray qb;
for (int i=0; i<hddDev.count(); i++) {
qb = hddDev[i].toUtf8();
dev = qb.data();
sprintf(command, "sudo hddtemp %s 2> /dev/null", dev);
f_out = popen(command, "r");
fgets(output, 256, f_out);
if ((output[0] == '\0') ||
(QString(output).split(QString(":"), QString::SkipEmptyParts).count() < 3))
value = QString(" N\\A");
else {
out = QString(output).split(QString(":"), QString::SkipEmptyParts)[2];
sprintf (val, "%4.1f", out.left(out.count()-4).toFloat(&ok));
value = QString(val);
}
pclose(f_out);
if (ok == false)
value = QString(" N\\A");
value = value.split(QString(","), QString::SkipEmptyParts).join(QString("."));
setData(source, hddDev[i], value);
}
}
else if (source == QString("player")) {
QProcess player;
QString qoutput;
QString value_album, value_artist, value_progress, value_duration, qstr;
// qmmp
qoutput = QString("");
value = QString("N\\A");
value_album = QString("N\\A");
value_artist = QString("N\\A");
value_progress = QString("0");
value_duration = QString("0");
player.start("qmmp --status");
player.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(player.readAllStandardOutput());
for (int i=0; i<qoutput.split(QString("\n"), QString::SkipEmptyParts).count(); i++) {
qstr = qoutput.split(QString("\n"), QString::SkipEmptyParts)[i];
if ((qstr.split(QString(" = "), QString::SkipEmptyParts).count() > 1) || (qstr.at(0) == QChar('['))) {
if (qstr.split(QString(" = "), QString::SkipEmptyParts)[0] == QString("ALBUM"))
value_album = qstr.split(QString(" = "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(" = "), QString::SkipEmptyParts)[0] == QString("ARTIST"))
value_artist = qstr.split(QString(" = "), QString::SkipEmptyParts)[1].trimmed();
else if ((qstr.at(0) == QChar('[')) && (!qstr.contains("[stopped]"))) {
QString time = qstr.split(QString(" "), QString::SkipEmptyParts)[2].trimmed();
value_progress = QString::number(time.split(QString("/"), QString::SkipEmptyParts)[0].split(QString(":"), QString::SkipEmptyParts)[0].toInt() * 60 +
time.split(QString("/"), QString::SkipEmptyParts)[0].split(QString(":"), QString::SkipEmptyParts)[1].toInt());
value_duration = QString::number(time.split(QString("/"), QString::SkipEmptyParts)[1].split(QString(":"), QString::SkipEmptyParts)[0].toInt() * 60 +
time.split(QString("/"), QString::SkipEmptyParts)[1].split(QString(":"), QString::SkipEmptyParts)[1].toInt());
QString key;
if (source == QString("custom")) {
key = QString("custom");
QString value = getCustomCmd(configuration[QString("CUSTOM")]);
setData(source, key, value);
}
else if (qstr.split(QString(" = "), QString::SkipEmptyParts)[0] == QString("TITLE"))
value = qstr.split(QString(" = "), QString::SkipEmptyParts)[1].trimmed();
}
else if (source == QString("gpu")) {
key = QString("GPU");
float value = getGpu(configuration[QString("GPUDEV")]);
setData(source, key, value);
}
key = QString("qmmp_album");
setData(source, key, value_album);
key = QString("qmmp_artist");
setData(source, key, value_artist);
key = QString("qmmp_progress");
setData(source, key, value_progress);
key = QString("qmmp_duration");
setData(source, key, value_duration);
key = QString("qmmp_title");
setData(source, key, value);
// amarok
qoutput = QString("");
value = QString("N\\A");
value_album = QString("N\\A");
value_artist = QString("N\\A");
value_progress = QString("0");
value_duration = QString("0");
player.start("qdbus org.kde.amarok /Player GetMetadata");
player.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(player.readAllStandardOutput());
for (int i=0; i<qoutput.split(QString("\n"), QString::SkipEmptyParts).count(); i++) {
qstr = qoutput.split(QString("\n"), QString::SkipEmptyParts)[i];
if (qstr.split(QString(": "), QString::SkipEmptyParts).count() > 1) {
if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("album"))
value_album = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("artist"))
value_artist = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("time"))
value_duration = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("title"))
value = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
}
else if (source == QString("gputemp")) {
key = QString("GPUTemp");
float value = getGpuTemp(configuration[QString("GPUDEV")]);
setData(source, key, value);
}
player.start("qdbus org.kde.amarok /Player PositionGet");
player.waitForFinished(-1);
qoutput = player.readAllStandardOutput();
for (int i=0; i<qoutput.split(QString("\n"), QString::SkipEmptyParts).count(); i++) {
qstr = qoutput.split(QString("\n"), QString::SkipEmptyParts)[i];
int time = qstr.toInt() / 1000;
value_progress = QString::number(time);
}
key = QString("amarok_album");
setData(source, key, value_album);
key = QString("amarok_artist");
setData(source, key, value_artist);
key = QString("amarok_progress");
setData(source, key, value_progress);
key = QString("amarok_duration");
setData(source, key, value_duration);
key = QString("amarok_title");
setData(source, key, value);
// mpd
value = QString("N\\A");
value_album = QString("N\\A");
value_artist = QString("N\\A");
value_progress = QString("0");
value_duration = QString("0");
char commandStr[512];
sprintf(commandStr, "bash -c \"echo 'currentsong\nstatus\nclose' | curl --connect-timeout 1 -fsm 3 telnet://%s:%s 2> /dev/null\"", \
mpdAddress.toUtf8().data(), mpdPort.toUtf8().data());
qoutput = QString("");
player.start(QString(commandStr));
player.waitForFinished(-1);
qoutput = QTextCodec::codecForMib(106)->toUnicode(player.readAllStandardOutput());
for (int i=0; i<qoutput.split(QString("\n"), QString::SkipEmptyParts).count(); i++) {
qstr = qoutput.split(QString("\n"), QString::SkipEmptyParts)[i];
if (qstr.split(QString(": "), QString::SkipEmptyParts).count() > 1) {
if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Album"))
value_album = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Artist"))
value_artist = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("time")) {
value_duration = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed().split(QString(":"))[0];
value_progress = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed().split(QString(":"))[1];
else if (source == QString("hddtemp")) {
QStringList deviceList = configuration[QString("HDDDEV")].split(QChar(','), QString::SkipEmptyParts);
for (int i=0; i<deviceList.count(); i++) {
float value = getHddTemp(deviceList[i]);
setData(source, deviceList[i], value);
}
else if (qstr.split(QString(": "), QString::SkipEmptyParts)[0] == QString("Title"))
value = qstr.split(QString(": "), QString::SkipEmptyParts)[1].trimmed();
}
}
key = QString("mpd_album");
setData(source, key, value_album);
key = QString("mpd_artist");
setData(source, key, value_artist);
key = QString("mpd_progress");
setData(source, key, value_progress);
key = QString("mpd_duration");
setData(source, key, value_duration);
key = QString("mpd_title");
setData(source, key, value);
}
return true;
else if (source == QString("pkg")) {
for (int i=0; i<configuration[QString("PKGCMD")].split(QString(","), QString::SkipEmptyParts).count(); i++) {
key = QString("pkgCount") + QString::number(i);
int value = getUpgradeInfo(configuration[QString("PKGCMD")].split(QString(","), QString::SkipEmptyParts)[i],
configuration[QString("PKGNULL")].split(QString(","), QString::SkipEmptyParts)[i].toInt());
setData(source, key, value);
}
}
else if (source == QString("player")) {
QStringList value;
// amarok
value = getPlayerInfo(QString("amarok"));
key = QString("amarok_album");
setData(source, key, value[0]);
key = QString("amarok_artist");
setData(source, key, value[1]);
key = QString("amarok_progress");
setData(source, key, value[2]);
key = QString("amarok_duration");
setData(source, key, value[3]);
key = QString("amarok_title");
setData(source, key, value[4]);
// mpd
value = getPlayerInfo(QString("mpd"),
configuration[QString("MPDADDRESS")],
configuration[QString("MPDPORT")]);
key = QString("mpd_album");
setData(source, key, value[0]);
key = QString("mpd_artist");
setData(source, key, value[1]);
key = QString("mpd_progress");
setData(source, key, value[2]);
key = QString("mpd_duration");
setData(source, key, value[3]);
key = QString("mpd_title");
setData(source, key, value[4]);
// qmmp
value = getPlayerInfo(QString("qmmp"));
key = QString("qmmp_album");
setData(source, key, value[0]);
key = QString("qmmp_artist");
setData(source, key, value[1]);
key = QString("qmmp_progress");
setData(source, key, value[2]);
key = QString("qmmp_duration");
setData(source, key, value[3]);
key = QString("qmmp_title");
setData(source, key, value[4]);
}
else if (source == QString("ps")) {
QStringList value = getPsStats();
key = QString("psCount");
setData(source, key, value[0].toInt());
key = QString("ps");
setData(source, key, value[1]);
key = QString("psTotal");
setData(source, key, value[2].toInt());
}
return true;
}
K_EXPORT_PLASMA_DATAENGINE(extsysmon, ExtendedSysMon)
#include "extsysmon.moc"

View File

@ -22,22 +22,35 @@
class ExtendedSysMon : public Plasma::DataEngine
{
Q_OBJECT
Q_OBJECT
public:
ExtendedSysMon(QObject *parent, const QVariantList &args);
ExtendedSysMon(QObject *parent, const QVariantList &args);
// update functions
QString getCustomCmd(const QString cmd);
float getGpu(const QString device);
float getGpuTemp(const QString device);
float getHddTemp(const QString device);
QStringList getPlayerInfo(const QString playerName,
const QString mpdAddress = 0,
const QString mpdPort = 0);
QStringList getPsStats();
int getUpgradeInfo(const QString pkgCommand,
const int pkgNull = 0);
protected:
bool sourceRequestEvent(const QString &name);
bool updateSourceEvent(const QString &source);
bool readConfiguration();
QStringList sources() const;
// main configuration
QStringList hddDev;
QString gpuDev;
// configuration
QString mpdAddress;
QString mpdPort;
bool sourceRequestEvent(const QString &name);
bool updateSourceEvent(const QString &source);
QStringList sources() const;
private:
// configuration
QMap<QString, QString> configuration;
// reread configuration
QString getAllHdd();
QString getAutoGpu();
void readConfiguration();
QMap<QString, QString> updateConfiguration(const QMap<QString, QString> rawConfig);
};
#endif /* EXTSYSMON_H */

View File

@ -26,9 +26,11 @@ class Config():
def __init__(self, applet):
self.applet = applet
self.config = self.applet.config()
def get(self, key, default = ''):
return self.config.readEntry(key, default).toString()
def set(self, key, value):
self.config.writeEntry(key, value)

View File

@ -27,177 +27,98 @@ import config
class ConfigDefinition:
def __init__(self, parent, configpage):
def __init__(self, parent, configpage, defaults):
"""class definition"""
self.parent = parent
self.configpage = configpage
self.defaults = defaults
def configAccepted(self):
"""function to accept settings"""
settings = config.Config(self.parent)
# update local variables
self.parent.interval = self.configpage.ui.spinBox_interval.value()
settings.set('interval', self.parent.interval)
self.parent.font_family = str(self.configpage.ui.fontComboBox.currentFont().family())
settings.set('font_family', self.parent.font_family)
self.parent.font_size = self.configpage.ui.spinBox_fontSize.value()
settings.set('font_size', self.parent.font_size)
self.parent.font_color = str(self.configpage.ui.kcolorcombo.color().name())
settings.set('font_color', self.parent.font_color)
if (self.configpage.ui.comboBox_style.currentIndex() == 0):
self.parent.font_style = 'normal'
else:
self.parent.font_style = 'italic'
settings.set('font_style', self.parent.font_style)
self.parent.font_weight = self.configpage.ui.spinBox_weight.value()
settings.set('font_weight', self.parent.font_weight)
self.parent.custom_time = str(self.configpage.ui.lineEdit_timeFormat.text())
settings.set('custom_time', self.parent.custom_time)
self.parent.custom_uptime = str(self.configpage.ui.lineEdit_uptimeFormat.text())
settings.set('custom_uptime', self.parent.custom_uptime)
# temp and mount below
self.parent.hddNames = []
self.parent.hdd = {}
for i in range(self.configpage.ui.listWidget_hddDevice.count()):
item = self.configpage.ui.listWidget_hddDevice.item(i).text()
self.parent.hddNames.append(str(item))
self.parent.hdd[str(item)] =" 0.0"
settings.set('hdd', '@@'.join(self.parent.hddNames))
self.parent.netdir = str(self.configpage.ui.lineEdit_netdir.text())
settings.set('netdir', self.parent.netdir)
self.parent.netdevBool = str(self.configpage.ui.checkBox_netdev.checkState())
settings.set('netdevBool', self.parent.netdevBool)
self.parent.custom_netdev = str(self.configpage.ui.comboBox_netdev.currentText())
settings.set('custom_netdev', self.parent.custom_netdev)
self.parent.battery_device = str(self.configpage.ui.lineEdit_batdev.text())
settings.set('battery_device', self.parent.battery_device)
self.parent.ac_device = str(self.configpage.ui.lineEdit_acdev.text())
settings.set('ac_device', self.parent.ac_device)
self.parent.player_name = self.configpage.ui.comboBox_playerSelect.currentIndex()
settings.set('player_name', self.parent.player_name)
self.parent.custom_command = str(self.configpage.ui.lineEdit_customCommand.text())
settings.set('custom_command', self.parent.custom_command)
self.parent.tooltipNum = self.configpage.ui.spinBox_tooltipNum.value()
settings.set('tooltip_num', self.parent.tooltipNum)
for label in ['cpu', 'cpuclock', 'mem', 'swap', 'down', 'up']:
exec ('self.parent.tooltipColors["' + label + '"] = str(self.configpage.kcolorcombo_' + label + '.color().name())')
exec ('settings.set("' + label + '_color", self.parent.tooltipColors["' + label + '"])')
# disconnecting from source and clear layout
if (self.parent.uptimeBool > 0):
self.parent.systemmonitor.disconnectSource("system/uptime", self.parent)
self.parent.label_uptime.setText('')
self.parent.layout.removeItem(self.parent.label_uptime)
if (self.parent.cpuBool > 0):
self.parent.systemmonitor.disconnectSource("cpu/system/TotalLoad", self.parent)
for core in self.parent.cpuCore.keys():
self.parent.systemmonitor.disconnectSource("cpu/cpu"+str(core)+"/TotalLoad", self.parent)
self.parent.label_cpu.setText('')
self.parent.layout.removeItem(self.parent.label_cpu)
if (self.parent.cpuclockBool > 0):
self.parent.systemmonitor.disconnectSource("cpu/system/AverageClock", self.parent)
for core in self.parent.cpuClockCore.keys():
self.parent.systemmonitor.disconnectSource("cpu/cpu"+str(core)+"/clock", self.parent)
self.parent.label_cpuclock.setText('')
self.parent.layout.removeItem(self.parent.label_cpuclock)
if (self.parent.tempBool > 0):
for item in self.parent.temp:
self.parent.systemmonitor.disconnectSource(item, self.parent)
self.parent.label_temp.setText('')
self.parent.layout.removeItem(self.parent.label_temp)
self.parent.tempNames = []
self.parent.temp = {}
# update local variables
settings.set('interval', self.configpage.ui.spinBox_interval.value())
settings.set('font_family', str(self.configpage.ui.fontComboBox.currentFont().family()))
settings.set('font_size', self.configpage.ui.spinBox_fontSize.value())
settings.set('font_color', str(self.configpage.ui.kcolorcombo.color().name()))
settings.set('font_style', str(self.configpage.ui.comboBox_style.currentText()))
settings.set('font_weight', self.configpage.ui.spinBox_weight.value())
settings.set('custom_time', str(self.configpage.ui.lineEdit_timeFormat.text()))
settings.set('custom_uptime', str(self.configpage.ui.lineEdit_uptimeFormat.text()))
item = QStringList()
for i in range(self.configpage.ui.listWidget_tempDevice.count()):
item = self.configpage.ui.listWidget_tempDevice.item(i).text()
self.parent.tempNames.append(str(item))
self.parent.temp[str(item)] =" 0.0"
settings.set('temp_device', '@@'.join(self.parent.tempNames))
if (self.parent.gpuBool > 0):
self.parent.extsysmon.disconnectSource("gpu", self.parent)
self.parent.label_gpu.setText('')
self.parent.layout.removeItem(self.parent.label_gpu)
if (self.parent.gputempBool > 0):
self.parent.extsysmon.disconnectSource("gputemp", self.parent)
self.parent.label_gputemp.setText('')
self.parent.layout.removeItem(self.parent.label_gputemp)
if (self.parent.memBool > 0):
self.parent.systemmonitor.disconnectSource("mem/physical/application", self.parent)
if (self.parent.memInMb == False):
self.parent.systemmonitor.disconnectSource("mem/physical/free", self.parent)
self.parent.systemmonitor.disconnectSource("mem/physical/used", self.parent)
self.parent.label_mem.setText('')
self.parent.layout.removeItem(self.parent.label_mem)
if (self.parent.swapBool > 0):
self.parent.systemmonitor.disconnectSource("mem/swap/used", self.parent)
if (self.parent.swapInMb == False):
self.parent.systemmonitor.disconnectSource("mem/swap/free", self.parent)
self.parent.label_swap.setText('')
self.parent.layout.removeItem(self.parent.label_swap)
if (self.parent.hddBool > 0):
for item in self.parent.mount:
self.parent.systemmonitor.disconnectSource("partitions" + item + "/filllevel", self.parent)
self.parent.label_hdd.setText('')
self.parent.layout.removeItem(self.parent.label_hdd)
self.parent.mountNames = []
self.parent.mount = {}
item.append(self.configpage.ui.listWidget_tempDevice.item(i).text())
settings.set('temp_device', str(item.join(QString('@@'))))
item = QStringList()
for i in range(self.configpage.ui.listWidget_mount.count()):
item = self.configpage.ui.listWidget_mount.item(i).text()
self.parent.mountNames.append(str(item))
self.parent.mount[str(item)] =" 0.0"
settings.set('mount', '@@'.join(self.parent.mountNames))
if (self.parent.hddtempBool > 0):
self.parent.extsysmon.disconnectSource("hddtemp", self.parent)
self.parent.label_hddtemp.setText('')
self.parent.layout.removeItem(self.parent.label_hddtemp)
if (self.parent.netBool > 0):
self.parent.systemmonitor.disconnectSource("network/interfaces/"+self.parent.netdev+"/transmitter/data", self.parent)
self.parent.systemmonitor.disconnectSource("network/interfaces/"+self.parent.netdev+"/receiver/data", self.parent)
self.parent.label_net.setText('')
self.parent.layout.removeItem(self.parent.label_net)
if (self.parent.batBool > 0):
self.parent.label_bat.setText('')
self.parent.layout.removeItem(self.parent.label_bat)
if (self.parent.playerBool > 0):
self.parent.extsysmon.disconnectSource("player", self.parent)
self.parent.label_player.setText('')
self.parent.layout.removeItem(self.parent.label_player)
if (self.parent.timeBool > 0):
self.parent.timemon.disconnectSource("Local", self.parent)
self.parent.label_time.setText('')
self.parent.layout.removeItem(self.parent.label_time)
if (self.parent.customBool > 0):
self.parent.label_custom.setText('')
self.parent.layout.removeItem(self.parent.label_custom)
self.parent.label_order = "---------------"
for label in self.parent.dict_orders.keys():
exec ('self.parent.' + self.parent.dict_orders[label] + 'Bool = ' + str(self.configpage.checkboxes[self.parent.dict_orders[label]].checkState()))
if (self.configpage.checkboxes[self.parent.dict_orders[label]].checkState() > 0):
pos = self.configpage.sliders[self.parent.dict_orders[label]].value() - 1
self.parent.label_order = self.parent.label_order[:pos] + label + self.parent.label_order[pos+1:]
if (self.parent.dict_orders[label] == 'net'):
exec ('self.parent.' + self.parent.dict_orders[label] + 'NonFormat = str(self.configpage.lineedits[self.parent.dict_orders[label]].text())')
exec ('settings.set("' + self.parent.dict_orders[label] + 'NonFormat", self.parent.' + self.parent.dict_orders[label] + 'NonFormat)')
else:
exec ('self.parent.' + self.parent.dict_orders[label] + 'Format = str(self.configpage.lineedits[self.parent.dict_orders[label]].text())')
exec ('settings.set("' + self.parent.dict_orders[label] + 'Format", self.parent.' + self.parent.dict_orders[label] + 'Format)')
exec ('settings.set("' + self.parent.dict_orders[label] + 'Bool", self.parent.' + self.parent.dict_orders[label] + 'Bool)')
self.parent.label_order = ''.join(self.parent.label_order.split('-'))
settings.set('label_order', self.parent.label_order)
item.append(self.configpage.ui.listWidget_mount.item(i).text())
settings.set('mount', str(item.join(QString('@@'))))
item = QStringList()
for i in range(self.configpage.ui.listWidget_hddDevice.count()):
item.append(self.configpage.ui.listWidget_hddDevice.item(i).text())
settings.set('hdd', str(item.join(QString('@@'))))
settings.set('netdir', str(self.configpage.ui.lineEdit_netdir.text()))
settings.set('netdevBool', self.configpage.ui.checkBox_netdev.checkState())
settings.set('custom_netdev', str(self.configpage.ui.comboBox_netdev.currentText()))
settings.set('battery_device', str(self.configpage.ui.lineEdit_batdev.text()))
settings.set('ac_device', str(self.configpage.ui.lineEdit_acdev.text()))
settings.set('ac_online', str(self.configpage.ui.lineEdit_acOnline.text()))
settings.set('ac_offline', str(self.configpage.ui.lineEdit_acOffline.text()))
settings.set('player_name', str(self.configpage.ui.comboBox_playerSelect.currentText()))
settings.set('tooltip_num', self.configpage.ui.spinBox_tooltipNum.value())
for label in ['cpu', 'cpuclock', 'mem', 'swap', 'down', 'up']:
settings.set(self.defaults['confColor'][label], str(self.configpage.kcolorcombos[label].color().name()))
dataengineConfig = unicode(KGlobal.dirs().localkdedir()) + "/share/config/extsysmon.conf"
try:
with open(dataengineConfig, 'w') as deConfigFile:
deConfigFile.write("CUSTOM=" + str(self.configpage.ui.lineEdit_customCommand.text()) + "\n")
deConfigFile.write("GPUDEV=" + str(self.configpage.ui.comboBox_gpudev.currentText()) + "\n")
deConfigFile.write("HDDDEV=" + str(self.configpage.ui.comboBox_hdddev.currentText()) + "\n")
deConfigFile.write("MPDADDRESS=" + str(self.configpage.ui.lineEdit_mpdaddress.text()) + "\n")
deConfigFile.write("MPDPORT=" + str(self.configpage.ui.spinBox_mpdport.value()) + "\n")
item = QStringList()
for i in range(self.configpage.ui.listWidget_pkgCommand.count()):
item.append(self.configpage.ui.listWidget_pkgCommand.item(i).text())
pkgCmd = []
pkgNull = []
for command in item:
try:
pkgCmd.append(str(command.split(QString(":"))[0]))
pkgNull.append(str(command.split(QString(":"))[1]))
except:
pkgCmd.append(str(command))
pkgNull.append("0")
deConfigFile.write("PKGCMD=" + ','.join(pkgCmd) + "\n")
deConfigFile.write("PKGNULL=" + ','.join(pkgNull) + "\n")
except:
pass
# disconnecting from source and clear layout
self.parent.disconnectFromSource()
labelOrder = "---------------"
for label in self.defaults['order'].keys():
if (self.configpage.checkboxes[self.defaults['order'][label]].checkState() > 0):
pos = self.configpage.sliders[self.defaults['order'][label]].value() - 1
labelOrder = labelOrder[:pos] + label + labelOrder[pos+1:]
settings.set(self.defaults['confFormat'][self.defaults['order'][label]], str(self.configpage.lineedits[self.defaults['order'][label]].text()))
settings.set(self.defaults['confBool'][self.defaults['order'][label]], self.configpage.checkboxes[self.defaults['order'][label]].checkState())
labelOrder = ''.join(labelOrder.split('-'))
settings.set('label_order', labelOrder)
# reinitializate
self.parent.reinit.reinit(confAccept=True)
self.parent.reInit()
def createConfigurationInterface(self, parent):
"""function to setup configuration window"""
settings = config.Config(self.parent)
font = QFont(str(settings.get('font_family', 'Terminus')), settings.get('font_size', 12).toInt()[0], 400, False)
self.configpage.ui.spinBox_interval.setValue(settings.get('interval', 2000).toInt()[0])
self.configpage.ui.fontComboBox.setCurrentFont(font)
@ -209,7 +130,7 @@ class ConfigDefinition:
else:
self.configpage.ui.comboBox_style.setCurrentIndex(1)
self.configpage.ui.spinBox_weight.setValue(settings.get('font_weight', 400).toInt()[0])
self.configpage.ui.lineEdit_timeFormat.setText(str(settings.get('custom_time', '$hh:$mm')))
self.configpage.ui.lineEdit_uptimeFormat.setText(str(settings.get('custom_uptime', '$ds,$hs,$ms')))
commandOut = commands.getoutput("sensors")
@ -252,9 +173,11 @@ class ConfigDefinition:
self.configpage.ui.comboBox_netdev.setCurrentIndex(index)
self.configpage.ui.lineEdit_batdev.setText(str(settings.get('battery_device', '/sys/class/power_supply/BAT0/capacity')))
self.configpage.ui.lineEdit_acdev.setText(str(settings.get('ac_device', '/sys/class/power_supply/AC/online')))
self.configpage.ui.comboBox_playerSelect.setCurrentIndex(settings.get('player_name', 0).toInt()[0])
self.configpage.ui.lineEdit_customCommand.setText(str(settings.get('custom_command', 'wget -qO- http://ifconfig.me/ip')))
self.configpage.ui.lineEdit_acOnline.setText(str(settings.get('ac_online', '(*)')))
self.configpage.ui.lineEdit_acOffline.setText(str(settings.get('ac_offline', '( )')))
index = self.configpage.ui.comboBox_playerSelect.findText(str(settings.get('player_name', "amarok")))
self.configpage.ui.comboBox_playerSelect.setCurrentIndex(index)
self.configpage.ui.spinBox_tooltipNum.setValue(settings.get('tooltip_num', 100).toInt()[0])
self.configpage.ui.kcolorcombo_cpu.setColor(QColor(str(settings.get('cpu_color', '#ff0000'))))
self.configpage.ui.kcolorcombo_cpuclock.setColor(QColor(str(settings.get('cpuclock_color', '#00ff00'))))
@ -262,19 +185,52 @@ class ConfigDefinition:
self.configpage.ui.kcolorcombo_swap.setColor(QColor(str(settings.get('swap_color', '#ffff00'))))
self.configpage.ui.kcolorcombo_down.setColor(QColor(str(settings.get('down_color', '#00ffff'))))
self.configpage.ui.kcolorcombo_up.setColor(QColor(str(settings.get('up_color', '#ff00ff'))))
for label in self.parent.dict_orders.keys():
exec ('bool = self.parent.' + self.parent.dict_orders[label] + 'Bool')
self.configpage.checkboxes[self.parent.dict_orders[label]].setCheckState(bool)
deSettings = {'CUSTOM':'wget -qO- http://ifconfig.me/ip', 'GPUDEV':'auto', 'HDDDEV':'all',
'MPDADDRESS':'localhost', 'MPDPORT':'6600', 'PKGCMD':'pacman -Qu', 'PKGNULL':'0'}
dataengineConfig = unicode(KGlobal.dirs().localkdedir()) + "/share/config/extsysmon.conf"
try:
with open(dataengineConfig, 'r') as deConfigFile:
for line in deConfigFile:
if ((line[0] != '#') and (line.split('=')[0] != line)):
deSettings[line.split('=')[0]] = line.split('=')[1][:-1]
except:
pass
self.configpage.ui.lineEdit_customCommand.setText(deSettings['CUSTOM'])
index = self.configpage.ui.comboBox_gpudev.findText(deSettings['GPUDEV'])
self.configpage.ui.comboBox_gpudev.setCurrentIndex(index)
self.configpage.ui.comboBox_hdddev.addItem("all")
commandOut = commands.getoutput("find /dev -name '[hs]d[a-z]'")
for item in commandOut.split("\n"):
try:
self.configpage.ui.comboBox_hdddev.addItem(item)
except:
pass
index = self.configpage.ui.comboBox_hdddev.findText(deSettings['HDDDEV'])
self.configpage.ui.comboBox_hdddev.setCurrentIndex(index)
self.configpage.ui.lineEdit_mpdaddress.setText(deSettings['MPDADDRESS'])
self.configpage.ui.spinBox_mpdport.setValue(int(deSettings['MPDPORT']))
self.configpage.ui.spinBox_mpdport.setValue(int(deSettings['MPDPORT']))
self.configpage.ui.listWidget_pkgCommand.clear()
for i in range(len(deSettings['PKGCMD'].split(','))):
try:
num = deSettings['PKGNULL'].split(',')[i]
except:
num = "0"
self.configpage.ui.listWidget_pkgCommand.addItem(deSettings['PKGCMD'].split(',')[i] + ':' + num)
labelOrder = str(settings.get('label_order', '1345'))
for label in self.defaults['order'].keys():
bool = settings.get(self.defaults['confBool'][self.defaults['order'][label]],
self.defaults['bool'][self.defaults['order'][label]]).toInt()[0]
self.configpage.checkboxes[self.defaults['order'][label]].setCheckState(bool)
if (bool > 0):
self.configpage.sliders[self.parent.dict_orders[label]].setValue(self.parent.label_order.find(label)+1)
if (self.parent.dict_orders[label] == 'net'):
self.configpage.lineedits[self.parent.dict_orders[label]].setText(str(settings.get(self.parent.dict_orders[label] + 'NonFormat', self.parent.dict_defFormat[self.parent.dict_orders[label]])))
else:
self.configpage.lineedits[self.parent.dict_orders[label]].setText(str(settings.get(self.parent.dict_orders[label] + 'Format', self.parent.dict_defFormat[self.parent.dict_orders[label]])))
self.configpage.sliders[self.defaults['order'][label]].setValue(labelOrder.find(label) + 1)
self.configpage.lineedits[self.defaults['order'][label]].setText(str(settings.get(self.defaults['confFormat'][self.defaults['order'][label]],
self.defaults['format'][self.defaults['order'][label]])))
# add config page
page = parent.addPage(self.configpage, i18n(self.parent.name()))
page.setIcon(KIcon(self.parent.icon()))
parent.okClicked.connect(self.configAccepted)

View File

@ -21,7 +21,6 @@ from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyKDE4.plasma import *
from PyQt4 import uic
from PyKDE4 import plasmascript
@ -31,44 +30,55 @@ class ConfigWindow(QWidget):
QWidget.__init__(self)
self.ui = uic.loadUi(parent.package().filePath('ui', 'configwindow.ui'), self)
self.parent = parent
self.checkboxes = {'bat':self.ui.checkBox_bat, 'cpu':self.ui.checkBox_cpu,
'cpuclock':self.ui.checkBox_cpuclock, 'gpu':self.ui.checkBox_gpu,
'gputemp':self.ui.checkBox_gpuTemp, 'hdd':self.ui.checkBox_hdd,
'hddtemp':self.ui.checkBox_hddTemp, 'mem':self.ui.checkBox_mem,
'net':self.ui.checkBox_net, 'swap':self.ui.checkBox_swap,
'temp':self.ui.checkBox_temp, 'uptime':self.ui.checkBox_uptime,
'player':self.ui.checkBox_player, 'time':self.ui.checkBox_time,
'custom':self.ui.checkBox_custom}
self.lineedits = {'bat':self.ui.lineEdit_bat, 'cpu':self.ui.lineEdit_cpu,
'cpuclock':self.ui.lineEdit_cpuclock, 'gpu':self.ui.lineEdit_gpu,
'gputemp':self.ui.lineEdit_gpuTemp, 'hdd':self.ui.lineEdit_hdd,
'hddtemp':self.ui.lineEdit_hddTemp, 'mem':self.ui.lineEdit_mem,
'net':self.ui.lineEdit_net, 'swap':self.ui.lineEdit_swap,
'temp':self.ui.lineEdit_temp, 'uptime':self.ui.lineEdit_uptime,
'player':self.ui.lineEdit_player, 'time':self.ui.lineEdit_time,
'custom':self.ui.lineEdit_custom}
self.sliders = {'bat':self.ui.slider_bat, 'cpu':self.ui.slider_cpu,
'cpuclock':self.ui.slider_cpuclock, 'gpu':self.ui.slider_gpu,
'gputemp':self.ui.slider_gpuTemp, 'hdd':self.ui.slider_hdd,
'hddtemp':self.ui.slider_hddTemp, 'mem':self.ui.slider_mem,
'net':self.ui.slider_net, 'swap':self.ui.slider_swap,
'temp':self.ui.slider_temp, 'uptime':self.ui.slider_uptime,
'player':self.ui.slider_player, 'time':self.ui.slider_time,
'custom':self.ui.slider_custom}
self.kcolorcombos = {'cpu':self.ui.kcolorcombo_cpu,
'cpuclock':self.ui.kcolorcombo_cpuclock, 'down':self.ui.kcolorcombo_down,
'mem':self.ui.kcolorcombo_mem, 'swap':self.ui.kcolorcombo_swap,
'up':self.ui.kcolorcombo_up}
self.checkboxes = {'bat':self.ui.checkBox_bat, 'cpu':self.ui.checkBox_cpu,
'cpuclock':self.ui.checkBox_cpuclock, 'custom':self.ui.checkBox_custom,
'gpu':self.ui.checkBox_gpu, 'gputemp':self.ui.checkBox_gpuTemp,
'hdd':self.ui.checkBox_hdd, 'hddtemp':self.ui.checkBox_hddTemp,
'mem':self.ui.checkBox_mem, 'net':self.ui.checkBox_net,
'swap':self.ui.checkBox_swap, 'temp':self.ui.checkBox_temp,
'uptime':self.ui.checkBox_uptime, 'pkg':self.ui.checkBox_pkg,
'player':self.ui.checkBox_player, 'ps':self.ui.checkBox_ps,
'time':self.ui.checkBox_time}
self.lineedits = {'bat':self.ui.lineEdit_bat, 'cpu':self.ui.lineEdit_cpu,
'cpuclock':self.ui.lineEdit_cpuclock, 'custom':self.ui.lineEdit_custom,
'gpu':self.ui.lineEdit_gpu, 'gputemp':self.ui.lineEdit_gpuTemp,
'hdd':self.ui.lineEdit_hdd, 'hddtemp':self.ui.lineEdit_hddTemp,
'mem':self.ui.lineEdit_mem, 'net':self.ui.lineEdit_net,
'swap':self.ui.lineEdit_swap, 'temp':self.ui.lineEdit_temp,
'uptime':self.ui.lineEdit_uptime, 'pkg':self.ui.lineEdit_pkg,
'player':self.ui.lineEdit_player, 'ps':self.ui.lineEdit_ps,
'time':self.ui.lineEdit_time}
self.sliders = {'bat':self.ui.slider_bat, 'cpu':self.ui.slider_cpu,
'cpuclock':self.ui.slider_cpuclock, 'custom':self.ui.slider_custom,
'gpu':self.ui.slider_gpu, 'gputemp':self.ui.slider_gpuTemp,
'hdd':self.ui.slider_hdd, 'hddtemp':self.ui.slider_hddTemp,
'mem':self.ui.slider_mem, 'net':self.ui.slider_net,
'swap':self.ui.slider_swap, 'temp':self.ui.slider_temp,
'uptime':self.ui.slider_uptime, 'pkg':self.ui.slider_pkg,
'player':self.ui.slider_player, 'ps':self.ui.slider_ps,
'time':self.ui.slider_time}
QObject.connect(self.ui.checkBox_netdev, SIGNAL("stateChanged(int)"), self.setNetdevEnabled)
QObject.connect(self.ui.pushButton_hddDevice, SIGNAL("clicked()"), self.addHddDevice)
QObject.connect(self.ui.pushButton_mount, SIGNAL("clicked()"), self.addMount)
QObject.connect(self.ui.pushButton_tempDevice, SIGNAL("clicked()"), self.addTempDevice)
QObject.connect(self.ui.pushButton_pkgCommand, SIGNAL("clicked()"), self.addPkgCommand)
QObject.connect(self.ui.listWidget_hddDevice, SIGNAL("itemActivated(QListWidgetItem*)"), self.ui.listWidget_hddDevice.openPersistentEditor)
QObject.connect(self.ui.listWidget_mount, SIGNAL("itemActivated(QListWidgetItem*)"), self.ui.listWidget_mount.openPersistentEditor)
QObject.connect(self.ui.listWidget_tempDevice, SIGNAL("itemActivated(QListWidgetItem*)"), self.ui.listWidget_tempDevice.openPersistentEditor)
QObject.connect(self.ui.listWidget_pkgCommand, SIGNAL("itemActivated(QListWidgetItem*)"), self.ui.listWidget_pkgCommand.openPersistentEditor)
QObject.connect(self.ui.comboBox_pkgCommand, SIGNAL("currentIndexChanged(int)"), self.updatePkgNullValue)
QObject.connect(self.ui.comboBox_pkgCommand, SIGNAL("editTextChanged(QString)"), self.updatePkgNullValue)
for item in self.sliders.values():
QObject.connect(item, SIGNAL("valueChanged(int)"), self.setSlider)
for item in self.checkboxes.values():
QObject.connect(item, SIGNAL("stateChanged(int)"), self.setStatus)
def keyPressEvent(self, event):
"""delete events"""
if (event.key() == Qt.Key_Delete):
@ -81,32 +91,52 @@ class ConfigWindow(QWidget):
elif (self.ui.listWidget_tempDevice.hasFocus() and
(self.ui.listWidget_tempDevice.currentRow() > -1)):
self.ui.listWidget_tempDevice.takeItem(self.ui.listWidget_tempDevice.currentRow())
elif (self.ui.listWidget_pkgCommand.hasFocus() and
(self.ui.listWidget_pkgCommand.currentRow() > -1)):
self.ui.listWidget_pkgCommand.takeItem(self.ui.listWidget_pkgCommand.currentRow())
def addHddDevice(self):
"""function to add mount points"""
self.ui.listWidget_hddDevice.clearSelection()
if (self.ui.listWidget_hddDevice.count() > 9):
self.ui.listWidget_hddDevice.takeItem(0)
self.ui.listWidget_hddDevice.addItem(self.ui.comboBox_hddDevice.currentText())
def addMount(self):
"""function to add mount points"""
self.ui.listWidget_mount.clearSelection()
if (self.ui.listWidget_mount.count() > 9):
self.ui.listWidget_mount.takeItem(0)
self.ui.listWidget_mount.addItem(self.ui.comboBox_mount.currentText())
def addTempDevice(self):
"""function to add temperature device"""
self.ui.listWidget_tempDevice.clearSelection()
if (self.ui.listWidget_tempDevice.count() > 9):
self.ui.listWidget_tempDevice.takeItem(0)
self.ui.listWidget_tempDevice.addItem(self.ui.comboBox_tempDevice.currentText())
def addPkgCommand(self):
"""function to add package manager command"""
self.ui.listWidget_pkgCommand.clearSelection()
self.ui.listWidget_pkgCommand.addItem(self.ui.comboBox_pkgCommand.currentText() +\
QString(":") + QString.number(self.ui.spinBox_pkgCommandNum.value()))
def updatePkgNullValue(self):
"""function to set default values to PKGNULL spinbox"""
if (self.ui.comboBox_pkgCommand.currentText().contains(QString("pacman -Qu"))):
self.ui.spinBox_pkgCommandNum.setValue(0)
elif (self.ui.comboBox_pkgCommand.currentText().contains(QString("apt-show-versions -u -b"))):
self.ui.spinBox_pkgCommandNum.setValue(0)
elif (self.ui.comboBox_pkgCommand.currentText().contains(QString("aptitude search '~U'"))):
self.ui.spinBox_pkgCommandNum.setValue(0)
elif (self.ui.comboBox_pkgCommand.currentText().contains(QString("yum list updates"))):
self.ui.spinBox_pkgCommandNum.setValue(3)
elif (self.ui.comboBox_pkgCommand.currentText().contains(QString("pkg_version -I -l '<'"))):
self.ui.spinBox_pkgCommandNum.setValue(0)
elif (self.ui.comboBox_pkgCommand.currentText().contains(QString("urpmq --auto-select"))):
self.ui.spinBox_pkgCommandNum.setValue(0)
def setNetdevEnabled(self):
"""function to set enabled netdev"""
if (self.ui.checkBox_netdev.checkState() == 0):
@ -132,7 +162,7 @@ class ConfigWindow(QWidget):
new_value = value + 1
second_slider.setValue(new_value)
def setStatus(self):
"""function to enable label"""
for label in self.checkboxes.keys():

View File

@ -19,8 +19,6 @@
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyKDE4.plasma import Plasma
from PyKDE4 import plasmascript
import datetime
@ -34,253 +32,285 @@ class DataEngine:
def __init__(self, parent):
"""class definition"""
self.parent = parent
def connectToEngine(self):
def connectToEngine(self, bools=None, dataEngines=None, interval=1000, names=None):
"""function to initializate engine"""
self.parent.systemmonitor = self.parent.dataEngine("systemmonitor")
self.parent.extsysmon = self.parent.dataEngine("ext-sysmon")
if (self.parent.timeBool > 0):
self.parent.timemon = self.parent.dataEngine("time")
self.parent.timemon.connectSource("Local", self.parent, 1000)
if (self.parent.uptimeBool > 0):
self.parent.systemmonitor.connectSource("system/uptime", self.parent, self.parent.interval)
if (self.parent.cpuBool > 0):
self.parent.systemmonitor.connectSource("cpu/system/TotalLoad", self.parent, self.parent.interval)
for core in self.parent.cpuCore.keys():
if (core > -1):
self.parent.systemmonitor.connectSource("cpu/cpu"+str(core)+"/TotalLoad", self.parent, self.parent.interval)
if (self.parent.cpuclockBool > 0):
self.parent.systemmonitor.connectSource("cpu/system/AverageClock", self.parent, self.parent.interval)
for core in self.parent.cpuClockCore.keys():
if (core > -1):
self.parent.systemmonitor.connectSource("cpu/cpu"+str(core)+"/clock", self.parent, self.parent.interval)
if (self.parent.tempBool > 0):
for item in self.parent.tempNames:
self.parent.systemmonitor.connectSource(item, self.parent, self.parent.interval)
if (self.parent.gpuBool > 0):
self.parent.extsysmon.connectSource("gpu", self.parent, self.parent.interval)
if (self.parent.gputempBool > 0):
self.parent.extsysmon.connectSource("gputemp", self.parent, self.parent.interval)
if (self.parent.memBool > 0):
if (self.parent.memInMb):
self.parent.systemmonitor.connectSource("mem/physical/application", self.parent, self.parent.interval)
else:
self.parent.systemmonitor.connectSource("mem/physical/free", self.parent, int(self.parent.interval*0.5))
self.parent.systemmonitor.connectSource("mem/physical/used", self.parent, int(self.parent.interval*0.5))
self.parent.systemmonitor.connectSource("mem/physical/application", self.parent, int(self.parent.interval*0.5))
if (self.parent.swapBool > 0):
if (self.parent.swapInMb):
self.parent.systemmonitor.connectSource("mem/swap/used", self.parent, self.parent.interval)
else:
self.parent.systemmonitor.connectSource("mem/swap/free", self.parent, int(self.parent.interval*0.5))
self.parent.systemmonitor.connectSource("mem/swap/used", self.parent, int(self.parent.interval*0.5))
if (self.parent.hddBool > 0):
for item in self.parent.mountNames:
self.parent.systemmonitor.connectSource("partitions" + item + "/filllevel", self.parent, self.parent.interval)
if (self.parent.hddtempBool > 0):
self.parent.extsysmon.connectSource("hddtemp", self.parent, self.parent.interval)
if (self.parent.netBool > 0):
self.parent.updateNetdev = 0
self.parent.systemmonitor.connectSource("network/interfaces/"+self.parent.netdev+"/transmitter/data", self.parent, self.parent.interval)
self.parent.systemmonitor.connectSource("network/interfaces/"+self.parent.netdev+"/receiver/data", self.parent, self.parent.interval)
if (self.parent.playerBool > 0):
self.parent.extsysmon.connectSource("player", self.parent, self.parent.interval)
def dataUpdated(self, sourceName, data):
if (bools['cpu'] > 0):
dataEngines['system'].connectSource("cpu/system/TotalLoad", self.parent, interval)
for core in range(8):
dataEngines['system'].connectSource("cpu/cpu" + str(core) + "/TotalLoad", self.parent, interval)
if (bools['cpuclock'] > 0):
dataEngines['system'].connectSource("cpu/system/AverageClock", self.parent, interval)
for core in range(8):
dataEngines['system'].connectSource("cpu/cpu" + str(core) + "/clock", self.parent, interval)
if (bools['custom'] > 0):
dataEngines['ext'].connectSource("custom", self.parent, interval)
if (bools['gpu'] > 0):
dataEngines['ext'].connectSource("gpu", self.parent, interval)
if (bools['gputemp'] > 0):
dataEngines['ext'].connectSource("gputemp", self.parent, interval)
if (bools['hdd'] > 0):
for item in names['hdd']:
dataEngines['system'].connectSource("partitions" + item + "/filllevel", self.parent, interval)
dataEngines['system'].connectSource("partitions" + item + "/usedspace", self.parent, interval)
if (bools['hddtemp'] > 0):
dataEngines['ext'].connectSource("hddtemp", self.parent, interval)
if (bools['mem'] > 0):
dataEngines['system'].connectSource("mem/physical/free", self.parent, interval)
dataEngines['system'].connectSource("mem/physical/used", self.parent, interval)
dataEngines['system'].connectSource("mem/physical/application", self.parent, interval)
if (bools['net'] > 0):
self.updateNetdev = 0
dataEngines['system'].connectSource("network/interfaces/" + names['net'] + "/transmitter/data", self.parent, interval)
dataEngines['system'].connectSource("network/interfaces/" + names['net'] + "/receiver/data", self.parent, interval)
if (bools['pkg'] > 0):
dataEngines['ext'].connectSource("pkg", self.parent, interval)
if (bools['player'] > 0):
dataEngines['ext'].connectSource("player", self.parent, interval)
if (bools['ps'] > 0):
dataEngines['ext'].connectSource("ps", self.parent, interval)
if (bools['swap'] > 0):
dataEngines['system'].connectSource("mem/swap/free", self.parent, interval)
dataEngines['system'].connectSource("mem/swap/used", self.parent, interval)
if (bools['temp'] > 0):
for item in names['temp']:
dataEngines['system'].connectSource(item, self.parent, interval)
if (bools['time'] > 0):
dataEngines['time'].connectSource("Local", self.parent, 1000)
if (bools['uptime'] > 0):
dataEngines['system'].connectSource("system/uptime", self.parent, interval)
def dataUpdated(self, sourceName, data, ptm):
"""function to update data"""
adv = ptm['vars']['adv']
systemDataEngine = ptm['dataengine']['system']
formats = ptm['vars']['formats']
interval = ptm['vars']['app']['interval']
names = ptm['names']
updatedData = {'name':None, 'type':None, 'value':None}
try:
if (sourceName == "system/uptime"):
if (sourceName == "cpu/system/TotalLoad"):
updatedData['name'] = "cpu"
updatedData['type'] = -1
value = round(data[QString(u'value')].toFloat()[0], 1)
updatedData['value'] = value
elif ((sourceName[:7] == "cpu/cpu") and (sourceName.split('/')[2] == "TotalLoad")):
updatedData['name'] = "cpu"
updatedData['type'] = int(sourceName[7])
value = round(data[QString(u'value')].toFloat()[0], 1)
updatedData['value'] = value
elif (sourceName == "cpu/system/AverageClock"):
updatedData['name'] = "cpuclock"
updatedData['type'] = -1
value = round(data[QString(u'value')].toFloat()[0], 0)
updatedData['value'] = value
elif ((sourceName[:7] == "cpu/cpu") and (sourceName.split('/')[2] == "clock")):
updatedData['name'] = "cpuclock"
updatedData['type'] = int(sourceName[7])
value = round(data[QString(u'value')].toFloat()[0], 0)
updatedData['value'] = value
elif (sourceName == "custom"):
updatedData['name'] = "custom"
value = str(data[QString(u'custom')].toUtf8()).decode("utf-8")
updatedData['value'] = value
elif (sourceName == "gpu"):
updatedData['name'] = "gpu"
value = round(data[QString(u'GPU')], 1)
updatedData['value'] = "%4.1f" % (value)
elif (sourceName == "gputemp"):
updatedData['name'] = "gputemp"
value = round(data[QString(u'GPUTemp')], 1)
updatedData['value'] = "%4.1f" % (value)
elif (sourceName.split('/')[0] == "partitions") and (sourceName.split('/')[-1] == "filllevel"):
updatedData['name'] = "hdd"
updatedData['type'] = '/' + '/'.join(sourceName.split('/')[1:-1])
value = round(data[QString(u'value')].toFloat()[0], 1)
updatedData['value'] = value
elif (sourceName.split('/')[0] == "partitions") and (sourceName.split('/')[-1] == "usedspace"):
updatedData['name'] = "hddmb"
updatedData['type'] = '/' + '/'.join(sourceName.split('/')[1:-1])
value = data[QString(u'value')].toFloat()[0]
updatedData['value'] = value
elif (sourceName == "hddtemp"):
updatedData['name'] = "hddtemp"
updatedData['value'] = {}
for item in names['hddtemp']:
value = round(data[QString(item)], 1)
updatedData['value'][item] = "%4.1f" % (value)
elif (sourceName == "mem/physical/application"):
updatedData['name'] = "mem"
updatedData['type'] = "app"
value = round(data[QString(u'value')].toFloat()[0], 1)
updatedData['value'] = value
elif (sourceName == "mem/physical/free"):
updatedData['name'] = "mem"
updatedData['type'] = "free"
value = round(data[QString(u'value')].toFloat()[0], 1)
updatedData['value'] = value
elif (sourceName == "mem/physical/used"):
updatedData['name'] = "mem"
updatedData['type'] = "used"
value = round(data[QString(u'value')].toFloat()[0], 1)
updatedData['value'] = value
elif ((sourceName.split('/')[0] == "network") and (sourceName.split('/')[3] == "receiver")):
updatedData['name'] = "net"
updatedData['type'] = "down"
value = round(data[QString(u'value')].toFloat()[0], 0)
updatedData['value'] = value
# update network device
self.updateNetdev = self.updateNetdev + 1
if (self.updateNetdev == 30):
self.updateNetdev = 0
if (adv['netdevBool'] == 0):
systemDataEngine.disconnectSource("network/interfaces/" + names['net'] + "/transmitter/data", self.parent)
systemDataEngine.disconnectSource("network/interfaces/" + names['net'] + "/receiver/data", self.parent)
names['net'] = self.parent.setNetdev()
systemDataEngine.connectSource("network/interfaces/" + names['net'] + "/transmitter/data", self.parent, interval)
systemDataEngine.connectSource("network/interfaces/" + names['net'] + "/receiver/data", self.parent, interval)
elif ((sourceName.split('/')[0] == "network") and (sourceName.split('/')[3] == "transmitter")):
updatedData['name'] = "net"
updatedData['type'] = "up"
value = round(data[QString(u'value')].toFloat()[0], 0)
updatedData['value'] = value
elif (sourceName == "pkg"):
updatedData['name'] = "pkg"
updatedData['value'] = {}
for singleData in data.keys():
updatedData['value'][str(singleData.toLower())] = "%i" % (data[singleData])
elif (sourceName == "player"):
updatedData['name'] = "player"
updatedData['value'] = {}
if (adv['player'] == "amarok"):
updatedData['value']['album'] = str(data[QString(u'amarok_album')].toUtf8()).decode("utf-8")
updatedData['value']['artist'] = str(data[QString(u'amarok_artist')].toUtf8()).decode("utf-8")
updatedData['value']['progress'] = str(data[QString(u'amarok_progress')].toUtf8()).decode("utf-8")
updatedData['value']['time'] = str(data[QString(u'amarok_duration')].toUtf8()).decode("utf-8")
updatedData['value']['title'] = str(data[QString(u'amarok_title')].toUtf8()).decode("utf-8")
elif (adv['player'] == "mpd"):
updatedData['value']['album'] = str(data[QString(u'mpd_album')].toUtf8()).decode("utf-8")
updatedData['value']['artist'] = str(data[QString(u'mpd_artist')].toUtf8()).decode("utf-8")
updatedData['value']['progress'] = str(data[QString(u'mpd_progress')].toUtf8()).decode("utf-8")
updatedData['value']['time'] = str(data[QString(u'mpd_duration')].toUtf8()).decode("utf-8")
updatedData['value']['title'] = str(data[QString(u'mpd_title')].toUtf8()).decode("utf-8")
elif (adv['player'] == "qmmp"):
updatedData['value']['album'] = str(data[QString(u'qmmp_album')].toUtf8()).decode("utf-8")
updatedData['value']['artist'] = str(data[QString(u'qmmp_artist')].toUtf8()).decode("utf-8")
updatedData['value']['progress'] = str(data[QString(u'qmmp_progress')].toUtf8()).decode("utf-8")
updatedData['value']['time'] = str(data[QString(u'qmmp_duration')].toUtf8()).decode("utf-8")
updatedData['value']['title'] = str(data[QString(u'qmmp_title')].toUtf8()).decode("utf-8")
elif (sourceName == "ps"):
updatedData['name'] = "ps"
updatedData['value'] = {}
updatedData['value']['num'] = "%i" % (data[QString(u'psCount')])
updatedData['value']['total'] = "%i" % (data[QString(u'psTotal')])
updatedData['value']['list'] = data[QString(u'ps')]
elif (sourceName == "mem/swap/free"):
updatedData['name'] = "swap"
updatedData['type'] = "free"
value = round(data[QString(u'value')].toFloat()[0], 1)
updatedData['value'] = value
elif (sourceName == "mem/swap/used"):
updatedData['name'] = "swap"
updatedData['type'] = "used"
value = round(data[QString(u'value')].toFloat()[0], 1)
updatedData['value'] = value
elif (sourceName.split('/')[0] == "lmsensors"):
updatedData['name'] = "temp"
updatedData['type'] = sourceName
value = round(data[QString(u'value')].toFloat()[0], 1)
updatedData['value'] = "%4.1f" % (value)
elif (sourceName == "Local"):
updatedData['name'] = "time"
if (formats['time'].split('$time')[0] != formats['time']):
value = str(data[QString(u'DateTime')].toString(Qt.TextDate).toUtf8()).decode("utf-8")
elif (formats['time'].split('$isotime')[0] != formats['time']):
value = str(data[QString(u'DateTime')].toString(Qt.ISODate).toUtf8()).decode("utf-8")
elif (formats['time'].split('$shorttime')[0] != formats['time']):
value = str(data[QString(u'DateTime')].toString(Qt.SystemLocaleShortDate).toUtf8()).decode("utf-8")
elif (formats['time'].split('$longtime')[0] != formats['time']):
value = str(data[QString(u'DateTime')].toString(Qt.SystemLocaleLongDate).toUtf8()).decode("utf-8")
elif (formats['time'].split('$custom')[0] != formats['time']):
rawDate = data[QString(u'DateTime')]
value = adv['customTime']
for letters in timeLetters:
if (value.split('$' + letters)[0] != value):
value = value.split('$' + letters)[0] + str(rawDate.toString(letters).toUtf8()).decode("utf-8") + value.split('$' + letters)[1]
updatedData['value'] = value
elif (sourceName == "system/uptime"):
updatedData['name'] = "uptime"
value = datetime.timedelta(0, int(round(float(data[QString(u'value')]), 1)))
days = value.days
hours = int(value.seconds / 60 / 60)
minutes = int(value.seconds / 60 % 60)
line = self.parent.uptimeFormat
if (line.split('$uptime')[0] != line):
uptimeText = "%3id%2ih%2im" % (days, hours, minutes)
line = line.split('$uptime')[0] + uptimeText + line.split('$uptime')[1]
elif (line.split('$custom')[0] != line):
uptimeText = self.parent.custom_uptime
if (uptimeText.split('$ds')[0] != uptimeText):
uptimeText = "%s%3i%s" % (uptimeText.split('$ds')[0], days, uptimeText.split('$ds')[1])
if (uptimeText.split('$hs')[0] != uptimeText):
uptimeText = "%s%2i%s" % (uptimeText.split('$hs')[0], hours, uptimeText.split('$hs')[1])
if (uptimeText.split('$ms')[0] != uptimeText):
uptimeText = "%s%2i%s" % (uptimeText.split('$ms')[0], minutes, uptimeText.split('$ms')[1])
line = line.split('$custom')[0] + uptimeText + line.split('$custom')[1]
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_uptime.setText(text)
elif (sourceName == "cpu/system/TotalLoad"):
value = str(round(float(data[QString(u'value')]), 1))
self.parent.cpuCore[-1] = "%5s" % (value)
if (self.parent.cpuBool == 2):
self.parent.tooltipAgent.addValue('cpu', float(value), self.parent.tooltipNum)
elif ((str(sourceName)[:7] == "cpu/cpu") and (str(sourceName).split('/')[2] == "TotalLoad")):
value = str(round(float(data[QString(u'value')]), 1))
self.parent.cpuCore[int(str(sourceName)[7])] = "%5s" % (value)
elif (sourceName == "cpu/system/AverageClock"):
value = str(data[QString(u'value')]).split('.')[0]
self.parent.cpuClockCore[-1] = "%4s" % (value)
if (self.parent.cpuclockBool == 2):
self.parent.tooltipAgent.addValue('cpuclock', float(value), self.parent.tooltipNum)
elif ((str(sourceName)[:7] == "cpu/cpu") and (str(sourceName).split('/')[2] == "clock")):
value = str(data[QString(u'value')]).split('.')[0]
self.parent.cpuClockCore[int(str(sourceName)[7])] = "%4s" % (value)
elif (sourceName == "network/interfaces/"+self.parent.netdev+"/transmitter/data"):
value = str(data[QString(u'value')]).split('.')[0]
self.parent.netSpeed["up"] = "%4s" % (value)
if (self.parent.netBool == 2):
self.parent.tooltipAgent.addValue('up', float(value), self.parent.tooltipNum)
elif (sourceName == "network/interfaces/"+self.parent.netdev+"/receiver/data"):
value = str(data[QString(u'value')]).split('.')[0]
self.parent.netSpeed["down"] = "%4s" % (value)
if (self.parent.netBool == 2):
self.parent.tooltipAgent.addValue('down', float(value), self.parent.tooltipNum)
# update network device
self.parent.updateNetdev = self.parent.updateNetdev + 1
if (self.parent.updateNetdev == 100):
self.parent.updateNetdev = 0
if (self.parent.netNonFormat.split('@@')[0] == self.parent.netNonFormat):
self.parent.systemmonitor.disconnectSource("network/interfaces/"+self.parent.netdev+"/transmitter/data", self.parent)
self.parent.systemmonitor.disconnectSource("network/interfaces/"+self.parent.netdev+"/receiver/data", self.parent)
self.parent.netdev = self.parent.setupNetdev()
self.parent.systemmonitor.connectSource("network/interfaces/"+self.parent.netdev+"/transmitter/data", self.parent, self.parent.interval)
self.parent.systemmonitor.connectSource("network/interfaces/"+self.parent.netdev+"/receiver/data", self.parent, self.parent.interval)
if (self.parent.netNonFormat.split('$netdev')[0] != self.parent.netNonFormat):
self.parent.netFormat = self.parent.netNonFormat.split('$netdev')[0] + self.parent.netdev + self.parent.netNonFormat.split('$netdev')[1]
else:
self.parent.netFormat = self.parent.netNonFormat
elif (str(sourceName).split('/')[0] == "lmsensors"):
value = str(round(float(data[QString(u'value')]), 1))
self.parent.temp[str(sourceName)] = "%4s" % (value)
elif (str(sourceName).split('/')[0] == "partitions"):
value = str(round(float(data[QString(u'value')]), 1))
self.parent.mount['/'+'/'.join(str(sourceName).split('/')[1:-1])] = "%5s" % (value)
elif (sourceName == "mem/physical/free"):
self.parent.mem_free = float(data[QString(u'value')])
elif (sourceName == "mem/physical/used"):
self.parent.mem_uf = float(data[QString(u'value')])
elif (sourceName == "mem/physical/application"):
if (self.parent.memInMb):
mem = str(round(float(data[QString(u'value')]) / 1024, 0)).split('.')[0]
mem = "%5s" % (mem)
if (self.parent.memFormat.split('$memmb')[0] != self.parent.memFormat):
line = self.parent.memFormat.split('$memmb')[0] + mem + self.parent.memFormat.split('$memmb')[1]
else:
line = self.parent.memFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_mem.setText(text)
else:
self.parent.mem_used = float(data[QString(u'value')])
if (self.parent.memBool == 2):
self.parent.tooltipAgent.addValue('mem', float(data[QString(u'value')]), self.parent.tooltipNum)
elif (sourceName == "mem/swap/free"):
self.parent.swap_free = float(data[QString(u'value')])
elif (sourceName == "mem/swap/used"):
if (self.parent.swapInMb):
mem = str(round(float(data[QString(u'value')]) / 1024, 0)).split('.')[0]
mem = "%5s" % (mem)
if (self.parent.swapFormat.split('$swapmb')[0] != self.parent.swapFormat):
line = self.parent.swapFormat.split('$swapmb')[0] + mem + self.parent.swapFormat.split('$swapmb')[1]
else:
line = self.parent.swapFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_swap.setText(text)
else:
self.parent.swap_used = float(data[QString(u'value')])
if (self.parent.swapBool == 2):
self.parent.tooltipAgent.addValue('swap', float(data[QString(u'value')]), self.parent.tooltipNum)
elif (sourceName == "gpu"):
value = str(data[QString(u'GPU')])
gpuText = "%4s" % (value)
if (self.parent.gpuFormat.split('$gpu')[0] != self.parent.gpuFormat):
line = self.parent.gpuFormat.split('$gpu')[0] + gpuText + self.parent.gpuFormat.split('$gpu')[1]
else:
line = self.parent.gpuFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_gpu.setText(text)
elif (sourceName == "gputemp"):
value = str(data[QString(u'GPUTemp')])
gputempText = "%4s" % (value)
if (self.parent.gputempFormat.split('$gputemp')[0] != self.parent.gputempFormat):
line = self.parent.gputempFormat.split('$gputemp')[0] + gputempText + self.parent.gputempFormat.split('$gputemp')[1]
else:
line = self.parent.gputempFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_gputemp.setText(text)
elif (sourceName == "hddtemp"):
for item in self.parent.hddNames:
value = str(data[QString(item)])
self.parent.hdd[item] = "%4s" % (value)
line = self.parent.hddtempFormat
for i in range(len(self.parent.hddNames)):
if (line.split('$hddtemp'+str(i))[0] != line):
line = line.split('$hddtemp'+str(i))[0] + self.parent.hdd[self.parent.hddNames[i]] + line.split('$hddtemp'+str(i))[1]
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_hddtemp.setText(text)
elif (sourceName == "player"):
if (self.parent.player_name == 0):
album = str(data[QString(u'amarok_album')].toUtf8()).decode("utf-8")
artist = str(data[QString(u'amarok_artist')].toUtf8()).decode("utf-8")
progress = str(data[QString(u'amarok_progress')].toUtf8()).decode("utf-8")
time = str(data[QString(u'amarok_duration')].toUtf8()).decode("utf-8")
title = str(data[QString(u'amarok_title')].toUtf8()).decode("utf-8")
elif (self.parent.player_name == 1):
album = str(data[QString(u'mpd_album')].toUtf8()).decode("utf-8")
artist = str(data[QString(u'mpd_artist')].toUtf8()).decode("utf-8")
progress = str(data[QString(u'mpd_progress')].toUtf8()).decode("utf-8")
time = str(data[QString(u'mpd_duration')].toUtf8()).decode("utf-8")
title = str(data[QString(u'mpd_title')].toUtf8()).decode("utf-8")
elif (self.parent.player_name == 2):
album = str(data[QString(u'qmmp_album')].toUtf8()).decode("utf-8")
artist = str(data[QString(u'qmmp_artist')].toUtf8()).decode("utf-8")
progress = str(data[QString(u'qmmp_progress')].toUtf8()).decode("utf-8")
time = str(data[QString(u'qmmp_duration')].toUtf8()).decode("utf-8")
title = str(data[QString(u'qmmp_title')].toUtf8()).decode("utf-8")
line = self.parent.playerFormat
if (line.split('$album')[0] != line):
line = line.split('$album')[0] + album + line.split('$album')[1]
if (line.split('$artist')[0] != line):
line = line.split('$artist')[0] + artist + line.split('$artist')[1]
if (line.split('$progress')[0] != line):
timeText = '%02i:%02i' % (int(time)/60, int(time)%60)
line = line.split('$progress')[0] + timeText + line.split('$progress')[1]
if (line.split('$time')[0] != line):
timeText = '%02i:%02i' % (int(time)/60, int(time)%60)
line = line.split('$time')[0] + timeText + line.split('$time')[1]
if (line.split('$title')[0] != line):
line = line.split('$title')[0] + title + line.split('$title')[1]
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_player.setText(text)
elif (sourceName == "Local"):
if (self.parent.timeFormat.split('$time')[0] != self.parent.timeFormat):
value = str(data[QString(u'DateTime')].toString(Qt.TextDate).toUtf8())
line = self.parent.timeFormat.split('$time')[0] + value.decode("utf-8") + self.parent.timeFormat.split('$time')[1]
elif (self.parent.timeFormat.split('$isotime')[0] != self.parent.timeFormat):
value = str(data[QString(u'DateTime')].toString(Qt.ISODate).toUtf8())
line = self.parent.timeFormat.split('$isotime')[0] + value.decode("utf-8") + self.parent.timeFormat.split('$isotime')[1]
elif (self.parent.timeFormat.split('$shorttime')[0] != self.parent.timeFormat):
value = str(data[QString(u'DateTime')].toString(Qt.SystemLocaleShortDate).toUtf8())
line = self.parent.timeFormat.split('$shorttime')[0] + value.decode("utf-8") + self.parent.timeFormat.split('$shorttime')[1]
elif (self.parent.timeFormat.split('$longtime')[0] != self.parent.timeFormat):
value = str(data[QString(u'DateTime')].toString(Qt.SystemLocaleLongDate).toUtf8())
line = self.parent.timeFormat.split('$longtime')[0] + value.decode("utf-8") + self.parent.timeFormat.split('$longtime')[1]
elif (self.parent.timeFormat.split('$custom')[0] != self.parent.timeFormat):
rawDate = data[QString(u'DateTime')]
value = self.parent.custom_time
for letters in timeLetters:
if (value.split('$'+letters)[0] != value):
value = value.split('$'+letters)[0] + \
str(data[QString(u'DateTime')].toString(letters).toUtf8()).decode("utf-8") + \
value.split('$'+letters)[1]
line = self.parent.timeFormat.split('$custom')[0] + value + self.parent.timeFormat.split('$custom')[1]
else:
line = self.parent.timeFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_time.setText(text)
self.parent.update()
if (formats['uptime'].split('$uptime')[0] != formats['uptime']):
updatedData['value'] = "%3id%2ih%2im" % (days, hours, minutes)
elif (formats['uptime'].split('$custom')[0] != formats['uptime']):
updatedData['value'] = adv['customUptime']
if (updatedData['value'].split('$dd')[0] != updatedData['value']):
updatedData['value'] = "%s%03i%s" % (updatedData['value'].split('$dd')[0], days, updatedData['value'].split('$dd')[1])
if (updatedData['value'].split('$d')[0] != updatedData['value']):
updatedData['value'] = "%s%i%s" % (updatedData['value'].split('$d')[0], days, updatedData['value'].split('$d')[1])
if (updatedData['value'].split('$hh')[0] != updatedData['value']):
updatedData['value'] = "%s%02i%s" % (updatedData['value'].split('$hh')[0], hours, updatedData['value'].split('$hh')[1])
if (updatedData['value'].split('$h')[0] != updatedData['value']):
updatedData['value'] = "%s%i%s" % (updatedData['value'].split('$h')[0], hours, updatedData['value'].split('$h')[1])
if (updatedData['value'].split('$mm')[0] != updatedData['value']):
updatedData['value'] = "%s%02i%s" % (updatedData['value'].split('$mm')[0], minutes, updatedData['value'].split('$mm')[1])
if (updatedData['value'].split('$m')[0] != updatedData['value']):
updatedData['value'] = "%s%i%s" % (updatedData['value'].split('$m')[0], minutes, updatedData['value'].split('$m')[1])
except:
pass
return updatedData
def disconnectFromSource(self, dataEngines=None, keys=None, name=None):
"""function to disconnect from sources"""
if (name == "bat"):
pass
elif (name == "cpu"):
dataEngines['system'].disconnectSource("cpu/system/TotalLoad", self.parent)
for item in keys['cpu']:
if (item != -1):
dataEngines['system'].disconnectSource("cpu/cpu" + str(item) + "/TotalLoad", self.parent)
elif (name == "cpuclock"):
dataEngines['system'].disconnectSource("cpu/system/AverageClock", self.parent)
for item in keys['cpuclock']:
if (item != -1):
dataEngines['system'].disconnectSource("cpu/cpu" + str(item) + "/clock", self.parent)
elif (name == "custom"):
dataEngines['ext'].disconnectSource("custom", self.parent)
elif (name == "gpu"):
dataEngines['ext'].disconnectSource("gpu", self.parent)
elif (name == "gputemp"):
dataEngines['ext'].disconnectSource("gputemp", self.parent)
elif (name == "hdd"):
for item in keys['hdd']:
dataEngines['system'].disconnectSource("partitions" + item + "/filllevel", self.parent)
dataEngines['system'].disconnectSource("partitions" + item + "/usedspace", self.parent)
elif (name == "hddtemp"):
dataEngines['ext'].disconnectSource("hddtemp", self.parent)
elif (name == "mem"):
dataEngines['system'].disconnectSource("mem/physical/application", self.parent)
dataEngines['system'].disconnectSource("mem/physical/free", self.parent)
dataEngines['system'].disconnectSource("mem/physical/used", self.parent)
elif (name == "net"):
dataEngines['system'].disconnectSource("network/interfaces/" + keys['net'] + "/transmitter/data", self.parent)
dataEngines['system'].disconnectSource("network/interfaces/" + keys['net'] + "/receiver/data", self.parent)
elif (name == "pkg"):
dataEngines['ext'].disconnectSource("pkg", self.parent)
elif (name == "player"):
dataEngines['ext'].disconnectSource("player", self.parent)
elif (name == "ps"):
dataEngines['ext'].disconnectSource("ps", self.parent)
elif (name == "swap"):
dataEngines['system'].disconnectSource("mem/swap/used", self.parent)
dataEngines['system'].disconnectSource("mem/swap/free", self.parent)
elif (name == "temp"):
for item in keys['temp']:
dataEngines['system'].disconnectSource(item, self.parent)
elif (name == "time"):
dataEngines['time'].disconnectSource("Local", self.parent)
elif (name == "uptime"):
dataEngines['system'].disconnectSource("system/uptime", self.parent)

View File

@ -24,62 +24,84 @@ from PyKDE4.kdeui import *
from PyKDE4.kio import *
from PyKDE4 import plasmascript
from PyKDE4.plasma import Plasma
import commands, os, shutil, time
import commands, os, shutil
import configdef
import configwindow
import dataengine
import ptmnotify
import reinit
import tooltip
from util import *
class CustomPlasmaLabel(Plasma.Label):
"""new Label with defined clicked() event"""
def __init__(self, applet, name):
"""class definition"""
Plasma.Label.__init__(self, applet)
self.name = name
self.notify = ptmnotify.PTMNotify(self)
def mousePressEvent(self, event):
"""mouse click event"""
if (event.button() == Qt.LeftButton):
self.notify.init(self.name)
class pyTextWidget(plasmascript.Applet):
def __init__(self, parent, args=None):
"""widget definition"""
plasmascript.Applet.__init__(self, parent)
# initialization
def init(self):
"""function to initializate widget"""
self._name = str(self.package().metadata().pluginName())
self.layout = QGraphicsLinearLayout(Qt.Horizontal, self.applet)
self.setupVar()
self.dataengine = dataengine.DataEngine(self)
self.reinit = reinit.Reinit(self)
self.reinit = reinit.Reinit(self, self.ptm['defaults'])
self.tooltipAgent = tooltip.Tooltip(self)
self.timer = QTimer()
QObject.connect(self.timer, SIGNAL("timeout()"), self.updateLabel)
self.setupVar()
self.initTooltip()
self.reinit.reinit(confAccept=False)
self.reInit()
self.applet.setLayout(self.ptm['layout'])
self.theme = Plasma.Svg(self)
self.theme.setImagePath("widgets/background")
self.setBackgroundHints(Plasma.Applet.DefaultBackground)
self.setHasConfigurationInterface(True)
# Create notifyrc file if required
kdehome = unicode(KGlobal.dirs().localkdedir())
if ((not os.path.exists(kdehome + "/share/apps/plasma_applet_pytextmonitor/plasma_applet_pytextmonitor.notifyrc")) and
(not os.path.exists("/usr" + "/share/apps/plasma_applet_pytextmonitor/plasma_applet_pytextmonitor.notifyrc"))):
self.createNotifyrc(kdehome)
# internal functions
def createConfigurationInterface(self, parent):
"""function to setup configuration window"""
self.configpage = configwindow.ConfigWindow(self)
self.configdef = configdef.ConfigDefinition(self, self.configpage)
self.configdef = configdef.ConfigDefinition(self, self.configpage, self.ptm['defaults'])
self.configdef.createConfigurationInterface(parent)
def createNotifyrc(self, kdehome):
"""function to create *.notifyrc"""
if (not os.path.isdir(kdehome + "/share/apps/plasma_applet_pytextmonitor")):
os.mkdir(kdehome + "/share/apps/plasma_applet_pytextmonitor")
shutil.copy(kdehome + "/share/apps/plasma/plasmoids/py-text-monitor/contents/code/plasma_applet_pytextmonitor.notifyrc",
kdehome + "/share/apps/plasma_applet_pytextmonitor/")
def initTooltip(self):
"""function to create tooltip"""
self.tooltip = Plasma.ToolTipContent()
@ -87,83 +109,98 @@ class pyTextWidget(plasmascript.Applet):
self.tooltip.setSubText('')
Plasma.ToolTipManager.self().registerWidget(self.applet)
# graphical tooltip
self.tooltip_pixmap = QPixmap()
self.tooltip_scene = QGraphicsScene()
self.tooltip_view = QGraphicsView(self.tooltip_scene)
self.tooltip_view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.tooltip_view.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.tooltipScene = QGraphicsScene()
self.tooltipView = QGraphicsView(self.tooltipScene)
self.tooltipView.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.tooltipView.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
# show tooltip
Plasma.ToolTipManager.self().setContent(self.applet, self.tooltip)
def updateTooltip(self):
"""function to update tooltip"""
self.tooltip_view.resize(100.0*(len(self.tooltipReq)-self.tooltipReq.count('up')), 100.0)
self.tooltipAgent.createGraphic(self.tooltipReq, self.tooltipColors, self.tooltipValues, self.tooltip_scene)
self.tooltip.setImage(QPixmap.grabWidget(self.tooltip_view))
Plasma.ToolTipManager.self().setContent(self.applet, self.tooltip)
def mouseDoubleClickEvent(self, event):
"""function to doubleclick event"""
os.system("ksysguard &")
def setupNetdev(self):
"""function to setup network device"""
netdev = "lo"
interfaces = QDir.entryList(QDir(self.netdir), QDir.Dirs | QDir.NoDotAndDotDot)
for device in interfaces:
if (str(device) != "lo"):
try:
with open(self.netdir+"/"+str(device)+"/operstate", "r") as stateFile:
if (stateFile.readline() == "up\n"):
netdev = str(device)
except:
pass
return netdev
def setupVar(self):
"""function to setup variables"""
self.netdev = ''
self.cpuCore = {-1:" 0.0"}
self.cpuClockCore = {-1:" 0"}
self.ptm = {}
# dataengines
self.ptm['dataengine'] = {'ext':None, 'system':None, 'time':None}
# defaults
self.ptm['defaults'] = {}
self.ptm['defaults']['confBool'] = {'bat':'batBool', 'cpu':'cpuBool',
'cpuclock':'cpuclockBool', 'custom':'customBool', 'gpu':'gpuBool',
'gputemp':'gputempBool', 'hdd':'hddBool', 'hddtemp':'hddtempBool',
'mem':'memBool', 'net':'netBool', 'pkg':'pkgBool', 'player':'playerBool',
'ps':'psBool', 'swap':'swapBool', 'temp':'tempBool', 'uptime':'uptimeBool',
'time':'timeBool'}
self.ptm['defaults']['confColor'] = {'cpu':'cpu_color', 'cpuclock':'cpuclock_color',
'down':'down_color', 'mem':'mem_color', 'swap':'swap_color', 'up':'up_color'}
self.ptm['defaults']['confFormat'] = {'bat':'batFormat', 'cpu':'cpuFormat',
'cpuclock':'cpuclockFormat', 'custom':'customFormat', 'gpu':'gpuFormat',
'gputemp':'gputempFormat', 'hdd':'hddFormat', 'hddtemp':'hddtempFormat',
'mem':'memFormat', 'net':'netFormat', 'pkg':'pkgFormat',
'player':'playerFormat', 'ps':'psFormat', 'swap':'swapFormat',
'temp':'tempFormat', 'time':'timeFormat', 'uptime':'uptimeFormat'}
self.ptm['defaults']['bool'] = {'bat':0, 'cpu':2, 'cpuclock':0, 'custom':0,
'gpu':0, 'gputemp':0, 'hdd':0, 'hddtemp':0, 'mem':2, 'net':2, 'pkg':0,
'player':0, 'ps':0, 'swap':2, 'temp':0, 'time':0, 'uptime':0}
self.ptm['defaults']['format'] = {'bat':'[bat: $bat%$ac]', 'cpu':'[cpu: $cpu%]',
'cpuclock':'[mhz: $cpucl]', 'custom':'[$custom]', 'gpu':'[gpu: $gpu%]',
'gputemp':'[gpu temp: $gputemp&deg;C]', 'hdd':'[hdd: $hdd0%]',
'hddtemp':'[hdd temp: $hddtemp0&deg;C]', 'mem':'[mem: $mem%]',
'net':'[$netdev: $down/$upKB/s]', 'pkg':'[upgrade: $pkgcount0]',
'player':'[$artist - $title]', 'ps':'[proc: $pscount]', 'swap':'[swap: $swap%]',
'temp':'[temp: $temp0&deg;C]', 'time':'[$time]', 'uptime':'[uptime: $uptime]'}
self.ptm['defaults']['order'] = {'1':'cpu', '2':'temp', '3':'mem', '4':'swap', '5':'net',
'6':'bat', '7':'cpuclock', '8':'uptime', '9':'gpu', 'a':'gputemp', 'b':'hdd',
'c':'hddtemp', 'd':'player', 'e':'time', 'f':'custom', 'g':'ps', 'h':'pkg'}
# labels
self.ptm['labels'] = {}
self.ptm['layout'] = QGraphicsLinearLayout(Qt.Horizontal, self.applet)
self.ptm['layout'].setContentsMargins(1, 1, 1, 1)
# names
self.ptm['names'] = {}
self.ptm['names']['hdd'] = []
self.ptm['names']['hddtemp'] = []
self.ptm['names']['net'] = ""
self.ptm['names']['temp'] = []
# tooltips
self.ptm['tooltip'] = {}
self.ptm['tooltip']['bounds'] = {'cpu':100.0, 'cpuclock':4000.0, 'mem':16000.0,
'swap':16000, 'down':10000.0, 'up':10000.0}
self.ptm['tooltip']['values'] = {'cpu':[0.0, 0.0], 'cpuclock':[0, 0], 'mem':[0, 0],
'swap':[0, 0], 'down':[0, 0], 'up':[0, 0]}
# values
self.ptm['values'] = {}
self.ptm['values']['cpu'] = {-1:0.0}
self.ptm['values']['cpuclock'] = {-1:0.0}
numCores = int(commands.getoutput("grep -c '^processor' /proc/cpuinfo"))
for i in range(numCores):
self.cpuCore[i] = str(" 0.0")
self.cpuClockCore[i] = str(" 0")
self.netSpeed = {"up":" 0", "down":" 0"}
self.tempNames = []
self.temp = {}
self.mountNames = []
self.mount = {}
self.hddNames = []
self.hdd = {}
self.tooltipColors = {}
self.tooltipNum = 100
self.tooltipReq = []
self.tooltipValues = {'cpu':[0.0, 0.01], 'cpuclock':[0.0, 0.01], 'mem':[0.0, 0.01],
'swap':[0.0, 0.01], 'up':[0.0, 0.01], 'down':[0.0, 0.01]}
# create dictionaries
self.dict_orders = {'6':'bat', '1':'cpu', '7':'cpuclock', 'f':'custom', '9':'gpu',
'a':'gputemp', 'b':'hdd', 'c':'hddtemp', '3':'mem', '5':'net', '4':'swap', '2':'temp',
'8':'uptime', 'd':'player', 'e':'time'}
self.dict_defFormat = {'bat':'[bat: $bat%$ac]', 'cpu':'[cpu: $cpu%]',
'cpuclock':'[mhz: $cpucl]', 'custom':'[$custom]', 'gpu':'[gpu: $gpu%]',
'gputemp':'[gpu temp: $gputemp&deg;C]', 'hdd':'[hdd: $hdd0%]',
'hddtemp':'[hdd temp: $hddtemp0&deg;C]', 'mem':'[mem: $mem%]',
'net':'[$netdev: $down/$upKB/s]', 'swap':'[swap: $swap%]',
'temp':'[temp: $temp0&deg;C]', 'uptime':'[uptime: $uptime]',
'player':'[$artist - $title]', 'time':'[$time]'}
self.ptm['values']['cpu'][i] = 0.0
self.ptm['values']['cpuclock'][i] = 0.0
self.ptm['values']['hdd'] = {}
self.ptm['values']['hddmb'] = {}
self.ptm['values']['hddtemp'] = {}
self.ptm['values']['mem'] = {'app':0.0, 'used':0.0, 'free':1.0}
self.ptm['values']['net'] = {"up":0.0, "down":0.0}
self.ptm['values']['swap'] = {'used':0.0, 'free':1.0}
self.ptm['values']['temp'] = {}
# variables
self.ptm['vars'] = {}
self.ptm['vars']['adv'] = {}
self.ptm['vars']['app'] = {}
self.ptm['vars']['bools'] = {}
self.ptm['vars']['formats'] = {}
self.ptm['vars']['tooltip'] = {}
def showConfigurationInterface(self):
"""function to show configuration window"""
plasmascript.Applet.showConfigurationInterface(self)
def startPolling(self):
try:
self.timer.start()
@ -176,155 +213,374 @@ class pyTextWidget(plasmascript.Applet):
def updateLabel(self):
"""function to update label"""
if (self.batBool > 0):
if (self.ptm['vars']['bools']['bat'] > 0):
self.batText()
if (self.cpuBool > 0):
if (self.ptm['vars']['bools']['cpu'] > 0):
self.cpuText()
if (self.cpuclockBool > 0):
if (self.ptm['vars']['bools']['cpuclock'] > 0):
self.cpuclockText()
if (self.customBool > 0):
self.getCustom()
if (self.hddBool > 0):
self.mountText()
if ((self.memBool > 0) and (self.memInMb == False)):
if (self.ptm['vars']['bools']['hdd'] > 0):
self.hddText()
if (self.ptm['vars']['bools']['hddtemp'] > 0):
self.hddtempText()
if (self.ptm['vars']['bools']['mem'] > 0):
self.memText()
if (self.netBool > 0):
if (self.ptm['vars']['bools']['net'] > 0):
self.netText()
if ((self.swapBool > 0) and (self.swapInMb == False)):
if (self.ptm['vars']['bools']['swap'] > 0):
self.swapText()
if (self.tempBool > 0):
if (self.ptm['vars']['bools']['temp'] > 0):
self.tempText()
self.updateTooltip()
def updateTooltip(self):
"""function to update tooltip"""
self.tooltipView.resize(100.0*(len(self.ptm['vars']['tooltip']['required']) - self.ptm['vars']['tooltip']['required'].count('up')), 100.0)
self.tooltipAgent.createGraphic(self.ptm['vars']['tooltip'], self.ptm['tooltip'], self.tooltipScene)
self.tooltip.setImage(QPixmap.grabWidget(self.tooltipView))
Plasma.ToolTipManager.self().setContent(self.applet, self.tooltip)
# update functions
# update dataengines
@pyqtSignature("dataUpdated(const QString &, const Plasma::DataEngine::Data &)")
def dataUpdated(self, sourceName, data):
"""function to update label"""
updatedData = self.dataengine.dataUpdated(str(sourceName), data, self.ptm)
if (updatedData['value'] == None):
return
# update values where is needed
if (updatedData['type'] != None):
self.ptm['values'][updatedData['name']][updatedData['type']] = updatedData['value']
elif (updatedData['name'] in ['custom', 'gpu', 'gputemp', 'pkg', 'player', 'ps', 'time', 'uptime']):
text = self.textPrepare(updatedData['name'], updatedData['value'])
self.setText(updatedData['name'], text)
else:
self.ptm['values'][updatedData['name']] = updatedData['value']
# update tooltips
if ((updatedData['name'] in ['cpu', 'cpuclock', 'mem', 'swap', 'net']) and (self.ptm['vars']['bools'][updatedData['name']] == 2)):
if (updatedData['name'] == "net"):
if (len(self.ptm['tooltip']['values'][updatedData['type']]) > self.ptm['vars']['tooltip']['num']):
self.ptm['tooltip']['values'][updatedData['type']] = self.ptm['tooltip']['values'][updatedData['type']][1:]
else:
if (len(self.ptm['tooltip']['values'][updatedData['name']]) > self.ptm['vars']['tooltip']['num']):
self.ptm['tooltip']['values'][updatedData['name']] = self.ptm['tooltip']['values'][updatedData['name']][1:]
if ((updatedData['name'] in ['cpu', 'cpuclock']) and (updatedData['type'] == -1)):
self.ptm['tooltip']['values'][updatedData['name']].append(updatedData['value'])
elif ((updatedData['name'] == "mem") and (updatedData['type'] == "app")):
self.ptm['tooltip']['values'][updatedData['name']].append(updatedData['value'])
elif ((updatedData['name'] == "mem") and (updatedData['type'] == "used")):
self.ptm['tooltip']['bounds']['mem'] = self.ptm['values']['mem']['free'] + self.ptm['values']['mem']['used']
elif ((updatedData['name'] == "swap") and (updatedData['type'] == "used")):
self.ptm['tooltip']['values'][updatedData['name']].append(updatedData['value'])
self.ptm['tooltip']['bounds']['swap'] = self.ptm['values']['swap']['free'] + self.ptm['values']['swap']['used']
elif (updatedData['name'] == "net"):
self.ptm['tooltip']['values'][updatedData['type']].append(updatedData['value'])
self.update()
# update labels
def batText(self):
"""function to set battery text"""
line = self.batFormat
line = self.ptm['vars']['formats']['bat']
if (line.split('$bat')[0] != line):
try:
with open (self.battery_device, 'r') as bat_file:
bat = bat_file.readline().split('\n')[0]
with open (self.ptm['vars']['adv']['batDev'], 'r') as batFile:
bat = batFile.readline()[:-1]
except:
bat = 'off'
bat = "off"
bat = "%3s" % (bat)
line = line.split('$bat')[0] + bat + line.split('$bat')[1]
if (line.split('$ac')[0] != line):
try:
with open (self.ac_device, 'r') as bat_file:
bat = bat_file.readline().split('\n')[0]
if (bat == '1'):
bat = '(*)'
with open (self.ptm['vars']['adv']['acDev'], 'r') as batFile:
bat = batFile.readline()[:-1]
if (bat == "1"):
bat = self.ptm['vars']['adv']['acOnline']
else:
bat = '( )'
bat = self.ptm['vars']['adv']['acOffline']
except:
bat = '(?)'
bat = "N\\A"
line = line.split('$ac')[0] + bat + line.split('$ac')[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_bat.setText(text)
text = self.ptm['vars']['app']['format'][0] + line + self.ptm['vars']['app']['format'][1]
self.setText("bat", text)
def cpuText(self):
"""function to set cpu text"""
line = self.cpuFormat
for core in self.cpuCore.keys():
if (core > -1):
if (line.split('$cpu'+str(core))[0] != line):
line = line.split('$cpu'+str(core))[0] + self.cpuCore[core] + line.split('$cpu'+str(core))[1]
line = self.ptm['vars']['formats']['cpu']
keys = self.ptm['values']['cpu'].keys()
keys.sort()
keys.reverse()
for core in keys[:-1]:
if (line.split('$cpu' + str(core))[0] != line):
value = "%5.1f" % (self.ptm['values']['cpu'][core])
line = line.split('$cpu' + str(core))[0] + value + line.split('$cpu' + str(core))[1]
if (line.split('$cpu')[0] != line):
line = line.split('$cpu')[0] + self.cpuCore[-1] + line.split('$cpu')[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_cpu.setText(text)
value = "%5.1f" % (self.ptm['values']['cpu'][-1])
line = line.split('$cpu')[0] + value + line.split('$cpu')[1]
text = self.ptm['vars']['app']['format'][0] + line + self.ptm['vars']['app']['format'][1]
self.setText("cpu", text)
def cpuclockText(self):
"""function to set cpu clock text"""
line = self.cpuclockFormat
for core in self.cpuClockCore.keys():
if (core > -1):
if (line.split('$cpucl'+str(core))[0] != line):
line = line.split('$cpucl'+str(core))[0] + self.cpuClockCore[core] + line.split('$cpucl'+str(core))[1]
line = self.ptm['vars']['formats']['cpuclock']
keys = self.ptm['values']['cpuclock'].keys()
keys.sort()
keys.reverse()
for core in keys[:-1]:
if (line.split('$cpucl' + str(core))[0] != line):
value = "%4.0f" % (self.ptm['values']['cpuclock'][core])
line = line.split('$cpucl' + str(core))[0] + value + line.split('$cpucl' + str(core))[1]
if (line.split('$cpucl')[0] != line):
line = line.split('$cpucl')[0] + self.cpuClockCore[-1] + line.split('$cpucl')[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_cpuclock.setText(text)
value = "%4.0f" % (self.ptm['values']['cpuclock'][-1])
line = line.split('$cpucl')[0] + value + line.split('$cpucl')[1]
text = self.ptm['vars']['app']['format'][0] + line + self.ptm['vars']['app']['format'][1]
self.setText("cpuclock", text)
def hddText(self):
"""function to set hdd text"""
line = self.ptm['vars']['formats']['hdd']
devices = range(len(self.ptm['names']['hdd']))
devices.reverse()
for i in devices:
if (line.split('$hdd' + str(i))[0] != line):
hdd = "%4.1f" % (self.ptm['values']['hdd'][self.ptm['names']['hdd'][i]])
line = line.split('$hdd' + str(i))[0] +\
hdd +\
line.split('$hdd' + str(i))[1]
if (line.split('$hddmb' + str(i))[0] != line):
hdd = "%i" % (self.ptm['values']['hddmb'][self.ptm['names']['hdd'][i]] / 1024.0)
line = line.split('$hddmb' + str(i))[0] +\
str(int(self.ptm['values']['hddmb'][self.ptm['names']['hdd'][i]] / 1024.0)) +\
line.split('$hddmb' + str(i))[1]
if (line.split('$hddgb' + str(i))[0] != line):
hdd = "%4.1f" % (self.ptm['values']['hddmb'][self.ptm['names']['hdd'][i]] / (1024.0 * 1024.0))
line = line.split('$hddgb' + str(i))[0] +\
hdd +\
line.split('$hddgb' + str(i))[1]
text = self.ptm['vars']['app']['format'][0] + line + self.ptm['vars']['app']['format'][1]
self.setText("hdd", text)
def hddtempText(self):
"""function to set hddtemp text"""
line = self.ptm['vars']['formats']['hddtemp']
devices = range(len(self.ptm['names']['hddtemp']))
devices.reverse()
for i in devices:
if (line.split('$hddtemp' + str(i))[0] != line):
line = line.split('$hddtemp' + str(i))[0] +\
str(self.ptm['values']['hddtemp'][self.ptm['names']['hddtemp'][i]]) +\
line.split('$hddtemp' + str(i))[1]
text = self.ptm['vars']['app']['format'][0] + line + self.ptm['vars']['app']['format'][1]
self.setText("hddtemp", text)
def memText(self):
"""function to set mem text"""
full = self.mem_uf + self.mem_free
try:
mem = 100 * self.mem_used / full
mem = "%5s" % (str(round(mem, 1)))
except:
mem = " N\\A"
if (self.memFormat.split('$mem')[0] != self.memFormat):
line = self.memFormat.split('$mem')[0] + mem + self.memFormat.split('$mem')[1]
else:
line = self.memFormat
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_mem.setText(text)
def mountText(self):
"""function to set mount text"""
line = self.hddFormat
for i in range(len(self.mountNames)):
if (line.split('$hdd'+str(i))[0] != line):
line = line.split('$hdd'+str(i))[0] + self.mount[self.mountNames[i]] + line.split('$hdd'+str(i))[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_hdd.setText(text)
line = self.ptm['vars']['formats']['mem']
if (line.split('$memgb')[0] != line):
mem = "%4.1f" % (self.ptm['values']['mem']['app'] / (1024.0 * 1024.0))
line = line.split('$memgb')[0] + mem + line.split('$memgb')[1]
if (line.split('$memmb')[0] != line):
mem = "%i" % (self.ptm['values']['mem']['app'] / 1024.0)
line = line.split('$memmb')[0] + mem + line.split('$memmb')[1]
if (line.split('$mem')[0] != line):
try:
mem = 100 * self.ptm['values']['mem']['app'] / (self.ptm['values']['mem']['free'] + self.ptm['values']['mem']['used'])
mem = "%5.1f" % (round(mem, 1))
except:
mem = " N\\A"
line = line.split('$mem')[0] + mem + line.split('$mem')[1]
text = self.ptm['vars']['app']['format'][0] + line + self.ptm['vars']['app']['format'][1]
self.setText("mem", text)
def netText(self):
"""function to set network text"""
line = self.netFormat
if (line.split('$up')[0] != line):
line = line.split('$up')[0] + self.netSpeed['up'] + line.split('$up')[1]
line = self.ptm['vars']['formats']['net']
if (line.split('$netdev')[0] != 0):
line = line.split('$netdev')[0] + self.ptm['names']['net'] + line.split('$netdev')[1]
if (line.split('$down')[0] != line):
line = line.split('$down')[0] + self.netSpeed['down'] + line.split('$down')[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_net.setText(text)
value = "%4.0f" %(self.ptm['values']['net']['down'])
line = line.split('$down')[0] + value + line.split('$down')[1]
if (line.split('$up')[0] != line):
value = "%4.0f" %(self.ptm['values']['net']['up'])
line = line.split('$up')[0] + value + line.split('$up')[1]
text = self.ptm['vars']['app']['format'][0] + line + self.ptm['vars']['app']['format'][1]
self.setText("net", text)
def swapText(self):
"""function to set swap text"""
full = self.swap_used + self.swap_free
try:
mem = 100 * self.swap_used / full
mem = "%5s" % (str(round(mem, 1)))
except:
mem = " N\\A"
if (self.swapFormat.split('$swap')[0] != self.swapFormat):
line = self.swapFormat.split('$swap')[0] + mem + self.swapFormat.split('$swap')[1]
else:
line = self.swapFormat
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_swap.setText(text)
line = self.ptm['vars']['formats']['swap']
if (line.split('$swapgb')[0] != line):
mem = "%4.1f" % (self.ptm['values']['swap']['used'] / (1024.0 * 1024.0))
line = line.split('$swapgb')[0] + mem + line.split('$swapgb')[1]
if (line.split('$swapmb')[0] != line):
mem = "%i" % (self.ptm['values']['swap']['used'] / 1024.0)
line = line.split('$swapmb')[0] + mem + line.split('$swapmb')[1]
if (line.split('$swap')[0] != line):
try:
mem = 100 * self.ptm['values']['swap']['used'] / (self.ptm['values']['swap']['free'] + self.ptm['values']['swap']['used'])
mem = "%5.1f" % (round(mem, 1))
except:
mem = " N\\A"
line = line.split('$swap')[0] + mem + line.split('$swap')[1]
text = self.ptm['vars']['app']['format'][0] + line + self.ptm['vars']['app']['format'][1]
self.setText("swap", text)
def tempText(self):
"""function to set temperature text"""
line = self.tempFormat
for i in range(len(self.tempNames)):
if (line.split('$temp'+str(i))[0] != line):
line = line.split('$temp'+str(i))[0] + self.temp[self.tempNames[i]] + line.split('$temp'+str(i))[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_temp.setText(text)
def getCustom(self):
"""function to get output from custom command"""
commandOut = commands.getoutput(self.custom_command)
line = self.customFormat
line = line.split('$custom')[0] + commandOut + line.split('$custom')[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_custom.setText(text)
@pyqtSignature("dataUpdated(const QString &, const Plasma::DataEngine::Data &)")
def dataUpdated(self, sourceName, data):
"""function to update label"""
self.dataengine.dataUpdated(sourceName, data)
line = self.ptm['vars']['formats']['temp']
devices = range(len(self.ptm['names']['temp']))
devices.reverse()
for i in devices:
if (line.split('$temp' + str(i))[0] != line):
line = line.split('$temp' + str(i))[0] +\
str(self.ptm['values']['temp'][self.ptm['names']['temp'][i]]) +\
line.split('$temp' + str(i))[1]
text = self.ptm['vars']['app']['format'][0] + line + self.ptm['vars']['app']['format'][1]
self.setText("temp", text)
# external functions
def addLabel(self, name=None, text=None, add=True):
"""function to add new label"""
if (add):
self.ptm['labels'][name] = CustomPlasmaLabel(self.applet, name)
self.ptm['layout'].addItem(self.ptm['labels'][name])
self.setText(name, text)
else:
self.setText(name, '')
self.ptm['layout'].removeItem(self.ptm['labels'][name])
def applySettings(self, name=None, ptm=None):
"""function to read settings"""
self.ptm[name] = ptm
if (name == "names"):
for item in ['hdd', 'hddtemp', 'temp']:
for value in self.ptm['names'][item]:
self.ptm['values'][item][value] = 0.0
if (item == "hdd"):
self.ptm['values']['hddmb'][value] = 0.0
def connectToEngine(self):
"""function to connect to dataengines"""
self.ptm['dataengine']['ext'] = self.dataEngine("ext-sysmon")
self.ptm['dataengine']['system'] = self.dataEngine("systemmonitor")
self.ptm['dataengine']['time'] = self.dataEngine("time")
self.dataengine.connectToEngine(self.ptm['vars']['bools'], self.ptm['dataengine'],
self.ptm['vars']['app']['interval'], self.ptm['names'])
def disconnectFromSource(self):
"""function to disconnect from sources"""
for label in self.ptm['defaults']['format'].keys():
if (self.ptm['vars']['bools'][label] > 0):
self.addLabel(label, None, False)
keys = {'cpu':self.ptm['values']['cpu'].keys(), 'cpuclock':self.ptm['values']['cpuclock'].keys(),
'hdd':self.ptm['values']['hdd'].keys(), 'net':self.ptm['names']['net'],
'temp':self.ptm['values']['temp'].keys()}
self.dataengine.disconnectFromSource(self.ptm['dataengine'], keys, label)
def reInit(self):
"""function to run reinit"""
self.reinit.reinit()
if (self.ptm['vars']['adv']['netdevBool'] == 0):
self.ptm['names']['net'] = self.setNetdev()
self.resize(10, 10)
# create dataengines
self.thread().wait(60000)
self.connectToEngine()
self.timer.setInterval(self.ptm['vars']['app']['interval'])
self.startPolling()
def setNetdev(self):
"""function to set network device"""
netdev = "lo"
netdir = self.ptm['vars']['adv']['netDir']
interfaces = QDir.entryList(QDir(netdir), QDir.Dirs | QDir.NoDotAndDotDot)
for device in interfaces:
if (str(device) != "lo"):
#try:
if True:
with open(netdir + '/' + str(device) + '/operstate', 'r') as stateFile:
if (stateFile.readline() == "up\n"):
netdev = str(device)
#except:
#pass
return netdev
def setText(self, name=None, text=None):
"""function to set text to labels"""
self.ptm['labels'][name].setText(text)
def textPrepare(self, name=None, text=None):
"""function to prepare text"""
line = self.ptm['vars']['formats'][name]
if (name == "custom"):
if (line.split('$custom')[0] != line):
line = line.split('$custom')[0] + text + line.split('$custom')[1]
elif (name == "gpu"):
if (line.split('$gpu')[0] != line):
line = line.split('$gpu')[0] + text + line.split('$gpu')[1]
elif (name == "gputemp"):
if (line.split('$gputemp')[0] != line):
line = line.split('$gputemp')[0] + text + line.split('$gputemp')[1]
elif (name == "pkg"):
for item in text.keys():
if (line.split('$' + item)[0] != line):
line = line.split('$' + item)[0] + text[item] + line.split('$' + item)[1]
elif (name == "player"):
if (line.split('$album')[0] != line):
line = line.split('$album')[0] + text['album'] + line.split('$album')[1]
if (line.split('$artist')[0] != line):
line = line.split('$artist')[0] + text['artist'] + line.split('$artist')[1]
if (line.split('$progress')[0] != line):
line = line.split('$progress')[0] + text['progress'] + line.split('$progress')[1]
if (line.split('$time')[0] != line):
line = line.split('$time')[0] + text['time'] + line.split('$time')[1]
if (line.split('$title')[0] != line):
line = line.split('$title')[0] + text['title'] + line.split('$title')[1]
elif (name == "ps"):
if (line.split('$pscount')[0] != line):
line = line.split('$pscount')[0] + text['num'] + line.split('$pscount')[1]
if (line.split('$pstotal')[0] != line):
line = line.split('$pstotal')[0] + text['total'] + line.split('$pstotal')[1]
if (line.split('$ps')[0] != line):
line = line.split('$ps')[0] + text['list'] + line.split('$ps')[1]
elif (name == "time"):
if (line.split('$time')[0] != line):
line = line.split('$time')[0] + text + line.split('$time')[1]
elif (line.split('$isotime')[0] != line):
line = line.split('$isotime')[0] + text + line.split('$isotime')[1]
elif (line.split('$shorttime')[0] != line):
line = line.split('$shorttime')[0] + text + line.split('$shorttime')[1]
elif (line.split('$longtime')[0] != line):
line = line.split('$longtime')[0] + text + line.split('$longtime')[1]
elif (line.split('$custom')[0] != line):
line = line.split('$custom')[0] + text + line.split('$custom')[1]
elif (name == "uptime"):
if (line.split('$uptime')[0] != line):
line = line.split('$uptime')[0] + text + line.split('$uptime')[1]
elif (line.split('$custom')[0] != line):
line = line.split('$custom')[0] + text + line.split('$custom')[1]
output = self.ptm['vars']['app']['format'][0] + line + self.ptm['vars']['app']['format'][1]
return output

View File

@ -26,15 +26,14 @@ import commands
class PTMNotify:
def __init__(self, parent):
"""class definition"""
self.parent = parent
def init(self):
def init(self, name=None):
"""function to init notification"""
content = self.initText(self.parent)
content = self.initText(name)
self.createNotify(content)
def createNotify(self, content):
"""function to create notification for label"""
notification = KNotification(content[0])
@ -42,32 +41,20 @@ class PTMNotify:
notification.setTitle("PyTextMonitor info ::: " + content[0]);
notification.setText(content[1]);
notification.sendEvent();
def createText(self, type):
"""function to create text"""
text = ""
if (type == "system"):
if (type == "battery"):
try:
text = text + "Kernel: %s\n" %(commands.getoutput("uname -rsm"))
text = text + "Hostname: %s\n" %(commands.getoutput("uname -n"))
text = text + "Whoami: %s\n" %(commands.getoutput("whoami"))
text = text + "Uptime: %s\n" %(commands.getoutput("uptime"))
text = "%s" %(commands.getoutput("acpi -abi"))
except:
text = "Something wrong"
elif (type == "processor"):
elif (type == "disk"):
try:
output = commands.getoutput("grep 'model name' /proc/cpuinfo | head -1")
text = text + "Model: %s\n" %(' '.join(output.split()[3:]))
output = commands.getoutput("sar -u | tail -1")
text = text + "CPU Usage: %s%%\n" %(str(100-float(output.split()[-1])))
output = commands.getoutput("grep MHz /proc/cpuinfo | head -1")
text = text + "CPU Freq: %s MHz\n" %(str(int(float(output.split()[-1]))))
output = commands.getoutput("sensors -u")
text = text + "Temps:"
for line in output.split("\n"):
if (line.find("_input") > -1):
text = text + " %s\xb0C" %(str(round(float(line.split()[-1]), 0)))
for line in commands.getoutput("df -h --output='source,target,used,size,pcent' --exclude-type=fuseblk --exclude-type=tmpfs --exclude-type=devtmpfs").split("\n")[1:]:
text = text + "%s (to %s): %s of %s (%s)\n" % (line.split()[0], line.split()[1], line.split()[2], line.split()[3], line.split()[4])
except:
text = "Something wrong"
elif (type == "graphical"):
@ -78,87 +65,83 @@ class PTMNotify:
elif (output.lower().find('radeon') > -1):
gpudev = "ati"
for line in output.split("\n"):
text = text + "%s %s\n" %(line.split('"')[0], line.split('"')[5])
text = text + "%s %s\n" % (line.split('"')[0], line.split('"')[5])
if (gpudev == 'nvidia'):
output = commands.getoutput("nvidia-smi -q -d UTILIZATION | grep Gpu | tail -n1")
try:
value = "%5s" % (str(round(float(output.split()[2][:-1]), 1)))
value = "%5.1f" % (round(float(output.split()[2]), 1))
except:
value = " N\A"
elif (gpudev == 'ati'):
output = commands.getoutput("aticonfig --od-getclocks | grep load | tail -n1")
try:
value = "%5s" % (str(round(float(output.split()[3][:-1]), 1)))
value = "%5.1f" % (round(float(output.split()[3]), 1))
except:
value = " N\A"
else:
value = " N\A"
text = text + "Load: %s%%\n" %(value)
text = text + "Load: %s%%\n" % (value)
if (gpudev == 'nvidia'):
output = commands.getoutput("nvidia-smi -q -d TEMPERATURE | grep Gpu | tail -n1")
try:
value = "%5s" % (str(round(float(output.split()[2][:-1]), 1)))
value = "%5.1f" % (round(float(output.split()[2]), 1))
except:
value = " N\A"
elif (gpudev == 'ati'):
output = commands.getoutput("aticonfig --od-gettemperature | grep Temperature | tail -n1")
try:
value = "%5s" % (str(round(float(output.split()[3][:-1]), 1)))
value = "%5.1f" % (round(float(output.split()[3]), 1))
except:
value = " N\A"
else:
value = " N\A"
text = text + "Temp: %s\xb0C\n" %(value)
text = text + "Temp: %s\xb0C\n" % (value)
except:
text = "Something wrong"
elif (type == "memory"):
try:
output = commands.getoutput("free -m -o").split("\n")
memusage = int(output[1].split()[1]) - (int(output[1].split()[3]) + int(output[1].split()[5]) + int(output[1].split()[6]))
text = text + "Memory: %s of %s (%s%%)\n" %(str(memusage), output[1].split()[1], str(int(100*memusage/int(output[1].split()[1]))))
text = text + "Swap: %s of %s (%s%%)\n" %(output[2].split()[2], output[2].split()[1], str(int(100*int(output[2].split()[2])/int(output[2].split()[1]))))
memUsage = int(output[1].split()[1]) - (int(output[1].split()[3]) + int(output[1].split()[5]) + int(output[1].split()[6]))
text = text + "Memory: %i of %s (%i%%)\n" % (memUsage, output[1].split()[1], int(100*memUsage/int(output[1].split()[1])))
text = text + "Swap: %s of %s (%i%%)\n" % (output[2].split()[2], output[2].split()[1], int(100*int(output[2].split()[2])/int(output[2].split()[1])))
output = commands.getoutput("swapon --show").split("\n")
text = text + "Swap Device: %s (%s)" %(output[1].split()[0], output[1].split()[1])
except:
text = "Something wrong"
elif (type == "disk"):
try:
output = commands.getoutput("df -h --output='source,target,used,size,pcent' --exclude-type=fuseblk --exclude-type=tmpfs --exclude-type=devtmpfs").split("\n")[1:]
for line in output:
text = text + "%s (to %s): %s of %s (%s)\n" %(line.split()[0], line.split()[1], line.split()[2], line.split()[3], line.split()[4])
text = text + "Swap Device: %s (%s)" % (output[1].split()[0], output[1].split()[1])
except:
text = "Something wrong"
elif (type == "network"):
try:
output = commands.getoutput("ifconfig -a -s").split("\n")[1:]
text = text + "Devices:"
for line in output:
text = text + " %s" %(line.split()[0])
output = commands.getoutput("ifconfig -a -s " + self.parent.parent.netdev + " && sleep 0.2 && ifconfig -a -s " + self.parent.parent.netdev).split("\n")
download = int((int(output[3].split()[2]) - int(output[1].split()[2])) / (0.2 * 1024))
upload = int((int(output[3].split()[6]) - int(output[1].split()[6])) / (0.2 * 1024))
text = text + "\n%s: %s/%s KB/s\n" %(self.parent.parent.netdev, download, upload)
output = commands.getoutput("ifconfig " + self.parent.parent.netdev + " | grep 'inet '").split()[1]
text = text + "IP: %s\n" %(output[:-1])
output = commands.getoutput("wget http://checkip.dyndns.org/ -q -O - | awk '{print $6}' | sed 's/<.*>//g'")
text = text + "External IP: %s" %(output[:-1])
devices = [line.split()[0] for line in output]
text = text + "Devices: %s\n" % (' '.join(devices))
for dev in devices:
output = commands.getoutput("ifconfig -a -s " + dev + " && sleep 0.2 && ifconfig -a -s " + dev).split("\n")
download = int((int(output[3].split()[2]) - int(output[1].split()[2])) / (0.2 * 1024))
upload = int((int(output[3].split()[6]) - int(output[1].split()[6])) / (0.2 * 1024))
text = text + "%s: %i/%i KB/s" % (dev, download, upload)
output = commands.getoutput("ifconfig " + dev + " | grep 'inet ' || echo ' inet Null'").split()[1]
text = text + " (IP: %s)\n" % (output)
output = commands.getoutput("wget -qO- http://ifconfig.me/ip")
text = text + "External IP: %s" % (output)
except:
text = "Something wrong"
elif (type == "battery"):
try:
text = text + "%s" %(commands.getoutput("acpi -abi"))
except:
text = "Something wrong"
elif (type == "musicplayer"):
elif (type == "player"):
try:
artist = "N\\A"
album = "N\\A"
title = "N\\A"
if (self.parent.parent.player_name == 0):
if (len(commands.getoutput("pgrep amarok")) > 0):
player = "amarok"
elif (len(commands.getoutput("pgrep mpd")) > 0):
player = "mpd"
elif (len(commands.getoutput("pgrep qmmp")) > 0):
player = "qmmp"
else:
player = ""
if (player == "amarok"):
artist = commands.getoutput("qdbus org.kde.amarok /Player GetMetadata 2> /dev/null | grep albumartist: | cut -c14-")
album = commands.getoutput("qdbus org.kde.amarok /Player GetMetadata 2> /dev/null | grep album: | cut -c8-")
title = commands.getoutput("qdbus org.kde.amarok /Player GetMetadata 2> /dev/null | grep title: | cut -c8-")
elif (self.parent.parent.player_name == 1):
elif (player == "mpd"):
output = commands.getoutput("echo 'currentsong\nclose' | curl --connect-timeout 1 -fsm 3 telnet://localhost:6600 2> /dev/null")
for line in output.split("\n"):
if (line.split(": ")[0] == "Artist"):
@ -167,107 +150,75 @@ class PTMNotify:
album = line.split(": ")[1]
elif (line.split(": ")[0] == "Title"):
title = line.split(": ")[1]
elif (self.parent.parent.player_name == 2):
elif (player == "qmmp"):
artist = commands.getoutput("qmmp --nowplaying '%if(%p,%p,Unknown)' 2> /dev/null")
album = commands.getoutput("qmmp --nowplaying '%if(%a,%a,Unknown)' 2> /dev/null")
title = commands.getoutput("qmmp --nowplaying '%if(%t,%t,Unknown)' 2> /dev/null")
text = text + "Artist: %s\nAlbum: %s\nTitle: %s" %(artist, album, title)
text = text + "Artist: %s\nAlbum: %s\nTitle: %s" % (artist, album, title)
except:
text = "Something wrong"
elif (type == "processor"):
try:
output = commands.getoutput("grep 'model name' /proc/cpuinfo | head -1")
text = text + "Model: %s\n" % (' '.join(output.split()[3:]))
output = commands.getoutput("sar -u | tail -1")
text = text + "CPU Usage: %5.1f%%\n" % (100-float(output.split()[-1]))
output = commands.getoutput("grep MHz /proc/cpuinfo | head -1")
text = text + "CPU Freq: %i MHz\n" % (int(float(output.split()[-1])))
output = commands.getoutput("sensors -u")
text = text + "Temps:"
for line in output.split("\n"):
if (line.find("_input") > -1):
text = text + " %3.0f\xb0C" % (round(float(line.split()[-1]), 0))
except:
text = "Something wrong"
elif (type == "system"):
try:
text = text + "Kernel: %s\n" % (commands.getoutput("uname -rsm"))
text = text + "Hostname: %s\n" % (commands.getoutput("uname -n"))
text = text + "Whoami: %s\n" % (commands.getoutput("whoami"))
text = text + "Uptime: %s\n" % (commands.getoutput("uptime"))
except:
text = "Something wrong"
content = [type, text]
return content
def initText(self, sender):
def initText(self, name):
"""function to send text"""
try:
if (sender == self.parent.parent.label_time):
content = self.createText("system")
return content
except:
pass
try:
if (sender == self.parent.parent.label_uptime):
content = self.createText("system")
return content
except:
pass
try:
if (sender == self.parent.parent.label_cpu):
content = self.createText("processor")
return content
except:
pass
try:
if (sender == self.parent.parent.label_cpuclock):
content = self.createText("processor")
return content
except:
pass
try:
if (sender == self.parent.parent.label_temp):
content = self.createText("processor")
return content
except:
pass
try:
if (sender == self.parent.parent.label_gpu):
content = self.createText("graphical")
return content
except:
pass
try:
if (sender == self.parent.parent.label_gputemp):
content = self.createText("graphical")
return content
except:
pass
try:
if (sender == self.parent.parent.label_mem):
content = self.createText("memory")
return content
except:
pass
try:
if (sender == self.parent.parent.label_swap):
content = self.createText("memory")
return content
except:
pass
try:
if (sender == self.parent.parent.label_hdd):
content = self.createText("disk")
return content
except:
pass
try:
if (sender == self.parent.parent.label_hddtemp):
content = self.createText("disk")
return content
except:
pass
try:
if (sender == self.parent.parent.label_net):
content = self.createText("network")
return content
except:
pass
try:
if (sender == self.parent.parent.label_bat):
content = self.createText("battery")
return content
except:
pass
try:
if (sender == self.parent.parent.label_player):
content = self.createText("musicplayer")
return content
except:
pass
try:
if (sender == self.parent.parent.label_custom):
content = self.createText("system")
return content
except:
pass
if (name == "bat"):
return self.createText("battery")
elif (name == "cpu"):
return self.createText("processor")
elif (name == "cpuclock"):
return self.createText("processor")
elif (name == "custom"):
return self.createText("system")
elif (name == "gpu"):
return self.createText("graphical")
elif (name == "gputemp"):
return self.createText("graphical")
elif (name == "hdd"):
return self.createText("disk")
elif (name == "hddtemp"):
return self.createText("disk")
elif (name == "mem"):
return self.createText("memory")
elif (name == "net"):
return self.createText("network")
elif (name == "pkg"):
return self.createText("system")
elif (name == "player"):
return self.createText("player")
elif (name == "ps"):
return self.createText("system")
elif (name == "swap"):
return self.createText("memory")
elif (name == "temp"):
return self.createText("processor")
elif (name == "time"):
return self.createText("system")
elif (name == "uptime"):
return self.createText("system")
else:
return None

View File

@ -19,253 +19,78 @@
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyKDE4.plasma import Plasma
import config
import ptmnotify
class NewPlasmaLabel(Plasma.Label):
"""new Label with defined clicked() event"""
def __init__(self, applet, parent):
"""class definition"""
Plasma.Label.__init__(self, applet)
self.parent = parent
self.notify = ptmnotify.PTMNotify(self)
def mousePressEvent(self, event):
"""mouse click event"""
if (event.button() == Qt.LeftButton):
self.notify.init()
class Reinit():
def __init__(self, parent):
def __init__(self, parent, defaults=None):
"""class definition"""
self.parent = parent
def reinit(self, confAccept=False):
self.defaults = defaults
self.labels = defaults['format'].keys()
def reinit(self):
"""function to reinitializate widget"""
settings = config.Config(self.parent)
self.parent.interval = settings.get('interval', 2000).toInt()[0]
self.parent.font_family = str(settings.get('font_family', 'Terminus'))
self.parent.font_size = settings.get('font_size', 12).toInt()[0]
self.parent.font_color = str(settings.get('font_color', '#000000'))
self.parent.font_style = str(settings.get('font_style', 'normal'))
self.parent.font_weight = settings.get('font_weight', 400).toInt()[0]
self.parent.formatLine = "<pre><p align=\"center\"><span style=\" font-family:'" + self.parent.font_family + "'; font-style:" + self.parent.font_style
self.parent.formatLine = self.parent.formatLine + "; font-size:" + str(self.parent.font_size) + "pt; font-weight:" + str(self.parent.font_weight)
self.parent.formatLine = self.parent.formatLine + "; color:" + self.parent.font_color + ";\">$LINE</span></p></pre>"
self.parent.custom_time = str(settings.get('custom_time', '$hh:$mm'))
self.parent.custom_uptime = str(settings.get('custom_uptime', '$ds,$hs,$ms'))
self.parent.tempNames = []
self.parent.temp = {}
for item in str(settings.get('temp_device', '')).split('@@'):
self.parent.tempNames.append(item)
self.parent.temp[item] =" 0.0"
self.parent.mountNames = []
self.parent.mount = {}
for item in str(settings.get('mount', '/')).split('@@'):
self.parent.mountNames.append(item)
self.parent.mount[item] =" 0.0"
self.parent.hddNames = []
self.parent.hdd = {}
for item in str(settings.get('hdd', '/dev/sda')).split('@@'):
self.parent.hddNames.append(item)
self.parent.hdd[item] =" 0.0"
self.parent.netdir = str(settings.get('netdir', '/sys/class/net'))
self.parent.netdevBool = settings.get('netdevBool', 0).toInt()[0]
self.parent.custom_netdev = str(settings.get('custom_netdev', 'lo'))
self.parent.battery_device = str(settings.get('battery_device', '/sys/class/power_supply/BAT0/capacity'))
self.parent.ac_device = str(settings.get('ac_device', '/sys/class/power_supply/AC/online'))
self.parent.player_name = settings.get('player_name', 0).toInt()[0]
self.parent.custom_command = str(settings.get('custom_command', 'wget -qO- http://ifconfig.me/ip'))
self.parent.tooltipNum = settings.get('tooltip_num', 100).toInt()[0]
self.parent.tooltipColors['cpu'] = str(settings.get('cpu_color', '#ff0000'))
self.parent.tooltipColors['cpuclock'] = str(settings.get('cpuclock_color', '#00ff00'))
self.parent.tooltipColors['mem'] = str(settings.get('mem_color', '#0000ff'))
self.parent.tooltipColors['swap'] = str(settings.get('swap_color', '#ffff00'))
self.parent.tooltipColors['down'] = str(settings.get('down_color', '#00ffff'))
self.parent.tooltipColors['up'] = str(settings.get('up_color', '#ff00ff'))
self.parent.tooltipReq = []
self.parent.label_order = str(settings.get('label_order', '1345'))
for label in self.parent.dict_orders.values():
if ((label == 'cpu') or (label == 'mem') or (label == 'swap') or (label == 'net')):
exec ('self.parent.' + label + 'Bool = settings.get("' + label + 'Bool", 2).toInt()[0]')
else:
exec ('self.parent.' + label + 'Bool = settings.get("' + label + 'Bool", 0).toInt()[0]')
# labels
for order in self.parent.label_order:
if (order == "1"):
if (self.parent.cpuBool > 0):
self.parent.cpuFormat = str(settings.get('cpuFormat', '[cpu: $cpu%]'))
self.parent.label_cpu = NewPlasmaLabel(self.parent.applet, self.parent)
line = self.parent.cpuFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_cpu.setText(text)
self.parent.layout.addItem(self.parent.label_cpu)
if (self.parent.cpuBool == 2):
self.parent.tooltipReq.append('cpu')
elif (order == "2"):
if (self.parent.tempBool > 0):
self.parent.tempFormat = str(settings.get('tempFormat', '[temp: $temp0&deg;C]'))
self.parent.label_temp = NewPlasmaLabel(self.parent.applet, self.parent)
line = self.parent.tempFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_temp.setText(text)
self.parent.layout.addItem(self.parent.label_temp)
elif (order == "3"):
if (self.parent.memBool > 0):
self.parent.memFormat = str(settings.get('memFormat', '[mem: $mem%]'))
self.parent.label_mem = NewPlasmaLabel(self.parent.applet, self.parent)
if (self.parent.memFormat.split('$memmb')[0] != self.parent.memFormat):
self.parent.memInMb = True
elif (self.parent.memFormat.split('$mem')[0] != self.parent.memFormat):
self.parent.memInMb = False
self.parent.mem_used = 0.0
self.parent.mem_free = 1.0
self.parent.mem_uf = 0.0
line = self.parent.memFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_mem.setText(text)
self.parent.layout.addItem(self.parent.label_mem)
if (self.parent.memBool == 2):
self.parent.tooltipReq.append('mem')
elif (order == "4"):
if (self.parent.swapBool > 0):
self.parent.swapFormat = str(settings.get('swapFormat', '[swap: $swap%]'))
self.parent.label_swap = NewPlasmaLabel(self.parent.applet, self.parent)
if (self.parent.swapFormat.split('$swapmb')[0] != self.parent.swapFormat):
self.parent.swapInMb = True
elif (self.parent.swapFormat.split('$swap')[0] != self.parent.swapFormat):
self.parent.swapInMb = False
self.parent.swap_free = 1.0
self.parent.swap_used = 0.0
line = self.parent.swapFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_swap.setText(text)
self.parent.layout.addItem(self.parent.label_swap)
if (self.parent.swapBool == 2):
self.parent.tooltipReq.append('swap')
elif (order == "5"):
if (self.parent.netBool > 0):
self.parent.netNonFormat = str(settings.get('netNonFormat', '[net: $down/$upKB/s]'))
self.parent.label_net = NewPlasmaLabel(self.parent.applet, self.parent)
if (self.parent.netdevBool > 0):
self.parent.netdev = self.parent.custom_netdev
ptmVars = {}
ptmVars['adv'] = {}
ptmVars['adv']['acDev'] = str(settings.get('ac_device', '/sys/class/power_supply/AC/online'))
ptmVars['adv']['acOnline'] = str(settings.get('ac_online', '(*)'))
ptmVars['adv']['acOffline'] = str(settings.get('ac_offline', '( )'))
ptmVars['adv']['batDev'] = str(settings.get('battery_device', '/sys/class/power_supply/BAT0/capacity'))
ptmVars['adv']['customTime'] = str(settings.get('custom_time', '$hh:$mm'))
ptmVars['adv']['customUptime'] = str(settings.get('custom_uptime', '$dd,$hh,$mm'))
ptmVars['adv']['netdevBool'] = settings.get('netdevBool', 0).toInt()[0]
ptmVars['adv']['netDir'] = str(settings.get('netdir', '/sys/class/net'))
ptmVars['adv']['player'] = str(settings.get('player_name', "amarok"))
ptmVars['app'] = {}
ptmVars['app']['format'] = ["<pre><p align=\"center\"><span style=\" font-family:'" + str(settings.get('font_family', 'Terminus')) +\
"'; font-style:" + str(settings.get('font_style', 'normal')) + "; font-size:" + str(settings.get('font_size', 12)) +\
"pt; font-weight:" + str(settings.get('font_weight', 400)) + "; color:" + str(settings.get('font_color', '#000000')) +\
";\">", "</span></p></pre>"]
ptmVars['app']['interval'] = settings.get('interval', 2000).toInt()[0]
ptmVars['app']['order'] = str(settings.get('label_order', '1345'))
ptmVars['tooltip'] = {}
ptmVars['tooltip']['colors'] = {}
ptmVars['tooltip']['colors']['cpu'] = str(settings.get('cpu_color', '#ff0000'))
ptmVars['tooltip']['colors']['cpuclock'] = str(settings.get('cpuclock_color', '#00ff00'))
ptmVars['tooltip']['colors']['mem'] = str(settings.get('mem_color', '#0000ff'))
ptmVars['tooltip']['colors']['swap'] = str(settings.get('swap_color', '#ffff00'))
ptmVars['tooltip']['colors']['down'] = str(settings.get('down_color', '#00ffff'))
ptmVars['tooltip']['colors']['up'] = str(settings.get('up_color', '#ff00ff'))
ptmVars['tooltip']['num'] = settings.get('tooltip_num', 100).toInt()[0]
ptmVars['bools'] = {}
for label in self.labels:
ptmVars['bools'][label] = settings.get(self.defaults['confBool'][label], self.defaults['bool'][label]).toInt()[0]
ptmNames = {}
ptmNames['hdd'] = str(settings.get('mount', '/')).split('@@')
ptmNames['hddtemp'] = str(settings.get('hdd', '/dev/sda')).split('@@')
if (ptmVars['adv']['netdevBool'] > 0):
ptmNames['net'] = str(settings.get('custom_netdev', 'lo'))
else:
ptmNames['net'] = ""
ptmNames['temp'] = str(settings.get('temp_device', '')).split('@@')
self.parent.applySettings('names', ptmNames)
ptmVars['formats'] = {}
ptmVars['tooltip']['required'] = []
for order in ptmVars['app']['order']:
label = self.defaults['order'][order]
if (ptmVars['bools'][label] > 0):
ptmVars['formats'][label] = str(settings.get(self.defaults['confFormat'][label], self.defaults['format'][label]))
text = ptmVars['app']['format'][0] + ptmVars['formats'][label] + ptmVars['app']['format'][1]
self.parent.addLabel(label, text, True)
if ((label in ['cpu', 'cpuclock', 'mem', 'net', 'swap']) and (ptmVars['bools'][label] == 2)):
if (label == 'net'):
ptmVars['tooltip']['required'].append("down")
ptmVars['tooltip']['required'].append("up")
else:
self.parent.netdev = self.parent.setupNetdev()
if (self.parent.netNonFormat.split('$netdev')[0] != self.parent.netNonFormat):
self.parent.netFormat = self.parent.netNonFormat.split('$netdev')[0] + self.parent.netdev + self.parent.netNonFormat.split('$netdev')[1]
else:
self.parent.netFormat = self.parent.netNonFormat
line = self.parent.netFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_net.setText(text)
self.parent.layout.addItem(self.parent.label_net)
if (self.parent.netBool == 2):
self.parent.tooltipReq.append('down')
self.parent.tooltipReq.append('up')
elif (order == "6"):
if (self.parent.batBool > 0):
self.parent.batFormat = str(settings.get('batFormat', '[bat: $bat%$ac]'))
self.parent.label_bat = NewPlasmaLabel(self.parent.applet, self.parent)
line = self.parent.batFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_bat.setText(text)
self.parent.layout.addItem(self.parent.label_bat)
elif (order == "7"):
if (self.parent.cpuclockBool > 0):
self.parent.cpuclockFormat = str(settings.get('cpuclockFormat', '[mhz: $cpucl]'))
self.parent.label_cpuclock = NewPlasmaLabel(self.parent.applet, self.parent)
line = self.parent.cpuclockFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_cpuclock.setText(text)
self.parent.layout.addItem(self.parent.label_cpuclock)
if (self.parent.cpuclockBool == 2):
self.parent.tooltipReq.append('cpuclock')
elif (order == "8"):
if (self.parent.uptimeBool > 0):
self.parent.uptimeFormat = str(settings.get('uptimeFormat', '[uptime: $uptime]'))
self.parent.label_uptime = NewPlasmaLabel(self.parent.applet, self.parent)
line = self.parent.uptimeFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_uptime.setText(text)
self.parent.layout.addItem(self.parent.label_uptime)
elif (order == "9"):
if (self.parent.gpuBool > 0):
self.parent.gpuFormat = str(settings.get('gpuFormat', '[gpu: $gpu%]'))
self.parent.label_gpu = NewPlasmaLabel(self.parent.applet, self.parent)
line = self.parent.gpuFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_gpu.setText(text)
self.parent.layout.addItem(self.parent.label_gpu)
elif (order == "a"):
if (self.parent.gputempBool > 0):
self.parent.gputempFormat = str(settings.get('gputempFormat', '[gpu temp: $gputemp&deg;C]'))
self.parent.label_gputemp = NewPlasmaLabel(self.parent.applet, self.parent)
line = self.parent.gputempFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_gputemp.setText(text)
self.parent.layout.addItem(self.parent.label_gputemp)
elif (order == "b"):
if (self.parent.hddBool > 0):
self.parent.hddFormat = str(settings.get('hddFormat', '[hdd: $hdd0%]'))
self.parent.label_hdd = NewPlasmaLabel(self.parent.applet, self.parent)
line = self.parent.hddFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_hdd.setText(text)
self.parent.layout.addItem(self.parent.label_hdd)
elif (order == "c"):
if (self.parent.hddtempBool > 0):
self.parent.hddtempFormat = str(settings.get('hddtempFormat', '[hdd temp: $hddtemp0&deg;C]'))
self.parent.label_hddtemp = NewPlasmaLabel(self.parent.applet, self.parent)
line = self.parent.hddtempFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_hddtemp.setText(text)
self.parent.layout.addItem(self.parent.label_hddtemp)
elif (order == "d"):
if (self.parent.playerBool > 0):
self.parent.playerFormat = str(settings.get('playerFormat', '[$artist - $title]'))
self.parent.label_player = NewPlasmaLabel(self.parent.applet, self.parent)
line = self.parent.playerFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_player.setText(text)
self.parent.layout.addItem(self.parent.label_player)
elif (order == "e"):
if (self.parent.timeBool > 0):
self.parent.timeFormat = str(settings.get('timeFormat', '[$time]'))
self.parent.label_time = NewPlasmaLabel(self.parent.applet, self.parent)
line = self.parent.timeFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_time.setText(text)
self.parent.layout.addItem(self.parent.label_time)
elif (order == "f"):
if (self.parent.customBool > 0):
self.parent.customFormat = str(settings.get('customFormat', '[$custom]'))
self.parent.label_custom = NewPlasmaLabel(self.parent.applet, self.parent)
line = self.parent.customFormat
text = self.parent.formatLine.split('$LINE')[0] + line + self.parent.formatLine.split('$LINE')[1]
self.parent.label_custom.setText(text)
self.parent.layout.addItem(self.parent.label_custom)
if not confAccept:
self.parent.layout.setContentsMargins(1, 1, 1, 1)
self.parent.applet.setLayout(self.parent.layout)
self.parent.theme = Plasma.Svg(self.parent)
self.parent.theme.setImagePath("widgets/background")
self.parent.setBackgroundHints(Plasma.Applet.DefaultBackground)
self.parent.resize(10, 10)
# create dataengines
self.parent.thread().wait(60000)
self.parent.dataengine.connectToEngine()
self.parent.timer.setInterval(self.parent.interval)
self.parent.startPolling()
ptmVars['tooltip']['required'].append(label)
self.parent.applySettings('vars', ptmVars)

View File

@ -26,32 +26,28 @@ class Tooltip():
def __init__(self, parent):
"""class definition"""
self.parent = parent
def addValue(self, type, value=0.0, tooltipNum=100):
"""function to add value to list"""
if (len(self.parent.tooltipValues[type]) > tooltipNum):
self.parent.tooltipValues[type] = self.parent.tooltipValues[type][1:]
self.parent.tooltipValues[type].append(value)
def createGraphic(self, types, colors, values, widget):
def createGraphic(self, ptmVars, ptmTooltip, widget):
"""function to create graph"""
widget.clear()
maxOne = [100.0, 100.0]
pen = QPen()
bounds = ptmTooltip['bounds']
colors = ptmVars['colors']
types = ptmVars['required']
values = ptmTooltip['values']
maxOne = [100.0, 100.0]
bounds['down'] = 1.0
for value in values['down']:
if (bounds['down'] < value):
bounds['down'] = value
for value in values['up']:
if (bounds['down'] < value):
bounds['down'] = value
bounds['up'] = bounds['down']
down = False
for type in types:
bound = [values[type][0], values[type][0]]
for value in values[type]:
if (value < bound[0]):
bound[0] = value
elif (value > bound[1]):
bound[1] = value
if ((bound[0] == 0.0) and (bound[0] == 0.0)):
norm = [maxOne[0] / len(values[type]), maxOne[1] / 1.5]
else:
norm = [maxOne[0] / len(values[type]), maxOne[1] / (1.5*(bound[1] - bound[0]))]
norm = [maxOne[0] / len(values[type]), maxOne[1] / (1.5 * bounds[type])]
pen.setColor(QColor(colors[type]))
if (down):
shift = (types.index(type) - 1) * maxOne[0]
@ -59,10 +55,10 @@ class Tooltip():
shift = types.index(type) * maxOne[0]
for i in range(len(values[type])-1):
x1 = i * norm[0] + shift
y1 = -(values[type][i] - bound[0]) * norm[1]
y1 = -values[type][i] * norm[1]
x2 = (i + 1) * norm[0] + shift
y2 = -(values[type][i+1] - bound[0]) * norm[1]
y2 = -values[type][i+1] * norm[1]
widget.addLine(x1, y1, x2, y2, pen)
if (type == 'down'):
down = True

View File

@ -27,32 +27,30 @@ import os
class Util():
def __init__(self, applet):
self.applet = applet
def createDirectory(self, name):
if not os.path.isdir(name):
try:
os.mkdir(name)
except:
print 'Failed to create directory: ' + name
print ('Failed to create directory: ' + name)
def kdeHome(self):
return unicode(KGlobal.dirs().localkdedir())
def createNotifyrc(self):
print '[%s] creating notifyrc' % (self.applet._name)
print ('[%s] creating notifyrc' % (self.applet._name))
self.createDirectory(self.kdeHome() + 'share/apps/%s' % self.applet._name)
source = self.applet.package().path() + 'contents/misc/%s.notifyrc' % self.applet._name
destination = self.kdeHome() + 'share/apps/%s/%s.notifyrc' % (self.applet._name, self.applet._name)
copyfile(source, destination)
def createConfig(self):
self.createDirectory(self.kdeHome() + 'share/apps/%s' % self.applet._name)
source = self.applet.package().path() + 'contents/misc/%s.ini' % self.applet._name
destination = self.kdeHome() + 'share/apps/%s/%s.ini' % (self.applet._name, self.applet._name)
copyfile(source, destination)

File diff suppressed because it is too large Load Diff

View File

@ -3,14 +3,14 @@ IconName=system
Name=PyTextMonitor
Comment=PyTextMonitor information
[Event/system]
Name=System information
Comment=System information
[Event/battery]
Name=Battery information
Comment=Battery information
Action=Popup
[Event/processor]
Name=Processor information
Comment=Processor information
[Event/disk]
Name=Disk information
Comment=Disk information
Action=Popup
[Event/graphical]
@ -23,27 +23,22 @@ Name=Memory information
Comment=Memory information
Action=Popup
[Event/disk]
Name=Disk information
Comment=Disk information
Action=Popup
[Event/network]
Name=Network information
Comment=Network information
Action=Popup
[Event/battery]
Name=Battery information
Comment=Battery information
Action=Popup
[Event/graphinfo]
Name=Graphical Information
Comment=Graphical Information
Action=Popup
[Event/musicplayer]
[Event/player]
Name=Now playing
Comment=Now playing
Action=Popup
[Event/processor]
Name=Processor information
Comment=Processor information
Action=Popup
[Event/system]
Name=System information
Comment=System information
Action=Popup

View File

@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://kde-look.org/content/show.php?content=157124\n"
"POT-Creation-Date: 2014-04-02 20:48+0400\n"
"PO-Revision-Date: 2014-04-02 20:49+0400\n"
"POT-Creation-Date: 2014-04-09 12:35+0400\n"
"PO-Revision-Date: 2014-04-09 12:26+0400\n"
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
"Language: ru\n"
@ -40,13 +40,13 @@ msgstr ""
"Detailed information may be found on <a href=\"http://arcanis.name/projects/"
"pytextmonitor/\">project homepage</a>"
#. i18n: file: ui/configwindow.ui:69
#. i18n: file: ui/configwindow.ui:84
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_time)
#: rc.cpp:12
msgid "Time"
msgstr "Time"
#. i18n: file: ui/configwindow.ui:83
#. i18n: file: ui/configwindow.ui:98
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_time)
#: rc.cpp:15
msgid ""
@ -62,13 +62,13 @@ msgstr ""
"$longtime - time in log format\n"
"$custom - custom time format"
#. i18n: file: ui/configwindow.ui:128
#. i18n: file: ui/configwindow.ui:143
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_uptime)
#: rc.cpp:22
msgid "Uptime"
msgstr "Uptime"
#. i18n: file: ui/configwindow.ui:139
#. i18n: file: ui/configwindow.ui:154
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_uptime)
#: rc.cpp:25
msgid ""
@ -78,13 +78,13 @@ msgstr ""
"$uptime - system uptime\n"
"$custom - custom format"
#. i18n: file: ui/configwindow.ui:187
#. i18n: file: ui/configwindow.ui:202
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_cpu)
#: rc.cpp:29
msgid "CPU"
msgstr "CPU"
#. i18n: file: ui/configwindow.ui:203
#. i18n: file: ui/configwindow.ui:220
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_cpu)
#: rc.cpp:33
#, no-c-format
@ -92,140 +92,160 @@ msgid ""
"$cpu - total load CPU, %\n"
"$cpu0 - load CPU for core 0, %\n"
"...\n"
"$cpu7 - load CPU for core 7, %"
"$cpu9 - load CPU for core 9, %\n"
"...\n"
"$cpuN - load CPU for core N, %"
msgstr ""
"$cpu - total load CPU, %\n"
"$cpu0 - load CPU for core 0, %\n"
"...\n"
"$cpu7 - load CPU for core 7, %"
"$cpu9 - load CPU for core 9, %\n"
"...\n"
"$cpuN - load CPU for core N, %"
#. i18n: file: ui/configwindow.ui:251
#. i18n: file: ui/configwindow.ui:268
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_cpuclock)
#: rc.cpp:39
#: rc.cpp:41
msgid "CPU Clock"
msgstr "CPU Clock"
#. i18n: file: ui/configwindow.ui:267
#. i18n: file: ui/configwindow.ui:286
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_cpuclock)
#: rc.cpp:42
#: rc.cpp:44
msgid ""
"$cpucl - average CPU clock, MHz\n"
"$cpucl0 - CPU clock for core 0, MHz\n"
"...\n"
"$cpucl7 - CPU clock for core 7, MHz"
"$cpucl9 - CPU clock for core 9, MHz\n"
"...\n"
"$cpuclN - CPU clock for core N, MHz"
msgstr ""
"$cpucl - average CPU clock, MHz\n"
"$cpucl0 - CPU clock for core 0, MHz\n"
"...\n"
"$cpucl7 - CPU clock for core 7, MHz"
"$cpucl9 - CPU clock for core 9, MHz\n"
"...\n"
"$cpuclN - CPU clock for core N, MHz"
#. i18n: file: ui/configwindow.ui:315
#. i18n: file: ui/configwindow.ui:334
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_temp)
#: rc.cpp:48
#: rc.cpp:52
msgid "Temperature"
msgstr "Temperature"
#. i18n: file: ui/configwindow.ui:325
#. i18n: file: ui/configwindow.ui:344
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_temp)
#: rc.cpp:51
#: rc.cpp:55
msgid "$tempN - physical temperature on device N (from 0). Example: $temp0"
msgstr "$tempN - physical temperature on device N (from 0). Example: $temp0"
#. i18n: file: ui/configwindow.ui:373
#. i18n: file: ui/configwindow.ui:392
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_gpu)
#: rc.cpp:54
#: rc.cpp:58
msgid "GPU"
msgstr "GPU"
#. i18n: file: ui/configwindow.ui:383
#. i18n: file: ui/configwindow.ui:402
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_gpu)
#: rc.cpp:58
#: rc.cpp:62
#, no-c-format
msgid "$gpu - gpu usage, %"
msgstr "$gpu - gpu usage, %"
#. i18n: file: ui/configwindow.ui:431
#. i18n: file: ui/configwindow.ui:450
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_gpuTemp)
#: rc.cpp:61
#: rc.cpp:65
msgid "GPU Temp"
msgstr "GPU Temp"
#. i18n: file: ui/configwindow.ui:441
#. i18n: file: ui/configwindow.ui:460
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_gpuTemp)
#: rc.cpp:64
#: rc.cpp:68
msgid "$gputemp - physical temperature on GPU"
msgstr "$gputemp - physical temperature on GPU"
#. i18n: file: ui/configwindow.ui:489
#. i18n: file: ui/configwindow.ui:508
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_mem)
#: rc.cpp:67
#: rc.cpp:71
msgid "Memory"
msgstr "Memory"
#. i18n: file: ui/configwindow.ui:503
#. i18n: file: ui/configwindow.ui:523
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_mem)
#: rc.cpp:71
#: rc.cpp:75
#, no-c-format
msgid ""
"$mem - RAM usage, %\n"
"$memmb - RAM usage, MB"
"$memmb - RAM usage, MB\n"
"$memgb - RAM usage, GB"
msgstr ""
"$mem - RAM usage, %\n"
"$memmb - RAM usage, MB"
"$memmb - RAM usage, MB\n"
"$memgb - RAM usage, GB"
#. i18n: file: ui/configwindow.ui:551
#. i18n: file: ui/configwindow.ui:571
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_swap)
#: rc.cpp:75
#: rc.cpp:80
msgid "Swap"
msgstr "Swap"
#. i18n: file: ui/configwindow.ui:565
#. i18n: file: ui/configwindow.ui:586
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_swap)
#: rc.cpp:79
#: rc.cpp:84
#, no-c-format
msgid ""
"$swap - swap usage, %\n"
"$swapmb - swap usage, MB"
"$swapmb - swap usage, MB\n"
"$swapgb - swap usage, GB"
msgstr ""
"$swap - swap usage, %\n"
"$swapmb - swap usage, MB"
"$swapmb - swap usage, MB\n"
"$swapgb - swap usage, GB"
#. i18n: file: ui/configwindow.ui:613
#. i18n: file: ui/configwindow.ui:634
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_hdd)
#: rc.cpp:83
#. i18n: file: ui/configwindow.ui:2404
#. i18n: ectx: property (text), widget (QLabel, label_hdddev)
#: rc.cpp:89 rc.cpp:332
msgid "HDD"
msgstr "HDD"
#. i18n: file: ui/configwindow.ui:623
#. i18n: file: ui/configwindow.ui:646
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_hdd)
#: rc.cpp:87
#: rc.cpp:93
#, no-c-format
msgid "$hddN - usage for mount point N (from 0), %. Example: $hdd0"
msgstr "$hddN - usage for mount point N (from 0), %. Example: $hdd0"
msgid ""
"$hddN - usage for mount point N (from 0), %. Example: $hdd0\n"
"$hddmbN - usage for mount point N (from 0), MB. Example: $hddmb0\n"
"$hddgbN - usage for mount point N (from 0), GB. Example: $hddgb0"
msgstr ""
"$hddN - usage for mount point N (from 0), %. Example: $hdd0\n"
"$hddmbN - usage for mount point N (from 0), MB. Example: $hddmb0\n"
"$hddgbN - usage for mount point N (from 0), GB. Example: $hddgb0"
#. i18n: file: ui/configwindow.ui:671
#. i18n: file: ui/configwindow.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_hddTemp)
#: rc.cpp:90
#: rc.cpp:98
msgid "HDD Temp"
msgstr "HDD Temp"
#. i18n: file: ui/configwindow.ui:681
#. i18n: file: ui/configwindow.ui:704
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_hddTemp)
#: rc.cpp:93
#: rc.cpp:101
msgid ""
"$hddtempN - physical temperature on device N (from 0). Example: $hddtemp0"
msgstr ""
"$hddtempN - physical temperature on device N (from 0). Example: $hddtemp0"
#. i18n: file: ui/configwindow.ui:729
#. i18n: file: ui/configwindow.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_net)
#: rc.cpp:96
#: rc.cpp:104
msgid "Network"
msgstr "Network"
#. i18n: file: ui/configwindow.ui:744
#. i18n: file: ui/configwindow.ui:767
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_net)
#: rc.cpp:99
#: rc.cpp:107
msgid ""
"$down - download speed, KB/s\n"
"$up - upload speed, KB/s\n"
@ -235,15 +255,15 @@ msgstr ""
"$up - upload speed, KB/s\n"
"$netdev - current network device"
#. i18n: file: ui/configwindow.ui:792
#. i18n: file: ui/configwindow.ui:815
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_bat)
#: rc.cpp:104
#: rc.cpp:112
msgid "Battery"
msgstr "Battery"
#. i18n: file: ui/configwindow.ui:803
#. i18n: file: ui/configwindow.ui:826
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_bat)
#: rc.cpp:108
#: rc.cpp:116
#, no-c-format
msgid ""
"$bat - battery charge, %\n"
@ -252,17 +272,17 @@ msgstr ""
"$bat - battery charge, %\n"
"$ac - AC status"
#. i18n: file: ui/configwindow.ui:851
#. i18n: file: ui/configwindow.ui:874
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_player)
#. i18n: file: ui/configwindow.ui:1338
#. i18n: file: ui/configwindow.ui:1561
#. i18n: ectx: property (text), widget (QLabel, label_playerSelect)
#: rc.cpp:112 rc.cpp:214
#: rc.cpp:120 rc.cpp:251
msgid "Music player"
msgstr "Music player"
#. i18n: file: ui/configwindow.ui:865
#. i18n: file: ui/configwindow.ui:888
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_player)
#: rc.cpp:115
#: rc.cpp:123
msgid ""
"$album - song album\n"
"$artist - song artist\n"
@ -276,33 +296,69 @@ msgstr ""
"$time - song duration\n"
"$title - song title"
#. i18n: file: ui/configwindow.ui:913
#. i18n: file: ui/configwindow.ui:936
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_ps)
#: rc.cpp:130
msgid "Processes"
msgstr "Processes"
#. i18n: file: ui/configwindow.ui:948
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_ps)
#: rc.cpp:133
msgid ""
"$pscount - number of running processes\n"
"$pstotal - total number of running processes\n"
"$ps - list of running processes comma separated"
msgstr ""
"$pscount - number of running processes\n"
"$pstotal - total number of running processes\n"
"$ps - list of running processes comma separated"
#. i18n: file: ui/configwindow.ui:996
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_pkg)
#. i18n: file: ui/configwindow.ui:2518
#. i18n: ectx: property (text), widget (QLabel, label_pkgCommand)
#: rc.cpp:138 rc.cpp:341
msgid "Package manager"
msgstr "Package manager"
#. i18n: file: ui/configwindow.ui:1006
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_pkg)
#: rc.cpp:141
msgid ""
"$pkgcountN - number of packages which are available for updates, command N. "
"For example $pkgcount0"
msgstr ""
"$pkgcountN - number of packages which are available for updates, command N. "
"For example $pkgcount0"
#. i18n: file: ui/configwindow.ui:1054
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_custom)
#: rc.cpp:122
#: rc.cpp:144
msgid "Custom"
msgstr "Custom"
#. i18n: file: ui/configwindow.ui:923
#. i18n: file: ui/configwindow.ui:1064
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_custom)
#: rc.cpp:125
#: rc.cpp:147
msgid "$custom - get output from custom command"
msgstr "$custom - get output from custom command"
#. i18n: file: ui/configwindow.ui:977
#. i18n: file: ui/configwindow.ui:1122
#. i18n: ectx: attribute (title), widget (QWidget, advanced)
#: rc.cpp:128
#: rc.cpp:150
msgid "Advanced"
msgstr "Advanced"
#. i18n: file: ui/configwindow.ui:991
#. i18n: file: ui/configwindow.ui:1151
#. i18n: ectx: property (text), widget (QLabel, label_timeFormat)
#: rc.cpp:131
#: rc.cpp:153
msgid "Custom time format"
msgstr "Custom time format"
#. i18n: file: ui/configwindow.ui:1013
#. i18n: file: ui/configwindow.ui:1173
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_timeFormat)
#: rc.cpp:134
#: rc.cpp:156
msgid ""
"$dddd - long weekday\n"
"$ddd - short weekday\n"
@ -338,47 +394,57 @@ msgstr ""
"$ss - seconds\n"
"$s - seconds w\\o zero"
#. i18n: file: ui/configwindow.ui:1033
#. i18n: file: ui/configwindow.ui:1193
#. i18n: ectx: property (text), widget (QLabel, label_uptimeFormat)
#: rc.cpp:152
#: rc.cpp:174
msgid "Custom uptime format"
msgstr "Custom uptime format"
#. i18n: file: ui/configwindow.ui:1042
#. i18n: file: ui/configwindow.ui:1205
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_uptimeFormat)
#: rc.cpp:155
#: rc.cpp:177
msgid ""
"$ds - uptime days\n"
"$hs - uptime hours\n"
"$ms - uptime minutes"
"$dd - uptime days\n"
"$d - uptime days without zero\n"
"$hh - uptime hours\n"
"$h - uptime hours without zero\n"
"$mm - uptime minutes\n"
"$m - uptime minutes without zero"
msgstr ""
"$ds - uptime days\n"
"$hs - uptime hours\n"
"$ms - uptime minutes"
"$dd - uptime days\n"
"$d - uptime days without zero\n"
"$hh - uptime hours\n"
"$h - uptime hours without zero\n"
"$mm - uptime minutes\n"
"$m - uptime minutes without zero"
#. i18n: file: ui/configwindow.ui:1064
#. i18n: file: ui/configwindow.ui:1227
#. i18n: ectx: property (text), widget (QLabel, label_tempDevice)
#: rc.cpp:160
#: rc.cpp:185
msgid "Temperature devices"
msgstr "Temperature devices"
#. i18n: file: ui/configwindow.ui:1090
#. i18n: file: ui/configwindow.ui:1253
#. i18n: ectx: property (text), widget (QPushButton, pushButton_tempDevice)
#. i18n: file: ui/configwindow.ui:1145
#. i18n: file: ui/configwindow.ui:1308
#. i18n: ectx: property (text), widget (QPushButton, pushButton_mount)
#. i18n: file: ui/configwindow.ui:1200
#. i18n: file: ui/configwindow.ui:1363
#. i18n: ectx: property (text), widget (QPushButton, pushButton_hddDevice)
#: rc.cpp:163 rc.cpp:173 rc.cpp:183
#. i18n: file: ui/configwindow.ui:2604
#. i18n: ectx: property (text), widget (QPushButton, pushButton_pkgCommand)
#: rc.cpp:188 rc.cpp:198 rc.cpp:208 rc.cpp:365
msgid "Add"
msgstr "Add"
#. i18n: file: ui/configwindow.ui:1100
#. i18n: file: ui/configwindow.ui:1263
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_tempDevice)
#. i18n: file: ui/configwindow.ui:1155
#. i18n: file: ui/configwindow.ui:1318
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_mount)
#. i18n: file: ui/configwindow.ui:1210
#. i18n: file: ui/configwindow.ui:1373
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_hddDevice)
#: rc.cpp:166 rc.cpp:176 rc.cpp:186
#. i18n: file: ui/configwindow.ui:2614
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_pkgCommand)
#: rc.cpp:191 rc.cpp:201 rc.cpp:211 rc.cpp:368
msgid ""
"Editable\n"
"del - remove item"
@ -386,109 +452,117 @@ msgstr ""
"Editable\n"
"del - remove item"
#. i18n: file: ui/configwindow.ui:1119
#. i18n: file: ui/configwindow.ui:1282
#. i18n: ectx: property (text), widget (QLabel, label_mount)
#: rc.cpp:170
#: rc.cpp:195
msgid "Mount points"
msgstr "Mount points"
#. i18n: file: ui/configwindow.ui:1174
#. i18n: file: ui/configwindow.ui:1337
#. i18n: ectx: property (text), widget (QLabel, label_hddDevice)
#: rc.cpp:180
#: rc.cpp:205
msgid "HDD devices"
msgstr "HDD devices"
#. i18n: file: ui/configwindow.ui:1227
#. i18n: file: ui/configwindow.ui:1390
#. i18n: ectx: property (text), widget (QLabel, label_netdir)
#: rc.cpp:190
#: rc.cpp:215
msgid "Network directory"
msgstr "Network directory"
#. i18n: file: ui/configwindow.ui:1234
#. i18n: file: ui/configwindow.ui:1397
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_netdir)
#: rc.cpp:193
#: rc.cpp:218
msgid "\"/sys/class/net\" by default"
msgstr "\"/sys/class/net\" by default"
#. i18n: file: ui/configwindow.ui:1254
#. i18n: file: ui/configwindow.ui:1417
#. i18n: ectx: property (toolTip), widget (QCheckBox, checkBox_netdev)
#: rc.cpp:196
#: rc.cpp:221
msgid "Disable auto select device and set specified device"
msgstr "Disable auto select device and set specified device"
#. i18n: file: ui/configwindow.ui:1257
#. i18n: file: ui/configwindow.ui:1420
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_netdev)
#: rc.cpp:199
#: rc.cpp:224
msgid "Set network device"
msgstr "Set network device"
#. i18n: file: ui/configwindow.ui:1290
#. i18n: file: ui/configwindow.ui:1453
#. i18n: ectx: property (text), widget (QLabel, label_batdev)
#: rc.cpp:202
#: rc.cpp:227
msgid "Battery device"
msgstr "Battery device"
#. i18n: file: ui/configwindow.ui:1297
#. i18n: file: ui/configwindow.ui:1460
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_batdev)
#: rc.cpp:205
#: rc.cpp:230
msgid "\"/sys/class/power_supply/BAT0/capacity\" by default"
msgstr "\"/sys/class/power_supply/BAT0/capacity\" by default"
#. i18n: file: ui/configwindow.ui:1314
#. i18n: file: ui/configwindow.ui:1477
#. i18n: ectx: property (text), widget (QLabel, label_acOnline)
#: rc.cpp:233
msgid "AC online tag"
msgstr "AC online tag"
#. i18n: file: ui/configwindow.ui:1484
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_acOnline)
#: rc.cpp:236
msgid "Line, which returns when AC is online"
msgstr "Line, which returns when AC is online"
#. i18n: file: ui/configwindow.ui:1507
#. i18n: ectx: property (text), widget (QLabel, label_acOffline)
#: rc.cpp:239
msgid "AC offline tag"
msgstr "AC offline tag"
#. i18n: file: ui/configwindow.ui:1514
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_acOffline)
#: rc.cpp:242
msgid "Line, which returns when AC is offline"
msgstr "Line, which returns when AC is offline"
#. i18n: file: ui/configwindow.ui:1537
#. i18n: ectx: property (text), widget (QLabel, label_acdev)
#: rc.cpp:208
#: rc.cpp:245
msgid "AC device"
msgstr "AC device"
#. i18n: file: ui/configwindow.ui:1321
#. i18n: file: ui/configwindow.ui:1544
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_acdev)
#: rc.cpp:211
#: rc.cpp:248
msgid "\"/sys/class/power_supply/AC/online\" by default"
msgstr "\"/sys/class/power_supply/AC/online\" by default"
#. i18n: file: ui/configwindow.ui:1358
#. i18n: file: ui/configwindow.ui:1581
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_playerSelect)
#: rc.cpp:217
#: rc.cpp:254
msgid "amarok"
msgstr "amarok"
#. i18n: file: ui/configwindow.ui:1363
#. i18n: file: ui/configwindow.ui:1586
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_playerSelect)
#: rc.cpp:220
#: rc.cpp:257
msgid "mpd"
msgstr "mpd"
#. i18n: file: ui/configwindow.ui:1368
#. i18n: file: ui/configwindow.ui:1591
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_playerSelect)
#: rc.cpp:223
#: rc.cpp:260
msgid "qmmp"
msgstr "qmmp"
#. i18n: file: ui/configwindow.ui:1386
#. i18n: ectx: property (text), widget (QLabel, label_customCommand)
#: rc.cpp:226
msgid "Custom command"
msgstr "Custom command"
#. i18n: file: ui/configwindow.ui:1394
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_customCommand)
#: rc.cpp:229
msgid ""
"Command to run, example:\n"
"wget -qO- http://ifconfig.me/ip - get external IP"
msgstr ""
"Command to run, example:\n"
"wget -qO- http://ifconfig.me/ip - get external IP"
#. i18n: file: ui/configwindow.ui:1417
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: rc.cpp:233
#. i18n: file: ui/configwindow.ui:1619
#. i18n: ectx: attribute (title), widget (QWidget, tooltip)
#: rc.cpp:263
msgid "Tooltip"
msgstr "Tooltip"
#. i18n: file: ui/configwindow.ui:1423
#. i18n: file: ui/configwindow.ui:1625
#. i18n: ectx: property (text), widget (QLabel, label_tooltip)
#: rc.cpp:236
#: rc.cpp:266
msgid ""
"CPU, CPU clock, memory, swap and network labels support graphical tooltip. "
"To enable them just make needed checkbox fully checked."
@ -496,100 +570,215 @@ msgstr ""
"CPU, CPU clock, memory, swap and network labels support graphical tooltip. "
"To enable them just make needed checkbox fully checked."
#. i18n: file: ui/configwindow.ui:1444
#. i18n: file: ui/configwindow.ui:1661
#. i18n: ectx: property (text), widget (QLabel, label_tooltipNum)
#: rc.cpp:239
#: rc.cpp:269
msgid "Number of values for tooltips"
msgstr "Number of values for tooltips"
#. i18n: file: ui/configwindow.ui:1499
#. i18n: ectx: property (text), widget (QLabel, label_cpuColor)
#: rc.cpp:242
msgid "CPU color"
msgstr "CPU color"
#. i18n: file: ui/configwindow.ui:1539
#. i18n: file: ui/configwindow.ui:1716
#. i18n: ectx: property (text), widget (QLabel, label_cpuclockColor)
#: rc.cpp:245
#: rc.cpp:272
msgid "CPU clock color"
msgstr "CPU clock color"
#. i18n: file: ui/configwindow.ui:1579
#. i18n: ectx: property (text), widget (QLabel, label_memColor)
#: rc.cpp:248
msgid "Memory color"
msgstr "Memory color"
#. i18n: file: ui/configwindow.ui:1619
#. i18n: file: ui/configwindow.ui:1756
#. i18n: ectx: property (text), widget (QLabel, label_swapColor)
#: rc.cpp:251
#: rc.cpp:275
msgid "Swap color"
msgstr "Swap color"
#. i18n: file: ui/configwindow.ui:1659
#. i18n: file: ui/configwindow.ui:1796
#. i18n: ectx: property (text), widget (QLabel, label_cpuColor)
#: rc.cpp:278
msgid "CPU color"
msgstr "CPU color"
#. i18n: file: ui/configwindow.ui:1836
#. i18n: ectx: property (text), widget (QLabel, label_downColor)
#: rc.cpp:254
#: rc.cpp:281
msgid "Download speed color"
msgstr "Download speed color"
#. i18n: file: ui/configwindow.ui:1699
#. i18n: file: ui/configwindow.ui:1876
#. i18n: ectx: property (text), widget (QLabel, label_memColor)
#: rc.cpp:284
msgid "Memory color"
msgstr "Memory color"
#. i18n: file: ui/configwindow.ui:1916
#. i18n: ectx: property (text), widget (QLabel, label_upColor)
#: rc.cpp:257
#: rc.cpp:287
msgid "Upload speed color"
msgstr "Upload speed color"
#. i18n: file: ui/configwindow.ui:1745
#. i18n: file: ui/configwindow.ui:1966
#. i18n: ectx: attribute (title), widget (QWidget, appearance)
#: rc.cpp:260
#: rc.cpp:290
msgid "Appearance"
msgstr "Appearance"
#. i18n: file: ui/configwindow.ui:1759
#. i18n: file: ui/configwindow.ui:1995
#. i18n: ectx: property (text), widget (QLabel, label_interval)
#: rc.cpp:263
#: rc.cpp:293
msgid "Time interval"
msgstr "Time interval"
#. i18n: file: ui/configwindow.ui:1814
#. i18n: file: ui/configwindow.ui:2050
#. i18n: ectx: property (text), widget (QLabel, label_font)
#: rc.cpp:266
#: rc.cpp:296
msgid "Font"
msgstr "Font"
#. i18n: file: ui/configwindow.ui:1854
#. i18n: file: ui/configwindow.ui:2090
#. i18n: ectx: property (text), widget (QLabel, label_fontSize)
#: rc.cpp:269
#: rc.cpp:299
msgid "Font size"
msgstr "Font size"
#. i18n: file: ui/configwindow.ui:1909
#. i18n: file: ui/configwindow.ui:2145
#. i18n: ectx: property (text), widget (QLabel, label_color)
#: rc.cpp:272
#: rc.cpp:302
msgid "Font color"
msgstr "Font color"
#. i18n: file: ui/configwindow.ui:1949
#. i18n: file: ui/configwindow.ui:2185
#. i18n: ectx: property (text), widget (QLabel, label_style)
#: rc.cpp:275
#: rc.cpp:305
msgid "Font style"
msgstr "Font style"
#. i18n: file: ui/configwindow.ui:1999
#. i18n: file: ui/configwindow.ui:2235
#. i18n: ectx: property (text), widget (QLabel, label_weight)
#: rc.cpp:278
#: rc.cpp:308
msgid "Font weight"
msgstr "Font weight"
#: rc.cpp:279
#. i18n: file: ui/configwindow.ui:2300
#. i18n: ectx: attribute (title), widget (QWidget, dataengine)
#: rc.cpp:311
msgid "DataEngine"
msgstr "DataEngine"
#. i18n: file: ui/configwindow.ui:2329
#. i18n: ectx: property (text), widget (QLabel, label_customCommand)
#: rc.cpp:314
msgid "Custom command"
msgstr "Custom command"
#. i18n: file: ui/configwindow.ui:2336
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_customCommand)
#: rc.cpp:317
msgid "Custom command to run"
msgstr "Custom command to run"
#. i18n: file: ui/configwindow.ui:2356
#. i18n: ectx: property (text), widget (QLabel, label_gpudev)
#: rc.cpp:320
msgid "GPU device"
msgstr "GPU device"
#. i18n: file: ui/configwindow.ui:2376
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_gpudev)
#: rc.cpp:323
msgid "auto"
msgstr "auto"
#. i18n: file: ui/configwindow.ui:2381
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_gpudev)
#: rc.cpp:326
msgid "nvidia"
msgstr "nvidia"
#. i18n: file: ui/configwindow.ui:2386
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_gpudev)
#: rc.cpp:329
msgid "ati"
msgstr "ati"
#. i18n: file: ui/configwindow.ui:2437
#. i18n: ectx: property (text), widget (QLabel, label_mpdaddress)
#: rc.cpp:335
msgid "MPD address"
msgstr "MPD address"
#. i18n: file: ui/configwindow.ui:2461
#. i18n: ectx: property (text), widget (QLabel, label_mpdport)
#: rc.cpp:338
msgid "MPD port"
msgstr "MPD port"
#. i18n: file: ui/configwindow.ui:2535
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:344
msgid "pacman -Qu"
msgstr "pacman -Qu"
#. i18n: file: ui/configwindow.ui:2540
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:347
msgid "apt-show-versions -u -b"
msgstr "apt-show-versions -u -b"
#. i18n: file: ui/configwindow.ui:2545
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:350
msgid "aptitude search '~U'"
msgstr "aptitude search '~U'"
#. i18n: file: ui/configwindow.ui:2550
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:353
msgid "yum list updates"
msgstr "yum list updates"
#. i18n: file: ui/configwindow.ui:2555
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:356
msgid "pkg_version -I -l '<'"
msgstr "pkg_version -I -l '<'"
#. i18n: file: ui/configwindow.ui:2560
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:359
msgid "urpmq --auto-select"
msgstr "urpmq --auto-select"
#. i18n: file: ui/configwindow.ui:2578
#. i18n: ectx: property (text), widget (QLabel, label_pkgCommandNum)
#: rc.cpp:362
msgid "Number of null lines"
msgstr "Number of null lines"
#: rc.cpp:370
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Evgeniy Alekseev"
#: rc.cpp:280
#: rc.cpp:371
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "esalexeev@gmail.com"
#~ msgid "$hddN - usage for mount point N (from 0), %. Example: $hdd0"
#~ msgstr "$hddN - usage for mount point N (from 0), %. Example: $hdd0"
#~ msgid ""
#~ "$ds - uptime days\n"
#~ "$hs - uptime hours\n"
#~ "$ms - uptime minutes"
#~ msgstr ""
#~ "$ds - uptime days\n"
#~ "$hs - uptime hours\n"
#~ "$ms - uptime minutes"
#~ msgid ""
#~ "Command to run, example:\n"
#~ "wget -qO- http://ifconfig.me/ip - get external IP"
#~ msgstr ""
#~ "Command to run, example:\n"
#~ "wget -qO- http://ifconfig.me/ip - get external IP"
#~ msgid "@@/;@@ - mount point usage, %"
#~ msgstr "@@/;@@ - mount point usage, %"

807
sources/ptm/po/fr.po Normal file
View File

@ -0,0 +1,807 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Evgeniy Alekseev <esalexeev@gmail.com>, 2014.
# Mermouy <mermouy@gmail.com>, 2014.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://kde-look.org/content/show.php?content=157124\n"
"POT-Creation-Date: 2014-04-09 12:35+0400\n"
"PO-Revision-Date: 2014-04-09 12:33+0400\n"
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Lokalize 1.5\n"
#. i18n: file: ui/configwindow.ui:32
#. i18n: ectx: property (windowTitle), widget (QWidget, ConfigWindow)
#: rc.cpp:3
msgid "Form"
msgstr "Entrées"
#. i18n: file: ui/configwindow.ui:42
#. i18n: ectx: attribute (title), widget (QWidget, settings)
#: rc.cpp:6
msgid "Widget settings"
msgstr "Paramètres de l'applet"
#. i18n: file: ui/configwindow.ui:48
#. i18n: ectx: property (text), widget (QLabel, label)
#: rc.cpp:9
msgid ""
"Detailed information may be found on <a href=\"http://arcanis.name/projects/"
"pytextmonitor/\">project homepage</a>"
msgstr ""
"D'avantage d'informations se trouvent sur <a href=\"http://arcanis.name/"
"projects/pytextmonitor/\">la page du projet</a>"
#. i18n: file: ui/configwindow.ui:84
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_time)
#: rc.cpp:12
msgid "Time"
msgstr "Durée"
#. i18n: file: ui/configwindow.ui:98
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_time)
#: rc.cpp:15
msgid ""
"$time - time in default format\n"
"$isotime - time in ISO format\n"
"$shorttime - time in short format\n"
"$longtime - time in log format\n"
"$custom - custom time format"
msgstr ""
"$time - l'heure au format par défaut\n"
"$isotime - l'heure au format ISO\n"
"$shorttime - l'heure format court\n"
"$longtime - l'heure au format log\n"
"$custom - l'heure, format personnalisé"
#. i18n: file: ui/configwindow.ui:143
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_uptime)
#: rc.cpp:22
msgid "Uptime"
msgstr "temps de fonctionnement"
#. i18n: file: ui/configwindow.ui:154
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_uptime)
#: rc.cpp:25
msgid ""
"$uptime - system uptime\n"
"$custom - custom format"
msgstr ""
"$uptime - temps de fonctionnement\n"
"$custom - format personnalisé"
#. i18n: file: ui/configwindow.ui:202
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_cpu)
#: rc.cpp:29
msgid "CPU"
msgstr "CPU"
#. i18n: file: ui/configwindow.ui:220
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_cpu)
#: rc.cpp:33
#, no-c-format
msgid ""
"$cpu - total load CPU, %\n"
"$cpu0 - load CPU for core 0, %\n"
"...\n"
"$cpu9 - load CPU for core 9, %\n"
"...\n"
"$cpuN - load CPU for core N, %"
msgstr ""
"$cpu - charge totale du processeur, %\n"
"$cpu0 - charge du processeur pour le coeur 0, %\n"
"...\n"
"$cpu9 - charge processeur pour le coeur 9, %\n"
"...\n"
"$cpuN - charge processeur pour le coeur N, %"
#. i18n: file: ui/configwindow.ui:268
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_cpuclock)
#: rc.cpp:41
msgid "CPU Clock"
msgstr "Horloge processeur"
#. i18n: file: ui/configwindow.ui:286
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_cpuclock)
#: rc.cpp:44
msgid ""
"$cpucl - average CPU clock, MHz\n"
"$cpucl0 - CPU clock for core 0, MHz\n"
"...\n"
"$cpucl9 - CPU clock for core 9, MHz\n"
"...\n"
"$cpuclN - CPU clock for core N, MHz"
msgstr ""
"$cpucl - Moyenne de l'horloge du processeur, MHz\n"
"$cpucl0 - Horloge du coeur 0, MHz\n"
"...\n"
"$cpucl9 - Horloge du coeur 9, MHz\n"
"...\n"
"$cpuclN - Horloge du coeur N, MHz"
#. i18n: file: ui/configwindow.ui:334
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_temp)
#: rc.cpp:52
msgid "Temperature"
msgstr "Température"
#. i18n: file: ui/configwindow.ui:344
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_temp)
#: rc.cpp:55
msgid "$tempN - physical temperature on device N (from 0). Example: $temp0"
msgstr ""
"$tempN - Température physique du périphérique N (à partir de 0). Exemple: "
"$temp0"
#. i18n: file: ui/configwindow.ui:392
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_gpu)
#: rc.cpp:58
msgid "GPU"
msgstr "Processeur graphique"
#. i18n: file: ui/configwindow.ui:402
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_gpu)
#: rc.cpp:62
#, no-c-format
msgid "$gpu - gpu usage, %"
msgstr "$gpu - utilisation du processeur graphique, %"
#. i18n: file: ui/configwindow.ui:450
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_gpuTemp)
#: rc.cpp:65
msgid "GPU Temp"
msgstr "Temp du processeur graphique"
#. i18n: file: ui/configwindow.ui:460
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_gpuTemp)
#: rc.cpp:68
msgid "$gputemp - physical temperature on GPU"
msgstr "$gputemp - Température physique du processeur graphique"
#. i18n: file: ui/configwindow.ui:508
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_mem)
#: rc.cpp:71
msgid "Memory"
msgstr "Mémoire"
#. i18n: file: ui/configwindow.ui:523
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_mem)
#: rc.cpp:75
#, no-c-format
msgid ""
"$mem - RAM usage, %\n"
"$memmb - RAM usage, MB\n"
"$memgb - RAM usage, GB"
msgstr ""
"$mem - utilisation de la RAM, %\n"
"$memmb - utilisation de la RAM, MB\n"
"$memgb - utilisation de la RAM, GB"
#. i18n: file: ui/configwindow.ui:571
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_swap)
#: rc.cpp:80
msgid "Swap"
msgstr "mémoire d'échange (swap)"
#. i18n: file: ui/configwindow.ui:586
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_swap)
#: rc.cpp:84
#, no-c-format
msgid ""
"$swap - swap usage, %\n"
"$swapmb - swap usage, MB\n"
"$swapgb - swap usage, GB"
msgstr ""
"$swap - utilisation swap, %\n"
"$swapmb - utilisation swap, MB\n"
"$swapgb - utilisation swap, GB"
#. i18n: file: ui/configwindow.ui:634
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_hdd)
#. i18n: file: ui/configwindow.ui:2404
#. i18n: ectx: property (text), widget (QLabel, label_hdddev)
#: rc.cpp:89 rc.cpp:332
msgid "HDD"
msgstr "Disque dur"
#. i18n: file: ui/configwindow.ui:646
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_hdd)
#: rc.cpp:93
#, no-c-format
msgid ""
"$hddN - usage for mount point N (from 0), %. Example: $hdd0\n"
"$hddmbN - usage for mount point N (from 0), MB. Example: $hddmb0\n"
"$hddgbN - usage for mount point N (from 0), GB. Example: $hddgb0"
msgstr ""
"$hddN - espace occupé sur le point de montage N (à partir de 0), %. Exemple: "
"$hdd0\n"
"$hddmbN - espace occupé sur le point de montage N (à partir de 0), MB. "
"Exemple: $hddmb0\n"
"$hddgbN - espace occupé sur le point de montage N (à partir de 0), GB. "
"Exemple: $hddgb0"
#. i18n: file: ui/configwindow.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_hddTemp)
#: rc.cpp:98
msgid "HDD Temp"
msgstr "Température disque dur"
#. i18n: file: ui/configwindow.ui:704
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_hddTemp)
#: rc.cpp:101
msgid ""
"$hddtempN - physical temperature on device N (from 0). Example: $hddtemp0"
msgstr ""
"$hddtempN - température physique du périphérique N (à partir de 0). Exemple: "
"$hddtemp0"
#. i18n: file: ui/configwindow.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_net)
#: rc.cpp:104
msgid "Network"
msgstr "Réseau"
#. i18n: file: ui/configwindow.ui:767
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_net)
#: rc.cpp:107
msgid ""
"$down - download speed, KB/s\n"
"$up - upload speed, KB/s\n"
"$netdev - current network device"
msgstr ""
"$down - vitesse de téléchargement, KB/s\n"
"$up - vitesse ascendante, KB/s\n"
"$netdev - périphérique réseau actuel"
#. i18n: file: ui/configwindow.ui:815
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_bat)
#: rc.cpp:112
msgid "Battery"
msgstr "Batterie"
#. i18n: file: ui/configwindow.ui:826
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_bat)
#: rc.cpp:116
#, no-c-format
msgid ""
"$bat - battery charge, %\n"
"$ac - AC status"
msgstr ""
"$bat - charge de la batterie, %\n"
"$ac - état de l'alimentation"
#. i18n: file: ui/configwindow.ui:874
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_player)
#. i18n: file: ui/configwindow.ui:1561
#. i18n: ectx: property (text), widget (QLabel, label_playerSelect)
#: rc.cpp:120 rc.cpp:251
msgid "Music player"
msgstr "Lecteur audio"
#. i18n: file: ui/configwindow.ui:888
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_player)
#: rc.cpp:123
msgid ""
"$album - song album\n"
"$artist - song artist\n"
"$progress - song progress\n"
"$time - song duration\n"
"$title - song title"
msgstr ""
"$album - album du morceau\n"
"$artist - artiste du morceau\n"
"$progress - avancement du morceau\n"
"$time - durée du morceau\n"
"$title - titre du morceau"
#. i18n: file: ui/configwindow.ui:936
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_ps)
#: rc.cpp:130
msgid "Processes"
msgstr "Processus"
#. i18n: file: ui/configwindow.ui:948
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_ps)
#: rc.cpp:133
msgid ""
"$pscount - number of running processes\n"
"$pstotal - total number of running processes\n"
"$ps - list of running processes comma separated"
msgstr ""
"$pscount - nombre de processus en cours d'exécution\n"
" $pstotal - nombre total de processus\n"
" $ps - liste des processus en cours d'exécution séparés par des virgules"
#. i18n: file: ui/configwindow.ui:996
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_pkg)
#. i18n: file: ui/configwindow.ui:2518
#. i18n: ectx: property (text), widget (QLabel, label_pkgCommand)
#: rc.cpp:138 rc.cpp:341
msgid "Package manager"
msgstr "Gestionnaire de paquets"
#. i18n: file: ui/configwindow.ui:1006
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_pkg)
#: rc.cpp:141
msgid ""
"$pkgcountN - number of packages which are available for updates, command N. "
"For example $pkgcount0"
msgstr ""
"$pkgcountN - nombre de paquets qui sont disponibles pour les mises à jour, "
"commande N. Exemple: $pkgcount0"
#. i18n: file: ui/configwindow.ui:1054
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_custom)
#: rc.cpp:144
msgid "Custom"
msgstr "Personnalisé"
#. i18n: file: ui/configwindow.ui:1064
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_custom)
#: rc.cpp:147
msgid "$custom - get output from custom command"
msgstr "$custom - sortie d'une commande personnelle"
#. i18n: file: ui/configwindow.ui:1122
#. i18n: ectx: attribute (title), widget (QWidget, advanced)
#: rc.cpp:150
msgid "Advanced"
msgstr "Avancé"
#. i18n: file: ui/configwindow.ui:1151
#. i18n: ectx: property (text), widget (QLabel, label_timeFormat)
#: rc.cpp:153
msgid "Custom time format"
msgstr "Format de l'heure personnalisé"
#. i18n: file: ui/configwindow.ui:1173
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_timeFormat)
#: rc.cpp:156
msgid ""
"$dddd - long weekday\n"
"$ddd - short weekday\n"
"$dd - day\n"
"$d - day w\\o zero\n"
"$MMMM - long month\n"
"$MMM - short month\n"
"$MM - month\n"
"$M - month w\\o zero\n"
"$yyyy - year\n"
"$yy - short year\n"
"$hh - hours (24 only)\n"
"$h - hours w\\o zero (24 only)\n"
"$mm - minutes\n"
"$m - minutes w\\o zero\n"
"$ss - seconds\n"
"$s - seconds w\\o zero"
msgstr ""
"$dddd - Jour de la semaine long\n"
"$ddd - Jour de la semaine court\n"
"$dd - jour\n"
"$d - jour sans zéro\n"
"$MMMM - mois long\n"
"$MMM - mois court\n"
"$MM - mois\n"
"$M - mois sans zéro\n"
"$yyyy - année\n"
"$yy - année courte\n"
"$hh - heures (24 uniquement)\n"
"$h - heures sans zéro (24 uniquement)\n"
"$mm - minutes\n"
"$m - minutes sans zéro\n"
"$ss - secondes\n"
"$s - secondes sans zéro"
#. i18n: file: ui/configwindow.ui:1193
#. i18n: ectx: property (text), widget (QLabel, label_uptimeFormat)
#: rc.cpp:174
msgid "Custom uptime format"
msgstr "Temps de fonctionnement personalisé"
#. i18n: file: ui/configwindow.ui:1205
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_uptimeFormat)
#: rc.cpp:177
msgid ""
"$dd - uptime days\n"
"$d - uptime days without zero\n"
"$hh - uptime hours\n"
"$h - uptime hours without zero\n"
"$mm - uptime minutes\n"
"$m - uptime minutes without zero"
msgstr ""
"$dd - temps de fonctionnement en jours\n"
"$d - temps de fonctionnement en jours sans zéro\n"
"$hh - temps de fonctionnement en heures\n"
"$h - temps de fonctionnement en heures sans zéro\n"
"$mm - temps de fonctionnement en minutes\n"
"$m - temps de fonctionnement en minutes sans zéro"
#. i18n: file: ui/configwindow.ui:1227
#. i18n: ectx: property (text), widget (QLabel, label_tempDevice)
#: rc.cpp:185
msgid "Temperature devices"
msgstr "Temperature des périphériques"
#. i18n: file: ui/configwindow.ui:1253
#. i18n: ectx: property (text), widget (QPushButton, pushButton_tempDevice)
#. i18n: file: ui/configwindow.ui:1308
#. i18n: ectx: property (text), widget (QPushButton, pushButton_mount)
#. i18n: file: ui/configwindow.ui:1363
#. i18n: ectx: property (text), widget (QPushButton, pushButton_hddDevice)
#. i18n: file: ui/configwindow.ui:2604
#. i18n: ectx: property (text), widget (QPushButton, pushButton_pkgCommand)
#: rc.cpp:188 rc.cpp:198 rc.cpp:208 rc.cpp:365
msgid "Add"
msgstr "Ajouter"
#. i18n: file: ui/configwindow.ui:1263
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_tempDevice)
#. i18n: file: ui/configwindow.ui:1318
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_mount)
#. i18n: file: ui/configwindow.ui:1373
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_hddDevice)
#. i18n: file: ui/configwindow.ui:2614
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_pkgCommand)
#: rc.cpp:191 rc.cpp:201 rc.cpp:211 rc.cpp:368
msgid ""
"Editable\n"
"del - remove item"
msgstr ""
"Modifiable\n"
"del - supprimer un élément"
#. i18n: file: ui/configwindow.ui:1282
#. i18n: ectx: property (text), widget (QLabel, label_mount)
#: rc.cpp:195
msgid "Mount points"
msgstr "Points de montage"
#. i18n: file: ui/configwindow.ui:1337
#. i18n: ectx: property (text), widget (QLabel, label_hddDevice)
#: rc.cpp:205
msgid "HDD devices"
msgstr "Périphériques HDD"
#. i18n: file: ui/configwindow.ui:1390
#. i18n: ectx: property (text), widget (QLabel, label_netdir)
#: rc.cpp:215
msgid "Network directory"
msgstr "Voisinage réseau"
#. i18n: file: ui/configwindow.ui:1397
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_netdir)
#: rc.cpp:218
msgid "\"/sys/class/net\" by default"
msgstr "\"/sys/class/net\" par défaut"
#. i18n: file: ui/configwindow.ui:1417
#. i18n: ectx: property (toolTip), widget (QCheckBox, checkBox_netdev)
#: rc.cpp:221
msgid "Disable auto select device and set specified device"
msgstr ""
"Désactiver la sélection automatique de périphériques et le sélectionner "
"manuellement"
#. i18n: file: ui/configwindow.ui:1420
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_netdev)
#: rc.cpp:224
msgid "Set network device"
msgstr "Sélectionner le périphérique réseau"
#. i18n: file: ui/configwindow.ui:1453
#. i18n: ectx: property (text), widget (QLabel, label_batdev)
#: rc.cpp:227
msgid "Battery device"
msgstr "Batterie"
#. i18n: file: ui/configwindow.ui:1460
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_batdev)
#: rc.cpp:230
msgid "\"/sys/class/power_supply/BAT0/capacity\" by default"
msgstr "\"/sys/class/power_supply/BAT0/capacity\" par défaut"
#. i18n: file: ui/configwindow.ui:1477
#. i18n: ectx: property (text), widget (QLabel, label_acOnline)
#: rc.cpp:233
msgid "AC online tag"
msgstr "AC online tag"
#. i18n: file: ui/configwindow.ui:1484
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_acOnline)
#: rc.cpp:236
msgid "Line, which returns when AC is online"
msgstr "Ligne, qui retourne lorsque le AC est online"
#. i18n: file: ui/configwindow.ui:1507
#. i18n: ectx: property (text), widget (QLabel, label_acOffline)
#: rc.cpp:239
msgid "AC offline tag"
msgstr "AC déconnecté tag"
#. i18n: file: ui/configwindow.ui:1514
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_acOffline)
#: rc.cpp:242
msgid "Line, which returns when AC is offline"
msgstr "Ligne, qui retourne lorsque le AC est offline"
#. i18n: file: ui/configwindow.ui:1537
#. i18n: ectx: property (text), widget (QLabel, label_acdev)
#: rc.cpp:245
msgid "AC device"
msgstr "Périphérique d'alimentation"
#. i18n: file: ui/configwindow.ui:1544
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_acdev)
#: rc.cpp:248
msgid "\"/sys/class/power_supply/AC/online\" by default"
msgstr "\"/sys/class/power_supply/AC/online\" par défaut"
#. i18n: file: ui/configwindow.ui:1581
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_playerSelect)
#: rc.cpp:254
msgid "amarok"
msgstr "amarok"
#. i18n: file: ui/configwindow.ui:1586
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_playerSelect)
#: rc.cpp:257
msgid "mpd"
msgstr "mpd"
#. i18n: file: ui/configwindow.ui:1591
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_playerSelect)
#: rc.cpp:260
msgid "qmmp"
msgstr "qmmp"
#. i18n: file: ui/configwindow.ui:1619
#. i18n: ectx: attribute (title), widget (QWidget, tooltip)
#: rc.cpp:263
msgid "Tooltip"
msgstr "Conseil"
#. i18n: file: ui/configwindow.ui:1625
#. i18n: ectx: property (text), widget (QLabel, label_tooltip)
#: rc.cpp:266
msgid ""
"CPU, CPU clock, memory, swap and network labels support graphical tooltip. "
"To enable them just make needed checkbox fully checked."
msgstr ""
"CPU, horloge du CPU, mémoire vive, mémoire swap et noms réseau supportent "
"les conseils visuels. Pour les activer cochez simplement les cases "
"correspondantes."
#. i18n: file: ui/configwindow.ui:1661
#. i18n: ectx: property (text), widget (QLabel, label_tooltipNum)
#: rc.cpp:269
msgid "Number of values for tooltips"
msgstr "Nombre d'éléments pour les conseils"
#. i18n: file: ui/configwindow.ui:1716
#. i18n: ectx: property (text), widget (QLabel, label_cpuclockColor)
#: rc.cpp:272
msgid "CPU clock color"
msgstr "Couleur de l'horloge processeur"
#. i18n: file: ui/configwindow.ui:1756
#. i18n: ectx: property (text), widget (QLabel, label_swapColor)
#: rc.cpp:275
msgid "Swap color"
msgstr "Couleur de la mémoire d'échange"
#. i18n: file: ui/configwindow.ui:1796
#. i18n: ectx: property (text), widget (QLabel, label_cpuColor)
#: rc.cpp:278
msgid "CPU color"
msgstr "Couleur processeur"
#. i18n: file: ui/configwindow.ui:1836
#. i18n: ectx: property (text), widget (QLabel, label_downColor)
#: rc.cpp:281
msgid "Download speed color"
msgstr "Couleur de la vitesse de téléchargement"
#. i18n: file: ui/configwindow.ui:1876
#. i18n: ectx: property (text), widget (QLabel, label_memColor)
#: rc.cpp:284
msgid "Memory color"
msgstr "Couleur de la mémoire"
#. i18n: file: ui/configwindow.ui:1916
#. i18n: ectx: property (text), widget (QLabel, label_upColor)
#: rc.cpp:287
msgid "Upload speed color"
msgstr "Couleur du téléversement"
#. i18n: file: ui/configwindow.ui:1966
#. i18n: ectx: attribute (title), widget (QWidget, appearance)
#: rc.cpp:290
msgid "Appearance"
msgstr "Apparence"
#. i18n: file: ui/configwindow.ui:1995
#. i18n: ectx: property (text), widget (QLabel, label_interval)
#: rc.cpp:293
msgid "Time interval"
msgstr "Intervalle"
#. i18n: file: ui/configwindow.ui:2050
#. i18n: ectx: property (text), widget (QLabel, label_font)
#: rc.cpp:296
msgid "Font"
msgstr "Police"
#. i18n: file: ui/configwindow.ui:2090
#. i18n: ectx: property (text), widget (QLabel, label_fontSize)
#: rc.cpp:299
msgid "Font size"
msgstr "Taille de la police"
#. i18n: file: ui/configwindow.ui:2145
#. i18n: ectx: property (text), widget (QLabel, label_color)
#: rc.cpp:302
msgid "Font color"
msgstr "Couleur de la police"
#. i18n: file: ui/configwindow.ui:2185
#. i18n: ectx: property (text), widget (QLabel, label_style)
#: rc.cpp:305
msgid "Font style"
msgstr "Style de la police"
#. i18n: file: ui/configwindow.ui:2235
#. i18n: ectx: property (text), widget (QLabel, label_weight)
#: rc.cpp:308
msgid "Font weight"
msgstr "Épaisseur de la police"
#. i18n: file: ui/configwindow.ui:2300
#. i18n: ectx: attribute (title), widget (QWidget, dataengine)
#: rc.cpp:311
msgid "DataEngine"
msgstr "Moteur de données"
#. i18n: file: ui/configwindow.ui:2329
#. i18n: ectx: property (text), widget (QLabel, label_customCommand)
#: rc.cpp:314
msgid "Custom command"
msgstr "Commande personnalisée"
#. i18n: file: ui/configwindow.ui:2336
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_customCommand)
#: rc.cpp:317
msgid "Custom command to run"
msgstr "Commande personnalisée à exécuter"
#. i18n: file: ui/configwindow.ui:2356
#. i18n: ectx: property (text), widget (QLabel, label_gpudev)
#: rc.cpp:320
msgid "GPU device"
msgstr "Périphérique graphique"
#. i18n: file: ui/configwindow.ui:2376
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_gpudev)
#: rc.cpp:323
msgid "auto"
msgstr "auto"
#. i18n: file: ui/configwindow.ui:2381
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_gpudev)
#: rc.cpp:326
msgid "nvidia"
msgstr "nvidia"
#. i18n: file: ui/configwindow.ui:2386
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_gpudev)
#: rc.cpp:329
msgid "ati"
msgstr "ati"
#. i18n: file: ui/configwindow.ui:2437
#. i18n: ectx: property (text), widget (QLabel, label_mpdaddress)
#: rc.cpp:335
msgid "MPD address"
msgstr "Adresse MPD"
#. i18n: file: ui/configwindow.ui:2461
#. i18n: ectx: property (text), widget (QLabel, label_mpdport)
#: rc.cpp:338
msgid "MPD port"
msgstr "Port MPD"
#. i18n: file: ui/configwindow.ui:2535
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:344
msgid "pacman -Qu"
msgstr "pacman -Qu"
#. i18n: file: ui/configwindow.ui:2540
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:347
msgid "apt-show-versions -u -b"
msgstr "apt-show-versions -u -b"
#. i18n: file: ui/configwindow.ui:2545
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:350
msgid "aptitude search '~U'"
msgstr "aptitude search '~U'"
#. i18n: file: ui/configwindow.ui:2550
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:353
msgid "yum list updates"
msgstr "yum list updates"
#. i18n: file: ui/configwindow.ui:2555
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:356
msgid "pkg_version -I -l '<'"
msgstr "pkg_version -I -l '<'"
#. i18n: file: ui/configwindow.ui:2560
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:359
msgid "urpmq --auto-select"
msgstr "urpmq --auto-select"
#. i18n: file: ui/configwindow.ui:2578
#. i18n: ectx: property (text), widget (QLabel, label_pkgCommandNum)
#: rc.cpp:362
msgid "Number of null lines"
msgstr "Nombre de lignes nulles"
#: rc.cpp:370
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Evgeniy Alekseev"
#: rc.cpp:371
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "esalexeev@gmail.com"
#~ msgid "$hddN - usage for mount point N (from 0), %. Example: $hdd0"
#~ msgstr ""
#~ "$hddN - espace occupé sur le point de montage N (à partir de 0), %. "
#~ "Exemple: $hdd0"
#~ msgid ""
#~ "$ds - uptime days\n"
#~ "$hs - uptime hours\n"
#~ "$ms - uptime minutes"
#~ msgstr ""
#~ "$ds - uptime days\n"
#~ "$hs - uptime hours\n"
#~ "$ms - uptime minutes"
#~ msgid ""
#~ "Command to run, example:\n"
#~ "wget -qO- http://ifconfig.me/ip - get external IP"
#~ msgstr ""
#~ "Command to run, example:\n"
#~ "wget -qO- http://ifconfig.me/ip - get external IP"
#~ msgid "@@/;@@ - mount point usage, %"
#~ msgstr "@@/;@@ - mount point usage, %"
#~ msgid "@@/dev/sda@@ - physical temperature on /dev/sda"
#~ msgstr "@@/dev/sda@@ - physical temperature on /dev/sda"
#~ msgid ""
#~ "$net - network speed, down/up, KB/s\n"
#~ "$netdev - current network device\n"
#~ "@@eth0@@ - disable auto select device and set specified device"
#~ msgstr ""
#~ "$net - network speed, down/up, KB/s\n"
#~ "$netdev - current network device\n"
#~ "@@eth0@@ - disable auto select device and set specified device"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: http://kde-look.org/content/show.php?content=157124\n"
"POT-Creation-Date: 2014-04-02 20:48+0400\n"
"POT-Creation-Date: 2014-04-09 12:35+0400\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"
@ -37,13 +37,13 @@ msgid ""
"pytextmonitor/\">project homepage</a>"
msgstr ""
#. i18n: file: ui/configwindow.ui:69
#. i18n: file: ui/configwindow.ui:84
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_time)
#: rc.cpp:12
msgid "Time"
msgstr ""
#. i18n: file: ui/configwindow.ui:83
#. i18n: file: ui/configwindow.ui:98
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_time)
#: rc.cpp:15
msgid ""
@ -54,13 +54,13 @@ msgid ""
"$custom - custom time format"
msgstr ""
#. i18n: file: ui/configwindow.ui:128
#. i18n: file: ui/configwindow.ui:143
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_uptime)
#: rc.cpp:22
msgid "Uptime"
msgstr ""
#. i18n: file: ui/configwindow.ui:139
#. i18n: file: ui/configwindow.ui:154
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_uptime)
#: rc.cpp:25
msgid ""
@ -68,13 +68,13 @@ msgid ""
"$custom - custom format"
msgstr ""
#. i18n: file: ui/configwindow.ui:187
#. i18n: file: ui/configwindow.ui:202
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_cpu)
#: rc.cpp:29
msgid "CPU"
msgstr ""
#. i18n: file: ui/configwindow.ui:203
#. i18n: file: ui/configwindow.ui:220
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_cpu)
#: rc.cpp:33
#, no-c-format
@ -82,159 +82,170 @@ msgid ""
"$cpu - total load CPU, %\n"
"$cpu0 - load CPU for core 0, %\n"
"...\n"
"$cpu7 - load CPU for core 7, %"
"$cpu9 - load CPU for core 9, %\n"
"...\n"
"$cpuN - load CPU for core N, %"
msgstr ""
#. i18n: file: ui/configwindow.ui:251
#. i18n: file: ui/configwindow.ui:268
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_cpuclock)
#: rc.cpp:39
#: rc.cpp:41
msgid "CPU Clock"
msgstr ""
#. i18n: file: ui/configwindow.ui:267
#. i18n: file: ui/configwindow.ui:286
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_cpuclock)
#: rc.cpp:42
#: rc.cpp:44
msgid ""
"$cpucl - average CPU clock, MHz\n"
"$cpucl0 - CPU clock for core 0, MHz\n"
"...\n"
"$cpucl7 - CPU clock for core 7, MHz"
"$cpucl9 - CPU clock for core 9, MHz\n"
"...\n"
"$cpuclN - CPU clock for core N, MHz"
msgstr ""
#. i18n: file: ui/configwindow.ui:315
#. i18n: file: ui/configwindow.ui:334
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_temp)
#: rc.cpp:48
#: rc.cpp:52
msgid "Temperature"
msgstr ""
#. i18n: file: ui/configwindow.ui:325
#. i18n: file: ui/configwindow.ui:344
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_temp)
#: rc.cpp:51
#: rc.cpp:55
msgid "$tempN - physical temperature on device N (from 0). Example: $temp0"
msgstr ""
#. i18n: file: ui/configwindow.ui:373
#. i18n: file: ui/configwindow.ui:392
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_gpu)
#: rc.cpp:54
#: rc.cpp:58
msgid "GPU"
msgstr ""
#. i18n: file: ui/configwindow.ui:383
#. i18n: file: ui/configwindow.ui:402
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_gpu)
#: rc.cpp:58
#: rc.cpp:62
#, no-c-format
msgid "$gpu - gpu usage, %"
msgstr ""
#. i18n: file: ui/configwindow.ui:431
#. i18n: file: ui/configwindow.ui:450
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_gpuTemp)
#: rc.cpp:61
#: rc.cpp:65
msgid "GPU Temp"
msgstr ""
#. i18n: file: ui/configwindow.ui:441
#. i18n: file: ui/configwindow.ui:460
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_gpuTemp)
#: rc.cpp:64
#: rc.cpp:68
msgid "$gputemp - physical temperature on GPU"
msgstr ""
#. i18n: file: ui/configwindow.ui:489
#. i18n: file: ui/configwindow.ui:508
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_mem)
#: rc.cpp:67
#: rc.cpp:71
msgid "Memory"
msgstr ""
#. i18n: file: ui/configwindow.ui:503
#. i18n: file: ui/configwindow.ui:523
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_mem)
#: rc.cpp:71
#: rc.cpp:75
#, no-c-format
msgid ""
"$mem - RAM usage, %\n"
"$memmb - RAM usage, MB"
"$memmb - RAM usage, MB\n"
"$memgb - RAM usage, GB"
msgstr ""
#. i18n: file: ui/configwindow.ui:551
#. i18n: file: ui/configwindow.ui:571
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_swap)
#: rc.cpp:75
#: rc.cpp:80
msgid "Swap"
msgstr ""
#. i18n: file: ui/configwindow.ui:565
#. i18n: file: ui/configwindow.ui:586
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_swap)
#: rc.cpp:79
#: rc.cpp:84
#, no-c-format
msgid ""
"$swap - swap usage, %\n"
"$swapmb - swap usage, MB"
"$swapmb - swap usage, MB\n"
"$swapgb - swap usage, GB"
msgstr ""
#. i18n: file: ui/configwindow.ui:613
#. i18n: file: ui/configwindow.ui:634
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_hdd)
#: rc.cpp:83
#. i18n: file: ui/configwindow.ui:2404
#. i18n: ectx: property (text), widget (QLabel, label_hdddev)
#: rc.cpp:89 rc.cpp:332
msgid "HDD"
msgstr ""
#. i18n: file: ui/configwindow.ui:623
#. i18n: file: ui/configwindow.ui:646
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_hdd)
#: rc.cpp:87
#: rc.cpp:93
#, no-c-format
msgid "$hddN - usage for mount point N (from 0), %. Example: $hdd0"
msgid ""
"$hddN - usage for mount point N (from 0), %. Example: $hdd0\n"
"$hddmbN - usage for mount point N (from 0), MB. Example: $hddmb0\n"
"$hddgbN - usage for mount point N (from 0), GB. Example: $hddgb0"
msgstr ""
#. i18n: file: ui/configwindow.ui:671
#. i18n: file: ui/configwindow.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_hddTemp)
#: rc.cpp:90
#: rc.cpp:98
msgid "HDD Temp"
msgstr ""
#. i18n: file: ui/configwindow.ui:681
#. i18n: file: ui/configwindow.ui:704
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_hddTemp)
#: rc.cpp:93
#: rc.cpp:101
msgid ""
"$hddtempN - physical temperature on device N (from 0). Example: $hddtemp0"
msgstr ""
#. i18n: file: ui/configwindow.ui:729
#. i18n: file: ui/configwindow.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_net)
#: rc.cpp:96
#: rc.cpp:104
msgid "Network"
msgstr ""
#. i18n: file: ui/configwindow.ui:744
#. i18n: file: ui/configwindow.ui:767
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_net)
#: rc.cpp:99
#: rc.cpp:107
msgid ""
"$down - download speed, KB/s\n"
"$up - upload speed, KB/s\n"
"$netdev - current network device"
msgstr ""
#. i18n: file: ui/configwindow.ui:792
#. i18n: file: ui/configwindow.ui:815
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_bat)
#: rc.cpp:104
#: rc.cpp:112
msgid "Battery"
msgstr ""
#. i18n: file: ui/configwindow.ui:803
#. i18n: file: ui/configwindow.ui:826
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_bat)
#: rc.cpp:108
#: rc.cpp:116
#, no-c-format
msgid ""
"$bat - battery charge, %\n"
"$ac - AC status"
msgstr ""
#. i18n: file: ui/configwindow.ui:851
#. i18n: file: ui/configwindow.ui:874
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_player)
#. i18n: file: ui/configwindow.ui:1338
#. i18n: file: ui/configwindow.ui:1561
#. i18n: ectx: property (text), widget (QLabel, label_playerSelect)
#: rc.cpp:112 rc.cpp:214
#: rc.cpp:120 rc.cpp:251
msgid "Music player"
msgstr ""
#. i18n: file: ui/configwindow.ui:865
#. i18n: file: ui/configwindow.ui:888
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_player)
#: rc.cpp:115
#: rc.cpp:123
msgid ""
"$album - song album\n"
"$artist - song artist\n"
@ -243,33 +254,64 @@ msgid ""
"$title - song title"
msgstr ""
#. i18n: file: ui/configwindow.ui:913
#. i18n: file: ui/configwindow.ui:936
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_ps)
#: rc.cpp:130
msgid "Processes"
msgstr ""
#. i18n: file: ui/configwindow.ui:948
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_ps)
#: rc.cpp:133
msgid ""
"$pscount - number of running processes\n"
"$pstotal - total number of running processes\n"
"$ps - list of running processes comma separated"
msgstr ""
#. i18n: file: ui/configwindow.ui:996
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_pkg)
#. i18n: file: ui/configwindow.ui:2518
#. i18n: ectx: property (text), widget (QLabel, label_pkgCommand)
#: rc.cpp:138 rc.cpp:341
msgid "Package manager"
msgstr ""
#. i18n: file: ui/configwindow.ui:1006
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_pkg)
#: rc.cpp:141
msgid ""
"$pkgcountN - number of packages which are available for updates, command N. "
"For example $pkgcount0"
msgstr ""
#. i18n: file: ui/configwindow.ui:1054
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_custom)
#: rc.cpp:122
#: rc.cpp:144
msgid "Custom"
msgstr ""
#. i18n: file: ui/configwindow.ui:923
#. i18n: file: ui/configwindow.ui:1064
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_custom)
#: rc.cpp:125
#: rc.cpp:147
msgid "$custom - get output from custom command"
msgstr ""
#. i18n: file: ui/configwindow.ui:977
#. i18n: file: ui/configwindow.ui:1122
#. i18n: ectx: attribute (title), widget (QWidget, advanced)
#: rc.cpp:128
#: rc.cpp:150
msgid "Advanced"
msgstr ""
#. i18n: file: ui/configwindow.ui:991
#. i18n: file: ui/configwindow.ui:1151
#. i18n: ectx: property (text), widget (QLabel, label_timeFormat)
#: rc.cpp:131
#: rc.cpp:153
msgid "Custom time format"
msgstr ""
#. i18n: file: ui/configwindow.ui:1013
#. i18n: file: ui/configwindow.ui:1173
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_timeFormat)
#: rc.cpp:134
#: rc.cpp:156
msgid ""
"$dddd - long weekday\n"
"$ddd - short weekday\n"
@ -289,245 +331,358 @@ msgid ""
"$s - seconds w\\o zero"
msgstr ""
#. i18n: file: ui/configwindow.ui:1033
#. i18n: file: ui/configwindow.ui:1193
#. i18n: ectx: property (text), widget (QLabel, label_uptimeFormat)
#: rc.cpp:152
#: rc.cpp:174
msgid "Custom uptime format"
msgstr ""
#. i18n: file: ui/configwindow.ui:1042
#. i18n: file: ui/configwindow.ui:1205
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_uptimeFormat)
#: rc.cpp:155
#: rc.cpp:177
msgid ""
"$ds - uptime days\n"
"$hs - uptime hours\n"
"$ms - uptime minutes"
"$dd - uptime days\n"
"$d - uptime days without zero\n"
"$hh - uptime hours\n"
"$h - uptime hours without zero\n"
"$mm - uptime minutes\n"
"$m - uptime minutes without zero"
msgstr ""
#. i18n: file: ui/configwindow.ui:1064
#. i18n: file: ui/configwindow.ui:1227
#. i18n: ectx: property (text), widget (QLabel, label_tempDevice)
#: rc.cpp:160
#: rc.cpp:185
msgid "Temperature devices"
msgstr ""
#. i18n: file: ui/configwindow.ui:1090
#. i18n: file: ui/configwindow.ui:1253
#. i18n: ectx: property (text), widget (QPushButton, pushButton_tempDevice)
#. i18n: file: ui/configwindow.ui:1145
#. i18n: file: ui/configwindow.ui:1308
#. i18n: ectx: property (text), widget (QPushButton, pushButton_mount)
#. i18n: file: ui/configwindow.ui:1200
#. i18n: file: ui/configwindow.ui:1363
#. i18n: ectx: property (text), widget (QPushButton, pushButton_hddDevice)
#: rc.cpp:163 rc.cpp:173 rc.cpp:183
#. i18n: file: ui/configwindow.ui:2604
#. i18n: ectx: property (text), widget (QPushButton, pushButton_pkgCommand)
#: rc.cpp:188 rc.cpp:198 rc.cpp:208 rc.cpp:365
msgid "Add"
msgstr ""
#. i18n: file: ui/configwindow.ui:1100
#. i18n: file: ui/configwindow.ui:1263
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_tempDevice)
#. i18n: file: ui/configwindow.ui:1155
#. i18n: file: ui/configwindow.ui:1318
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_mount)
#. i18n: file: ui/configwindow.ui:1210
#. i18n: file: ui/configwindow.ui:1373
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_hddDevice)
#: rc.cpp:166 rc.cpp:176 rc.cpp:186
#. i18n: file: ui/configwindow.ui:2614
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_pkgCommand)
#: rc.cpp:191 rc.cpp:201 rc.cpp:211 rc.cpp:368
msgid ""
"Editable\n"
"del - remove item"
msgstr ""
#. i18n: file: ui/configwindow.ui:1119
#. i18n: file: ui/configwindow.ui:1282
#. i18n: ectx: property (text), widget (QLabel, label_mount)
#: rc.cpp:170
#: rc.cpp:195
msgid "Mount points"
msgstr ""
#. i18n: file: ui/configwindow.ui:1174
#. i18n: file: ui/configwindow.ui:1337
#. i18n: ectx: property (text), widget (QLabel, label_hddDevice)
#: rc.cpp:180
#: rc.cpp:205
msgid "HDD devices"
msgstr ""
#. i18n: file: ui/configwindow.ui:1227
#. i18n: file: ui/configwindow.ui:1390
#. i18n: ectx: property (text), widget (QLabel, label_netdir)
#: rc.cpp:190
#: rc.cpp:215
msgid "Network directory"
msgstr ""
#. i18n: file: ui/configwindow.ui:1234
#. i18n: file: ui/configwindow.ui:1397
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_netdir)
#: rc.cpp:193
#: rc.cpp:218
msgid "\"/sys/class/net\" by default"
msgstr ""
#. i18n: file: ui/configwindow.ui:1254
#. i18n: file: ui/configwindow.ui:1417
#. i18n: ectx: property (toolTip), widget (QCheckBox, checkBox_netdev)
#: rc.cpp:196
#: rc.cpp:221
msgid "Disable auto select device and set specified device"
msgstr ""
#. i18n: file: ui/configwindow.ui:1257
#. i18n: file: ui/configwindow.ui:1420
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_netdev)
#: rc.cpp:199
#: rc.cpp:224
msgid "Set network device"
msgstr ""
#. i18n: file: ui/configwindow.ui:1290
#. i18n: file: ui/configwindow.ui:1453
#. i18n: ectx: property (text), widget (QLabel, label_batdev)
#: rc.cpp:202
#: rc.cpp:227
msgid "Battery device"
msgstr ""
#. i18n: file: ui/configwindow.ui:1297
#. i18n: file: ui/configwindow.ui:1460
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_batdev)
#: rc.cpp:205
#: rc.cpp:230
msgid "\"/sys/class/power_supply/BAT0/capacity\" by default"
msgstr ""
#. i18n: file: ui/configwindow.ui:1314
#. i18n: file: ui/configwindow.ui:1477
#. i18n: ectx: property (text), widget (QLabel, label_acOnline)
#: rc.cpp:233
msgid "AC online tag"
msgstr ""
#. i18n: file: ui/configwindow.ui:1484
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_acOnline)
#: rc.cpp:236
msgid "Line, which returns when AC is online"
msgstr ""
#. i18n: file: ui/configwindow.ui:1507
#. i18n: ectx: property (text), widget (QLabel, label_acOffline)
#: rc.cpp:239
msgid "AC offline tag"
msgstr ""
#. i18n: file: ui/configwindow.ui:1514
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_acOffline)
#: rc.cpp:242
msgid "Line, which returns when AC is offline"
msgstr ""
#. i18n: file: ui/configwindow.ui:1537
#. i18n: ectx: property (text), widget (QLabel, label_acdev)
#: rc.cpp:208
#: rc.cpp:245
msgid "AC device"
msgstr ""
#. i18n: file: ui/configwindow.ui:1321
#. i18n: file: ui/configwindow.ui:1544
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_acdev)
#: rc.cpp:211
#: rc.cpp:248
msgid "\"/sys/class/power_supply/AC/online\" by default"
msgstr ""
#. i18n: file: ui/configwindow.ui:1358
#. i18n: file: ui/configwindow.ui:1581
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_playerSelect)
#: rc.cpp:217
#: rc.cpp:254
msgid "amarok"
msgstr ""
#. i18n: file: ui/configwindow.ui:1363
#. i18n: file: ui/configwindow.ui:1586
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_playerSelect)
#: rc.cpp:220
#: rc.cpp:257
msgid "mpd"
msgstr ""
#. i18n: file: ui/configwindow.ui:1368
#. i18n: file: ui/configwindow.ui:1591
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_playerSelect)
#: rc.cpp:223
#: rc.cpp:260
msgid "qmmp"
msgstr ""
#. i18n: file: ui/configwindow.ui:1386
#. i18n: ectx: property (text), widget (QLabel, label_customCommand)
#: rc.cpp:226
msgid "Custom command"
msgstr ""
#. i18n: file: ui/configwindow.ui:1394
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_customCommand)
#: rc.cpp:229
msgid ""
"Command to run, example:\n"
"wget -qO- http://ifconfig.me/ip - get external IP"
msgstr ""
#. i18n: file: ui/configwindow.ui:1417
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: rc.cpp:233
#. i18n: file: ui/configwindow.ui:1619
#. i18n: ectx: attribute (title), widget (QWidget, tooltip)
#: rc.cpp:263
msgid "Tooltip"
msgstr ""
#. i18n: file: ui/configwindow.ui:1423
#. i18n: file: ui/configwindow.ui:1625
#. i18n: ectx: property (text), widget (QLabel, label_tooltip)
#: rc.cpp:236
#: rc.cpp:266
msgid ""
"CPU, CPU clock, memory, swap and network labels support graphical tooltip. "
"To enable them just make needed checkbox fully checked."
msgstr ""
#. i18n: file: ui/configwindow.ui:1444
#. i18n: file: ui/configwindow.ui:1661
#. i18n: ectx: property (text), widget (QLabel, label_tooltipNum)
#: rc.cpp:239
#: rc.cpp:269
msgid "Number of values for tooltips"
msgstr ""
#. i18n: file: ui/configwindow.ui:1499
#. i18n: ectx: property (text), widget (QLabel, label_cpuColor)
#: rc.cpp:242
msgid "CPU color"
msgstr ""
#. i18n: file: ui/configwindow.ui:1539
#. i18n: file: ui/configwindow.ui:1716
#. i18n: ectx: property (text), widget (QLabel, label_cpuclockColor)
#: rc.cpp:245
#: rc.cpp:272
msgid "CPU clock color"
msgstr ""
#. i18n: file: ui/configwindow.ui:1579
#. i18n: ectx: property (text), widget (QLabel, label_memColor)
#: rc.cpp:248
msgid "Memory color"
msgstr ""
#. i18n: file: ui/configwindow.ui:1619
#. i18n: file: ui/configwindow.ui:1756
#. i18n: ectx: property (text), widget (QLabel, label_swapColor)
#: rc.cpp:251
#: rc.cpp:275
msgid "Swap color"
msgstr ""
#. i18n: file: ui/configwindow.ui:1659
#. i18n: file: ui/configwindow.ui:1796
#. i18n: ectx: property (text), widget (QLabel, label_cpuColor)
#: rc.cpp:278
msgid "CPU color"
msgstr ""
#. i18n: file: ui/configwindow.ui:1836
#. i18n: ectx: property (text), widget (QLabel, label_downColor)
#: rc.cpp:254
#: rc.cpp:281
msgid "Download speed color"
msgstr ""
#. i18n: file: ui/configwindow.ui:1699
#. i18n: file: ui/configwindow.ui:1876
#. i18n: ectx: property (text), widget (QLabel, label_memColor)
#: rc.cpp:284
msgid "Memory color"
msgstr ""
#. i18n: file: ui/configwindow.ui:1916
#. i18n: ectx: property (text), widget (QLabel, label_upColor)
#: rc.cpp:257
#: rc.cpp:287
msgid "Upload speed color"
msgstr ""
#. i18n: file: ui/configwindow.ui:1745
#. i18n: file: ui/configwindow.ui:1966
#. i18n: ectx: attribute (title), widget (QWidget, appearance)
#: rc.cpp:260
#: rc.cpp:290
msgid "Appearance"
msgstr ""
#. i18n: file: ui/configwindow.ui:1759
#. i18n: file: ui/configwindow.ui:1995
#. i18n: ectx: property (text), widget (QLabel, label_interval)
#: rc.cpp:263
#: rc.cpp:293
msgid "Time interval"
msgstr ""
#. i18n: file: ui/configwindow.ui:1814
#. i18n: file: ui/configwindow.ui:2050
#. i18n: ectx: property (text), widget (QLabel, label_font)
#: rc.cpp:266
#: rc.cpp:296
msgid "Font"
msgstr ""
#. i18n: file: ui/configwindow.ui:1854
#. i18n: file: ui/configwindow.ui:2090
#. i18n: ectx: property (text), widget (QLabel, label_fontSize)
#: rc.cpp:269
#: rc.cpp:299
msgid "Font size"
msgstr ""
#. i18n: file: ui/configwindow.ui:1909
#. i18n: file: ui/configwindow.ui:2145
#. i18n: ectx: property (text), widget (QLabel, label_color)
#: rc.cpp:272
#: rc.cpp:302
msgid "Font color"
msgstr ""
#. i18n: file: ui/configwindow.ui:1949
#. i18n: file: ui/configwindow.ui:2185
#. i18n: ectx: property (text), widget (QLabel, label_style)
#: rc.cpp:275
#: rc.cpp:305
msgid "Font style"
msgstr ""
#. i18n: file: ui/configwindow.ui:1999
#. i18n: file: ui/configwindow.ui:2235
#. i18n: ectx: property (text), widget (QLabel, label_weight)
#: rc.cpp:278
#: rc.cpp:308
msgid "Font weight"
msgstr ""
#: rc.cpp:279
#. i18n: file: ui/configwindow.ui:2300
#. i18n: ectx: attribute (title), widget (QWidget, dataengine)
#: rc.cpp:311
msgid "DataEngine"
msgstr ""
#. i18n: file: ui/configwindow.ui:2329
#. i18n: ectx: property (text), widget (QLabel, label_customCommand)
#: rc.cpp:314
msgid "Custom command"
msgstr ""
#. i18n: file: ui/configwindow.ui:2336
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_customCommand)
#: rc.cpp:317
msgid "Custom command to run"
msgstr ""
#. i18n: file: ui/configwindow.ui:2356
#. i18n: ectx: property (text), widget (QLabel, label_gpudev)
#: rc.cpp:320
msgid "GPU device"
msgstr ""
#. i18n: file: ui/configwindow.ui:2376
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_gpudev)
#: rc.cpp:323
msgid "auto"
msgstr ""
#. i18n: file: ui/configwindow.ui:2381
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_gpudev)
#: rc.cpp:326
msgid "nvidia"
msgstr ""
#. i18n: file: ui/configwindow.ui:2386
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_gpudev)
#: rc.cpp:329
msgid "ati"
msgstr ""
#. i18n: file: ui/configwindow.ui:2437
#. i18n: ectx: property (text), widget (QLabel, label_mpdaddress)
#: rc.cpp:335
msgid "MPD address"
msgstr ""
#. i18n: file: ui/configwindow.ui:2461
#. i18n: ectx: property (text), widget (QLabel, label_mpdport)
#: rc.cpp:338
msgid "MPD port"
msgstr ""
#. i18n: file: ui/configwindow.ui:2535
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:344
msgid "pacman -Qu"
msgstr ""
#. i18n: file: ui/configwindow.ui:2540
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:347
msgid "apt-show-versions -u -b"
msgstr ""
#. i18n: file: ui/configwindow.ui:2545
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:350
msgid "aptitude search '~U'"
msgstr ""
#. i18n: file: ui/configwindow.ui:2550
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:353
msgid "yum list updates"
msgstr ""
#. i18n: file: ui/configwindow.ui:2555
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:356
msgid "pkg_version -I -l '<'"
msgstr ""
#. i18n: file: ui/configwindow.ui:2560
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:359
msgid "urpmq --auto-select"
msgstr ""
#. i18n: file: ui/configwindow.ui:2578
#. i18n: ectx: property (text), widget (QLabel, label_pkgCommandNum)
#: rc.cpp:362
msgid "Number of null lines"
msgstr ""
#: rc.cpp:370
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr ""
#: rc.cpp:280
#: rc.cpp:371
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr ""

View File

@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://kde-look.org/content/show.php?content=157124\n"
"POT-Creation-Date: 2014-04-02 20:48+0400\n"
"PO-Revision-Date: 2014-04-02 20:52+0400\n"
"POT-Creation-Date: 2014-04-09 12:35+0400\n"
"PO-Revision-Date: 2014-04-09 12:26+0400\n"
"Last-Translator: Evgeniy Alekseev <esalexeev@gmail.com>\n"
"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
"Language: ru\n"
@ -40,13 +40,13 @@ msgstr ""
"Подробная информация может быть найдена на <a href=\"http://arcanis.name/ru/"
"projects/pytextmonitor/\">домашней странице проекта</a>"
#. i18n: file: ui/configwindow.ui:69
#. i18n: file: ui/configwindow.ui:84
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_time)
#: rc.cpp:12
msgid "Time"
msgstr "Время"
#. i18n: file: ui/configwindow.ui:83
#. i18n: file: ui/configwindow.ui:98
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_time)
#: rc.cpp:15
msgid ""
@ -62,13 +62,13 @@ msgstr ""
"$longtime - время в длинном формате\n"
"$custom - свой формат времени"
#. i18n: file: ui/configwindow.ui:128
#. i18n: file: ui/configwindow.ui:143
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_uptime)
#: rc.cpp:22
msgid "Uptime"
msgstr "Время работы"
#. i18n: file: ui/configwindow.ui:139
#. i18n: file: ui/configwindow.ui:154
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_uptime)
#: rc.cpp:25
msgid ""
@ -78,13 +78,13 @@ msgstr ""
"$uptime - время работы\n"
"$custom - свой формат"
#. i18n: file: ui/configwindow.ui:187
#. i18n: file: ui/configwindow.ui:202
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_cpu)
#: rc.cpp:29
msgid "CPU"
msgstr "CPU"
#. i18n: file: ui/configwindow.ui:203
#. i18n: file: ui/configwindow.ui:220
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_cpu)
#: rc.cpp:33
#, no-c-format
@ -92,141 +92,161 @@ msgid ""
"$cpu - total load CPU, %\n"
"$cpu0 - load CPU for core 0, %\n"
"...\n"
"$cpu7 - load CPU for core 7, %"
"$cpu9 - load CPU for core 9, %\n"
"...\n"
"$cpuN - load CPU for core N, %"
msgstr ""
"$cpu - общая загрузка CPU, %\n"
"$cpu0 - загрузка CPU для ядра 0, %\n"
"...\n"
"$cpu7 - загрузка CPU для ядра 7, %"
"$cpu9 - загрузка CPU для ядра 9, %\n"
"...\n"
"$cpuN - загрузка CPU для ядра N, %"
#. i18n: file: ui/configwindow.ui:251
#. i18n: file: ui/configwindow.ui:268
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_cpuclock)
#: rc.cpp:39
#: rc.cpp:41
msgid "CPU Clock"
msgstr "Частота CPU"
#. i18n: file: ui/configwindow.ui:267
#. i18n: file: ui/configwindow.ui:286
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_cpuclock)
#: rc.cpp:42
#: rc.cpp:44
msgid ""
"$cpucl - average CPU clock, MHz\n"
"$cpucl0 - CPU clock for core 0, MHz\n"
"...\n"
"$cpucl7 - CPU clock for core 7, MHz"
"$cpucl9 - CPU clock for core 9, MHz\n"
"...\n"
"$cpuclN - CPU clock for core N, MHz"
msgstr ""
"$cpucl - средняя частота CPU, MHz\n"
"$cpucl0 - частота CPU для ядра 0, MHz\n"
"...\n"
"$cpucl7 - частота CPU для ядра 7, MHz"
"$cpucl9 - частота CPU для ядра 9, MHz\n"
"...\n"
"$cpuclN - частота CPU для ядра N, MHz"
#. i18n: file: ui/configwindow.ui:315
#. i18n: file: ui/configwindow.ui:334
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_temp)
#: rc.cpp:48
#: rc.cpp:52
msgid "Temperature"
msgstr "Температура"
#. i18n: file: ui/configwindow.ui:325
#. i18n: file: ui/configwindow.ui:344
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_temp)
#: rc.cpp:51
#: rc.cpp:55
msgid "$tempN - physical temperature on device N (from 0). Example: $temp0"
msgstr "$tempN - физическая температура на устройстве N (от 0). Пример: $temp0"
#. i18n: file: ui/configwindow.ui:373
#. i18n: file: ui/configwindow.ui:392
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_gpu)
#: rc.cpp:54
#: rc.cpp:58
msgid "GPU"
msgstr "GPU"
#. i18n: file: ui/configwindow.ui:383
#. i18n: file: ui/configwindow.ui:402
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_gpu)
#: rc.cpp:58
#: rc.cpp:62
#, no-c-format
msgid "$gpu - gpu usage, %"
msgstr "$gpu - использование GPU, %"
#. i18n: file: ui/configwindow.ui:431
#. i18n: file: ui/configwindow.ui:450
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_gpuTemp)
#: rc.cpp:61
#: rc.cpp:65
msgid "GPU Temp"
msgstr "Температура GPU"
#. i18n: file: ui/configwindow.ui:441
#. i18n: file: ui/configwindow.ui:460
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_gpuTemp)
#: rc.cpp:64
#: rc.cpp:68
msgid "$gputemp - physical temperature on GPU"
msgstr "$gputemp - физическая температура на GPU"
#. i18n: file: ui/configwindow.ui:489
#. i18n: file: ui/configwindow.ui:508
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_mem)
#: rc.cpp:67
#: rc.cpp:71
msgid "Memory"
msgstr "Память"
#. i18n: file: ui/configwindow.ui:503
#. i18n: file: ui/configwindow.ui:523
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_mem)
#: rc.cpp:71
#: rc.cpp:75
#, no-c-format
msgid ""
"$mem - RAM usage, %\n"
"$memmb - RAM usage, MB"
"$memmb - RAM usage, MB\n"
"$memgb - RAM usage, GB"
msgstr ""
"$mem - использование RAM, %\n"
"$memmb - использование RAM, MB"
"$memmb - использование RAM, MB\n"
"$memgb - использование RAM, GB"
#. i18n: file: ui/configwindow.ui:551
#. i18n: file: ui/configwindow.ui:571
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_swap)
#: rc.cpp:75
#: rc.cpp:80
msgid "Swap"
msgstr "Swap"
#. i18n: file: ui/configwindow.ui:565
#. i18n: file: ui/configwindow.ui:586
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_swap)
#: rc.cpp:79
#: rc.cpp:84
#, no-c-format
msgid ""
"$swap - swap usage, %\n"
"$swapmb - swap usage, MB"
"$swapmb - swap usage, MB\n"
"$swapgb - swap usage, GB"
msgstr ""
"$swap - использование swap, %\n"
"$swapmb - использование swap, MB"
"$swapmb - использование swap, MB\n"
"$swapgb - использование swap, GB"
#. i18n: file: ui/configwindow.ui:613
#. i18n: file: ui/configwindow.ui:634
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_hdd)
#: rc.cpp:83
#. i18n: file: ui/configwindow.ui:2404
#. i18n: ectx: property (text), widget (QLabel, label_hdddev)
#: rc.cpp:89 rc.cpp:332
msgid "HDD"
msgstr "HDD"
#. i18n: file: ui/configwindow.ui:623
#. i18n: file: ui/configwindow.ui:646
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_hdd)
#: rc.cpp:87
#: rc.cpp:93
#, no-c-format
msgid "$hddN - usage for mount point N (from 0), %. Example: $hdd0"
msgstr "$hddN - использование точки монтирования N (от 0), %. Пример: $hdd0"
msgid ""
"$hddN - usage for mount point N (from 0), %. Example: $hdd0\n"
"$hddmbN - usage for mount point N (from 0), MB. Example: $hddmb0\n"
"$hddgbN - usage for mount point N (from 0), GB. Example: $hddgb0"
msgstr ""
"$hddN - usage for mount point N (from 0), %. Example: $hdd0\n"
"$hddmbN - usage for mount point N (from 0), MB. Example: $hddmb0\n"
"$hddgbN - usage for mount point N (from 0), GB. Example: $hddgb0"
#. i18n: file: ui/configwindow.ui:671
#. i18n: file: ui/configwindow.ui:694
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_hddTemp)
#: rc.cpp:90
#: rc.cpp:98
msgid "HDD Temp"
msgstr "Температура HDD"
#. i18n: file: ui/configwindow.ui:681
#. i18n: file: ui/configwindow.ui:704
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_hddTemp)
#: rc.cpp:93
#: rc.cpp:101
msgid ""
"$hddtempN - physical temperature on device N (from 0). Example: $hddtemp0"
msgstr ""
"$hddtempN - physical temperature on device N (from 0). Example: $hddtemp0 "
"$hddtempN - температура на устройстве N (от 0). Пример: $hddtemp0"
#. i18n: file: ui/configwindow.ui:729
#. i18n: file: ui/configwindow.ui:752
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_net)
#: rc.cpp:96
#: rc.cpp:104
msgid "Network"
msgstr "Сеть"
#. i18n: file: ui/configwindow.ui:744
#. i18n: file: ui/configwindow.ui:767
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_net)
#: rc.cpp:99
#: rc.cpp:107
msgid ""
"$down - download speed, KB/s\n"
"$up - upload speed, KB/s\n"
@ -236,15 +256,15 @@ msgstr ""
"$up - скорость загрузки, KB/s\n"
"$netdev - текущее устройство"
#. i18n: file: ui/configwindow.ui:792
#. i18n: file: ui/configwindow.ui:815
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_bat)
#: rc.cpp:104
#: rc.cpp:112
msgid "Battery"
msgstr "Батарея"
#. i18n: file: ui/configwindow.ui:803
#. i18n: file: ui/configwindow.ui:826
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_bat)
#: rc.cpp:108
#: rc.cpp:116
#, no-c-format
msgid ""
"$bat - battery charge, %\n"
@ -253,17 +273,17 @@ msgstr ""
"$bat - заряд батареи, %\n"
"$ac - статус адаптора питания"
#. i18n: file: ui/configwindow.ui:851
#. i18n: file: ui/configwindow.ui:874
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_player)
#. i18n: file: ui/configwindow.ui:1338
#. i18n: file: ui/configwindow.ui:1561
#. i18n: ectx: property (text), widget (QLabel, label_playerSelect)
#: rc.cpp:112 rc.cpp:214
#: rc.cpp:120 rc.cpp:251
msgid "Music player"
msgstr "Музыкальный плеер"
#. i18n: file: ui/configwindow.ui:865
#. i18n: file: ui/configwindow.ui:888
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_player)
#: rc.cpp:115
#: rc.cpp:123
msgid ""
"$album - song album\n"
"$artist - song artist\n"
@ -277,33 +297,69 @@ msgstr ""
"$time - продолжительность\n"
"$title - название"
#. i18n: file: ui/configwindow.ui:913
#. i18n: file: ui/configwindow.ui:936
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_ps)
#: rc.cpp:130
msgid "Processes"
msgstr "Процессы"
#. i18n: file: ui/configwindow.ui:948
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_ps)
#: rc.cpp:133
msgid ""
"$pscount - number of running processes\n"
"$pstotal - total number of running processes\n"
"$ps - list of running processes comma separated"
msgstr ""
"$pscount - число запущенных процессов\n"
"$pstotal - общее число процессов\n"
"$ps - список запущенных процессов, разделенных запятыми"
#. i18n: file: ui/configwindow.ui:996
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_pkg)
#. i18n: file: ui/configwindow.ui:2518
#. i18n: ectx: property (text), widget (QLabel, label_pkgCommand)
#: rc.cpp:138 rc.cpp:341
msgid "Package manager"
msgstr "Пакетный менеджер"
#. i18n: file: ui/configwindow.ui:1006
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_pkg)
#: rc.cpp:141
msgid ""
"$pkgcountN - number of packages which are available for updates, command N. "
"For example $pkgcount0"
msgstr ""
"$pkgcountN - число пакетов, которые доступны для обновления, для команды N. "
"Например, $pkgcount0"
#. i18n: file: ui/configwindow.ui:1054
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_custom)
#: rc.cpp:122
#: rc.cpp:144
msgid "Custom"
msgstr "Своя команда"
#. i18n: file: ui/configwindow.ui:923
#. i18n: file: ui/configwindow.ui:1064
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_custom)
#: rc.cpp:125
#: rc.cpp:147
msgid "$custom - get output from custom command"
msgstr "$custom - получить информацию из своей команды"
#. i18n: file: ui/configwindow.ui:977
#. i18n: file: ui/configwindow.ui:1122
#. i18n: ectx: attribute (title), widget (QWidget, advanced)
#: rc.cpp:128
#: rc.cpp:150
msgid "Advanced"
msgstr "Расширенные"
#. i18n: file: ui/configwindow.ui:991
#. i18n: file: ui/configwindow.ui:1151
#. i18n: ectx: property (text), widget (QLabel, label_timeFormat)
#: rc.cpp:131
#: rc.cpp:153
msgid "Custom time format"
msgstr "Свой формат времени"
#. i18n: file: ui/configwindow.ui:1013
#. i18n: file: ui/configwindow.ui:1173
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_timeFormat)
#: rc.cpp:134
#: rc.cpp:156
msgid ""
"$dddd - long weekday\n"
"$ddd - short weekday\n"
@ -339,47 +395,57 @@ msgstr ""
"$ss - секунды\n"
"$s - секунды без 0"
#. i18n: file: ui/configwindow.ui:1033
#. i18n: file: ui/configwindow.ui:1193
#. i18n: ectx: property (text), widget (QLabel, label_uptimeFormat)
#: rc.cpp:152
#: rc.cpp:174
msgid "Custom uptime format"
msgstr "Свой формат аптайма"
#. i18n: file: ui/configwindow.ui:1042
#. i18n: file: ui/configwindow.ui:1205
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_uptimeFormat)
#: rc.cpp:155
#: rc.cpp:177
msgid ""
"$ds - uptime days\n"
"$hs - uptime hours\n"
"$ms - uptime minutes"
"$dd - uptime days\n"
"$d - uptime days without zero\n"
"$hh - uptime hours\n"
"$h - uptime hours without zero\n"
"$mm - uptime minutes\n"
"$m - uptime minutes without zero"
msgstr ""
"$ds - дни работы\n"
"$hs - часы\n"
"$ms - минуты"
"$dd - дни аптайма\n"
"$d - дни аптайма без нулей\n"
"$hh - часы аптайма\n"
"$h - часы аптайма без нулей\n"
"$mm - минуты аптайма\n"
"$m - минуты аптайма без нулей"
#. i18n: file: ui/configwindow.ui:1064
#. i18n: file: ui/configwindow.ui:1227
#. i18n: ectx: property (text), widget (QLabel, label_tempDevice)
#: rc.cpp:160
#: rc.cpp:185
msgid "Temperature devices"
msgstr "Температурные устройства"
#. i18n: file: ui/configwindow.ui:1090
#. i18n: file: ui/configwindow.ui:1253
#. i18n: ectx: property (text), widget (QPushButton, pushButton_tempDevice)
#. i18n: file: ui/configwindow.ui:1145
#. i18n: file: ui/configwindow.ui:1308
#. i18n: ectx: property (text), widget (QPushButton, pushButton_mount)
#. i18n: file: ui/configwindow.ui:1200
#. i18n: file: ui/configwindow.ui:1363
#. i18n: ectx: property (text), widget (QPushButton, pushButton_hddDevice)
#: rc.cpp:163 rc.cpp:173 rc.cpp:183
#. i18n: file: ui/configwindow.ui:2604
#. i18n: ectx: property (text), widget (QPushButton, pushButton_pkgCommand)
#: rc.cpp:188 rc.cpp:198 rc.cpp:208 rc.cpp:365
msgid "Add"
msgstr "Добавить"
#. i18n: file: ui/configwindow.ui:1100
#. i18n: file: ui/configwindow.ui:1263
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_tempDevice)
#. i18n: file: ui/configwindow.ui:1155
#. i18n: file: ui/configwindow.ui:1318
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_mount)
#. i18n: file: ui/configwindow.ui:1210
#. i18n: file: ui/configwindow.ui:1373
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_hddDevice)
#: rc.cpp:166 rc.cpp:176 rc.cpp:186
#. i18n: file: ui/configwindow.ui:2614
#. i18n: ectx: property (toolTip), widget (QListWidget, listWidget_pkgCommand)
#: rc.cpp:191 rc.cpp:201 rc.cpp:211 rc.cpp:368
msgid ""
"Editable\n"
"del - remove item"
@ -387,109 +453,117 @@ msgstr ""
"Редактируемо\n"
"del - удалить строку"
#. i18n: file: ui/configwindow.ui:1119
#. i18n: file: ui/configwindow.ui:1282
#. i18n: ectx: property (text), widget (QLabel, label_mount)
#: rc.cpp:170
#: rc.cpp:195
msgid "Mount points"
msgstr "Точки монтирования"
#. i18n: file: ui/configwindow.ui:1174
#. i18n: file: ui/configwindow.ui:1337
#. i18n: ectx: property (text), widget (QLabel, label_hddDevice)
#: rc.cpp:180
#: rc.cpp:205
msgid "HDD devices"
msgstr "HDD"
#. i18n: file: ui/configwindow.ui:1227
#. i18n: file: ui/configwindow.ui:1390
#. i18n: ectx: property (text), widget (QLabel, label_netdir)
#: rc.cpp:190
#: rc.cpp:215
msgid "Network directory"
msgstr "Путь к интерфейсам"
#. i18n: file: ui/configwindow.ui:1234
#. i18n: file: ui/configwindow.ui:1397
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_netdir)
#: rc.cpp:193
#: rc.cpp:218
msgid "\"/sys/class/net\" by default"
msgstr "\"/sys/class/net\" по умолчанию"
#. i18n: file: ui/configwindow.ui:1254
#. i18n: file: ui/configwindow.ui:1417
#. i18n: ectx: property (toolTip), widget (QCheckBox, checkBox_netdev)
#: rc.cpp:196
#: rc.cpp:221
msgid "Disable auto select device and set specified device"
msgstr "Отключить авто выбор устройства и использовать указанное"
#. i18n: file: ui/configwindow.ui:1257
#. i18n: file: ui/configwindow.ui:1420
#. i18n: ectx: property (text), widget (QCheckBox, checkBox_netdev)
#: rc.cpp:199
#: rc.cpp:224
msgid "Set network device"
msgstr "Выберете сетевое устройство"
#. i18n: file: ui/configwindow.ui:1290
#. i18n: file: ui/configwindow.ui:1453
#. i18n: ectx: property (text), widget (QLabel, label_batdev)
#: rc.cpp:202
#: rc.cpp:227
msgid "Battery device"
msgstr "Устройство батареи"
#. i18n: file: ui/configwindow.ui:1297
#. i18n: file: ui/configwindow.ui:1460
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_batdev)
#: rc.cpp:205
#: rc.cpp:230
msgid "\"/sys/class/power_supply/BAT0/capacity\" by default"
msgstr "\"/sys/class/power_supply/BAT0/capacity\" по умолчанию"
#. i18n: file: ui/configwindow.ui:1314
#. i18n: file: ui/configwindow.ui:1477
#. i18n: ectx: property (text), widget (QLabel, label_acOnline)
#: rc.cpp:233
msgid "AC online tag"
msgstr "AC подключен"
#. i18n: file: ui/configwindow.ui:1484
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_acOnline)
#: rc.cpp:236
msgid "Line, which returns when AC is online"
msgstr "Строка, возвращаемая при подключенном адапторе питания"
#. i18n: file: ui/configwindow.ui:1507
#. i18n: ectx: property (text), widget (QLabel, label_acOffline)
#: rc.cpp:239
msgid "AC offline tag"
msgstr "AC отключен"
#. i18n: file: ui/configwindow.ui:1514
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_acOffline)
#: rc.cpp:242
msgid "Line, which returns when AC is offline"
msgstr "Строка, возвращаемая при отключенном адапторе питания"
#. i18n: file: ui/configwindow.ui:1537
#. i18n: ectx: property (text), widget (QLabel, label_acdev)
#: rc.cpp:208
#: rc.cpp:245
msgid "AC device"
msgstr "Устройство AC"
#. i18n: file: ui/configwindow.ui:1321
#. i18n: file: ui/configwindow.ui:1544
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_acdev)
#: rc.cpp:211
#: rc.cpp:248
msgid "\"/sys/class/power_supply/AC/online\" by default"
msgstr "\"/sys/class/power_supply/AC/online\" по умолчанию"
#. i18n: file: ui/configwindow.ui:1358
#. i18n: file: ui/configwindow.ui:1581
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_playerSelect)
#: rc.cpp:217
#: rc.cpp:254
msgid "amarok"
msgstr "amarok"
#. i18n: file: ui/configwindow.ui:1363
#. i18n: file: ui/configwindow.ui:1586
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_playerSelect)
#: rc.cpp:220
#: rc.cpp:257
msgid "mpd"
msgstr "mpd"
#. i18n: file: ui/configwindow.ui:1368
#. i18n: file: ui/configwindow.ui:1591
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_playerSelect)
#: rc.cpp:223
#: rc.cpp:260
msgid "qmmp"
msgstr "qmmp"
#. i18n: file: ui/configwindow.ui:1386
#. i18n: ectx: property (text), widget (QLabel, label_customCommand)
#: rc.cpp:226
msgid "Custom command"
msgstr "Своя команда"
#. i18n: file: ui/configwindow.ui:1394
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_customCommand)
#: rc.cpp:229
msgid ""
"Command to run, example:\n"
"wget -qO- http://ifconfig.me/ip - get external IP"
msgstr ""
"Команда для запуска, например:\n"
"wget -qO- http://ifconfig.me/ip - получить внешний IP"
#. i18n: file: ui/configwindow.ui:1417
#. i18n: ectx: attribute (title), widget (QWidget, tab)
#: rc.cpp:233
#. i18n: file: ui/configwindow.ui:1619
#. i18n: ectx: attribute (title), widget (QWidget, tooltip)
#: rc.cpp:263
msgid "Tooltip"
msgstr "Тултип"
#. i18n: file: ui/configwindow.ui:1423
#. i18n: file: ui/configwindow.ui:1625
#. i18n: ectx: property (text), widget (QLabel, label_tooltip)
#: rc.cpp:236
#: rc.cpp:266
msgid ""
"CPU, CPU clock, memory, swap and network labels support graphical tooltip. "
"To enable them just make needed checkbox fully checked."
@ -497,100 +571,215 @@ msgstr ""
"Поля CPU, частота CPU, память, swap, сеть поддерживают графический тултип. "
"Чтобы включить его, просто сделайте требуемые чекбоксы полностью чекнутыми."
#. i18n: file: ui/configwindow.ui:1444
#. i18n: file: ui/configwindow.ui:1661
#. i18n: ectx: property (text), widget (QLabel, label_tooltipNum)
#: rc.cpp:239
#: rc.cpp:269
msgid "Number of values for tooltips"
msgstr "Число хранящихся значений"
#. i18n: file: ui/configwindow.ui:1499
#. i18n: ectx: property (text), widget (QLabel, label_cpuColor)
#: rc.cpp:242
msgid "CPU color"
msgstr "Цвет CPU"
#. i18n: file: ui/configwindow.ui:1539
#. i18n: file: ui/configwindow.ui:1716
#. i18n: ectx: property (text), widget (QLabel, label_cpuclockColor)
#: rc.cpp:245
#: rc.cpp:272
msgid "CPU clock color"
msgstr "Цвет частоты CPU"
#. i18n: file: ui/configwindow.ui:1579
#. i18n: ectx: property (text), widget (QLabel, label_memColor)
#: rc.cpp:248
msgid "Memory color"
msgstr "Цвет памяти"
#. i18n: file: ui/configwindow.ui:1619
#. i18n: file: ui/configwindow.ui:1756
#. i18n: ectx: property (text), widget (QLabel, label_swapColor)
#: rc.cpp:251
#: rc.cpp:275
msgid "Swap color"
msgstr "Цвет swap"
#. i18n: file: ui/configwindow.ui:1659
#. i18n: file: ui/configwindow.ui:1796
#. i18n: ectx: property (text), widget (QLabel, label_cpuColor)
#: rc.cpp:278
msgid "CPU color"
msgstr "Цвет CPU"
#. i18n: file: ui/configwindow.ui:1836
#. i18n: ectx: property (text), widget (QLabel, label_downColor)
#: rc.cpp:254
#: rc.cpp:281
msgid "Download speed color"
msgstr "Цвет скорости загрузки"
#. i18n: file: ui/configwindow.ui:1699
#. i18n: file: ui/configwindow.ui:1876
#. i18n: ectx: property (text), widget (QLabel, label_memColor)
#: rc.cpp:284
msgid "Memory color"
msgstr "Цвет памяти"
#. i18n: file: ui/configwindow.ui:1916
#. i18n: ectx: property (text), widget (QLabel, label_upColor)
#: rc.cpp:257
#: rc.cpp:287
msgid "Upload speed color"
msgstr "Цвет скорости отдачи"
#. i18n: file: ui/configwindow.ui:1745
#. i18n: file: ui/configwindow.ui:1966
#. i18n: ectx: attribute (title), widget (QWidget, appearance)
#: rc.cpp:260
#: rc.cpp:290
msgid "Appearance"
msgstr "Внешний вид"
#. i18n: file: ui/configwindow.ui:1759
#. i18n: file: ui/configwindow.ui:1995
#. i18n: ectx: property (text), widget (QLabel, label_interval)
#: rc.cpp:263
#: rc.cpp:293
msgid "Time interval"
msgstr "Интервал обновления"
#. i18n: file: ui/configwindow.ui:1814
#. i18n: file: ui/configwindow.ui:2050
#. i18n: ectx: property (text), widget (QLabel, label_font)
#: rc.cpp:266
#: rc.cpp:296
msgid "Font"
msgstr "Шрифт"
#. i18n: file: ui/configwindow.ui:1854
#. i18n: file: ui/configwindow.ui:2090
#. i18n: ectx: property (text), widget (QLabel, label_fontSize)
#: rc.cpp:269
#: rc.cpp:299
msgid "Font size"
msgstr "Размер шрифта"
#. i18n: file: ui/configwindow.ui:1909
#. i18n: file: ui/configwindow.ui:2145
#. i18n: ectx: property (text), widget (QLabel, label_color)
#: rc.cpp:272
#: rc.cpp:302
msgid "Font color"
msgstr "Цвет шрифта"
#. i18n: file: ui/configwindow.ui:1949
#. i18n: file: ui/configwindow.ui:2185
#. i18n: ectx: property (text), widget (QLabel, label_style)
#: rc.cpp:275
#: rc.cpp:305
msgid "Font style"
msgstr "Стиль шрифта"
#. i18n: file: ui/configwindow.ui:1999
#. i18n: file: ui/configwindow.ui:2235
#. i18n: ectx: property (text), widget (QLabel, label_weight)
#: rc.cpp:278
#: rc.cpp:308
msgid "Font weight"
msgstr "Ширина шрифта"
#: rc.cpp:279
#. i18n: file: ui/configwindow.ui:2300
#. i18n: ectx: attribute (title), widget (QWidget, dataengine)
#: rc.cpp:311
msgid "DataEngine"
msgstr "DataEngine"
#. i18n: file: ui/configwindow.ui:2329
#. i18n: ectx: property (text), widget (QLabel, label_customCommand)
#: rc.cpp:314
msgid "Custom command"
msgstr "Своя команда"
#. i18n: file: ui/configwindow.ui:2336
#. i18n: ectx: property (toolTip), widget (QLineEdit, lineEdit_customCommand)
#: rc.cpp:317
msgid "Custom command to run"
msgstr "Своя команда для запуска"
#. i18n: file: ui/configwindow.ui:2356
#. i18n: ectx: property (text), widget (QLabel, label_gpudev)
#: rc.cpp:320
msgid "GPU device"
msgstr "Устройство GPU"
#. i18n: file: ui/configwindow.ui:2376
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_gpudev)
#: rc.cpp:323
msgid "auto"
msgstr "auto"
#. i18n: file: ui/configwindow.ui:2381
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_gpudev)
#: rc.cpp:326
msgid "nvidia"
msgstr "nvidia"
#. i18n: file: ui/configwindow.ui:2386
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_gpudev)
#: rc.cpp:329
msgid "ati"
msgstr "ati"
#. i18n: file: ui/configwindow.ui:2437
#. i18n: ectx: property (text), widget (QLabel, label_mpdaddress)
#: rc.cpp:335
msgid "MPD address"
msgstr "Адрес сервера MPD"
#. i18n: file: ui/configwindow.ui:2461
#. i18n: ectx: property (text), widget (QLabel, label_mpdport)
#: rc.cpp:338
msgid "MPD port"
msgstr "Порт сервера MPD"
#. i18n: file: ui/configwindow.ui:2535
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:344
msgid "pacman -Qu"
msgstr "pacman -Qu"
#. i18n: file: ui/configwindow.ui:2540
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:347
msgid "apt-show-versions -u -b"
msgstr "apt-show-versions -u -b"
#. i18n: file: ui/configwindow.ui:2545
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:350
msgid "aptitude search '~U'"
msgstr "aptitude search '~U'"
#. i18n: file: ui/configwindow.ui:2550
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:353
msgid "yum list updates"
msgstr "yum list updates"
#. i18n: file: ui/configwindow.ui:2555
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:356
msgid "pkg_version -I -l '<'"
msgstr "pkg_version -I -l '<'"
#. i18n: file: ui/configwindow.ui:2560
#. i18n: ectx: property (text), item, widget (QComboBox, comboBox_pkgCommand)
#: rc.cpp:359
msgid "urpmq --auto-select"
msgstr "urpmq --auto-select"
#. i18n: file: ui/configwindow.ui:2578
#. i18n: ectx: property (text), widget (QLabel, label_pkgCommandNum)
#: rc.cpp:362
msgid "Number of null lines"
msgstr "Число пустых линий"
#: rc.cpp:370
msgctxt "NAME OF TRANSLATORS"
msgid "Your names"
msgstr "Evgeniy Alekseev"
#: rc.cpp:280
#: rc.cpp:371
msgctxt "EMAIL OF TRANSLATORS"
msgid "Your emails"
msgstr "esalexeev@gmail.com"
#~ msgid "$hddN - usage for mount point N (from 0), %. Example: $hdd0"
#~ msgstr "$hddN - использование точки монтирования N (от 0), %. Пример: $hdd0"
#~ msgid ""
#~ "$ds - uptime days\n"
#~ "$hs - uptime hours\n"
#~ "$ms - uptime minutes"
#~ msgstr ""
#~ "$ds - дни работы\n"
#~ "$hs - часы\n"
#~ "$ms - минуты"
#~ msgid ""
#~ "Command to run, example:\n"
#~ "wget -qO- http://ifconfig.me/ip - get external IP"
#~ msgstr ""
#~ "Команда для запуска, например:\n"
#~ "wget -qO- http://ifconfig.me/ip - получить внешний IP"
#~ msgid "@@/;@@ - mount point usage, %"
#~ msgstr "@@/;@@ - использование точки монтирования, %"