Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/epubview
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2011-11-03 19:52:20 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2011-12-08 16:48:44 (GMT)
commit13cd62468db76758ecef0fa78fa77eef866b1db7 (patch)
treea0dfbd5f30e3b7ea62675fd7e1d329ddc6009bf1 /epubview
parent035bc9a388dc86e467b4767b8df1380bc8e8fdbd (diff)
Initial port to Gtk3
Diffstat (limited to 'epubview')
-rw-r--r--epubview/__init__.py4
-rw-r--r--epubview/epubview.py85
-rw-r--r--epubview/jobs.py37
-rw-r--r--epubview/navmap.py12
-rw-r--r--epubview/widgets.py7
5 files changed, 78 insertions, 67 deletions
diff --git a/epubview/__init__.py b/epubview/__init__.py
index 5051bdf..adff032 100644
--- a/epubview/__init__.py
+++ b/epubview/__init__.py
@@ -15,9 +15,9 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-import gobject
+from gi.repository import GObject
-gobject.threads_init()
+GObject.threads_init()
from epub import _Epub as Epub
from epubview import _View as EpubView
diff --git a/epubview/epubview.py b/epubview/epubview.py
index c4b3df0..56334f6 100644
--- a/epubview/epubview.py
+++ b/epubview/epubview.py
@@ -15,8 +15,9 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import GObject
+from gi.repository import Gdk
import widgets
import os.path
@@ -34,23 +35,23 @@ LOADING_HTML = '''
'''
-class _View(gtk.HBox):
+class _View(Gtk.HBox):
__gproperties__ = {
- 'scale': (gobject.TYPE_FLOAT, 'the zoom level',
+ 'scale': (GObject.TYPE_FLOAT, 'the zoom level',
'the zoom level of the widget',
- 0.5, 4.0, 1.0, gobject.PARAM_READWRITE),
+ 0.5, 4.0, 1.0, GObject.PARAM_READWRITE),
}
__gsignals__ = {
- 'page-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'page-changed': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([int, int])),
- 'selection-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,
+ 'selection-changed': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE,
([])),
}
def __init__(self):
- gobject.threads_init()
- gtk.HBox.__init__(self)
+ GObject.threads_init()
+ Gtk.HBox.__init__(self)
self.connect("destroy", self._destroy_cb)
@@ -70,7 +71,7 @@ class _View(gtk.HBox):
self.__in_search = False
self.__search_fwd = True
- self._sw = gtk.ScrolledWindow()
+ self._sw = Gtk.ScrolledWindow()
self._view = widgets._WebView()
self._view.load_string(LOADING_HTML, 'text/html', 'utf-8', '/')
settings = self._view.get_settings()
@@ -88,27 +89,29 @@ class _View(gtk.HBox):
self._view_populate_popup_cb)
self._sw.add(self._view)
- self._sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
+ self._sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER)
self._v_vscrollbar = self._sw.get_vscrollbar()
self._v_scrollbar_value_changed_cb_id = \
self._v_vscrollbar.connect('value-changed', \
self._v_scrollbar_value_changed_cb)
- self._scrollbar = gtk.VScrollbar()
- self._scrollbar.set_update_policy(gtk.UPDATE_DISCONTINUOUS)
+ self._scrollbar = Gtk.VScrollbar()
+ # TODO
+ # self._scrollbar.set_update_policy(Gtk.UPDATE_DISCONTINUOUS)
self._scrollbar_change_value_cb_id = \
self._scrollbar.connect('change-value', \
self._scrollbar_change_value_cb)
- self.pack_start(self._sw, expand=True, fill=True)
- self.pack_start(self._scrollbar, expand=False, fill=False)
+ self.pack_start(self._sw, True, True, 0)
+ self.pack_start(self._scrollbar, False, False, 0)
- self._view.set_flags(gtk.CAN_DEFAULT | gtk.CAN_FOCUS)
+ self._view.set_can_default(True)
+ self._view.set_can_focus(True)
def set_document(self, epubdocumentinstance):
'''
Sets document (should be a Epub instance)
'''
self._epub = epubdocumentinstance
- gobject.idle_add(self._paginate)
+ GObject.idle_add(self._paginate)
def do_get_property(self, property):
if property.name == 'has-selection':
@@ -248,36 +251,36 @@ class _View(gtk.HBox):
Scrolls through the pages.
Scrolling is horizontal if horizontal is set to True
Valid scrolltypes are:
- gtk.SCROLL_PAGE_BACKWARD, gtk.SCROLL_PAGE_FORWARD,
- gtk.SCROLL_STEP_BACKWARD, gtk.SCROLL_STEP_FORWARD
- gtk.SCROLL_STEP_START and gtk.SCROLL_STEP_STOP
+ Gtk.ScrollType.PAGE_BACKWARD, Gtk.ScrollType.PAGE_FORWARD,
+ Gtk.ScrollType.STEP_BACKWARD, Gtk.ScrollType.STEP_FORWARD
+ Gtk.ScrollType.STEP_START and Gtk.ScrollType.STEP_STOP
'''
- if scrolltype == gtk.SCROLL_PAGE_BACKWARD:
+ if scrolltype == Gtk.ScrollType.PAGE_BACKWARD:
self.__going_back = True
self.__going_fwd = False
if not self._do_page_transition():
- self._view.move_cursor(gtk.MOVEMENT_PAGES, -1)
- elif scrolltype == gtk.SCROLL_PAGE_FORWARD:
+ self._view.move_cursor(Gtk.MovementStep.PAGES, -1)
+ elif scrolltype == Gtk.ScrollType.PAGE_FORWARD:
self.__going_back = False
self.__going_fwd = True
if not self._do_page_transition():
- self._view.move_cursor(gtk.MOVEMENT_PAGES, 1)
- elif scrolltype == gtk.SCROLL_STEP_BACKWARD:
+ self._view.move_cursor(Gtk.MovementStep.PAGES, 1)
+ elif scrolltype == Gtk.ScrollType.STEP_BACKWARD:
self.__going_fwd = False
self.__going_back = True
if not self._do_page_transition():
- self._view.move_cursor(gtk.MOVEMENT_DISPLAY_LINES, -1)
- elif scrolltype == gtk.SCROLL_STEP_FORWARD:
+ self._view.move_cursor(Gtk.MovementStep.DISPLAY_LINES, -1)
+ elif scrolltype == Gtk.ScrollType.STEP_FORWARD:
self.__going_fwd = True
self.__going_back = False
if not self._do_page_transition():
- self._view.move_cursor(gtk.MOVEMENT_DISPLAY_LINES, 1)
- elif scrolltype == gtk.SCROLL_START:
+ self._view.move_cursor(Gtk.MovementStep.DISPLAY_LINES, 1)
+ elif scrolltype == Gtk.ScrollType.START:
self.__going_back = True
self.__going_fwd = False
if not self._do_page_transition():
self.set_current_page(1)
- elif scrolltype == gtk.SCROLL_END:
+ elif scrolltype == Gtk.ScrollType.END:
self.__going_back = False
self.__going_fwd = True
if not self._do_page_transition():
@@ -360,7 +363,7 @@ class _View(gtk.HBox):
| view.can_cut_clipboard())
def _view_keypress_event_cb(self, view, event):
- name = gtk.gdk.keyval_name(event.keyval)
+ name = Gdk.keyval_name(event.keyval)
if name == 'Page_Down' or name == 'Down':
self.__going_back = False
self.__going_fwd = True
@@ -371,10 +374,10 @@ class _View(gtk.HBox):
self._do_page_transition()
def _view_scroll_event_cb(self, view, event):
- if event.direction == gtk.gdk.SCROLL_DOWN:
+ if event.direction == Gdk.ScrollDirection.DOWN:
self.__going_back = False
self.__going_fwd = True
- elif event.direction == gtk.gdk.SCROLL_UP:
+ elif event.direction == Gdk.ScrollDirection.UP:
self.__going_back = True
self.__going_fwd = False
@@ -398,7 +401,7 @@ class _View(gtk.HBox):
def _view_load_finished_cb(self, v, frame):
# Normally the line below would not be required - ugly workaround for
# possible Webkit bug. See : https://bugs.launchpad.net/bugs/483231
- self._sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
+ self._sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.NEVER)
filename = self._view.props.uri.replace('file://', '')
if os.path.exists(filename.replace('xhtml', 'xml')):
@@ -626,19 +629,19 @@ class _View(gtk.HBox):
self._load_page(pageno)
def _scrollbar_change_value_cb(self, range, scrolltype, value):
- if scrolltype == gtk.SCROLL_STEP_FORWARD:
+ if scrolltype == Gtk.ScrollType.STEP_FORWARD:
self.__going_fwd = True
self.__going_back = False
if not self._do_page_transition():
- self._view.move_cursor(gtk.MOVEMENT_DISPLAY_LINES, 1)
- elif scrolltype == gtk.SCROLL_STEP_BACKWARD:
+ self._view.move_cursor(Gtk.MovementStep.DISPLAY_LINES, 1)
+ elif scrolltype == Gtk.ScrollType.STEP_BACKWARD:
self.__going_fwd = False
self.__going_back = True
if not self._do_page_transition():
- self._view.move_cursor(gtk.MOVEMENT_DISPLAY_LINES, -1)
- elif scrolltype == gtk.SCROLL_JUMP or \
- scrolltype == gtk.SCROLL_PAGE_FORWARD or \
- scrolltype == gtk.SCROLL_PAGE_BACKWARD:
+ self._view.move_cursor(Gtk.MovementStep.DISPLAY_LINES, -1)
+ elif scrolltype == Gtk.ScrollType.JUMP or \
+ scrolltype == Gtk.ScrollType.PAGE_FORWARD or \
+ scrolltype == Gtk.ScrollType.PAGE_BACKWARD:
if value > self._scrollbar.props.adjustment.props.upper:
self._load_page(self._pagecount)
else:
diff --git a/epubview/jobs.py b/epubview/jobs.py
index a0b6771..ba28396 100644
--- a/epubview/jobs.py
+++ b/epubview/jobs.py
@@ -16,8 +16,9 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-import gobject
-import gtk
+from gi.repository import GObject
+from gi.repository import Gtk
+from gi.repository import Gdk
import widgets
import cairo
@@ -60,10 +61,10 @@ class SearchThread(threading.Thread):
self.obj._matchfilelist.append(entry)
f.close()
- gtk.gdk.threads_enter()
+ Gdk.threads_enter()
self.obj._finished = True
self.obj.emit('updated')
- gtk.gdk.threads_leave()
+ Gdk.threads_leave()
return False
@@ -85,14 +86,14 @@ class SearchThread(threading.Thread):
self.stopthread.set()
-class _JobPaginator(gobject.GObject):
+class _JobPaginator(GObject.GObject):
__gsignals__ = {
- 'paginated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])),
+ 'paginated': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE, ([])),
}
def __init__(self, filelist):
- gobject.GObject.__init__(self)
+ GObject.GObject.__init__(self)
self._filelist = filelist
self._filedict = {}
@@ -102,7 +103,9 @@ class _JobPaginator(gobject.GObject):
self._count = 0
self._pagecount = 0
- self._screen = gtk.gdk.screen_get_default()
+ #TODO
+ """
+ self._screen = Gdk.Screen.get_default()
self._old_fontoptions = self._screen.get_font_options()
options = cairo.FontOptions()
options.set_hint_style(cairo.HINT_STYLE_MEDIUM)
@@ -110,8 +113,9 @@ class _JobPaginator(gobject.GObject):
options.set_subpixel_order(cairo.SUBPIXEL_ORDER_DEFAULT)
options.set_hint_metrics(cairo.HINT_METRICS_DEFAULT)
self._screen.set_font_options(options)
+ """
- self._temp_win = gtk.Window()
+ self._temp_win = Gtk.Window()
self._temp_view = widgets._WebView()
settings = self._temp_view.get_settings()
@@ -127,8 +131,8 @@ class _JobPaginator(gobject.GObject):
settings.props.default_monospace_font_size = 10
settings.props.default_encoding = 'utf-8'
- sw = gtk.ScrolledWindow()
- sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
+ sw = Gtk.ScrolledWindow()
+ sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER)
self._dpi = 96
sw.set_size_request(_mm_to_pixel(PAGE_WIDTH, self._dpi),
_mm_to_pixel(PAGE_HEIGHT, self._dpi))
@@ -164,7 +168,8 @@ class _JobPaginator(gobject.GObject):
if self._count + 1 >= len(self._filelist):
self._temp_win.destroy()
- self._screen.set_font_options(self._old_fontoptions)
+ # TODO
+ #self._screen.set_font_options(self._old_fontoptions)
self.emit('paginated')
else:
self._count += 1
@@ -224,15 +229,15 @@ class _JobPaginator(gobject.GObject):
return self._bookheight
-class _JobFind(gobject.GObject):
+class _JobFind(GObject.GObject):
__gsignals__ = {
- 'updated': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])),
+ 'updated': (GObject.SignalFlags.RUN_FIRST, GObject.TYPE_NONE, ([])),
}
def __init__(self, document, start_page, n_pages, text,
case_sensitive=False):
- gobject.GObject.__init__(self)
- gtk.gdk.threads_init()
+ GObject.GObject.__init__(self)
+ Gdk.threads_init()
self._finished = False
self._document = document
diff --git a/epubview/navmap.py b/epubview/navmap.py
index 612f2d1..fa3713b 100644
--- a/epubview/navmap.py
+++ b/epubview/navmap.py
@@ -1,5 +1,6 @@
from lxml import etree
-import gtk
+from gi.repository import Gtk
+import logging
class NavPoint(object):
@@ -25,7 +26,7 @@ class NavMap(object):
self._opffile = opffile
self._tree = etree.parse(ncxfile)
self._root = self._tree.getroot()
- self._gtktreestore = gtk.TreeStore(str, str)
+ self._gtktreestore = Gtk.TreeStore(str, str)
self._flattoc = []
self._populate_flattoc()
@@ -62,8 +63,11 @@ class NavMap(object):
def _getcontent(self, navpoint):
text = navpoint.find(
- './{http://www.daisy.org/z3986/2005/ncx/}content/')
- return self._basepath + text.get('src')
+ './{http://www.daisy.org/z3986/2005/ncx/}content')
+ if text is not None:
+ return self._basepath + text.get('src')
+ else:
+ return ""
def _process_navpoint(self, navpoint, parent=None):
title = self._gettitle(navpoint)
diff --git a/epubview/widgets.py b/epubview/widgets.py
index a603c34..39c52ce 100644
--- a/epubview/widgets.py
+++ b/epubview/widgets.py
@@ -1,10 +1,9 @@
-import webkit
-import gtk
+from gi.repository import WebKit
-class _WebView(webkit.WebView):
+class _WebView(WebKit.WebView):
def __init__(self):
- webkit.WebView.__init__(self)
+ WebKit.WebView.__init__(self)
def get_page_height(self):
'''