Add option to add victory events.
This commit is contained in:
@@ -148,3 +148,41 @@ def show_edit_death_dialog(builder: Gtk.Builder, episode_id: int, death: sql.Dea
|
||||
sql.Penalty.create(size=size, player=entry[3], death=death.id, drink=drink_id)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def show_edit_victory_dialog(builder: Gtk.Builder, episode_id: int, victory: sql.Victory=None):
|
||||
"""Show a dialog for editing or creating victory events.
|
||||
:param builder: A Gtk.Builder object
|
||||
:param episode_id: ID to witch the victory event belongs to
|
||||
:param victory: (Optional) Victory event witch should be edited
|
||||
:return: Gtk.ResponseType of the dialog
|
||||
"""
|
||||
dialog = builder.get_object("edit_victory_dialog") # type: Gtk.Dialog
|
||||
dialog.set_transient_for(builder.get_object("main_window"))
|
||||
with sql.db.atomic():
|
||||
if victory:
|
||||
infos = [['edit_victory_player_combo', victory.player.id],
|
||||
['edit_victory_enemy_combo', victory.enemy.id]]
|
||||
for info in infos:
|
||||
combo = builder.get_object(info[0])
|
||||
index = util.Util.get_index_of_combo_model(combo, 0, info[1])
|
||||
combo.set_active(index)
|
||||
builder.get_object('victory_comment_entry').set_text(victory.info)
|
||||
|
||||
# Run the dialog
|
||||
result = dialog.run()
|
||||
dialog.hide()
|
||||
if result != Gtk.ResponseType.OK:
|
||||
sql.db.rollback()
|
||||
return result
|
||||
|
||||
# Collect info from widgets and save to database
|
||||
player_id = util.Util.get_combo_value(builder.get_object('edit_victory_player_combo'), 0)
|
||||
enemy_id = util.Util.get_combo_value(builder.get_object('edit_victory_enemy_combo'), 3)
|
||||
comment = builder.get_object('victory_comment_entry').get_text()
|
||||
if not victory:
|
||||
sql.Victory.create(episode=episode_id, player=player_id, enemy=enemy_id, info=comment)
|
||||
else:
|
||||
victory.update(player=player_id, enemy=enemy_id, info=comment).execute()
|
||||
|
||||
return result
|
||||
@@ -104,8 +104,14 @@ class GtkUi:
|
||||
penalties = [f'{number}x {drink}' for drink, number in Counter(penalties).items()]
|
||||
penalty_string = ', '.join(penalties)
|
||||
store.append([death.id, death.player.name, death.enemy.name, penalty_string])
|
||||
# Reload victory store for notebook view
|
||||
store = self.ui.get_object('episode_victories_store')
|
||||
store.clear()
|
||||
for victory in episode.victories:
|
||||
store.append([victory.id, victory.player.name, victory.enemy.name, victory.info])
|
||||
|
||||
# Stat grid
|
||||
self.ui.get_object('ep_stat_title').set_text('Stats for episode {}\n"{}"'.format(episode.number, episode.name))
|
||||
self.ui.get_object('ep_death_count_label').set_text(str(len(episode.deaths)))
|
||||
drink_count = sum(len(death.penalties) for death in episode.deaths)
|
||||
self.ui.get_object('ep_drinks_label').set_text(str(drink_count))
|
||||
|
||||
@@ -5,10 +5,11 @@ from dsst_gtk3.handlers.season_handlers import SeasonHandlers
|
||||
from dsst_gtk3.handlers.base_data_handlers import BaseDataHandlers
|
||||
from dsst_gtk3.handlers.dialog_handlers import DialogHandlers
|
||||
from dsst_gtk3.handlers.death_handlers import DeathHandlers
|
||||
from dsst_gtk3.handlers.victory_handlers import VictoryHandlers
|
||||
from dsst_sql import sql_func
|
||||
|
||||
|
||||
class Handlers(SeasonHandlers, BaseDataHandlers, DialogHandlers, DeathHandlers):
|
||||
class Handlers(SeasonHandlers, BaseDataHandlers, DialogHandlers, DeathHandlers, VictoryHandlers):
|
||||
"""Single callback handler class derived from specialized handler classes"""
|
||||
def __init__(self, app):
|
||||
""" Initialize handler class
|
||||
@@ -20,6 +21,7 @@ class Handlers(SeasonHandlers, BaseDataHandlers, DialogHandlers, DeathHandlers):
|
||||
BaseDataHandlers.__init__(self, app)
|
||||
DialogHandlers.__init__(self, app)
|
||||
DeathHandlers.__init__(self, app)
|
||||
VictoryHandlers.__init__(self, app)
|
||||
|
||||
@staticmethod
|
||||
def do_delete_event(*args):
|
||||
|
||||
17
dsst/dsst_gtk3/handlers/victory_handlers.py
Normal file
17
dsst/dsst_gtk3/handlers/victory_handlers.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from gi.repository import Gtk
|
||||
from dsst_gtk3 import dialogs, gtk_ui
|
||||
|
||||
|
||||
class VictoryHandlers:
|
||||
"""Callback handlers for signals related to managing victory events"""
|
||||
def __init__(self, app: 'gtk_ui.GtkUi'):
|
||||
self.app = app
|
||||
|
||||
def do_add_victory(self, *_):
|
||||
ep_id = self.app.get_selected_episode_id()
|
||||
if not ep_id:
|
||||
return
|
||||
result = dialogs.show_edit_victory_dialog(self.app.ui, ep_id)
|
||||
if result == Gtk.ResponseType.OK:
|
||||
self.app.reload_for_season()
|
||||
self.app.reload_for_episode()
|
||||
@@ -22,6 +22,204 @@
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkDialog" id="edit_victory_dialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="title" translatable="yes">Edit Victory Event</property>
|
||||
<property name="resizable">False</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<property name="deletable">False</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">4</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="okButtonRename5">
|
||||
<property name="label">gtk-ok</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="cancelButtonRename1">
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="spacing">5</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_top">5</property>
|
||||
<property name="margin_bottom">5</property>
|
||||
<property name="label" translatable="yes">Enemy</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="edit_victory_enemy_combo">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">enemy_season_store</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_top">5</property>
|
||||
<property name="margin_bottom">5</property>
|
||||
<property name="label" translatable="yes">Player</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="edit_victory_player_combo">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="model">episode_players_store</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText"/>
|
||||
<attributes>
|
||||
<attribute name="text">1</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Comment</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="victory_comment_entry">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="-5">okButtonRename5</action-widget>
|
||||
<action-widget response="-6">cancelButtonRename1</action-widget>
|
||||
</action-widgets>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkListStore" id="enemy_season_store">
|
||||
<columns>
|
||||
<!-- column-name name -->
|
||||
@@ -511,7 +709,18 @@
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkListStore" id="episode_victories_store"/>
|
||||
<object class="GtkListStore" id="episode_victories_store">
|
||||
<columns>
|
||||
<!-- column-name victory_id -->
|
||||
<column type="gint"/>
|
||||
<!-- column-name player_name -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name enemy_name -->
|
||||
<column type="gchararray"/>
|
||||
<!-- column-name comment -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkListStore" id="episodes_store">
|
||||
<columns>
|
||||
<!-- column-name id -->
|
||||
@@ -1270,6 +1479,7 @@
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Add Victory</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="do_add_victory" swapped="no"/>
|
||||
<accelerator key="v" signal="activate" modifiers="GDK_CONTROL_MASK"/>
|
||||
</object>
|
||||
</child>
|
||||
@@ -1569,7 +1779,7 @@
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkLabel" id="ep_stat_label">
|
||||
<object class="GtkLabel" id="ep_stat_title">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">[Episode Stats]</property>
|
||||
@@ -1841,6 +2051,9 @@
|
||||
<property name="title" translatable="yes">Player</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText"/>
|
||||
<attributes>
|
||||
<attribute name="text">1</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
@@ -1849,6 +2062,20 @@
|
||||
<property name="title" translatable="yes">Enemy</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText"/>
|
||||
<attributes>
|
||||
<attribute name="text">2</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeViewColumn">
|
||||
<property name="title" translatable="yes">Comment</property>
|
||||
<child>
|
||||
<object class="GtkCellRendererText"/>
|
||||
<attributes>
|
||||
<attribute name="text">3</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
Reference in New Issue
Block a user