diff options
Diffstat (limited to 'atoidejouer/ui/panel/sound.py')
-rw-r--r-- | atoidejouer/ui/panel/sound.py | 198 |
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 |