diff options
author | Aneesh Dogra <lionaneesh@gmail.com> | 2012-12-17 09:19:59 (GMT) |
---|---|---|
committer | Aneesh Dogra <lionaneesh@gmail.com> | 2012-12-17 09:19:59 (GMT) |
commit | 4e8fd6c953f8570467652bb7ed57a49a17b26cc2 (patch) | |
tree | 680d64c3200889762a166dd03eedcd32087b2cd7 /infoslicer/widgets/Journal_Gallery_View.py | |
parent | cd0167548b70263901e25b3b0fc4e715a7c0944b (diff) |
Add the functionality to add Journal Images to your articles in infoslicer.
Note: The drag and drop is still broken for Journam_Gallery_View
Diffstat (limited to 'infoslicer/widgets/Journal_Gallery_View.py')
-rw-r--r-- | infoslicer/widgets/Journal_Gallery_View.py | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/infoslicer/widgets/Journal_Gallery_View.py b/infoslicer/widgets/Journal_Gallery_View.py new file mode 100644 index 0000000..7191d80 --- /dev/null +++ b/infoslicer/widgets/Journal_Gallery_View.py @@ -0,0 +1,164 @@ +# -*- coding: utf-8 -*- +# Copyright (C) Aneesh Dogra <lionaneesh@gmail.com> +# +# 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 3 of the License, or +# (at your option) any later version. +# +# You should have received a copy of the GNU General Public License +# along with this library; if not, write to the Free Software +# Foundation, 51 Franklin Street, Suite 500 Boston, MA 02110-1335 USA + +from gi.repository import Gtk +from gi.repository import Gdk +from gi.repository import GObject +from gi.repository import GdkPixbuf +import os +import cPickle +import logging + +from Editable_Textbox import Editable_Textbox +from infoslicer.processing.Article_Data import * +from infoslicer.processing.Article import Article +import book +from infoslicer.processing import Journal_Getter as journal + +logger = logging.getLogger('infoslicer') + +# For journal images +IMG_WIDTH = 400 +IMG_HEIGHT = 300 + +class Journal_Gallery_View( Gtk.HBox ): + """ + Created by Aneesh Dogra + Journal Gallery View + + The journal gallery view displays the jounal images. + + Drag-and-drop methods have been added to set up the images as a drag + source. + The data returned by drag-data-get will be a list containing + an Image_Data object and a Sentence_Data object. + These correspond to the image + and caption respectively. + """ + + def __init__(self): + self.image_list = journal.get_starred_images() + GObject.GObject.__init__(self) + self.current_index = -1 + self.source_article_id = -1 + left_button = Gtk.Button(label="\n\n << \n\n") + right_button = Gtk.Button(label="\n\n >> \n\n") + self.imagenumberlabel = Gtk.Label() + self.image = Gtk.Image() + self.imagebox = Gtk.EventBox() + self.imagebox.add(self.image) + self.imagebox.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, + [], + Gdk.DragAction.COPY) + self.imagebox.drag_source_add_image_targets() + self.imagebox.connect("drag-begin", self.drag_begin_event, None) + logging.debug('##################### Galler_View.connect') + self.imagebox.connect("drag-data-get", self.drag_data_get_event, None) + + self.caption = Gtk.Label(label="") + self.caption.set_line_wrap(True) + + self.image_drag_container = Gtk.VBox() + self.image_drag_container.pack_start(self.imagenumberlabel, expand=False, + fill=False, padding=0) + self.image_drag_container.pack_start(self.imagebox, False, True, 0) + self.image_drag_container.pack_start(self.caption, False, True, 0) + + image_container = Gtk.VBox() + image_container.pack_start(Gtk.Label(" "), True, True, 0) + image_container.pack_start(self.image_drag_container, False, True, 0) + image_container.pack_start(Gtk.Label(" "), True, True, 0) + + left_button_container = Gtk.VBox() + left_button_container.pack_start(Gtk.Label(" "), True, True, 0) + left_button_container.pack_start(left_button, False, True, 0) + left_button_container.pack_start(Gtk.Label(" "), True, True, 0) + + right_button_container = Gtk.VBox() + right_button_container.pack_start(Gtk.Label(" "), True, True, 0) + right_button_container.pack_start(right_button, False, True, 0) + right_button_container.pack_start(Gtk.Label(" "), True, True, 0) + + + self.pack_start(left_button_container, False, True, 0) + self.pack_start(image_container, True, True, 0) + self.pack_start(right_button_container, False, True, 0) + + self.show_all() + right_button.connect("clicked", self.get_next_item, None) + left_button.connect("clicked", self.get_prev_item, None) + self.get_next_item(right_button, None) + + def get_next_item(self, button, param): + if self.image_list == []: + self.caption.set_text("No images were found in the journal.") + self.image.clear() + return + self.current_index += 1 + if self.current_index == len(self.image_list): + self.current_index = 0 + self.imagebuf = GdkPixbuf.Pixbuf.new_from_file(self.image_list[self.current_index][0]) + self.imagebuf = self.imagebuf.scale_simple(IMG_WIDTH, IMG_HEIGHT, + GdkPixbuf.InterpType.BILINEAR) + self.image.set_from_pixbuf(self.imagebuf) + self.caption.set_text("\n" + self.image_list[self.current_index][1]) + self.imagenumberlabel.set_text("(%d / %d)\n" % (self.current_index+1, len(self.image_list))) + + def get_prev_item(self, button, param): + if self.image_list == []: + self.caption.set_text("No images were found in the journal.") + self.image.clear() + return + if self.current_index == 0: + self.current_index = len(self.image_list) + self.current_index -= 1 + self.imagebuf = GdkPixbuf.Pixbuf.new_from_file(self.image_list[self.current_index][0]) + self.imagebuf = self.imagebuf.scale_simple(IMG_WIDTH, IMG_HEIGHT, + GdkPixbuf.InterpType.BILINEAR) + self.image.set_from_pixbuf(self.imagebuf) + self.caption.set_text("\n" + self.image_list[self.current_index][1]) + self.imagenumberlabel.set_text("(%d / %d)\n" % (self.current_index+1, len(self.image_list))) + + def get_first_item(self): + if self.image_list == []: + self.caption.set_text("No images were found in the journal.") + self.image.clear() + return + self.current_index = 0 + self.imagebuf = GdkPixbuf.Pixbuf.new_from_file(self.image_list[self.current_index][0]) + self.imagebuf = self.imagebuf.scale_simple(IMG_WIDTH, IMG_HEIGHT, + GdkPixbuf.InterpType.BILINEAR) + self.image.set_from_pixbuf(self.imagebuf) + self.caption.set_text("\n" + self.image_list[self.current_index][1]) + logger.debug("setting text to:") + logger.debug("(%d / %d)\n" % + (self.current_index+1, len(self.image_list))) + self.imagenumberlabel.set_text("(%d / %d)\n" % (self.current_index+1, len(self.image_list))) + + def drag_begin_event(self, widget, context, data): + logging.debug('########### Journal_Journal_Gallery_View.drag_begin_event called') + self.imagebox.drag_source_set_icon_pixbuf(self.imagebuf) + + def drag_data_get_event(self, widget, context, selection_data, info, timestamp, data): + logger.debug('############# Journal_Journal_Gallery_View.drag_data_get_event') + atom = Gdk.atom_intern("section", only_if_exists=False) + imagedata = Picture_Data(self.source_article_id, + self.image_list[self.current_index][0], None) + captiondata = Sentence_Data(0, self.source_article_id, 0, 0, 0, self.image_list[self.current_index][1]) + paragraph1data = Paragraph_Data(0, self.source_article_id, 0, 0, [imagedata]) + paragraph2data = Paragraph_Data(0, self.source_article_id, 0, 0, [captiondata]) + sectionsdata = [Section_Data(0, self.source_article_id, 0, [paragraph1data, paragraph2data])] + print sectionsdata + string = cPickle.dumps(sectionsdata) #XXX: Here it generates a weird error. + # Even though sectionsdata is not a string, cPickle prints out "cannot pickle + # string objects" + selection_data.set(atom, 8, string) |