Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/atoidejouer/ui/panel/sound.py
diff options
context:
space:
mode:
Diffstat (limited to 'atoidejouer/ui/panel/sound.py')
-rw-r--r--atoidejouer/ui/panel/sound.py198
1 files changed, 198 insertions, 0 deletions
diff --git a/atoidejouer/ui/panel/sound.py b/atoidejouer/ui/panel/sound.py
new file mode 100644
index 0000000..2a76332
--- /dev/null
+++ b/atoidejouer/ui/panel/sound.py
@@ -0,0 +1,198 @@
+
+# python import
+import logging
+# ..
+from functools import partial
+from gettext import gettext as _
+
+# gtk import
+import gtk
+
+# atoidejouer import
+from atoidejouer.db import story
+from atoidejouer.tools import image, sound, storage, ui
+
+# get application logger
+logger = logging.getLogger('atoidejouer')
+
+
+COLOR_GREY_DARK = ui.get_color(0.5, 0.5, 0.5)
+COLOR_GREY_LIGHT = ui.get_color(0.75, 0.75, 0.75)
+COLOR_GREY_WHITE = ui.get_color(0.85, 0.85, 0.85)
+COLOR_WHITE = ui.get_color(1.0, 1.0, 1.0)
+
+
+def _cb_on_click(button, panel_sound, key):
+ pass
+ # TODO - update edit panel
+
+
+def _cb_on_remove(panel_sound, key, button):
+ # udpate DB
+ story.DB()._del(key)
+ # TODO - update edit panel
+
+
+def _set_bg(widget):
+ widget.modify_bg(gtk.STATE_NORMAL, COLOR_GREY_LIGHT)
+ widget.modify_bg(gtk.STATE_PRELIGHT, COLOR_GREY_WHITE)
+ widget.modify_bg(gtk.STATE_ACTIVE, COLOR_WHITE)
+
+
+def _add_simple_button(parent, icon_name, tooltip, cb):
+ # .. remove button
+ _button = gtk.Button()
+ _button.show()
+ _button.set_tooltip_text(tooltip) # _('Remove ') + filename
+ # cb
+ _button.connect('clicked', cb) # cb, self, filename
+ # add
+ parent.pack_start(_button, expand=False, fill=False)
+ # add a remove image here
+ _img = gtk.Image()
+ _img.show()
+ _button.add(_img)
+ _button.set_size_request(30, 30)
+ # ..
+ _set_bg(_button)
+ # get pixbuff and update image
+ _path = storage.get_icon_path(icon_name)
+ _img.set_from_pixbuf(image.get_pixbuf(_path, 24, 24))
+
+
+class PanelSound(gtk.Frame):
+
+ def __init__(self, screen):
+ # init parent
+ gtk.Frame.__init__(self, _('Sounds'))
+ self.set_border_width(2)
+ self.set_size_request(-1, 140)
+ # do show
+ self.show()
+ # keep item list for the sequence
+ self.keys = list()
+ self._current = None
+ # prepare scrolled window
+ self._scrolled_window = gtk.ScrolledWindow()
+ self._scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
+ self._scrolled_window.show()
+ # a box
+ _hbox = gtk.HBox(homogeneous=False, spacing=2)
+ _hbox.show()
+ self.add(_hbox)
+ # a box
+ self._scrolled_hbox = gtk.HBox(homogeneous=False, spacing=2)
+ self._scrolled_hbox.show()
+ # add box in viewport
+ self._scrolled_window.add_with_viewport(self._scrolled_hbox)
+ # add
+ _hbox.add(self._scrolled_window)
+
+ def clear(self):
+ # keep item list for the sequence
+ self.keys = list()
+ self._current = None
+ # remove graphics
+ _children = self._scrolled_hbox.get_children()
+ for _c in _children:
+ _c.destroy()
+ # add box in viewport
+ self._scrolled_window.add_with_viewport(self._scrolled_hbox)
+
+ def get_current_pos(self):
+ # get children
+ _children = self._scrolled_hbox.get_children()
+ # get button index
+ return _children.index(self._current)\
+ if self._current in _children else 0
+
+ def set_current(self, key):
+ # get children
+ _children = self._scrolled_hbox.get_children()
+ # get new idx index
+ _index = self.keys.index(key)\
+ if key in self.keys else 1000
+ # little check
+ if _index < len(_children):
+ # update current
+ self._current = _children[_index]
+ # update toolbar frame entry
+ if self.screen.toolbar._frame_entry is None:
+ pass
+ else:
+ self.screen.toolbar._frame_entry.set_text(str(_index))
+ else:
+ pass
+
+ def number_of_items(self):
+ return len(self.keys)
+
+ def __remove(self, index):
+ # update list
+ if index + 1 <= len(self.items):
+ self.items.pop(index)
+ # clear current
+ self._current.destroy()
+ self._current = None
+ else:
+ pass
+
+ def remove_current(self):
+ # get button index
+ _index = self.get_current_pos()
+ # do remove
+ self.__remove(_index)
+
+ def remove_item(self, item_name):
+ # get children
+ _children = self._scrolled_hbox.get_children()
+ # get button index
+ _index = _children.index(item_name)\
+ if item_name in _children else 0
+ # do remove
+ self.__remove(_index)
+
+ def add_key(self, key):
+ # ..
+ _item_box = gtk.HBox(homogeneous=False, spacing=2)
+ _item_box.show()
+ self._scrolled_hbox.pack_start(_item_box, expand=False, fill=False)
+ # prepare vbox item
+ _vbox = gtk.VBox(homogeneous=False, spacing=2)
+ _vbox.show()
+ _item_box.pack_start(_vbox, expand=False, fill=False)
+ # simple add
+ if key in self.keys:
+ pass
+ elif pos is None:
+ self.keys.append(key)
+ # add at pos
+ else:
+ self.keys.insert(pos, key)
+ self._scrolled_hbox.reorder_child(_vbox, pos)
+ # init event box to manage color
+ _item = gtk.Button()
+ _vbox.pack_start(_item, expand=False, fill=True)
+ _set_bg(_item)
+ _item.set_size_request(96, 78)
+ _item.set_relief(gtk.RELIEF_NONE)
+ _item.connect('clicked', _cb_on_click, self, key)
+ _item.show()
+ # add a picture here
+ _item_img = gtk.Image()
+ _item_img.show()
+ _item.add(_item_img)
+ # get pixbuff and update image
+ _path = storage.get_image_path('sound', dir_='data')
+ _item_img.set_from_pixbuf(image.get_pixbuf(_path, 96, 62))
+ # add label
+ _label = gtk.Label(key.name)
+ _label.show()
+ # ...
+ _vbox.pack_start(_label, expand=False, fill=True)
+ # remove button
+ _add_simple_button(_item_box, 'less_small', _('Remove ') + key.name,
+ partial(_cb_on_remove, self, key))
+
+ def refresh(self):
+ pass