diff options
Diffstat (limited to 'lib/vdr')
-rw-r--r-- | lib/vdr/osd.rb | 24 | ||||
-rw-r--r-- | lib/vdr/osd/item.rb | 48 | ||||
-rw-r--r-- | lib/vdr/osd/menu.rb | 76 | ||||
-rw-r--r-- | lib/vdr/osd/osdmessage.rb | 29 | ||||
-rw-r--r-- | lib/vdr/osd/textview.rb | 29 | ||||
-rw-r--r-- | lib/vdr/pluginmanager.rb | 64 |
6 files changed, 270 insertions, 0 deletions
diff --git a/lib/vdr/osd.rb b/lib/vdr/osd.rb new file mode 100644 index 0000000..29af09e --- /dev/null +++ b/lib/vdr/osd.rb @@ -0,0 +1,24 @@ +# +# vdr-scripting - A plugin for the Linux Video Disk Recorder +# Copyright (c) 2009 Tobias Grimm <vdr@e-tobi.net> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# +# + +require 'vdr/osd/menu' +require 'vdr/osd/item' +require 'vdr/osd/osdmessage' +require 'vdr/osd/textview' diff --git a/lib/vdr/osd/item.rb b/lib/vdr/osd/item.rb new file mode 100644 index 0000000..4c78040 --- /dev/null +++ b/lib/vdr/osd/item.rb @@ -0,0 +1,48 @@ +# +# vdr-scripting - A plugin for the Linux Video Disk Recorder +# Copyright (c) 2009 Tobias Grimm <vdr@e-tobi.net> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# +# + +module Vdr + module Osd + class Item < Vdr::Swig::COsdItem + attr_reader :text + attr_accessor :context + + def initialize(text = nil) + @text = text + super(text) + end + + def on_select(&block) + @select = block + end + + def process_key(key) + state = super(key) + if key == Vdr::Swig::KOk + if @select + @select.call(self) + end + return Vdr::Swig::OsUnknown + end + return state + end + end + end +end diff --git a/lib/vdr/osd/menu.rb b/lib/vdr/osd/menu.rb new file mode 100644 index 0000000..5284726 --- /dev/null +++ b/lib/vdr/osd/menu.rb @@ -0,0 +1,76 @@ +# +# vdr-scripting - A plugin for the Linux Video Disk Recorder +# Copyright (c) 2009 Tobias Grimm <vdr@e-tobi.net> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# +# + +module Vdr + module Osd + class Menu < Vdr::Swig::COsdMenu + attr_reader :title + def initialize(title=nil) + @title = title + super(@title) + @items = [] + yield(self) if block_given? + end + + def title=(title) + @title = title + set_title(@title) + end + + def add_item(item) + @items << item + add(item) + end + + def [](index) + return @items[index] + end + + def open_sub_menu(menu) + add_sub_menu(menu) + end + + def process_key(key) + state = super(key) + case @close_request + when :close + return Vdr::Swig::OsBack + when :close_all + return Vdr::Swig::OsEnd + end + return state + end + + def close + @close_request = :close + end + + def close_all + @close_request = :close_all + end + + def add_new_item(title) + item = Item.new(title) + add_item(item) + return item + end + end + end +end diff --git a/lib/vdr/osd/osdmessage.rb b/lib/vdr/osd/osdmessage.rb new file mode 100644 index 0000000..c6cfe8d --- /dev/null +++ b/lib/vdr/osd/osdmessage.rb @@ -0,0 +1,29 @@ +# +# vdr-scripting - A plugin for the Linux Video Disk Recorder +# Copyright (c) 2009 Tobias Grimm <vdr@e-tobi.net> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# +# + +module Vdr + module Osd + class OsdMessage + def OsdMessage.Show(message, seconds=5) + Vdr::Swig::COsdMessage.confirm(message, seconds, false) + end + end + end +end diff --git a/lib/vdr/osd/textview.rb b/lib/vdr/osd/textview.rb new file mode 100644 index 0000000..87bce65 --- /dev/null +++ b/lib/vdr/osd/textview.rb @@ -0,0 +1,29 @@ +# +# vdr-scripting - A plugin for the Linux Video Disk Recorder +# Copyright (c) 2009 Tobias Grimm <vdr@e-tobi.net> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# +# + +module Vdr + module Osd + class TextView < Vdr::Swig::CMenuText + def initialize(title, text) + super(title, text) + end + end + end +end diff --git a/lib/vdr/pluginmanager.rb b/lib/vdr/pluginmanager.rb new file mode 100644 index 0000000..182eb51 --- /dev/null +++ b/lib/vdr/pluginmanager.rb @@ -0,0 +1,64 @@ +# +# vdr-scripting - A plugin for the Linux Video Disk Recorder +# Copyright (c) 2009 Tobias Grimm <vdr@e-tobi.net> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# +# + +require 'vdr/osd' + +module Vdr + PLUGINS = [] + class PluginManager < Vdr::Swig::PluginManager + @@plugin_directory = File.expand_path(File.dirname(__FILE__) + '/../../plugins') + def self.plugin_directory + return @@plugin_directory + end + + def self.plugin_directory=(directory) + @@plugin_directory = directory + end + + def initialize + super + load_plugins + end + + def load_plugins + for pluginFile in Dir[@@plugin_directory + '/*.rb'] + Kernel::load(pluginFile, true) + end + end + + def plugin_menu + menu = Vdr::Osd::Menu.new('Script Plug-ins') + for plugin in PLUGINS + for mainMenuEntry, context in plugin.main_menu_entries + item = Vdr::Osd::Item.new(mainMenuEntry) + item.context = {:plugin => plugin, :context => context} + item.on_select do |selected_item| + sub_menu = selected_item.context[:plugin].invoke_menu_item(selected_item.context[:context]) + if (sub_menu) + menu.open_sub_menu(sub_menu) + end + end + menu.add_item(item) + end + end + return menu + end + end +end |