Added images, added cpu monitor, and updated layout
This commit is contained in:
parent
56627de333
commit
4929d71a29
Binary file not shown.
BIN
images/pic1.png
Normal file
BIN
images/pic1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 MiB |
@ -1,5 +1,10 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
# Python imports
|
||||
import inspect
|
||||
|
||||
from setproctitle import setproctitle
|
||||
|
||||
# Gtk imports
|
||||
import gi, faulthandler, signal
|
||||
gi.require_version('Gtk', '3.0')
|
||||
@ -8,14 +13,9 @@ from gi.repository import Gtk as gtk
|
||||
from gi.repository import Gdk as gdk
|
||||
from gi.repository import GLib
|
||||
|
||||
# Python imports
|
||||
import inspect
|
||||
|
||||
from setproctitle import setproctitle
|
||||
|
||||
# Application imports
|
||||
from utils import Settings
|
||||
from signal_classes import CrossClassSignals, GridSignals, TaskbarSignals
|
||||
from signal_classes import CrossClassSignals, GridSignals, TaskbarSignals, DrawSignals
|
||||
|
||||
|
||||
class Main:
|
||||
@ -58,7 +58,8 @@ class Main:
|
||||
# Then, builder connects to any signals it needs.
|
||||
classes = [CrossClassSignals(settings),
|
||||
GridSignals(settings),
|
||||
TaskbarSignals(settings)]
|
||||
TaskbarSignals(settings),
|
||||
DrawSignals(settings)]
|
||||
|
||||
handlers = {}
|
||||
for c in classes:
|
||||
|
@ -7,6 +7,14 @@
|
||||
<mime-type>inode/directory</mime-type>
|
||||
</mime-types>
|
||||
</object>
|
||||
<object class="GtkAdjustment" id="brushSizeProp">
|
||||
<property name="lower">1</property>
|
||||
<property name="upper">100</property>
|
||||
<property name="value">1</property>
|
||||
<property name="step_increment">1</property>
|
||||
<property name="page_increment">10</property>
|
||||
<signal name="value-changed" handler="onBrushSizeChange" swapped="no"/>
|
||||
</object>
|
||||
<object class="GtkWindow" id="Window">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="default_width">800</property>
|
||||
@ -76,14 +84,15 @@
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkViewport">
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<child>
|
||||
<object class="GtkIconView" id="Desktop">
|
||||
<property name="visible">True</property>
|
||||
@ -93,6 +102,63 @@
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkColorButton" id="brushColorProp">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_alpha">True</property>
|
||||
<property name="rgba">rgb(138,226,52)</property>
|
||||
<signal name="color-set" handler="onColorSet" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkDrawingArea" id="drawArea">
|
||||
<property name="height_request">60</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<signal name="configure-event" handler="onConfigure" swapped="no"/>
|
||||
<signal name="draw" handler="onDraw" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="adjustment">brushSizeProp</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
|
164
src/Pytop/signal_classes/DrawSignals.py
Executable file
164
src/Pytop/signal_classes/DrawSignals.py
Executable file
@ -0,0 +1,164 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
|
||||
# Python Imports
|
||||
from __future__ import division
|
||||
import cairo, psutil
|
||||
|
||||
|
||||
# GTK Imports
|
||||
from gi.repository import GObject
|
||||
from gi.repository import GLib
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class DrawSignals:
|
||||
def __init__(self, settings):
|
||||
self.settings = settings
|
||||
self.builder = self.settings.returnBuilder()
|
||||
|
||||
self.drawArea = self.builder.get_object("drawArea")
|
||||
self.brushSizeProp = self.builder.get_object("brushSizeProp")
|
||||
self.brushColorProp = self.builder.get_object("brushColorProp")
|
||||
self.messageWidget = self.builder.get_object("messageWidget")
|
||||
self.messageLabel = self.builder.get_object("messageLabel")
|
||||
|
||||
self.cpu_percents = []
|
||||
self.doDrawBackground = False
|
||||
self.isDrawing = False
|
||||
self.surface = None
|
||||
self.aw = None # Draw area width
|
||||
self.ah = None # Draw area height
|
||||
self.xStep = None # For x-axis 60 sec steps
|
||||
self.yStep = None # For y-axis %s
|
||||
|
||||
rgba = self.brushColorProp.get_rgba()
|
||||
self.brushColorVal = [rgba.red, rgba.green, rgba.blue, rgba.alpha]
|
||||
self.brushSizeVal = self.brushSizeProp.get_value()
|
||||
self.updateSpeed = 100 # 1 sec = 1000ms
|
||||
|
||||
self.success = "#88cc27"
|
||||
self.warning = "#ffa800"
|
||||
self.error = "#ff0000"
|
||||
|
||||
self.good = [0.53, 0.8, 0.15, 1.0]
|
||||
self.warning = [1.0, 0.66, 0.0, 1.0]
|
||||
self.danger = [1.0, 0.0, 0.0, 1.0]
|
||||
|
||||
# Note: y-axis on draw area goes from top to bottom when increasing.
|
||||
# Need to do the math such that you subtract from max height to start from bottom to go up
|
||||
# self.linePoints.append([1 * xStep, ah - (23 * yStep)]) # 23%
|
||||
# self.linePoints.append([2 * xStep, ah - (60 * yStep)]) # 60%
|
||||
# self.drawPointLine()
|
||||
# del self.linePoints[0:1]
|
||||
# self.linePoints.append([3 * xStep, ah - (44 * yStep)]) # 44%
|
||||
|
||||
|
||||
|
||||
def updateCPUPoints(self):
|
||||
# Clears screen when enough points exist and unshifts the
|
||||
# first point to keep fixed range
|
||||
self.drawBackground(self.brush, self.aw, self.ah)
|
||||
del self.cpu_percents[0:1]
|
||||
|
||||
precent = psutil.cpu_percent()
|
||||
self.cpu_percents.append(precent)
|
||||
self.drawPointLine() # Will re-draw every point
|
||||
self.drawArea.queue_draw()
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def drawPointLine(self):
|
||||
self.brush.set_line_width(self.brushSizeVal)
|
||||
self.brush.set_line_cap(1) # 0 = BUTT, 1 = ROUND, 2 = SQUARE
|
||||
|
||||
oldX = 0.0
|
||||
oldP = 0.0
|
||||
i = 1
|
||||
for p in self.cpu_percents:
|
||||
# set color depending on usage...
|
||||
rgba = self.brushColorVal
|
||||
if p > 50.0:
|
||||
rgba = self.warning
|
||||
if p > 85.0:
|
||||
rgba = self.danger
|
||||
|
||||
self.brush.set_source_rgba(rgba[0], rgba[1], rgba[2], rgba[3])
|
||||
|
||||
# Movbe to prev. point if any
|
||||
if oldP is not 0.0 and oldX is not 0.0:
|
||||
x = oldX
|
||||
y = float(self.ah) - (oldP * self.yStep)
|
||||
self.brush.move_to(x, y)
|
||||
|
||||
# Draw line to the new point from old point
|
||||
x2 = i * self.xStep
|
||||
y2 = float(self.ah) - (p * self.yStep)
|
||||
self.brush.line_to(x2, y2)
|
||||
self.brush.stroke()
|
||||
|
||||
# Collect info to use as prev. pint
|
||||
oldX = x2
|
||||
oldP = p
|
||||
i += 1
|
||||
|
||||
|
||||
def onConfigure(self, area, eve, data = None):
|
||||
aw = area.get_allocated_width()
|
||||
ah = area.get_allocated_height()
|
||||
self.aw = aw
|
||||
self.ah = ah
|
||||
self.xStep = aw / 200 # For x-axis
|
||||
self.yStep = ah / 100 # For y-axis %s
|
||||
self.surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, aw, ah)
|
||||
self.brush = cairo.Context(self.surface)
|
||||
|
||||
self.drawBackground(self.brush, aw, ah)
|
||||
if not self.isDrawing:
|
||||
self.fillCPUPercents()
|
||||
self.startCPUGraph()
|
||||
self.isDrawing = True
|
||||
|
||||
return False
|
||||
|
||||
# Fill with y bank with 50%s
|
||||
def fillCPUPercents(self):
|
||||
self.cpu_percents = [50.0] * 198
|
||||
|
||||
|
||||
# Draw background white
|
||||
def drawBackground(self, brush, aw, ah):
|
||||
brush.rectangle(0, 0, aw, ah) # x, y, width, height
|
||||
brush.set_source_rgba(1, 1, 1, 1.0) # x, y, width, height
|
||||
|
||||
if not self.doDrawBackground: # If transparent or white
|
||||
self.brush.set_operator(0);
|
||||
|
||||
brush.fill()
|
||||
self.brush.set_operator(1); # reset the brush after filling bg...
|
||||
|
||||
|
||||
# Starting graph generation
|
||||
def startCPUGraph(self):
|
||||
GObject.timeout_add(self.updateSpeed, self.updateCPUPoints)
|
||||
|
||||
|
||||
def onDraw(self, area, brush):
|
||||
if self.surface is not None:
|
||||
brush.set_source_surface(self.surface, 0.0, 0.0)
|
||||
brush.paint()
|
||||
else:
|
||||
print("No surface info...")
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def onColorSet(self, widget):
|
||||
rgba = widget.get_rgba()
|
||||
self.brushColorVal = [rgba.red, rgba.green, rgba.blue, rgba.alpha]
|
||||
|
||||
def onBrushSizeChange(self, widget):
|
||||
self.brushSizeVal = self.brushSizeProp.get_value()
|
@ -1,3 +1,4 @@
|
||||
from signal_classes.CrossClassSignals import CrossClassSignals
|
||||
from signal_classes.DrawSignals import DrawSignals
|
||||
from signal_classes.GridSignals import GridSignals
|
||||
from signal_classes.TaskbarSignals import TaskbarSignals
|
||||
|
Binary file not shown.
BIN
src/Pytop/signal_classes/__pycache__/GridSignals.cpython-36.pyc
Normal file
BIN
src/Pytop/signal_classes/__pycache__/GridSignals.cpython-36.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
src/Pytop/signal_classes/__pycache__/__init__.cpython-36.pyc
Normal file
BIN
src/Pytop/signal_classes/__pycache__/__init__.cpython-36.pyc
Normal file
Binary file not shown.
BIN
src/Pytop/utils/__pycache__/Dragging.cpython-36.pyc
Normal file
BIN
src/Pytop/utils/__pycache__/Dragging.cpython-36.pyc
Normal file
Binary file not shown.
BIN
src/Pytop/utils/__pycache__/FileHandler.cpython-36.pyc
Normal file
BIN
src/Pytop/utils/__pycache__/FileHandler.cpython-36.pyc
Normal file
Binary file not shown.
BIN
src/Pytop/utils/__pycache__/Settings.cpython-36.pyc
Normal file
BIN
src/Pytop/utils/__pycache__/Settings.cpython-36.pyc
Normal file
Binary file not shown.
BIN
src/Pytop/utils/__pycache__/__init__.cpython-36.pyc
Normal file
BIN
src/Pytop/utils/__pycache__/__init__.cpython-36.pyc
Normal file
Binary file not shown.
BIN
src/Pytop/widgets/__pycache__/Grid.cpython-36.pyc
Normal file
BIN
src/Pytop/widgets/__pycache__/Grid.cpython-36.pyc
Normal file
Binary file not shown.
BIN
src/Pytop/widgets/__pycache__/Icon.cpython-36.pyc
Normal file
BIN
src/Pytop/widgets/__pycache__/Icon.cpython-36.pyc
Normal file
Binary file not shown.
BIN
src/Pytop/widgets/__pycache__/__init__.cpython-36.pyc
Normal file
BIN
src/Pytop/widgets/__pycache__/__init__.cpython-36.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user