Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def parse_opts(opts):
ett = 0
log_level = logging.ERROR
notes_pos = None
for opt, arg in opts:
if opt in ("-h", "--help"):
usage()
sys.exit()
if opt in ("-n", "--notes"):
if arg.lower()[0] == 'n': notes_pos = document.PdfPage.NONE
if arg.lower()[0] == 'l': notes_pos = document.PdfPage.LEFT
if arg.lower()[0] == 'r': notes_pos = document.PdfPage.RIGHT
if arg.lower()[0] == 't': notes_pos = document.PdfPage.TOP
if arg.lower()[0] == 'b': notes_pos = document.PdfPage.BOTTOM
elif opt in ("-t", "--talk-time"):
t = ["0" + n.strip() for n in arg.split(':')]
try:
m = int(t[0])
s = int(t[1])
except ValueError:
print(_("Invalid time (mm or mm:ss expected), got \"{}\"").format(arg))
usage()
sys.exit(2)
except IndexError:
s = 0
ett = m * 60 + s
if page is None:
return PdfPage.NONE
ar = page.get_aspect_ratio()
# "Regular" slides will have an aspect ratio of 4/3, 16/9, 16/10... i.e. in the range [1..2]
# So if the aspect ratio is >= 2, we can assume it is a document with notes on the side.
if ar >= 2:
try:
return PdfPage[horizontal.upper()]
except KeyError:
return PdfPage.RIGHT
# Make exception for classic american letter format and ISO (A4, B5, etc.)
if abs(ar - 8.5 / 11) < 1e-3 or abs(ar - 1 / math.sqrt(2)) < 1e-3:
return PdfPage.NONE
# If the aspect ratio is < 1, we can assume it is a document with notes above or below.
if ar < 1:
try:
return PdfPage[vertical.upper()]
except KeyError:
return PdfPage.BOTTOM
return PdfPage.NONE
def replace_media_overlays(self, current_page, page_type):
""" Remove current media overlays, add new ones if page contains media.
Args:
current_page (:class:`~pympress.document.Page`): The page for which to prepare medias
page_type (:class:`~pympress.document.PdfPage`): The part of the page to consider
"""
if page_type == document.PdfPage.NONE:
return
self.remove_media_overlays()
for relative_margins, filename, show_controls in current_page.get_media():
media_id = hash((relative_margins, filename, show_controls))
if media_id not in self._media_overlays:
mime_type, enc = mimetypes.guess_type(filename)
factory = self.get_factory(mime_type)
if not factory:
logger.warning('No available overlay for mime type {}, ignoring media {}'.format(mime_type, filename))
continue
def get_curryfied_callback(name, media_id = media_id):
except GLib.Error:
if reloading:
return
self.doc = document.Document.create(self, None)
self.error_opening_file(docpath)
extras.FileWatcher.stop_watching()
# Guess notes mode by default if the document has notes
if not reloading:
hpref = self.config.get('notes position', 'horizontal')
vpref = self.config.get('notes position', 'vertical')
self.chosen_notes_mode = target_mode = self.doc.guess_notes(hpref, vpref)
# don't toggle from NONE to NONE
if self.chosen_notes_mode == document.PdfPage.NONE:
self.chosen_notes_mode = document.PdfPage.RIGHT
if self.notes_mode != target_mode:
self.switch_mode('swap_document', docpath, target_mode = target_mode)
# Some things that need updating
self.cache.swap_document(self.doc)
self.page_number.set_last(self.doc.pages_number())
self.page_number.enable_labels(self.doc.has_labels())
self.doc.goto(page)
self.medias.purge_media_overlays()
# Draw the new page(s)
if not reloading:
self.talk_time.pause()
self.timing.reset(int(self.talk_time.delta))
p_frame_cur = None
#: :class:`~Gtk.DrawingArea` for the current slide copy in the Presenter window.
p_da_cur = None
#: :class:`~Gtk.Frame` for the annotations in the Presenter window.
p_frame_annot = None
#: :class:`~Gtk.CheckMenuItem` that shows whether the annotations are toggled
pres_annot = None
#: Indicates whether we should delay redraws on some drawing areas to fluidify resizing gtk.paned
resize_panes = False
#: Tracks return values of GLib.timeout_add to cancel gtk.paned's redraw callbacks
redraw_timeout = 0
#: Whether to use notes mode or not
notes_mode = document.PdfPage.NONE
#: Current choice of mode to toggle notes
chosen_notes_mode = document.PdfPage.RIGHT
#: :class:`~Gtk.CheckMenuItem` that shows whether the annotations are toggled
pres_notes = None
#: Whether to display annotations or not
show_annotations = True
#: Whether to display big buttons or not
show_bigbuttons = True
#: :class:`~Gtk.ToolButton` big button for touch screens, go to previous slide
prev_button = None
#: :class:`~Gtk.ToolButton` big button for touch screens, go to next slide
next_button = None
#: :class:`~Gtk.ToolButton` big button for touch screens, go to scribble on screen
highlight_button = None
def switch_mode(self, widget, event = None, target_mode = None):
""" Switch the display mode to "Notes mode" or "Normal mode" (without notes).
Returns:
`bool`: whether the mode has been toggled.
"""
if issubclass(type(widget), Gtk.CheckMenuItem) and widget.get_active() == bool(self.notes_mode):
# We toggle the menu item which brings us here, but it is somehow already in sync with notes mode.
# Exit to not risk double-toggling. Button is now in sync and can be toggled again correctly.
return False
if target_mode is None:
target_mode = document.PdfPage.NONE if self.notes_mode else self.chosen_notes_mode
if target_mode == self.notes_mode:
return False
self.scribbler.disable_scribbling()
if target_mode and not self.notes_mode:
self.swap_layout('plain', 'notes')
elif not target_mode and self.notes_mode:
self.swap_layout('notes', 'plain')
self.notes_mode = target_mode
page_type = self.notes_mode.complement()
self.cache.set_widget_type('c_da', page_type)
self.cache.set_widget_type('c_da_zoomed', page_type)