Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/infoslicer/widgets/Journal_Gallery_View.py
diff options
context:
space:
mode:
authorAneesh Dogra <lionaneesh@gmail.com>2012-12-17 09:19:59 (GMT)
committer Aneesh Dogra <lionaneesh@gmail.com>2012-12-17 09:19:59 (GMT)
commit4e8fd6c953f8570467652bb7ed57a49a17b26cc2 (patch)
tree680d64c3200889762a166dd03eedcd32087b2cd7 /infoslicer/widgets/Journal_Gallery_View.py
parentcd0167548b70263901e25b3b0fc4e715a7c0944b (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.py164
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)