diff --git a/GADGETS/cpu/cpu.edc b/GADGETS/cpu/cpu.edc index 6686263..6867cc4 100644 --- a/GADGETS/cpu/cpu.edc +++ b/GADGETS/cpu/cpu.edc @@ -1,5 +1,5 @@ /** - * EDGAR Dropbox Gadget + * EDGAR Multicore CPU Gadget */ #define DBG_SHOW(_PART, _R, _G, _B) \ diff --git a/GADGETS/cpu/images/mockup.xcf b/GADGETS/cpu/images/mockup.xcf index ec00d27..1cf6c18 100644 Binary files a/GADGETS/cpu/images/mockup.xcf and b/GADGETS/cpu/images/mockup.xcf differ diff --git a/GADGETS/mem/Makefile b/GADGETS/mem/Makefile new file mode 100644 index 0000000..1d3957d --- /dev/null +++ b/GADGETS/mem/Makefile @@ -0,0 +1,36 @@ +# Simple Makefile for Enlightenment (edgar) gadgets + +# gadget specific config +GADGET_NAME = mem +EXTRA_FILES = + + +# nothing should be changed below this point +GADGET_FILES = __init__.pyc $(GADGET_NAME).edj +prefix = $(shell pkg-config --variable=libdir enlightenment) +gadget_folder = ${prefix}/enlightenment/gadgets/$(GADGET_NAME) + +.PHONY: all install clean + +all: $(GADGET_FILES) $(EXTRA_FILES) + +install: all + @mkdir -p -v ${gadget_folder} + @cp --preserve=mode -v $(GADGET_FILES) $(EXTRA_FILES) $(gadget_folder) + +uninstall: all + @rm -rfv ${gadget_folder} + +clean: + @rm -fv *.edj *.pyc + + +EDJE_CC = edje_cc +EDJE_FLAGS = -v -id images/ -fd fonts/ + +%.edj: %.edc images/* + $(EDJE_CC) $(EDJE_FLAGS) $< + @chmod -v og+r $@ + +%.pyc: %.py + python3 -c "from py_compile import compile; compile('$<', '$@')" diff --git a/GADGETS/mem/__init__.py b/GADGETS/mem/__init__.py new file mode 100644 index 0000000..4dce6c6 --- /dev/null +++ b/GADGETS/mem/__init__.py @@ -0,0 +1,58 @@ +# This python file use the following encoding: utf-8 + +import psutil + +import e + +from efl import ecore +from efl import evas +from efl import edje + + +__gadget_name__ = 'Memory Monitor' +__gadget_vers__ = '0.1' +__gadget_auth__ = 'DaveMDS' +__gadget_mail__ = 'dave@gurumeditation.it' +__gadget_desc__ = 'Ram + Swap monitor' +__gadget_vapi__ = 1 +__gadget_opts__ = { 'popup_on_desktop': False } + + + +class Gadget(e.Gadget): + + def __init__(self): + super().__init__() + + self.poller = None + self.mem = 0 + self.swp = 0 + + def instance_created(self, obj, site): + super().instance_created(obj, site) + + obj.size_hint_aspect = (evas.EVAS_ASPECT_CONTROL_BOTH, + int(obj.data_get('aspect_w')), + int(obj.data_get('aspect_h'))) + + if self.poller is None: + self.poller = ecore.Poller(8, self.poller_cb, ecore.ECORE_POLLER_CORE) + + def instance_destroyed(self, obj): + super().instance_destroyed(obj) + + if len(self._instances) < 1 and self.poller is not None: + self.poller.delete() + self.poller = None + + def poller_cb(self): + mem = psutil.virtual_memory().percent + swp = psutil.swap_memory().percent + + if mem != self.mem or swp != self.swp: + for obj in self._instances: + obj.message_send(0, (mem, swp)) + self.mem = mem + self.swp = swp + + return ecore.ECORE_CALLBACK_RENEW diff --git a/GADGETS/mem/images/bar_bg.png b/GADGETS/mem/images/bar_bg.png new file mode 100644 index 0000000..1d2686d Binary files /dev/null and b/GADGETS/mem/images/bar_bg.png differ diff --git a/GADGETS/mem/images/blu_on.png b/GADGETS/mem/images/blu_on.png new file mode 100644 index 0000000..48d3f04 Binary files /dev/null and b/GADGETS/mem/images/blu_on.png differ diff --git a/GADGETS/mem/images/mem.png b/GADGETS/mem/images/mem.png new file mode 100644 index 0000000..ed7d0cb Binary files /dev/null and b/GADGETS/mem/images/mem.png differ diff --git a/GADGETS/mem/mem.edc b/GADGETS/mem/mem.edc new file mode 100644 index 0000000..055b2df --- /dev/null +++ b/GADGETS/mem/mem.edc @@ -0,0 +1,154 @@ +/** + * EDGAR Memory + Swap Gadget + */ + +#define DBG_SHOW(_PART, _R, _G, _B) \ + part { name: "dbg_show"_PART; \ + type: RECT; mouse_events: 0; \ + description { state: "default" 0.0; \ + rel1.to: _PART; rel2.to: _PART; \ + color: _R _G _B 50; } } + +#define SHOW(_PART) DBG_SHOW(_PART, 50, 0, 0) + +images { + image: "mem.png" COMP; + image: "bar_bg.png" COMP; + image: "blu_on.png" COMP; +} + + +collections { +/** + * API [e/gadget/icon] The group used for the icon of the gadget + */ + group { name: "e/gadgets/mem/icon"; + parts { + image { "icon"; + desc { "default"; + aspect: 1.0 1.0; + aspect_preference: BOTH; + image.normal: "mem.png"; + } + } + } + } + +/** + * API [e/gadget/main] The main group of the gadget + */ + group { name: "e/gadgets/mem/main"; + data { + item: "aspect_w" "28"; + item: "aspect_h" "56"; + } + script { + public message(Msg_Type:type, id, ...) { + if ((type == MSG_FLOAT_SET) && (id == 0)) { + new Float:val; + + val = getfarg(2); + if (val > (100 / 9 * 1)) set_state(PART:"mem_led1", "on", 0.0); + else set_state(PART:"mem_led1", "default", 0.0); + if (val > (100 / 9 * 2)) set_state(PART:"mem_led2", "on", 0.0); + else set_state(PART:"mem_led2", "default", 0.0); + if (val > (100 / 9 * 3)) set_state(PART:"mem_led3", "on", 0.0); + else set_state(PART:"mem_led3", "default", 0.0); + if (val > (100 / 9 * 4)) set_state(PART:"mem_led4", "on", 0.0); + else set_state(PART:"mem_led4", "default", 0.0); + if (val > (100 / 9 * 5)) set_state(PART:"mem_led5", "on", 0.0); + else set_state(PART:"mem_led5", "default", 0.0); + if (val > (100 / 9 * 6)) set_state(PART:"mem_led6", "on", 0.0); + else set_state(PART:"mem_led6", "default", 0.0); + if (val > (100 / 9 * 7)) set_state(PART:"mem_led7", "on", 0.0); + else set_state(PART:"mem_led7", "default", 0.0); + if (val > (100 / 9 * 8)) set_state(PART:"mem_led8", "on", 0.0); + else set_state(PART:"mem_led8", "default", 0.0); + + val = getfarg(3); + if (val > (100 / 9 * 1)) set_state(PART:"swp_led1", "on", 0.0); + else set_state(PART:"swp_led1", "default", 0.0); + if (val > (100 / 9 * 2)) set_state(PART:"swp_led2", "on", 0.0); + else set_state(PART:"swp_led2", "default", 0.0); + if (val > (100 / 9 * 3)) set_state(PART:"swp_led3", "on", 0.0); + else set_state(PART:"swp_led3", "default", 0.0); + if (val > (100 / 9 * 4)) set_state(PART:"swp_led4", "on", 0.0); + else set_state(PART:"swp_led4", "default", 0.0); + if (val > (100 / 9 * 5)) set_state(PART:"swp_led5", "on", 0.0); + else set_state(PART:"swp_led5", "default", 0.0); + if (val > (100 / 9 * 6)) set_state(PART:"swp_led6", "on", 0.0); + else set_state(PART:"swp_led6", "default", 0.0); + if (val > (100 / 9 * 7)) set_state(PART:"swp_led7", "on", 0.0); + else set_state(PART:"swp_led7", "default", 0.0); + if (val > (100 / 9 * 8)) set_state(PART:"swp_led8", "on", 0.0); + else set_state(PART:"swp_led8", "default", 0.0); + } + } + } + parts { + #define LED(_name_, _pos_) \ + part { name: _name_; \ + desc { "default"; hid; \ + rel1.relative: 0.0 (1.0 / 8 * (_pos_ - 1)); \ + rel2.relative: 1.0 (1.0 / 8 * _pos_); \ + image.normal: "blu_on.png"; \ + } \ + desc { "on"; inherit: "default"; vis; } \ + } \ + + part { name: "mem"; + desc { "default"; + rel1.relative: 0.0 0.0; + rel2.relative: 0.5 1.0; + image.normal: "bar_bg.png"; + } + LED("mem_led1", 8) + LED("mem_led2", 7) + LED("mem_led3", 6) + LED("mem_led4", 5) + LED("mem_led5", 4) + LED("mem_led6", 3) + LED("mem_led7", 2) + LED("mem_led8", 1) + } + + part { name: "swp"; + desc { "default"; + rel1.relative: 0.5 0.0; + rel2.relative: 1.0 1.0; + image.normal: "bar_bg.png"; + } + LED("swp_led1", 8) + LED("swp_led2", 7) + LED("swp_led3", 6) + LED("swp_led4", 5) + LED("swp_led5", 4) + LED("swp_led6", 3) + LED("swp_led7", 2) + LED("swp_led8", 1) + } + + #undef LED + } + } + +/** + * API [e/gadget/popup] This is the group that will be placed inside popups + */ +/* + group { name: "e/gadgets/mem/popup"; + min: 310 0; + parts { + box { "popup.box"; + desc { "default"; + box { + layout: "vertical"; + padding: 0 6; + min: 1 1; + } + } + } + } + } +*/ +}