From 9e708c666032eeaba7aff4f33e648196c491057e Mon Sep 17 00:00:00 2001
From: arcan1s
Date: Thu, 28 Feb 2013 18:13:29 +0400
Subject: [PATCH] New release 1.2.0 widget: + added $ac label - return (*) if
AC is online or ( ) if offline + error cheking * $bat now reading from
/sys/* config: + added battery and ac device configurations
---
old_versions/0.9/contents/code/config.py | 16 -
.../0.9/contents/code/configwindow.py | 15 -
old_versions/0.9/contents/code/main.py | 244 ------
old_versions/0.9/contents/code/util.py | 36 -
old_versions/0.9/contents/ui/configwindow.ui | 710 ------------------
old_versions/0.9/metadata.desktop | 17 -
old_versions/1.0/contents/code/config.py | 16 -
.../1.0/contents/code/configwindow.py | 15 -
old_versions/1.0/contents/code/main.py | 260 -------
old_versions/1.0/contents/code/util.py | 36 -
old_versions/1.0/contents/ui/configwindow.ui | 710 ------------------
old_versions/1.0/metadata.desktop | 17 -
old_versions/pytextmonitor-0.9.plasmoid | Bin 0 -> 7218 bytes
old_versions/pytextmonitor-1.1.1.plasmoid | Bin 0 -> 10762 bytes
pytextmonitor.plasmoid | Bin 10762 -> 11976 bytes
screenshots/config.png | Bin 260900 -> 147600 bytes
source/contents/code/configwindow.py | 6 +-
source/contents/code/main.py | 129 +++-
source/contents/ui/configwindow.ui | 158 +++-
source/metadata.desktop | 2 +-
20 files changed, 266 insertions(+), 2121 deletions(-)
delete mode 100644 old_versions/0.9/contents/code/config.py
delete mode 100644 old_versions/0.9/contents/code/configwindow.py
delete mode 100644 old_versions/0.9/contents/code/main.py
delete mode 100644 old_versions/0.9/contents/code/util.py
delete mode 100644 old_versions/0.9/contents/ui/configwindow.ui
delete mode 100644 old_versions/0.9/metadata.desktop
delete mode 100644 old_versions/1.0/contents/code/config.py
delete mode 100644 old_versions/1.0/contents/code/configwindow.py
delete mode 100755 old_versions/1.0/contents/code/main.py
delete mode 100644 old_versions/1.0/contents/code/util.py
delete mode 100644 old_versions/1.0/contents/ui/configwindow.ui
delete mode 100644 old_versions/1.0/metadata.desktop
create mode 100644 old_versions/pytextmonitor-0.9.plasmoid
create mode 100644 old_versions/pytextmonitor-1.1.1.plasmoid
diff --git a/old_versions/0.9/contents/code/config.py b/old_versions/0.9/contents/code/config.py
deleted file mode 100644
index 3a4a6d3..0000000
--- a/old_versions/0.9/contents/code/config.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from util import *
-
-
-
-class Config():
- def __init__(self, applet):
- self.applet = applet
- self.config = self.applet.globalConfig()
-
- def get(self, key, default = ''):
- return self.config.readEntry(key, default).toString()
-
- def set(self, key, value):
- self.config.writeEntry(key, value)
\ No newline at end of file
diff --git a/old_versions/0.9/contents/code/configwindow.py b/old_versions/0.9/contents/code/configwindow.py
deleted file mode 100644
index c26a952..0000000
--- a/old_versions/0.9/contents/code/configwindow.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
-from PyKDE4.plasma import *
-from PyQt4 import uic
-from PyKDE4 import plasmascript
-
-
-
-class ConfigWindow(QWidget):
- def __init__(self, parent, settings):
- QWidget.__init__(self)
- self.ui = uic.loadUi(parent.package().filePath('ui', 'configwindow.ui'), self)
- self.parent = parent
\ No newline at end of file
diff --git a/old_versions/0.9/contents/code/main.py b/old_versions/0.9/contents/code/main.py
deleted file mode 100644
index d0bb3af..0000000
--- a/old_versions/0.9/contents/code/main.py
+++ /dev/null
@@ -1,244 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
-from PyKDE4.kdecore import *
-from PyKDE4.kdeui import *
-from PyKDE4.kio import *
-from PyKDE4.plasma import Plasma
-from PyKDE4 import plasmascript
-from PyQt4 import QtCore
-from configwindow import *
-from config import *
-from util import *
-import commands, os, time
-
-
-
-class pyTextWidget(plasmascript.Applet):
- def __init__(self,parent, args=None):
- """widget definition"""
- plasmascript.Applet.__init__(self,parent)
-
- def init(self):
- """function to initializate widget"""
- self._name = str(self.package().metadata().pluginName())
- self.layout = QGraphicsLinearLayout(Qt.Horizontal, self.applet)
- self.setHasConfigurationInterface(True)
-
- self.label = Plasma.Label(self.applet)
- self.label.setText("N\A")
- self.layout.addItem(self.label)
- self.applet.setLayout(self.layout)
-
- self.theme = Plasma.Svg(self)
- self.theme.setImagePath("widgets/background")
- self.setBackgroundHints(Plasma.Applet.DefaultBackground)
-
- #initial configuration
- self.settings = Config(self)
- self.format = str(self.settings.get('format', '[cpu: $cpu%][temp: $temp°C][mem: $mem%][swap: $swap%][net: $netKB/s][bat: $bat%]'))
- self.interval = int(self.settings.get('interval', '2000'))
- self.font_family = str(self.settings.get('font_family', 'Terminus'))
- self.font_size = int(self.settings.get('font_size', 12))
- self.font_color = str(self.settings.get('font_color', '#000000'))
- self.font_style = str(self.settings.get('font_style', 'normal'))
- self.num_dev = int(self.settings.get('num_dev', 0))
-
- self.resize(250,10)
-
- # start timer
- self.timer = QtCore.QTimer()
- self.timer.setInterval(self.interval)
- self.startPolling()
-
- def configAccepted(self):
- """function to accept settings"""
- # update local variables
- self.format = str(self.configpage.ui.lineEdit_format.text())
- self.interval = int(self.configpage.ui.spinBox_interval.value())
- self.font_family = str(self.configpage.ui.fontComboBox.currentFont().family())
- self.font_size = int(self.configpage.ui.spinBox_fontSize.value())
- self.font_color = str(self.configpage.ui.kcolorcombo.color().name())
- self.font_style = str(self.configpage.ui.lineEdit_style.text())
- self.num_dev = int(self.configpage.ui.comboBox_numNet.currentIndex())
-
- # save config to settings
- self.settings.set('format', self.format)
- self.settings.set('interval', self.interval)
- self.settings.set('font_family', self.font_family)
- self.settings.set('font_size', self.font_size)
- self.settings.set('font_color', self.font_color)
- self.settings.set('font_style', self.font_style)
- self.settings.set('num_dev', self.num_dev)
-
- # update timer
- self.timer.setInterval(self.interval)
- self.startPolling()
-
- def createConfigurationInterface(self, parent):
- """function to setup configuration window"""
- self.configpage = ConfigWindow(self, self.settings)
-
- font = QFont(str(self.settings.get('font_family', 'Terminus')), int(self.settings.get('font_size', 12)), int(int(self.settings.get('font_weight', 50))))
- self.configpage.ui.lineEdit_format.setText(str(self.settings.get('format', '[cpu: $cpu%][temp: $temp°C][mem: $mem%][swap: $swap%][net: $netKB/s][bat: $bat%]')))
- self.configpage.ui.spinBox_interval.setValue(int(self.settings.get('interval', '2000')))
- self.configpage.ui.fontComboBox.setCurrentFont(font)
- self.configpage.ui.spinBox_fontSize.setValue(int(self.settings.get('font_size', 12)))
- self.configpage.ui.kcolorcombo.setColor(QColor(str(self.settings.get('font_color', '#000000'))))
- self.configpage.ui.lineEdit_style.setText(str(self.settings.get('font_style', 'normal')))
- self.configpage.ui.comboBox_numNet.setCurrentIndex(int(self.settings.get('num_dev', 0)))
-
- # add config page
- page = parent.addPage(self.configpage, i18n(self.name()))
- page.setIcon(KIcon(self.icon()))
-
- parent.okClicked.connect(self.configAccepted)
-
- def formating_line(self):
- """function to set format line"""
- output = self.format
-
- if (output.split("$cpu")[0] != output):
- output = output.split("$cpu")[0] + self.cpuText() + output.split("$cpu")[1]
- if (output.split("$temp")[0] != output):
- output = output.split("$temp")[0] + self.tempText() + output.split("$temp")[1]
- if (output.split("$mem")[0] != output):
- output = output.split("$mem")[0] + self.memText() + output.split("$mem")[1]
- if (output.split("$swap")[0] != output):
- output = output.split("$swap")[0] + self.swapText() + output.split("$swap")[1]
- if (output.split("$net")[0] != output):
- output = output.split("$net")[0] + self.netText() + output.split("$net")[1]
- if (output.split("$bat")[0] != output):
- output = output.split("$bat")[0] + self.batText() + output.split("$bat")[1]
-
- return output
-
- def showConfigurationInterface(self):
- """function to show configuration window"""
- plasmascript.Applet.showConfigurationInterface(self)
-
- def showTooltip(self, text):
- """function to create and set tooltip"""
- tooltip = Plasma.ToolTipContent()
- tooltip.setImage(KIcon(self.icon()))
- tooltip.setSubText(text)
- tooltip.setAutohide(False)
- Plasma.ToolTipManager.self().setContent(self.applet, tooltip)
- Plasma.ToolTipManager.self().registerWidget(self.applet)
-
- def startPolling(self):
- try:
- self.timer.start()
- QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.updateLabel)
-
- self.updateLabel()
- self.showTooltip('')
- except Exception as (strerror):
- self.showTooltip(str(strerror))
- self.label.setText('ERROR')
- return
-
- def updateLabel(self):
- """function to update label"""
- line = self.formating_line()
- text = "
"
- text = text + "" + line
- text = text + "
"
- self.label.setText(text)
-
- def batText(self):
- """function to set battery text"""
- commandOut = commands.getoutput("acpi")
- bat = commandOut.split()[3][:-1]
- output = "%3s" % (bat)
-
- return output
-
- def cpuText(self):
- """function to set cpu text"""
- with open ("/proc/stat", 'r') as stat:
- for line in stat:
- if (line[0:4] == "cpu "):
- cpu_1 = line.split()[1:5]
- time.sleep(0.1)
- with open ("/proc/stat", 'r') as stat:
- for line in stat:
- if (line[0:4] == "cpu "):
- cpu_2 = line.split()[1:5]
- duser = float(cpu_2[0]) - float(cpu_1[0])
- dnice = float(cpu_2[1]) - float(cpu_1[1])
- dsys = float(cpu_2[2]) - float(cpu_1[2])
- didle = float(cpu_2[3]) - float(cpu_1[3])
- full = duser + dnice + dsys + didle
- cpu = (full-didle) / full * 100
- output = "%5s" % (str(round(cpu, 1)))
-
- return output
-
- def memText(self):
- """function to set mem text"""
- line = commands.getoutput("free | grep Mem:")
- used = float(line.split()[2]) - float(line.split()[4]) - float(line.split()[5]) - float(line.split()[6])
- full = float(line.split()[1])
- mem = 100 * used / full
- output = "%5s" % (str(round(mem, 1)))
-
- return output
-
- def netText(self):
- """function to set netspeed text"""
- if (self.num_dev == 0):
- for line in commands.getoutput("ifconfig -a").split("\n"):
- if (line != ''):
- if ((line[0] != ' ') and (line[0:3] != "lo:")):
- netdev = line.split()[0][:-1]
- else:
- interfaces = []
- for line in commands.getoutput("ifconfig -a").split("\n"):
- if (line != ''):
- if ((line[0] != ' ') and (line[0:3] != "lo:")):
- interfaces.append(line.split()[0][:-1])
-
- command_line = "if ! (ifconfig "+ interfaces[1] + " | grep 'inet ' > /dev/null); then "
- command_line = command_line + "if ! (ifconfig "+ interfaces[0] + " | grep 'inet ' > /dev/null); then echo lo; "
- command_line = command_line + "else echo "+ interfaces[0] + "; fi; else echo "+ interfaces[1] + "; fi"
- netdev = commands.getoutput(command_line)
-
- command_line = "RXB=$(cat /sys/class/net/" + netdev
- command_line = command_line + "/statistics/rx_bytes) && TXB=$(cat /sys/class/net/" + netdev
- command_line = command_line + "/statistics/tx_bytes) && sleep 0.1 && RXBN=$(cat /sys/class/net/" + netdev
- command_line = command_line + "/statistics/rx_bytes) && TXBN=$(cat /sys/class/net/" + netdev
- command_line = command_line + "/statistics/tx_bytes) && RXDIF=$(echo $((RXBN - RXB)) ) && TXDIF=$(echo $((TXBN - TXB)) ) "
- command_line = command_line + "&& echo -en $((10*RXDIF/1024/2)) && echo -n ' / ' && echo -en $((10*TXDIF/1024)) && echo ' KB/s'"
- speed = commands.getoutput(command_line)
-
- downSpeed = speed.split()[0]
- upSpeed = speed.split()[2]
- output = "%4s/%4s" % (downSpeed, upSpeed)
-
- return output
-
- def swapText(self):
- """function to set swap text"""
- line = commands.getoutput("free | grep Swap:")
- used = float(line.split()[2])
- full = float(line.split()[1])
- mem = 100 * used / full
- output = "%5s" % (str(round(mem, 1)))
-
- return output
-
- def tempText(self):
- """function to set temp text"""
- commandOut = commands.getoutput("sensors | grep Physical")
- temp = commandOut[17:21]
- output = "%4s" % (temp)
-
- return output
-
-
-
-def CreateApplet(parent):
- return pyTextWidget(parent)
\ No newline at end of file
diff --git a/old_versions/0.9/contents/code/util.py b/old_versions/0.9/contents/code/util.py
deleted file mode 100644
index 32b87db..0000000
--- a/old_versions/0.9/contents/code/util.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import os
-from shutil import copyfile
-from PyKDE4.kdecore import *
-
-
-
-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
-
- def kdeHome(self):
- return unicode(KGlobal.dirs().localkdedir())
-
- def createNotifyrc(self):
- 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)
\ No newline at end of file
diff --git a/old_versions/0.9/contents/ui/configwindow.ui b/old_versions/0.9/contents/ui/configwindow.ui
deleted file mode 100644
index 55f7c42..0000000
--- a/old_versions/0.9/contents/ui/configwindow.ui
+++ /dev/null
@@ -1,710 +0,0 @@
-
-
- ConfigWindow
-
-
-
- 0
- 0
- 302
- 247
-
-
-
-
- 0
- 0
-
-
-
-
- 0
- 247
-
-
-
-
- 16777215
- 16777215
-
-
-
- Form
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 242
-
-
-
-
- 16777215
- 16777215
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 100
- 25
-
-
-
-
- 100
- 25
-
-
-
- Output format
-
-
-
- -
-
-
-
- 0
- 25
-
-
-
-
- 16777215
- 25
-
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 100
- 25
-
-
-
-
- 100
- 25
-
-
-
- Time interval
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 19
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 150
- 25
-
-
-
-
- 150
- 25
-
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
- 1
-
-
- 10000
-
-
- 2000
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 45
- 25
-
-
-
-
- 45
- 25
-
-
-
- Font
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 150
- 25
-
-
-
-
- 150
- 25
-
-
-
- QFontComboBox::AllFonts
-
-
-
- Terminus
- 12
- true
-
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 100
- 25
-
-
-
-
- 100
- 25
-
-
-
- Font size
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 19
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 150
- 25
-
-
-
-
- 150
- 25
-
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
- 1
-
-
- 12
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 100
- 25
-
-
-
-
- 100
- 25
-
-
-
- Font color
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 150
- 25
-
-
-
-
- 150
- 25
-
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 100
- 25
-
-
-
-
- 100
- 25
-
-
-
- Font style
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 150
- 25
-
-
-
-
- 150
- 25
-
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 170
- 25
-
-
-
-
- 170
- 25
-
-
-
- Number of network devices
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 19
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 100
- 25
-
-
-
-
- 100
- 25
-
-
-
-
-
- 1
-
-
- -
-
- 2
-
-
-
-
-
-
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
-
- widget
- verticalSpacer
-
-
-
- KColorCombo
- QComboBox
-
-
-
-
- lineEdit_format
- spinBox_interval
- fontComboBox
- spinBox_fontSize
- kcolorcombo
- lineEdit_style
- comboBox_numNet
-
-
-
-
diff --git a/old_versions/0.9/metadata.desktop b/old_versions/0.9/metadata.desktop
deleted file mode 100644
index ca9e6c3..0000000
--- a/old_versions/0.9/metadata.desktop
+++ /dev/null
@@ -1,17 +0,0 @@
-[Desktop Entry]
-Encoding=UTF-8
-Name=Py Text Monitor
-Type=Service
-ServiceTypes=Plasma/Applet
-Icon=utilities-system-monitor
-X-Plasma-API=python
-X-Plasma-MainScript=code/main.py
-X-KDE-PluginInfo-Author=Evgeniy Alexeev aka arcanis
-X-KDE-PluginInfo-Email=esalexeev@gmail.com
-X-KDE-PluginInfo-Name=py-text-monitor
-X-KDE-PluginInfo-Version=1.0
-X-KDE-PluginInfo-Website=http://kde-look.org/
-X-KDE-PluginInfo-Category=System Information
-X-KDE-PluginInfo-Depends=
-X-KDE-PluginInfo-License=GPL
-X-KDE-PluginInfo-EnabledByDefault=true
\ No newline at end of file
diff --git a/old_versions/1.0/contents/code/config.py b/old_versions/1.0/contents/code/config.py
deleted file mode 100644
index 3a4a6d3..0000000
--- a/old_versions/1.0/contents/code/config.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from util import *
-
-
-
-class Config():
- def __init__(self, applet):
- self.applet = applet
- self.config = self.applet.globalConfig()
-
- def get(self, key, default = ''):
- return self.config.readEntry(key, default).toString()
-
- def set(self, key, value):
- self.config.writeEntry(key, value)
\ No newline at end of file
diff --git a/old_versions/1.0/contents/code/configwindow.py b/old_versions/1.0/contents/code/configwindow.py
deleted file mode 100644
index c26a952..0000000
--- a/old_versions/1.0/contents/code/configwindow.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
-from PyKDE4.plasma import *
-from PyQt4 import uic
-from PyKDE4 import plasmascript
-
-
-
-class ConfigWindow(QWidget):
- def __init__(self, parent, settings):
- QWidget.__init__(self)
- self.ui = uic.loadUi(parent.package().filePath('ui', 'configwindow.ui'), self)
- self.parent = parent
\ No newline at end of file
diff --git a/old_versions/1.0/contents/code/main.py b/old_versions/1.0/contents/code/main.py
deleted file mode 100755
index 45b0b11..0000000
--- a/old_versions/1.0/contents/code/main.py
+++ /dev/null
@@ -1,260 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from PyQt4.QtCore import *
-from PyQt4.QtGui import *
-from PyKDE4.kdecore import *
-from PyKDE4.kdeui import *
-from PyKDE4.kio import *
-from PyKDE4.plasma import Plasma
-from PyKDE4 import plasmascript
-from PyQt4 import QtCore
-from configwindow import *
-from config import *
-from util import *
-import commands, os, time
-
-
-
-class pyTextWidget(plasmascript.Applet):
- def __init__(self,parent, args=None):
- """widget definition"""
- plasmascript.Applet.__init__(self,parent)
-
- def init(self):
- """function to initializate widget"""
- self._name = str(self.package().metadata().pluginName())
- self.layout = QGraphicsLinearLayout(Qt.Horizontal, self.applet)
- self.setHasConfigurationInterface(True)
-
- self.label = Plasma.Label(self.applet)
- self.label.setText("N\A")
-
- self.layout.addItem(self.label)
- self.applet.setLayout(self.layout)
-
- self.theme = Plasma.Svg(self)
- self.theme.setImagePath("widgets/background")
- self.setBackgroundHints(Plasma.Applet.DefaultBackground)
-
- #initial configuration
- self.settings = Config(self)
- self.format = str(self.settings.get('format', '[cpu: $cpu%][temp: $temp°C][mem: $mem%][swap: $swap%][net: $netKB/s][bat: $bat%]'))
- self.interval = int(self.settings.get('interval', '2000'))
- self.font_family = str(self.settings.get('font_family', 'Terminus'))
- self.font_size = int(self.settings.get('font_size', 12))
- self.font_color = str(self.settings.get('font_color', '#000000'))
- self.font_style = str(self.settings.get('font_style', 'normal'))
- self.num_dev = int(self.settings.get('num_dev', 0))
-
- self.setupNetdev()
- self.setupTemp()
- self.connectToEngine()
-
- self.cpuText = " 0.0"
- self.up_speed = " 0"
- self.down_speed = " 0"
- self.mem_used = 0.0
- self.mem_free = 1.0
- self.mem_uf = 0.0
- self.swap_free = 1.0
- self.swap_used = 0.0
- self.tempText = " 0.0"
-
- self.resize(250,10)
-
- # start timer
- self.timer = QtCore.QTimer()
- self.timer.setInterval(self.interval)
- self.startPolling()
-
- def configAccepted(self):
- """function to accept settings"""
- # update local variables
- self.format = str(self.configpage.ui.lineEdit_format.text())
- self.interval = int(self.configpage.ui.spinBox_interval.value())
- self.font_family = str(self.configpage.ui.fontComboBox.currentFont().family())
- self.font_size = int(self.configpage.ui.spinBox_fontSize.value())
- self.font_color = str(self.configpage.ui.kcolorcombo.color().name())
- self.font_style = str(self.configpage.ui.lineEdit_style.text())
- self.num_dev = int(self.configpage.ui.comboBox_numNet.currentIndex())
-
- # save config to settings
- self.settings.set('format', self.format)
- self.settings.set('interval', self.interval)
- self.settings.set('font_family', self.font_family)
- self.settings.set('font_size', self.font_size)
- self.settings.set('font_color', self.font_color)
- self.settings.set('font_style', self.font_style)
- self.settings.set('num_dev', self.num_dev)
-
- # update timer
- self.timer.setInterval(self.interval)
- self.startPolling()
-
- def createConfigurationInterface(self, parent):
- """function to setup configuration window"""
- self.configpage = ConfigWindow(self, self.settings)
-
- font = QFont(str(self.settings.get('font_family', 'Terminus')), int(self.settings.get('font_size', 12)), int(int(self.settings.get('font_weight', 50))))
- self.configpage.ui.lineEdit_format.setText(str(self.settings.get('format', '[cpu: $cpu%][temp: $temp°C][mem: $mem%][swap: $swap%][net: $netKB/s][bat: $bat%]')))
- self.configpage.ui.spinBox_interval.setValue(int(self.settings.get('interval', '2000')))
- self.configpage.ui.fontComboBox.setCurrentFont(font)
- self.configpage.ui.spinBox_fontSize.setValue(int(self.settings.get('font_size', 12)))
- self.configpage.ui.kcolorcombo.setColor(QColor(str(self.settings.get('font_color', '#000000'))))
- self.configpage.ui.lineEdit_style.setText(str(self.settings.get('font_style', 'normal')))
- self.configpage.ui.comboBox_numNet.setCurrentIndex(int(self.settings.get('num_dev', 0)))
-
- # add config page
- page = parent.addPage(self.configpage, i18n(self.name()))
- page.setIcon(KIcon(self.icon()))
-
- parent.okClicked.connect(self.configAccepted)
-
- def formating_line(self):
- """function to set format line"""
- output = self.format
-
- if (output.split("$cpu")[0] != output):
- output = output.split("$cpu")[0] + self.cpuText + output.split("$cpu")[1]
- if (output.split("$temp")[0] != output):
- output = output.split("$temp")[0] + self.tempText + output.split("$temp")[1]
- if (output.split("$mem")[0] != output):
- output = output.split("$mem")[0] + self.memText() + output.split("$mem")[1]
- if (output.split("$swap")[0] != output):
- output = output.split("$swap")[0] + self.swapText() + output.split("$swap")[1]
- if (output.split("$net")[0] != output):
- output = output.split("$net")[0] + self.netText() + output.split("$net")[1]
- if (output.split("$bat")[0] != output):
- output = output.split("$bat")[0] + self.batText() + output.split("$bat")[1]
-
- return output
-
- def setupNetdev(self):
- if (self.num_dev == 0):
- for line in commands.getoutput("ifconfig -a").split("\n"):
- if (line != ''):
- if ((line[0] != ' ') and (line[0:3] != "lo:")):
- self.netdev = line.split()[0][:-1]
- else:
- interfaces = []
- for line in commands.getoutput("ifconfig -a").split("\n"):
- if (line != ''):
- if ((line[0] != ' ') and (line[0:3] != "lo:")):
- interfaces.append(line.split()[0][:-1])
-
- command_line = "if ! (ifconfig "+ interfaces[1] + " | grep 'inet ' > /dev/null); then "
- command_line = command_line + "if ! (ifconfig "+ interfaces[0] + " | grep 'inet ' > /dev/null); then echo lo; "
- command_line = command_line + "else echo "+ interfaces[0] + "; fi; else echo "+ interfaces[1] + "; fi"
- self.netdev = commands.getoutput(command_line)
-
- def setupTemp(self):
- commandOut = commands.getoutput("sensors | grep Physical -B2")
- self.tempdev = "lmsensors/"+commandOut.split("\n")[0]+"/"+'_'.join(commandOut.split("\n")[2].split(":")[0].split())
-
- def showConfigurationInterface(self):
- """function to show configuration window"""
- plasmascript.Applet.showConfigurationInterface(self)
-
- def showTooltip(self, text):
- """function to create and set tooltip"""
- tooltip = Plasma.ToolTipContent()
- tooltip.setImage(KIcon(self.icon()))
- tooltip.setSubText(text)
- tooltip.setAutohide(False)
- Plasma.ToolTipManager.self().setContent(self.applet, tooltip)
- Plasma.ToolTipManager.self().registerWidget(self.applet)
-
- def startPolling(self):
- try:
- self.timer.start()
- QtCore.QObject.connect(self.timer, QtCore.SIGNAL("timeout()"), self.updateLabel)
-
- self.updateLabel()
- self.showTooltip('')
- except Exception as (strerror):
- self.showTooltip(str(strerror))
- self.label.setText('ERROR')
- return
-
- def updateLabel(self):
- """function to update label"""
- string = self.formating_line()
- text = ""
- text = text + ""+string
- text = text + "
"
- self.label.setText(text)
-
- def batText(self):
- """function to set battery text"""
- commandOut = commands.getoutput("acpi")
- bat = commandOut.split()[3][:-1]
- output = "%3s" % (bat)
-
- return output
-
- def memText(self):
- """function to set mem text"""
- full = self.mem_uf + self.mem_free
- mem = 100 * self.mem_used / full
- output = "%5s" % (str(round(mem, 1)))
-
- return output
-
- def netText(self):
- """function to set netspeed text"""
- output = self.down_speed + "/" + self.up_speed
-
- return output
-
- def swapText(self):
- """function to set swap text"""
- full = self.swap_used + self.swap_free
- mem = 100 * self.swap_used / full
- output = "%5s" % (str(round(mem, 1)))
-
- return output
-
- def connectToEngine(self):
- """function to initializate engine"""
- self.systemmonitor = self.dataEngine("systemmonitor")
- self.systemmonitor.connectSource("cpu/system/TotalLoad", self, 200)
- self.systemmonitor.connectSource("network/interfaces/"+self.netdev+"/transmitter/data", self, 200)
- self.systemmonitor.connectSource("network/interfaces/"+self.netdev+"/receiver/data", self, 200)
- self.systemmonitor.connectSource(self.tempdev, self, 200)
- self.systemmonitor.connectSource("mem/physical/free", self, 200)
- self.systemmonitor.connectSource("mem/physical/used", self, 200)
- self.systemmonitor.connectSource("mem/physical/application", self, 200)
- self.systemmonitor.connectSource("mem/swap/free", self, 200)
- self.systemmonitor.connectSource("mem/swap/used", self, 200)
-
- @pyqtSignature("dataUpdated(const QString &, const Plasma::DataEngine::Data &)")
- def dataUpdated(self, sourceName, data):
- """function to refresh data"""
- if (sourceName == "cpu/system/TotalLoad"):
- value = str(round(float(data[QString(u'value')]), 1))
- self.cpuText = "%5s" % (value)
- elif (sourceName == "network/interfaces/"+self.netdev+"/transmitter/data"):
- value = str(data[QString(u'value')]).split('.')[0]
- self.up_speed = "%4s" % (value)
- elif (sourceName == "network/interfaces/"+self.netdev+"/reciever/data"):
- value = str(data[QString(u'value')]).split('.')[0]
- self.down_speed = "%4s" % (value)
- elif (sourceName == self.tempdev):
- value = str(round(float(data[QString(u'value')]), 1))
- self.tempText = "%4s" % (value)
- elif (sourceName == "mem/physical/free"):
- self.mem_free = float(data[QString(u'value')])
- elif (sourceName == "mem/physical/used"):
- self.mem_uf = float(data[QString(u'value')])
- elif (sourceName == "mem/physical/application"):
- self.mem_used = float(data[QString(u'value')])
- elif (sourceName == "mem/swap/free"):
- self.swap_free = float(data[QString(u'value')])
- elif (sourceName == "mem/swap/used"):
- self.swap_used = float(data[QString(u'value')])
-
-
-
-def CreateApplet(parent):
- return pyTextWidget(parent)
\ No newline at end of file
diff --git a/old_versions/1.0/contents/code/util.py b/old_versions/1.0/contents/code/util.py
deleted file mode 100644
index 32b87db..0000000
--- a/old_versions/1.0/contents/code/util.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import os
-from shutil import copyfile
-from PyKDE4.kdecore import *
-
-
-
-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
-
- def kdeHome(self):
- return unicode(KGlobal.dirs().localkdedir())
-
- def createNotifyrc(self):
- 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)
\ No newline at end of file
diff --git a/old_versions/1.0/contents/ui/configwindow.ui b/old_versions/1.0/contents/ui/configwindow.ui
deleted file mode 100644
index 55f7c42..0000000
--- a/old_versions/1.0/contents/ui/configwindow.ui
+++ /dev/null
@@ -1,710 +0,0 @@
-
-
- ConfigWindow
-
-
-
- 0
- 0
- 302
- 247
-
-
-
-
- 0
- 0
-
-
-
-
- 0
- 247
-
-
-
-
- 16777215
- 16777215
-
-
-
- Form
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 242
-
-
-
-
- 16777215
- 16777215
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 100
- 25
-
-
-
-
- 100
- 25
-
-
-
- Output format
-
-
-
- -
-
-
-
- 0
- 25
-
-
-
-
- 16777215
- 25
-
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 100
- 25
-
-
-
-
- 100
- 25
-
-
-
- Time interval
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 19
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 150
- 25
-
-
-
-
- 150
- 25
-
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
- 1
-
-
- 10000
-
-
- 2000
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 45
- 25
-
-
-
-
- 45
- 25
-
-
-
- Font
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 150
- 25
-
-
-
-
- 150
- 25
-
-
-
- QFontComboBox::AllFonts
-
-
-
- Terminus
- 12
- true
-
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 100
- 25
-
-
-
-
- 100
- 25
-
-
-
- Font size
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 19
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 150
- 25
-
-
-
-
- 150
- 25
-
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
- 1
-
-
- 12
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 100
- 25
-
-
-
-
- 100
- 25
-
-
-
- Font color
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 150
- 25
-
-
-
-
- 150
- 25
-
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 100
- 25
-
-
-
-
- 100
- 25
-
-
-
- Font style
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 150
- 25
-
-
-
-
- 150
- 25
-
-
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 30
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 170
- 25
-
-
-
-
- 170
- 25
-
-
-
- Number of network devices
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 19
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 100
- 25
-
-
-
-
- 100
- 25
-
-
-
-
-
- 1
-
-
- -
-
- 2
-
-
-
-
-
-
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
-
- widget
- verticalSpacer
-
-
-
- KColorCombo
- QComboBox
-
-
-
-
- lineEdit_format
- spinBox_interval
- fontComboBox
- spinBox_fontSize
- kcolorcombo
- lineEdit_style
- comboBox_numNet
-
-
-
-
diff --git a/old_versions/1.0/metadata.desktop b/old_versions/1.0/metadata.desktop
deleted file mode 100644
index ca9e6c3..0000000
--- a/old_versions/1.0/metadata.desktop
+++ /dev/null
@@ -1,17 +0,0 @@
-[Desktop Entry]
-Encoding=UTF-8
-Name=Py Text Monitor
-Type=Service
-ServiceTypes=Plasma/Applet
-Icon=utilities-system-monitor
-X-Plasma-API=python
-X-Plasma-MainScript=code/main.py
-X-KDE-PluginInfo-Author=Evgeniy Alexeev aka arcanis
-X-KDE-PluginInfo-Email=esalexeev@gmail.com
-X-KDE-PluginInfo-Name=py-text-monitor
-X-KDE-PluginInfo-Version=1.0
-X-KDE-PluginInfo-Website=http://kde-look.org/
-X-KDE-PluginInfo-Category=System Information
-X-KDE-PluginInfo-Depends=
-X-KDE-PluginInfo-License=GPL
-X-KDE-PluginInfo-EnabledByDefault=true
\ No newline at end of file
diff --git a/old_versions/pytextmonitor-0.9.plasmoid b/old_versions/pytextmonitor-0.9.plasmoid
new file mode 100644
index 0000000000000000000000000000000000000000..4f8f8aa7abeb9cf45a667e49ab7d9224fbe31a00
GIT binary patch
literal 7218
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
z
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
Vg8uDkhX3`w{v|(er~B>S{{W|Nfmi?l
literal 10762
zcma)iWpp0N(e)!nif??DQ?lUb9K>$N}l*+r;IWiF4MjBpF+
z&P^N(mexXuxAH+y4mVFGbcBF2jV>W2rl~WeHP}yvM=&ug!M8&0Ot=Wa9JQ?E@1WOs
zBufy-z`Fi&*u>lRS*Xt7lhMmiJmOB!U(vcJ7B7_W+E9Xs;KZJb834DA%~Yh$X99+n
zlho~4)S64I1EFuAzI#n1NPfXJWPf1}WVE&Gu>0M|&;WrbO(BAR6F;-ZGEC
z-c$%n($Ex{rCB}_(CK?>i$u|$>vwQom^s8!3TCLgRDJE{Cb&7AVnVDlFLpbCKJ=lF
zR{j)K)h=!szvfx8UND$6v)zL)I3Oa|*C$#?;^VNn%bd-JR!5W|#gF!5CY^aWYWEo{
zN^Dls!DVh
zGVx{cXA>m@zk7iWloo+L)RB~2tHj}@Il&xd9ZQSGju9SLCOR~0+D!n$Hft-$W#vb1
z2@+KBoRNhIDIrz$c>SAawp8MU{^$=?CZGWcx)9OTgFMj`%-VW!9f8dnUHV7r0cU%9
z`RV9j`2^#z2xYq39QB{RTw2%!Oc0uY7SM#L-HU9Yv%$dz^O7oKrOcs(KZVF(HaG0e
zZ<*w!ko#(tPC&Oze2b-Njx1uDXMQ5x+ED6u3*k!-R|EODo{ChsvvnZB)5wG&zKbR<
z)t)A@#DU#zCnGSlEv*K0=rK|Rn^;qsTk?vCU>+kE+jB|$wGayyA-9UyV#V=7q2#-@L2S0H3d)l1t1QSZjgvr6g>@UY8%G=at-*E_b;qxMxC1F&
zkeNI)+z(tz8|jEAwcp8EslRJ|J~0uyO#|l^Cg9}~)|1FPmdZuo%$6THdtGPHlC`B9<>@pB)aZu5hXPJN$I_
zYvRy&W|xajmeCHYnbD_oW1pQgk0BnVz{wf6asx^G^gD
z5DjavJ~#v)l+Hj@6;h5;o;fVl966((SN4cnw9U2g@LR?B%`U1P#W$a!N*hC6a64H?
zN8~OARLst7K_EAk#Wp3N#l3c!aD+%O9gb4?5puF3bmNY#M}4{UYOlCd|#fQ
zHLQdpdz|
z;KE8~E#l?**;RaBBh|wFrRjF9JL@vjMx8P3_Ez`J>it%CbZXNQ3!5D9*?ru;d-&j9
zb%O<5mcQ6S4^>h`gpU0pkFL7fkd;1OzBI-E&O09A
z#X#?KQcS*6@U!lm7YPUh$DP=8KaMVlI_8Jr(=m=Ux^JqqWI_e$SWttsK1E+lj8)5>
ziAbt*ZOfPmR0V-PAk!EJi~ZcX5PBfCE{v`5NiYdW!Z_HA9DYO=z7iu-g#^wEAweFp
z
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%0A@r
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