projects
/
projects
/
chimara
/
chimara.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
0d17103
)
PEP8 cleanup in player.py
author
Philip Chimento
<philip.chimento@gmail.com>
Sat, 25 Aug 2012 21:00:32 +0000
(23:00 +0200)
committer
Philip Chimento
<philip.chimento@gmail.com>
Sat, 25 Aug 2012 21:00:32 +0000
(23:00 +0200)
player/player.py
patch
|
blob
|
history
diff --git
a/player/player.py
b/player/player.py
index f0dc22128d854e465bba1c1cfc1c5ca6e7d297c4..e3046d9f334c1625605dacffac44cdb793e1acd0 100644
(file)
--- a/
player/player.py
+++ b/
player/player.py
@@
-2,30
+2,31
@@
import sys
import os.path
import sys
import os.path
-from gi.repository import GObject, Gdk, Gio, Gtk, Chimara
+from gi.repository import GObject, G
Lib, G
dk, Gio, Gtk, Chimara
import config
# FIXME: Dummy translation function, for now
_ = lambda x: x
import config
# FIXME: Dummy translation function, for now
_ = lambda x: x
+
class Player(GObject.GObject):
__gtype_name__ = 'ChimaraPlayer'
class Player(GObject.GObject):
__gtype_name__ = 'ChimaraPlayer'
-
+
def __init__(self):
super(Player, self).__init__()
def __init__(self):
super(Player, self).__init__()
-
+
# FIXME: should use the Keyfile backend, but that's not available from
# Python
self.prefs_settings = Gio.Settings('org.chimara-if.player.preferences')
self.state_settings = Gio.Settings('org.chimara-if.player.state')
# FIXME: should use the Keyfile backend, but that's not available from
# Python
self.prefs_settings = Gio.Settings('org.chimara-if.player.preferences')
self.state_settings = Gio.Settings('org.chimara-if.player.state')
-
+
builder = Gtk.Builder()
builder.add_from_file('chimara.ui')
self.window = builder.get_object('chimara')
self.aboutwindow = builder.get_object('aboutwindow')
self.prefswindow = builder.get_object('prefswindow')
actiongroup = builder.get_object('actiongroup')
builder = Gtk.Builder()
builder.add_from_file('chimara.ui')
self.window = builder.get_object('chimara')
self.aboutwindow = builder.get_object('aboutwindow')
self.prefswindow = builder.get_object('prefswindow')
actiongroup = builder.get_object('actiongroup')
-
+
# Set the default value of the "View/Toolbar" menu item upon creation
# of a new window to the "show-toolbar-default" setting, but bind the
# setting one-way only - we don't want toolbars to disappear suddenly
# Set the default value of the "View/Toolbar" menu item upon creation
# of a new window to the "show-toolbar-default" setting, but bind the
# setting one-way only - we don't want toolbars to disappear suddenly
@@
-34,14
+35,14
@@
class Player(GObject.GObject):
self.state_settings.get_boolean('show-toolbar-default')
self.state_settings.bind('show-toolbar-default', toolbar_action,
'active', Gio.SettingsBindFlags.SET)
self.state_settings.get_boolean('show-toolbar-default')
self.state_settings.bind('show-toolbar-default', toolbar_action,
'active', Gio.SettingsBindFlags.SET)
-
+
filt = Gtk.RecentFilter()
for pattern in ['*.z[1-8]', '*.[zg]lb', '*.[zg]blorb', '*.ulx', '*.blb',
'*.blorb']:
filt.add_pattern(pattern)
recent = builder.get_object('recent')
recent.add_filter(filt)
filt = Gtk.RecentFilter()
for pattern in ['*.z[1-8]', '*.[zg]lb', '*.[zg]blorb', '*.ulx', '*.blb',
'*.blorb']:
filt.add_pattern(pattern)
recent = builder.get_object('recent')
recent.add_filter(filt)
-
+
uimanager = Gtk.UIManager()
uimanager.add_ui_from_file('chimara.menus')
uimanager.insert_action_group(actiongroup, 0)
uimanager = Gtk.UIManager()
uimanager.add_ui_from_file('chimara.menus')
uimanager.insert_action_group(actiongroup, 0)
@@
-52,20
+53,20
@@
class Player(GObject.GObject):
toolbar.show()
else:
toolbar.hide()
toolbar.show()
else:
toolbar.hide()
-
+
# Connect the accelerators
accels = uimanager.get_accel_group()
self.window.add_accel_group(accels)
# Connect the accelerators
accels = uimanager.get_accel_group()
self.window.add_accel_group(accels)
-
+
self.glk = Chimara.IF()
self.glk.props.ignore_errors = True
self.glk.set_css_from_file('style.css')
self.glk = Chimara.IF()
self.glk.props.ignore_errors = True
self.glk.set_css_from_file('style.css')
-
+
vbox = builder.get_object('vbox')
vbox.pack_end(self.glk, True, True, 0)
vbox.pack_start(menubar, False, False, 0)
vbox.pack_start(toolbar, False, False, 0)
vbox = builder.get_object('vbox')
vbox.pack_end(self.glk, True, True, 0)
vbox.pack_start(menubar, False, False, 0)
vbox.pack_start(toolbar, False, False, 0)
-
+
#builder.connect_signals(self) # FIXME Segfaults?!
builder.get_object('open').connect('activate', self.on_open_activate)
builder.get_object('restore').connect('activate',
#builder.connect_signals(self) # FIXME Segfaults?!
builder.get_object('open').connect('activate', self.on_open_activate)
builder.get_object('restore').connect('activate',
@@
-90,13
+91,13
@@
class Player(GObject.GObject):
self.prefswindow.connect('delete-event',
lambda x, *args: x.hide_on_delete())
# FIXME Delete to here when above bug is fixed
self.prefswindow.connect('delete-event',
lambda x, *args: x.hide_on_delete())
# FIXME Delete to here when above bug is fixed
-
+
self.glk.connect('notify::program-name', self.change_window_title)
self.glk.connect('notify::story-name', self.change_window_title)
self.glk.connect('notify::program-name', self.change_window_title)
self.glk.connect('notify::story-name', self.change_window_title)
-
+
# Create preferences window
# TODO
# Create preferences window
# TODO
-
+
def change_window_title(self, glk, pspec, data=None):
if glk.props.program_name is None:
title = "Chimara"
def change_window_title(self, glk, pspec, data=None):
if glk.props.program_name is None:
title = "Chimara"
@@
-107,25
+108,26
@@
class Player(GObject.GObject):
interp=glk.props.program_name,
story=glk.props.story_name)
self.window.props.title = title
interp=glk.props.program_name,
story=glk.props.story_name)
self.window.props.title = title
-
+
def on_open_activate(self, action, data=None):
def on_open_activate(self, action, data=None):
- if not self.confirm_open_new_game(): return
-
+ if not self.confirm_open_new_game():
+ return
+
dialog = Gtk.FileChooserDialog(_('Open Game'), self.window,
Gtk.FileChooserAction.OPEN,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN, Gtk.ResponseType.ACCEPT))
dialog = Gtk.FileChooserDialog(_('Open Game'), self.window,
Gtk.FileChooserAction.OPEN,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OPEN, Gtk.ResponseType.ACCEPT))
-
+
# Get last opened path
path = _maybe(self.state_settings.get_value('last-open-path'))
if path is not None:
dialog.set_current_folder(path)
# Get last opened path
path = _maybe(self.state_settings.get_value('last-open-path'))
if path is not None:
dialog.set_current_folder(path)
-
+
response = dialog.run()
dialog.hide()
if response != Gtk.ResponseType.ACCEPT:
return
response = dialog.run()
dialog.hide()
if response != Gtk.ResponseType.ACCEPT:
return
-
+
gamefile = dialog.get_file()
self.search_for_graphics_file(gamefile.get_path())
try:
gamefile = dialog.get_file()
self.search_for_graphics_file(gamefile.get_path())
try:
@@
-133,24
+135,25
@@
class Player(GObject.GObject):
except GLib.Error as e:
error_dialog(self.window, _('Could not open game file {filename}: {errmsg}').format(filename=gamefile.get_path(), errmsg=e.message))
return
except GLib.Error as e:
error_dialog(self.window, _('Could not open game file {filename}: {errmsg}').format(filename=gamefile.get_path(), errmsg=e.message))
return
-
+
path = dialog.get_current_folder()
if path is not None:
self.state_settings.last_open_path = path
path = dialog.get_current_folder()
if path is not None:
self.state_settings.last_open_path = path
-
+
# Add file to recent files list
manager = Gtk.RecentManager.get_default()
uri = gamefile.get_uri()
manager.add_item(uri)
# Add file to recent files list
manager = Gtk.RecentManager.get_default()
uri = gamefile.get_uri()
manager.add_item(uri)
-
+
dialog.destroy()
def on_recent_item_activated(self, chooser, data=None):
dialog.destroy()
def on_recent_item_activated(self, chooser, data=None):
- if not self.confirm_open_new_game(): return
-
+ if not self.confirm_open_new_game():
+ return
+
uri = chooser.get_current_uri()
gamefile = Gio.file_new_for_uri(uri)
uri = chooser.get_current_uri()
gamefile = Gio.file_new_for_uri(uri)
-
+
self.search_for_graphics_file(gamefile.get_path())
try:
self.glk.run_game_file(gamefile)
self.search_for_graphics_file(gamefile.get_path())
try:
self.glk.run_game_file(gamefile)
@@
-160,7
+163,7
@@
class Player(GObject.GObject):
filename=gamefile.get_basename(),
errmsg=e.message))
return
filename=gamefile.get_basename(),
errmsg=e.message))
return
-
+
# Add file to recent files list again, this updates it to most recently
# used
manager = Gtk.RecentManager.get_default()
# Add file to recent files list again, this updates it to most recently
# used
manager = Gtk.RecentManager.get_default()
@@
-175,20
+178,20
@@
class Player(GObject.GObject):
def on_copy_activate(self, action, data=None):
focus = self.window.get_focus()
# Call "copy clipboard" on any widget that defines it
def on_copy_activate(self, action, data=None):
focus = self.window.get_focus()
# Call "copy clipboard" on any widget that defines it
- if (isinstance(focus, Gtk.Label)
- or isinstance(focus, Gtk.Entry)
+ if (isinstance(focus, Gtk.Label)
+ or isinstance(focus, Gtk.Entry)
or isinstance(focus, Gtk.TextView)):
focus.emit('copy-clipboard')
or isinstance(focus, Gtk.TextView)):
focus.emit('copy-clipboard')
-
+
def on_paste_activate(self, action, data=None):
focus = self.window.get_focus()
# Call "paste clipboard" on any widget that defines it
if isinstance(focus, Gtk.Entry) or isinstance(focus, Gtk.TextView):
focus.emit('paste-clipboard')
def on_paste_activate(self, action, data=None):
focus = self.window.get_focus()
# Call "paste clipboard" on any widget that defines it
if isinstance(focus, Gtk.Entry) or isinstance(focus, Gtk.TextView):
focus.emit('paste-clipboard')
-
+
def on_preferences_activate(self, action, data=None):
self.prefswindow.present()
def on_preferences_activate(self, action, data=None):
self.prefswindow.present()
-
+
def on_toolbar_toggled(self, action, data=None):
if action.get_active():
self.toolbar.show()
def on_toolbar_toggled(self, action, data=None):
if action.get_active():
self.toolbar.show()
@@
-217,15
+220,16
@@
class Player(GObject.GObject):
def on_window_delete_event(self, widget, event, data=None):
Gtk.main_quit()
return True
def on_window_delete_event(self, widget, event, data=None):
Gtk.main_quit()
return True
-
+
def confirm_open_new_game(self):
"""
If a game is running in the Glk widget, warn the user that they will
quit the currently running game if they open a new one. Returns True if
def confirm_open_new_game(self):
"""
If a game is running in the Glk widget, warn the user that they will
quit the currently running game if they open a new one. Returns True if
- no game
was running. Returns False if the user cancelled. Returns True
+ no game was running. Returns False if the user cancelled. Returns True
and shuts down the running game if the user wishes to continue.
"""
and shuts down the running game if the user wishes to continue.
"""
- if not self.glk.props.running: return True
+ if not self.glk.props.running:
+ return True
dialog = Gtk.MessageDialog(self.window,
Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
dialog = Gtk.MessageDialog(self.window,
Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,
@@
-237,38
+241,41
@@
class Player(GObject.GObject):
dialog.add_button(Gtk.STOCK_OPEN, Gtk.ResponseType.OK)
response = dialog.run()
dialog.hide()
dialog.add_button(Gtk.STOCK_OPEN, Gtk.ResponseType.OK)
response = dialog.run()
dialog.hide()
-
+
if response != Gtk.ResponseType.OK:
return False
if response != Gtk.ResponseType.OK:
return False
-
+
self.glk.stop()
self.glk.wait()
return True
self.glk.stop()
self.glk.wait()
return True
-
+
def search_for_graphics_file(self, filename):
"""Internal function: See if there is a corresponding graphics file"""
def search_for_graphics_file(self, filename):
"""Internal function: See if there is a corresponding graphics file"""
-
+
# First get the name of the story file
base = os.path.basename(filename)
base_noext = os.path.splitext(base)[0]
# Check in the stored resource path, if set
resource_path = _maybe(self.prefs_settings.get_value('resource-path'))
# First get the name of the story file
base = os.path.basename(filename)
base_noext = os.path.splitext(base)[0]
# Check in the stored resource path, if set
resource_path = _maybe(self.prefs_settings.get_value('resource-path'))
-
+
# Otherwise check in the current directory
if resource_path is None:
resource_path = os.path.dirname(filename)
# Otherwise check in the current directory
if resource_path is None:
resource_path = os.path.dirname(filename)
-
+
blorbfile = os.path.join(resource_path, base_noext + '.blb')
if os.path.exists(blorbfile):
blorbfile = os.path.join(resource_path, base_noext + '.blb')
if os.path.exists(blorbfile):
- glk.graphics_file = blorbfile
+ self.glk.graphics_file = blorbfile
+
def _maybe(variant):
"""Gets a maybe value from a GVariant - not handled in PyGI"""
v = variant.get_maybe()
def _maybe(variant):
"""Gets a maybe value from a GVariant - not handled in PyGI"""
v = variant.get_maybe()
- if v is None: return None
+ if v is None:
+ return None
return v.unpack()
return v.unpack()
+
def error_dialog(parent, message):
dialog = Gtk.MessageDialog(parent, Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MessageType.ERROR, Gtk.ButtonsType.OK, message)
def error_dialog(parent, message):
dialog = Gtk.MessageDialog(parent, Gtk.DialogFlags.DESTROY_WITH_PARENT,
Gtk.MessageType.ERROR, Gtk.ButtonsType.OK, message)
@@
-291,13
+298,12
@@
if __name__ == '__main__':
_("Error starting Glk library: {errmsg}").format(
errmsg=e.message))
sys.exit(1)
_("Error starting Glk library: {errmsg}").format(
errmsg=e.message))
sys.exit(1)
-
+
Gdk.threads_enter()
Gtk.main()
Gdk.threads_leave()
Gdk.threads_enter()
Gtk.main()
Gdk.threads_leave()
-
+
player.glk.stop()
player.glk.wait()
player.glk.stop()
player.glk.wait()
-
- sys.exit(0)
+ sys.exit(0)