Pre-release 1.1

+ now you may set network device
  + now you may set to show network device
  + now you may set to show memory in Mb
  * widget consists of several labels
  * configuration interface
  - change order labels (I don't know how to do it)
  - some bugs

Version 1.0 is now available in directory 'old_version'
This commit is contained in:
arcan1s 2013-02-24 06:04:34 +04:00
parent 870399418a
commit a195e0524b
17 changed files with 1807 additions and 217 deletions

View File

@ -0,0 +1,16 @@
# -*- 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)

View File

@ -0,0 +1,15 @@
# -*- 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

View File

@ -0,0 +1,260 @@
# -*- 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('<font color="red">ERROR</font>')
return
def updateLabel(self):
"""function to update label"""
string = self.formating_line()
text = "<html><head/><body style=\" font-family:\'"+ self.font_family +"\'; font-size:"+ str(self.font_size)
text = text +"pt; font-style:"+ self.font_style +";\">"
text = text + "<p align=\"center\"><span style=\" color:" + self.font_color + ";\"><pre>"+string
text = text + "</pre></span></p></body></html>"
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)

View File

@ -0,0 +1,36 @@
# -*- 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)

View File

@ -0,0 +1,710 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ConfigWindow</class>
<widget class="QWidget" name="ConfigWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>302</width>
<height>247</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>247</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="widget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>242</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QWidget" name="widget_format" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_format">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Output format</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_format">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QWidget" name="widget_interval" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_interval">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Time interval</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer02">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>19</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QSpinBox" name="spinBox_interval">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>25</height>
</size>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
<property name="value">
<number>2000</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QWidget" name="widget_font" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_font">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>45</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>45</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Font</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer05">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QFontComboBox" name="fontComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>25</height>
</size>
</property>
<property name="fontFilters">
<set>QFontComboBox::AllFonts</set>
</property>
<property name="currentFont">
<font>
<family>Terminus</family>
<pointsize>12</pointsize>
<kerning>true</kerning>
</font>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="0">
<widget class="QWidget" name="widget_fontSize" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="label_fontSize">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Font size</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer01">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>19</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QSpinBox" name="spinBox_fontSize">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>25</height>
</size>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="value">
<number>12</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="4" column="0">
<widget class="QWidget" name="widget_color" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="label_color">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Font color</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer04">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="KColorCombo" name="kcolorcombo">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>25</height>
</size>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="5" column="0">
<widget class="QWidget" name="widget_style" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QLabel" name="label_style">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Font style</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer06">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_style">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>150</width>
<height>25</height>
</size>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="6" column="0">
<widget class="QWidget" name="widget_numNet" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QLabel" name="label_numNet">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>170</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>170</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Number of network devices</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer03">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>19</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QComboBox" name="comboBox_numNet">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<item>
<property name="text">
<string>1</string>
</property>
</item>
<item>
<property name="text">
<string>2</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
<zorder>widget</zorder>
<zorder>verticalSpacer</zorder>
</widget>
<customwidgets>
<customwidget>
<class>KColorCombo</class>
<extends>QComboBox</extends>
<header>kcolorcombo.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>lineEdit_format</tabstop>
<tabstop>spinBox_interval</tabstop>
<tabstop>fontComboBox</tabstop>
<tabstop>spinBox_fontSize</tabstop>
<tabstop>kcolorcombo</tabstop>
<tabstop>lineEdit_style</tabstop>
<tabstop>comboBox_numNet</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,17 @@
[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

View File

@ -12,4 +12,49 @@ 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
self.parent = parent
QObject.connect(self.ui.checkBox_bat, SIGNAL("stateChanged(int)"), self.batStatus)
QObject.connect(self.ui.checkBox_cpu, SIGNAL("stateChanged(int)"), self.cpuStatus)
QObject.connect(self.ui.checkBox_mem, SIGNAL("stateChanged(int)"), self.memStatus)
QObject.connect(self.ui.checkBox_net, SIGNAL("stateChanged(int)"), self.netStatus)
QObject.connect(self.ui.checkBox_swap, SIGNAL("stateChanged(int)"), self.swapStatus)
QObject.connect(self.ui.checkBox_temp, SIGNAL("stateChanged(int)"), self.tempStatus)
def batStatus(self):
if (self.ui.checkBox_bat.checkState() == 2):
self.ui.lineEdit_bat.setEnabled(True)
else:
self.ui.lineEdit_bat.setDisabled(True)
def cpuStatus(self):
if (self.ui.checkBox_cpu.checkState() == 2):
self.ui.lineEdit_cpu.setEnabled(True)
else:
self.ui.lineEdit_cpu.setDisabled(True)
def memStatus(self):
if (self.ui.checkBox_mem.checkState() == 2):
self.ui.lineEdit_mem.setEnabled(True)
else:
self.ui.lineEdit_mem.setDisabled(True)
def netStatus(self):
if (self.ui.checkBox_net.checkState() == 2):
self.ui.lineEdit_net.setEnabled(True)
self.ui.comboBox_numNet.setEnabled(True)
else:
self.ui.lineEdit_net.setDisabled(True)
self.ui.comboBox_numNet.setDisabled(True)
def swapStatus(self):
if (self.ui.checkBox_swap.checkState() == 2):
self.ui.lineEdit_swap.setEnabled(True)
else:
self.ui.lineEdit_swap.setDisabled(True)
def tempStatus(self):
if (self.ui.checkBox_temp.checkState() == 2):
self.ui.lineEdit_temp.setEnabled(True)
else:
self.ui.lineEdit_temp.setDisabled(True)

View File

@ -25,43 +25,105 @@ class pyTextWidget(plasmascript.Applet):
self._name = str(self.package().metadata().pluginName())
self.layout = QGraphicsLinearLayout(Qt.Horizontal, self.applet)
self.setHasConfigurationInterface(True)
self.resize(10,10)
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
# initial configuration
self.settings = Config(self)
self.format = str(self.settings.get('format', '[cpu: $cpu%][temp: $temp&deg;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.formatLine = "<html><head/><body style=\" font-family:\'" + self.font_family + "\'; font-size:" + str(self.font_size)
self.formatLine = self.formatLine +"pt; font-style:" + self.font_style +";\">"
self.formatLine = self.formatLine + "<p align=\"center\"><span style=\" color:" + self.font_color + ";\"><pre>$LINE"
self.formatLine = self.formatLine + "</pre></span></p></body></html>"
self.setupNetdev()
self.setupTemp()
self.connectToEngine()
self.cpuBool = self.settings.get('cpuBool', True)
if (self.cpuBool):
self.cpuFormat = str(self.settings.get('cpuFormat', '[cpu: $cpu%]'))
self.label_cpu = Plasma.Label(self.applet)
text = self.formatLine.split('$LINE')[0] + self.cpuFormat.split('$cpu')[0] + '-----' + self.cpuFormat.split('$cpu')[1] + self.formatLine.split('$LINE')[1]
self.label_cpu.setText(text)
self.layout.addItem(self.label_cpu)
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.tempBool = self.settings.get('tempBool', True)
if (self.tempBool):
self.tempFormat = str(self.settings.get('tempFormat', '[temp: $temp&deg;C]'))
self.setupTemp()
self.label_temp = Plasma.Label(self.applet)
text = self.formatLine.split('$LINE')[0] + self.tempFormat.split('$temp')[0] + '----' + self.tempFormat.split('$temp')[1] + self.formatLine.split('$LINE')[1]
self.label_temp.setText(text)
self.layout.addItem(self.label_temp)
self.resize(250,10)
self.memBool = self.settings.get('memBool', True)
if (self.memBool):
self.memFormat = str(self.settings.get('memFormat', '[mem: $mem%]'))
if (self.memFormat.split('$memmb')[0] != self.memFormat):
self.memInMb = True
text = self.formatLine.split('$LINE')[0] + self.memFormat.split('$memmb')[0] + '-----' + self.memFormat.split('$memmb')[1] + self.formatLine.split('$LINE')[1]
else:
self.memInMb = False
self.mem_used = 0.0
self.mem_free = 1.0
self.mem_uf = 0.0
text = self.formatLine.split('$LINE')[0] + self.memFormat.split('$mem')[0] + '-----' + self.memFormat.split('$mem')[1] + self.formatLine.split('$LINE')[1]
self.label_mem = Plasma.Label(self.applet)
self.label_mem.setText(text)
self.layout.addItem(self.label_mem)
self.swapBool = self.settings.get('swapBool', True)
if (self.swapBool):
self.swapFormat = str(self.settings.get('swapFormat', '[swap: $swap%]'))
if (self.swapFormat.split('$swapmb')[0] != self.swapFormat):
self.swapInMb = True
text = self.formatLine.split('$LINE')[0] + self.swapFormat.split('$swapmb')[0] + '-----' + self.swapFormat.split('$swapmb')[1] + self.formatLine.split('$LINE')[1]
else:
self.swapInMb = False
text = self.formatLine.split('$LINE')[0] + self.swapFormat.split('$swap')[0] + '-----' + self.swapFormat.split('$swap')[1] + self.formatLine.split('$LINE')[1]
self.swap_free = 1.0
self.swap_used = 0.0
self.label_swap = Plasma.Label(self.applet)
self.label_swap.setText(text)
self.layout.addItem(self.label_swap)
self.netBool = self.settings.get('netBool', True)
if (self.netBool):
self.netNonFormat = str(self.settings.get('netNonFormat', '[net: $netKB/s]'))
if (self.netNonFormat.split('@@netdev=')[0] != self.netNonFormat):
self.netdev = self.netNonFormat.split('@@')[1].split('netdev=')[1]
self.netNonFormat = self.netNonFormat.split('@@')[0] + self.netNonFormat.split('@@')[2]
else:
self.num_dev = int(self.settings.get('num_dev', 0))
self.setupNetdev()
if (self.netNonFormat.split('$netdev')[0] != self.netNonFormat):
self.netFormat = self.netNonFormat.split('$netdev')[0] + self.netdev + self.netNonFormat.split('$netdev')[1]
else:
self.netFormat = self.netNonFormat
self.label_netDown = Plasma.Label(self.applet)
text = self.formatLine.split('$LINE')[0] + self.netFormat.split('$net')[0] + '----' + self.formatLine.split('$LINE')[1]
self.label_netDown.setText(text)
self.layout.addItem(self.label_netDown)
self.label_netUp = Plasma.Label(self.applet)
text = self.formatLine.split('$LINE')[0] + '/----' + self.netFormat.split('$net')[1] + self.formatLine.split('$LINE')[1]
self.label_netUp.setText(text)
self.layout.addItem(self.label_netUp)
self.batBool = self.settings.get('batBool', True)
if (self.batBool):
self.batFormat = str(self.settings.get('batFormat', '[bat: $bat%]'))
self.label_bat = Plasma.Label(self.applet)
text = self.formatLine.split('$LINE')[0] + self.batFormat.split('$bat')[0] + '---' + self.batFormat.split('$bat')[1] + self.formatLine.split('$LINE')[1]
self.label_bat.setText(text)
self.layout.addItem(self.label_bat)
self.applet.setLayout(self.layout)
self.theme = Plasma.Svg(self)
self.theme.setImagePath("widgets/background")
self.setBackgroundHints(Plasma.Applet.DefaultBackground)
# start timer
self.connectToEngine()
self.timer = QtCore.QTimer()
self.timer.setInterval(self.interval)
self.startPolling()
@ -69,22 +131,70 @@ class pyTextWidget(plasmascript.Applet):
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.font_family = str(self.configpage.ui.fontComboBox.currentFont().family())
self.settings.set('font_family', self.font_family)
self.font_size = int(self.configpage.ui.spinBox_fontSize.value())
self.settings.set('font_size', self.font_size)
self.font_color = str(self.configpage.ui.kcolorcombo.color().name())
self.settings.set('font_color', self.font_color)
self.font_style = str(self.configpage.ui.lineEdit_style.text())
self.settings.set('font_style', self.font_style)
self.settings.set('num_dev', self.num_dev)
self.formatLine = "<html><head/><body style=\" font-family:\'" + self.font_family + "\'; font-size:" + str(self.font_size)
self.formatLine = self.formatLine +"pt; font-style:" + self.font_style +";\">"
self.formatLine = self.formatLine + "<p align=\"center\"><span style=\" color:" + self.font_color + ";\"><pre>$LINE"
self.formatLine = self.formatLine + "</pre></span></p></body></html>"
if (self.configpage.ui.checkBox_cpu.checkState() == 2):
self.cpuBool = True
self.cpuFormat = str(self.configpage.ui.lineEdit_cpu.text())
self.settings.set('cpuFormat', self.cpuFormat)
else:
self.cpuBool = False
self.settings.set('cpuBool', self.cpuBool)
if (self.configpage.ui.checkBox_temp.checkState() == 2):
self.tempBool = True
self.tempFormat = str(self.configpage.ui.lineEdit_temp.text())
self.settings.set('tempFormat', self.tempFormat)
else:
self.tempBool = False
self.settings.set('tempBool', self.tempBool)
if (self.configpage.ui.checkBox_mem.checkState() == 2):
self.memBool = True
self.memFormat = str(self.configpage.ui.lineEdit_mem.text())
self.settings.set('memFormat', self.memFormat)
else:
self.memBool = False
self.settings.set('memBool', self.memBool)
if (self.configpage.ui.checkBox_swap.checkState() == 2):
self.swapBool = True
self.swapFormat = str(self.configpage.ui.lineEdit_swap.text())
self.settings.set('swapFormat', self.swapFormat)
else:
self.swapBool = False
self.settings.set('swapBool', self.swapBool)
if (self.configpage.ui.checkBox_net.checkState() == 2):
self.netBool = True
self.netFormat = str(self.configpage.ui.lineEdit_net.text())
self.num_dev = int(self.configpage.ui.comboBox_numNet.currentIndex())
self.settings.set('netFormat', self.netFormat)
self.settings.set('num_dev', self.num_dev)
else:
self.netBool = False
self.settings.set('netBool', self.netBool)
if (self.configpage.ui.checkBox_bat.checkState() == 2):
self.batBool = True
self.batFormat = str(self.configpage.ui.lineEdit_bat.text())
self.settings.set('batFormat', self.batFormat)
else:
self.batBool = False
self.settings.set('batBool', self.batBool)
# update timer
self.timer.setInterval(self.interval)
@ -95,13 +205,62 @@ class pyTextWidget(plasmascript.Applet):
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&deg;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)))
if (self.cpuBool):
self.configpage.ui.checkBox_cpu.setCheckState(2)
self.configpage.ui.lineEdit_cpu.setEnabled(True)
self.configpage.ui.lineEdit_cpu.setText(str(self.settings.get('cpuFormat', '[cpu: $cpu%]')))
else:
self.configpage.ui.checkBox_cpu.setCheckState(0)
self.configpage.ui.lineEdit_cpu.setDisabled(True)
if (self.tempBool):
self.configpage.ui.checkBox_temp.setCheckState(2)
self.configpage.ui.lineEdit_temp.setEnabled(True)
self.configpage.ui.lineEdit_temp.setText(str(self.settings.get('tempFormat', '[temp: $temp&deg;C]')))
else:
self.configpage.ui.checkBox_temp.setCheckState(0)
self.configpage.ui.lineEdit_temp.setDisabled(True)
if (self.memBool):
self.configpage.ui.checkBox_mem.setCheckState(2)
self.configpage.ui.lineEdit_mem.setEnabled(True)
self.configpage.ui.lineEdit_mem.setText(str(self.settings.get('memFormat', '[mem: $mem%]')))
else:
self.configpage.ui.checkBox_mem.setCheckState(0)
self.configpage.ui.lineEdit_mem.setDisabled(True)
if (self.swapBool):
self.configpage.ui.checkBox_swap.setCheckState(2)
self.configpage.ui.lineEdit_swap.setEnabled(True)
self.configpage.ui.lineEdit_swap.setText(str(self.settings.get('swapFormat', '[swap: $swap%]')))
else:
self.configpage.ui.checkBox_swap.setCheckState(0)
self.configpage.ui.lineEdit_swap.setDisabled(True)
if (self.netBool):
self.configpage.ui.checkBox_net.setCheckState(2)
self.configpage.ui.lineEdit_net.setEnabled(True)
self.configpage.ui.comboBox_numNet.setEnabled(True)
self.configpage.ui.comboBox_numNet.setCurrentIndex(int(self.settings.get('num_dev', 0)))
self.configpage.ui.lineEdit_net.setText(str(self.settings.get('netNonFormat', '[net: $net%]')))
else:
self.configpage.ui.checkBox_swap.setCheckState(0)
self.configpage.ui.comboBox_numNet.setDisabled(True)
self.configpage.ui.lineEdit_swap.setDisabled(True)
if (self.batBool):
self.configpage.ui.checkBox_bat.setCheckState(2)
self.configpage.ui.lineEdit_bat.setEnabled(True)
self.configpage.ui.lineEdit_bat.setText(str(self.settings.get('batFormat', '[bat: $bat%]')))
else:
self.configpage.ui.checkBox_bat.setCheckState(0)
self.configpage.ui.lineEdit_bat.setDisabled(True)
# add config page
page = parent.addPage(self.configpage, i18n(self.name()))
@ -109,27 +268,8 @@ class pyTextWidget(plasmascript.Applet):
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]
print output
if (output.split("$bat")[0] != output):
output = output.split("$bat")[0] + self.batText() + output.split("$bat")[1]
return output
def setupNetdev(self):
"""function to setup network device"""
if (self.num_dev == 0):
for line in commands.getoutput("ifconfig -a").split("\n"):
if (line != ''):
@ -148,6 +288,7 @@ class pyTextWidget(plasmascript.Applet):
self.netdev = commands.getoutput(command_line)
def setupTemp(self):
"""function to setup temp device"""
commandOut = commands.getoutput("sensors | grep Physical -B2")
self.tempdev = "lmsensors/"+commandOut.split("\n")[0]+"/"+'_'.join(commandOut.split("\n")[2].split(":")[0].split())
@ -178,82 +319,114 @@ class pyTextWidget(plasmascript.Applet):
def updateLabel(self):
"""function to update label"""
string = self.formating_line()
#string = self.cpuText
text = "<html><head/><body style=\" font-family:\'"+ self.font_family +"\'; font-size:"+ str(self.font_size)
text = text +"pt; font-style:"+ self.font_style +";\">"
text = text + "<p align=\"center\"><span style=\" color:" + self.font_color + ";\"><pre>"+string
text = text + "</pre></span></p></body></html>"
self.label.setText(text)
if ((self.memBool) and (self.memInMb == False)):
self.memText()
if ((self.swapBool) and (self.swapInMb == False)):
self.swapText()
if (self.batBool):
self.batText()
def batText(self):
"""function to set battery text"""
commandOut = commands.getoutput("acpi")
bat = commandOut.split()[3][:-1]
output = "%3s" % (bat)
return output
bat = "%3s" % (commandOut.split()[3].split("%")[0])
line = self.batFormat.split('$bat')[0] + bat + self.batFormat.split('$bat')[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_bat.setText(text)
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
mem = "%5s" % (str(round(mem, 1)))
line = self.memFormat.split('$mem')[0] + mem + self.memFormat.split('$mem')[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_mem.setText(text)
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
mem = "%5s" % (str(round(mem, 1)))
line = self.swapFormat.split('$swap')[0] + mem + self.swapFormat.split('$swap')[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_swap.setText(text)
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)
if (self.cpuBool):
self.systemmonitor.connectSource("cpu/system/TotalLoad", self, self.interval)
if (self.netBool):
self.systemmonitor.connectSource("network/interfaces/"+self.netdev+"/transmitter/data", self, self.interval)
self.systemmonitor.connectSource("network/interfaces/"+self.netdev+"/receiver/data", self, self.interval)
if (self.tempBool):
self.systemmonitor.connectSource(self.tempdev, self, self.interval)
if (self.memBool):
if (self.memInMb):
self.systemmonitor.connectSource("mem/physical/application", self, self.interval)
else:
self.systemmonitor.connectSource("mem/physical/free", self, 200)
self.systemmonitor.connectSource("mem/physical/used", self, 200)
self.systemmonitor.connectSource("mem/physical/application", self, 200)
if (self.swapBool):
if (self.swapInMb):
self.systemmonitor.connectSource("mem/swap/used", self, self.interval)
else:
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)
cpuText = "%5s" % (value)
line = self.cpuFormat.split('$cpu')[0] + cpuText + self.cpuFormat.split('$cpu')[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_cpu.setText(text)
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"):
up_speed = "%4s" % (value)
line = '/' + up_speed + self.netFormat.split('$net')[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_netUp.setText(text)
elif (sourceName == "network/interfaces/"+self.netdev+"/receiver/data"):
value = str(data[QString(u'value')]).split('.')[0]
self.down_speed = "%4s" % (value)
down_speed = "%4s" % (value)
line = self.netFormat.split('$net')[0] + down_speed
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_netDown.setText(text)
elif (sourceName == self.tempdev):
value = str(round(float(data[QString(u'value')]), 1))
self.tempText = "%4s" % (value)
tempText = "%4s" % (value)
line = self.tempFormat.split('$temp')[0] + tempText + self.tempFormat.split('$temp')[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_temp.setText(text)
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')])
if (self.memInMb):
mem = str(round(float(data[QString(u'value')]) / 1024, 0)).split('.')[0]
mem = "%5s" % (mem)
line = self.memFormat.split('$memmb')[0] + mem + self.memFormat.split('$memmb')[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_mem.setText(text)
else:
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')])
if (self.swapInMb):
mem = str(round(float(data[QString(u'value')]) / 1024, 0)).split('.')[0]
mem = "%5s" % (mem)
line = self.swapFormat.split('$swapmb')[0] + mem + self.swapFormat.split('$swapmb')[1]
text = self.formatLine.split('$LINE')[0] + line + self.formatLine.split('$LINE')[1]
self.label_swap.setText(text)
else:
self.swap_used = float(data[QString(u'value')])

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>302</width>
<height>247</height>
<width>372</width>
<height>382</height>
</rect>
</property>
<property name="sizePolicy">
@ -18,8 +18,8 @@
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>247</height>
<width>372</width>
<height>382</height>
</size>
</property>
<property name="maximumSize">
@ -31,8 +31,8 @@
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QWidget" name="widget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@ -42,19 +42,19 @@
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>242</height>
<width>364</width>
<height>378</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
<height>378</height>
</size>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QWidget" name="widget_format" native="true">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="widget_cpu" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -75,7 +75,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_format">
<widget class="QCheckBox" name="checkBox_cpu">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
@ -84,23 +84,26 @@
</property>
<property name="minimumSize">
<size>
<width>100</width>
<width>111</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<width>111</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Output format</string>
<string>CPU</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_format">
<widget class="QLineEdit" name="lineEdit_cpu">
<property name="minimumSize">
<size>
<width>0</width>
@ -121,7 +124,394 @@
</layout>
</widget>
</item>
<item row="1" column="0">
<item>
<widget class="QWidget" name="widget_temp" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QCheckBox" name="checkBox_temp">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>111</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>111</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Temperature</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_temp">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_mem" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QCheckBox" name="checkBox_mem">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>111</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>111</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Memory</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_mem">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_swap" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_10">
<item>
<widget class="QCheckBox" name="checkBox_swap">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>111</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>111</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Swap</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_swap">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_net" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
<widget class="QCheckBox" name="checkBox_net">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>111</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>111</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Network</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_numNet">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<item>
<property name="text">
<string>One device</string>
</property>
</item>
<item>
<property name="text">
<string>Two devices</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_net">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_bat" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_13">
<item>
<widget class="QCheckBox" name="checkBox_bat">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>111</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>111</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Battery</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_bat">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_interval" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@ -217,7 +607,7 @@
</layout>
</widget>
</item>
<item row="2" column="0">
<item>
<widget class="QWidget" name="widget_font" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@ -311,7 +701,7 @@
</layout>
</widget>
</item>
<item row="3" column="0">
<item>
<widget class="QWidget" name="widget_fontSize" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@ -404,7 +794,7 @@
</layout>
</widget>
</item>
<item row="4" column="0">
<item>
<widget class="QWidget" name="widget_color" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@ -488,7 +878,7 @@
</layout>
</widget>
</item>
<item row="5" column="0">
<item>
<widget class="QWidget" name="widget_style" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@ -575,104 +965,21 @@
</layout>
</widget>
</item>
<item row="6" column="0">
<widget class="QWidget" name="widget_numNet" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>30</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QLabel" name="label_numNet">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>170</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>170</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Number of network devices</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer03">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>19</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QComboBox" name="comboBox_numNet">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>25</height>
</size>
</property>
<item>
<property name="text">
<string>1</string>
</property>
</item>
<item>
<property name="text">
<string>2</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
<zorder>widget_cpu</zorder>
<zorder>widget_interval</zorder>
<zorder>widget_font</zorder>
<zorder>widget_fontSize</zorder>
<zorder>widget_color</zorder>
<zorder>widget_style</zorder>
<zorder>widget_temp</zorder>
<zorder>widget_mem</zorder>
<zorder>widget_swap</zorder>
<zorder>widget_net</zorder>
<zorder>widget_bat</zorder>
</widget>
</item>
<item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
@ -697,13 +1004,24 @@
</customwidget>
</customwidgets>
<tabstops>
<tabstop>lineEdit_format</tabstop>
<tabstop>checkBox_cpu</tabstop>
<tabstop>lineEdit_cpu</tabstop>
<tabstop>checkBox_temp</tabstop>
<tabstop>lineEdit_temp</tabstop>
<tabstop>checkBox_mem</tabstop>
<tabstop>lineEdit_mem</tabstop>
<tabstop>checkBox_swap</tabstop>
<tabstop>lineEdit_swap</tabstop>
<tabstop>checkBox_net</tabstop>
<tabstop>comboBox_numNet</tabstop>
<tabstop>lineEdit_net</tabstop>
<tabstop>checkBox_bat</tabstop>
<tabstop>lineEdit_bat</tabstop>
<tabstop>spinBox_interval</tabstop>
<tabstop>fontComboBox</tabstop>
<tabstop>spinBox_fontSize</tabstop>
<tabstop>kcolorcombo</tabstop>
<tabstop>lineEdit_style</tabstop>
<tabstop>comboBox_numNet</tabstop>
</tabstops>
<resources/>
<connections/>

View File

@ -9,7 +9,7 @@ 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-Version=1.1
X-KDE-PluginInfo-Website=http://kde-look.org/
X-KDE-PluginInfo-Category=System Information
X-KDE-PluginInfo-Depends=