Re: [Patch RFC v2] Add the concept of general data sources to obvious

2009-08-17 Thread Gregor Best
Merged, thanks

-- 
GCS/IT/M d- s+:- a-- C++ UL+++ US UB++ P+++ L+++ E--- W+ N+ o--
K- w--- ?O M-- ?V PS++ PE- Y++ PGP+++ t+ 5 X+ R tv b+++ DI+++
D+++ G+ e h! r y+

Gregor Best


pgpMoQPOvMSiV.pgp
Description: PGP signature


Re: [Patch RFC v2] Add the concept of general data sources to obvious

2009-08-10 Thread Uli Schlachter
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256

Uli Schlachter wrote:
 Attached is a New And Improved(tm) version of the last patch. Compare it
 yourself, you'll see that the new version is better.

Gregor breaks it - Uli fixes it

Uli
- --
Do you know that books smell like nutmeg or some spice from a foreign land?
  -- Faber in Fahrenheit 451
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.9 (GNU/Linux)

iQEcBAEBCAAGBQJKgCLRAAoJECLkKOvLj8sGPMgH/RU9Idenq910yG6D5x+NbZfM
yt+o1KzZ0zNwHmWNe7qaZcHISr4OcElbeT8UcJhInN6g8L/XMYGGvylBKq4NVv4M
dZwFd/UeZAeUSL5iLCbWCvvjmp/8bXUMXIw0cy8fn+9gL7gzzrE4EvoGMrgE0Wuj
b2/pqnRSMXkl9daOTGkUOIH6aEhYcFfraUEGNKcI9tZw1q0BAxMVAoQRlK15z2T4
N/nEDNz6Xc7AY+F8YHD2T3RzHdbm3yHq9OjQRGrQjbjxv4OmeMsCUpbHfhZAdYH/
rVn8sTVMsSNuMRLeg/8R4K01HHUobuFzaoCzx6rjhiiJn+V5SXG9D/pi7vwcY6w=
=exFF
-END PGP SIGNATURE-
From 4f5c934d6c7f03c698ee2ff2d20e58da10f90b9d Mon Sep 17 00:00:00 2001
From: Uli Schlachter psyc...@znc.in
Date: Sat, 8 Aug 2009 16:12:49 +0200
Subject: [PATCH 03/11] Add general widgets based on data source

Obvious modules can now call obvious.lib.widget.from_data_source() with a table.
This table has to contain a function named get which returns a data point and
optionally an entry named max which is the maximum possible return value
for get.

The user can use the from_data_source-widgets like normal widgets. By default
they behave like a graph widget (same functions available), but it can be
changed into a progressbar with :set_type(progressbar).

New widget types can be added by creating a new table under obvious.lib.widget
which has to have a create() member function. This is a safety-measure against
accidentally using sth which wasn't meant to be used this way.

Signed-off-by: Uli Schlachter psyc...@znc.in
---
 lib/widget/graph.lua   |   18 +
 lib/widget/init.lua|   84 
 lib/widget/progressbar.lua |   15 
 3 files changed, 117 insertions(+), 0 deletions(-)

diff --git a/lib/widget/graph.lua b/lib/widget/graph.lua
index 9cf3e91..497b24e 100644
--- a/lib/widget/graph.lua
+++ b/lib/widget/graph.lua
@@ -29,6 +29,24 @@ function graph(layout, scale)
 return widget
 end
 
+function create(data, layout)
+local scale = true
+if data.max then
+scale = false
+end
+
+local widget = graph(layout, scale)
+
+widget.update = function(widget)
+local max = widget.data.max or 1
+local val = widget.data:get() or max
+widget:add_value(val / max)
+end
+
+widget.data = data
+
+return widget
+end
 
 setmetatable(_M, { __call = function (_, ...) return graph(...) end })
 -- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80
diff --git a/lib/widget/init.lua b/lib/widget/init.lua
index cd62a5c..20df4f4 100644
--- a/lib/widget/init.lua
+++ b/lib/widget/init.lua
@@ -6,6 +6,90 @@
 require(obvious.lib.widget.graph)
 require(obvious.lib.widget.progressbar)
 
+local setmetatable = setmetatable
+local getmetatable = getmetatable
+local pairs = pairs
+local type = type
+local lib = {
+hooks = require(obvious.lib.hooks)
+}
+local layout = {
+horizontal = require(awful.widget.layout.horizontal)
+}
+
 module(obvious.lib.widget)
 
+-- The functions each object from from_data_source will get
+local funcs = { }
+
+funcs.set_type = function (obj, widget_type)
+local widget_type = _M[widget_type]
+if not widget_type or not widget_type.create then
+return
+end
+
+local meta = getmetatable(obj)
+
+local widget = widget_type.create(meta.data, obj.widget.layout)
+obj.widget = widget
+obj.update()
+
+return obj
+end
+
+funcs.set_layout = function (obj, layout)
+obj.widget.layout = layout
+obj.layout = layout
+return obj
+end
+
+function from_data_source(data)
+local ret = { }
+
+for k, v in pairs(funcs) do
+ret[k] = v
+end
+
+-- We default to graph since progressbars can't handle sources without an
+-- upper bound on their value
+ret.widget = _M.graph.create(data)
+ret.layout = nil
+
+ret.update = function()
+-- because this uses ret, if ret.widget is changed this automatically
+-- picks up the new widget
+ret.widget:update()
+end
+
+-- Fire up the timer which keeps this widget up-to-date
+lib.hooks.timer.register(10, 60, ret.update)
+lib.hooks.timer.start(ret.update)
+ret.update()
+
+local meta = { }
+
+meta.data = data
+
+-- This is called when an unexesting key is accessed
+meta.__index = function (obj, key)
+local ret = obj.widget[key]
+if key ~= layout and type(ret) == function then
+return function(_, ...)
+-- Ugly hack: this function wants to be called on the right object
+ret(obj.widget, ...)
+-- Ugly hack 2: We force obj to be returned again and discard
+  

Re: [Patch RFC v2] Add the concept of general data sources to obvious

2009-08-10 Thread Gregor Best
I pushed all of them (the fs usage was changed a bit) and tonight I'll
start writing readme files. Thanks a lot for your work :)

-- 
GCS/IT/M d- s+:- a-- C++ UL+++ US UB++ P+++ L+++ E--- W+ N+ o--
K- w--- ?O M-- ?V PS++ PE- Y++ PGP+++ t+ 5 X+ R tv b+++ DI+++
D+++ G+ e h! r y+

Gregor Best


pgpmhjZq1H4ZX.pgp
Description: PGP signature


Re: [Patch RFC v2] Add the concept of general data sources to obvious

2009-08-10 Thread Andrei Thorp
Excerpts from Gregor Best's message of Mon Aug 10 11:28:24 -0400 2009:
 I pushed all of them (the fs usage was changed a bit) and tonight I'll
 start writing readme files. Thanks a lot for your work :)

I'll try to read over them soonish as well.
-- 
Andrei Thorp, Developer: Xandros Corp. (http://www.xandros.com)

-- 
To unsubscribe, send mail to awesome-devel-unsubscr...@naquadah.org.


Re: [Patch RFC v2] Add the concept of general data sources to obvious

2009-08-10 Thread Andrei Thorp
Excerpts from Uli Schlachter's message of Mon Aug 10 12:55:41 -0400 2009:
 -BEGIN PGP SIGNED MESSAGE-
 Hash: SHA256
 
 Andrei Thorp wrote:
  Excerpts from Gregor Best's message of Mon Aug 10 11:28:24 -0400 2009:
  I pushed all of them (the fs usage was changed a bit) and tonight I'll
  start writing readme files. Thanks a lot for your work :)
  
  I'll try to read over them soonish as well.
 
 Thanks guys and sorry for leaving that error in the fs usage widget. 
 CopyPaste
 fail. :(
 
 Oh and thanks for doing my working and writing readmes, that's way better than
 me writing those. To thank you for this I got a patch for you (Andrei, this 
 pull
 request is for you!)

Awesome :)

I'll probably get into it after work, haven't been doing enough for
xandros recently.
-- 
Andrei Thorp, Developer: Xandros Corp. (http://www.xandros.com)

-- 
To unsubscribe, send mail to awesome-devel-unsubscr...@naquadah.org.