From 93841e9b35156a97f57cc6cf0d751882b806218d Mon Sep 17 00:00:00 2001 From: Sander Land Date: Tue, 1 Dec 2020 23:09:02 +0100 Subject: [PATCH] save as --- README.md | 5 +- katrain/__main__.py | 50 ++++++++++++++---- katrain/core/game.py | 28 ++++------ katrain/gui.kv | 6 +-- katrain/gui/popups.py | 16 +++++- .../i18n/locales/cn/LC_MESSAGES/katrain.mo | Bin 14060 -> 14177 bytes .../i18n/locales/cn/LC_MESSAGES/katrain.po | 15 ++++++ .../i18n/locales/de/LC_MESSAGES/katrain.mo | Bin 15824 -> 15941 bytes .../i18n/locales/de/LC_MESSAGES/katrain.po | 15 ++++++ .../i18n/locales/en/LC_MESSAGES/katrain.mo | Bin 15484 -> 15601 bytes .../i18n/locales/en/LC_MESSAGES/katrain.po | 12 +++++ .../i18n/locales/es/LC_MESSAGES/katrain.mo | Bin 15618 -> 15735 bytes .../i18n/locales/es/LC_MESSAGES/katrain.po | 15 ++++++ .../i18n/locales/fr/LC_MESSAGES/katrain.mo | Bin 17337 -> 17454 bytes .../i18n/locales/fr/LC_MESSAGES/katrain.po | 15 ++++++ .../i18n/locales/jp/LC_MESSAGES/katrain.mo | Bin 17886 -> 18003 bytes .../i18n/locales/jp/LC_MESSAGES/katrain.po | 15 ++++++ .../i18n/locales/ko/LC_MESSAGES/katrain.mo | Bin 17301 -> 17418 bytes .../i18n/locales/ko/LC_MESSAGES/katrain.po | 15 ++++++ .../i18n/locales/ru/LC_MESSAGES/katrain.mo | Bin 22575 -> 22692 bytes .../i18n/locales/ru/LC_MESSAGES/katrain.po | 15 ++++++ katrain/img/Save-Game - As.png | Bin 0 -> 9821 bytes katrain/popups.kv | 17 +++--- 23 files changed, 196 insertions(+), 43 deletions(-) create mode 100644 katrain/img/Save-Game - As.png diff --git a/README.md b/README.md index ca0f226..1390f51 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![License:MIT](https://img.shields.io/pypi/l/katrain)](https://en.wikipedia.org/wiki/MIT_License) [![GitHub Downloads](https://img.shields.io/github/downloads/sanderland/katrain/total?color=%23336699&label=github%20downloads)](https://github.com/sanderland/katrain/releases) [![PyPI Downloads](https://pepy.tech/badge/katrain)](https://pepy.tech/project/katrain) -[![Github sponsors](https://img.shields.io/static/v1?label=sponsor&message=7&logo=GitHub&color=dcb424&link=https://github.com/sponsors/sanderland/)](https://github.com/sponsors/sanderland) +[![Github sponsors](https://img.shields.io/static/v1?label=sponsor&message=6&logo=GitHub&color=dcb424&link=https://github.com/sponsors/sanderland/)](https://github.com/sponsors/sanderland) [![Discord](https://img.shields.io/discord/417022162348802048?logo=discord)](https://discord.com/channels/417022162348802048/629446365688365067) @@ -27,9 +27,8 @@ EnglishGermanFrench -Spanish -
Russian +
ChineseKoreanJapanese diff --git a/katrain/__main__.py b/katrain/__main__.py index 9463fdb..de8e706 100644 --- a/katrain/__main__.py +++ b/katrain/__main__.py @@ -66,7 +66,7 @@ from katrain.core.constants import ( PLAYING_NORMAL, PLAYER_HUMAN, ) -from katrain.gui.popups import ConfigTeacherPopup, ConfigTimerPopup, I18NPopup +from katrain.gui.popups import ConfigTeacherPopup, ConfigTimerPopup, I18NPopup, SaveSGFPopup from katrain.core.base_katrain import KaTrainBase from katrain.core.engine import KataGoEngine from katrain.core.game import Game, IllegalMoveException, KaTrainSGF @@ -227,6 +227,7 @@ class KaTrainGui(Screen, KaTrainBase): def set_note(self, note): self.game.current_node.note = note + # The message loop is here to make sure moves happen in the right order, and slow operations don't hang the GUI def _message_loop_thread(self): while True: game, msg, args, kwargs = self.message_queue.get() @@ -253,16 +254,14 @@ class KaTrainGui(Screen, KaTrainBase): else: # game related actions self.message_queue.put([self.game.game_id, message, args, kwargs]) - def _do_new_game(self, move_tree=None, analyze_fast=False, loaded_from_file=None): + def _do_new_game(self, move_tree=None, analyze_fast=False, sgf_filename=None): self.idle_analysis = False mode = self.play_analyze_mode if (move_tree is not None and mode == MODE_PLAY) or (move_tree is None and mode == MODE_ANALYZE): self.play_mode.switch_ui_mode() # for new game, go to play, for loaded, analyze self.board_gui.animating_pv = None self.engine.on_new_game() # clear queries - self.game = Game( - self, self.engine, move_tree=move_tree, analyze_fast=analyze_fast, loaded_from_file=loaded_from_file - ) + self.game = Game(self, self.engine, move_tree=move_tree, analyze_fast=analyze_fast, sgf_filename=sgf_filename) if move_tree: for bw, player_info in self.players_info.items(): player_info.player_type = PLAYER_HUMAN @@ -371,7 +370,7 @@ class KaTrainGui(Screen, KaTrainBase): except ParseError as e: self.log(i18n._("Failed to load SGF").format(error=e), OUTPUT_ERROR) return - self._do_new_game(move_tree=move_tree, analyze_fast=fast, loaded_from_file=file) + self._do_new_game(move_tree=move_tree, analyze_fast=fast, sgf_filename=file) if not rewind: self.game.redo(999) @@ -387,9 +386,8 @@ class KaTrainGui(Screen, KaTrainBase): filename = popup_contents.filesel.filename self.fileselect_popup.dismiss() path, file = os.path.split(filename) - settings_path = self.config("general/sgf_load") - if path != settings_path: - self.log(f"Updating sgf load path default to {path}", OUTPUT_INFO) + if path != self.config("general/sgf_load"): + self.log(f"Updating sgf load path default to {path}", OUTPUT_DEBUG) self._config["general"]["sgf_load"] = path self.save_config("general") self.load_sgf_file(filename, popup_contents.fast.active, popup_contents.rewind.active) @@ -399,11 +397,39 @@ class KaTrainGui(Screen, KaTrainBase): self.fileselect_popup.open() self.fileselect_popup.content.filesel.ids.list_view._trigger_update() - def _do_output_sgf(self): + def _do_save_game(self, filename=None): + filename = filename or self.game.sgf_filename + if not filename: + return self("save-game-as") msg = self.game.write_sgf(self.config("general/sgf_save")) self.log(msg, OUTPUT_INFO) self.controls.set_status(msg, STATUS_INFO) + def _do_save_game_as_popup(self): + popup_contents = SaveSGFPopup() + save_game_popup = I18NPopup( + title_key="save sgf title", size=[dp(1200), dp(800)], content=popup_contents + ).__self__ + + def readfile(*_args): + filename = popup_contents.filesel.filename + if not filename.lower().endswith('.sgf'): + filename += '.sgf' + save_game_popup.dismiss() + path, file = os.path.split(filename) + if path != self.config("general/sgf_save"): + self.log(f"Updating sgf save path default to {path}", OUTPUT_DEBUG) + self._config["general"]["sgf_save"] = path + self.save_config("general") + self._do_save_game(filename) + + popup_contents.filesel.on_success = readfile + popup_contents.filesel.on_submit = readfile + save_game_popup.open() + popup_contents.filesel.ids.file_text = self.game.generate_filename() # TODO: ??? + popup_contents.filesel.path = os.path.abspath(os.path.expanduser(self.config("general/sgf_save", "."))) + # save_game_popup.content.filesel.ids.list_view._trigger_update() + def load_sgf_from_clipboard(self): clipboard = Clipboard.paste() if not clipboard: @@ -513,7 +539,9 @@ class KaTrainGui(Screen, KaTrainBase): elif keycode[1] == "l" and ctrl_pressed: self("analyze-sgf-popup") elif keycode[1] == "s" and ctrl_pressed: - self("output-sgf") + self("save-game") + elif keycode[1] == "d" and ctrl_pressed: + self("save-game-as-popup") elif keycode[1] == "c" and ctrl_pressed: Clipboard.copy(self.game.root.sgf()) self.controls.set_status(i18n._("Copied SGF to clipboard."), STATUS_INFO) diff --git a/katrain/core/game.py b/katrain/core/game.py index bb31576..4c2c945 100644 --- a/katrain/core/game.py +++ b/katrain/core/game.py @@ -47,7 +47,7 @@ class Game: move_tree: GameNode = None, analyze_fast=False, game_properties: Optional[Dict] = None, - loaded_from_file=None, + sgf_filename=None, ): self.katrain = katrain self._lock = threading.Lock() @@ -55,7 +55,7 @@ class Game: engine = {"B": engine, "W": engine} self.engines = engine self.game_id = datetime.strftime(datetime.now(), "%Y-%m-%d %H %M %S") - self.loaded_from_file = loaded_from_file + self.sgf_filename = sgf_filename if move_tree: self.root = move_tree @@ -295,14 +295,18 @@ class Game: + f"\ncaptures: {self.prisoner_count}" ) + def generate_filename(self): + player_names = {bw: re.sub(r"['<>:\"/\\|?*]", "", self.root.get_property("P" + bw, bw)) for bw in "BW"} + base_game_name = f"katrain_{player_names['B']} vs {player_names['W']}" + return f"{base_game_name} {self.game_id}" + def write_sgf( - self, path: str, trainer_config: Optional[Dict] = None, + self, file_name: str=None, trainer_config: Optional[Dict] = None, ): if trainer_config is None: trainer_config = self.katrain.config("trainer", {}) save_feedback = trainer_config.get("save_feedback", False) eval_thresholds = trainer_config["eval_thresholds"] - print(trainer_config) save_analysis = trainer_config.get("save_analysis", False) def player_name(player_info): @@ -324,20 +328,6 @@ class Game: if save_analysis: x_properties["KTV"] = ANALYSIS_FORMAT_VERSION self.root.properties = {**root_properties, **{k: [v] for k, v in x_properties.items()}} - player_names = {bw: re.sub(r"['<>:\"/\\|?*]", "", self.root.get_property("P" + bw, bw)) for bw in "BW"} - base_game_name = f"katrain_{player_names['B']} vs {player_names['W']}" - game_name = f"{base_game_name} {self.game_id}" - - if ( - self.loaded_from_file - and base_game_name in self.loaded_from_file - and PROGRAM_NAME in self.root.get_property("AP", "") - and self.loaded_from_file.endswith("sgf") - ): - file_name = self.loaded_from_file - else: - file_name = os.path.abspath(os.path.join(path, f"{game_name}.sgf")) - os.makedirs(os.path.dirname(file_name), exist_ok=True) show_dots_for = { bw: trainer_config.get("eval_show_ai", True) or self.katrain.players_info[bw].human for bw in "BW" @@ -348,6 +338,8 @@ class Game: eval_thresholds=eval_thresholds, save_analysis=save_analysis, ) + file_name = file_name or self.generate_filename() + os.makedirs(os.path.dirname(file_name), exist_ok=True) with open(file_name, "w", encoding="utf-8") as f: f.write(sgf) self.root.properties = root_properties diff --git a/katrain/gui.kv b/katrain/gui.kv index 480fb22..bdf1e73 100644 --- a/katrain/gui.kv +++ b/katrain/gui.kv @@ -950,9 +950,9 @@ on_action: root.katrain("save-game") MainMenuItem: text: i18n._('menu:save-as') - icon: 'img/Save-Game.png' - shortcut: 'Ctrl-Shift-S' - on_action: root.katrain("save-game-as") + icon: 'img/Save-Game-As.png' + shortcut: 'Ctrl-D' + on_action: root.katrain("save-game-as-popup") MainMenuItem: text: i18n._('menu:load') icon: 'img/Load-Game.png' diff --git a/katrain/gui/popups.py b/katrain/gui/popups.py index 9698e0b..96d2978 100644 --- a/katrain/gui/popups.py +++ b/katrain/gui/popups.py @@ -669,13 +669,25 @@ class LoadSGFPopup(BoxLayout): super().__init__(**kwargs) app = MDApp.get_running_app() self.filesel.favorites = [ - (os.path.abspath(app.gui.config("general/sgf_load")), "Last Used Dir"), - (os.path.abspath(app.gui.config("general/sgf_save")), "SGF Save Dir"), + (os.path.abspath(app.gui.config("general/sgf_load")), "Last Load Dir"), + (os.path.abspath(app.gui.config("general/sgf_save")), "Last Save Dir"), ] self.filesel.path = os.path.abspath(os.path.expanduser(app.gui.config("general/sgf_load"))) self.filesel.select_string = i18n._("Load File") +class SaveSGFPopup(BoxLayout): + def __init__(self, **kwargs): + super().__init__(**kwargs) + app = MDApp.get_running_app() + self.filesel.favorites = [ + (os.path.abspath(app.gui.config("general/sgf_load")), "Last Load Dir"), + (os.path.abspath(app.gui.config("general/sgf_save")), "Last Save Dir"), + ] + self.filesel.path = os.path.abspath(os.path.expanduser(MDApp.get_running_app().gui.config("general/sgf_save"))) + self.filesel.select_string = i18n._("Save File") + + class ReAnalyzeGamePopup(BoxLayout): katrain = ObjectProperty(None) popup = ObjectProperty(None) diff --git a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo index 3459baa61083576bc01a63828003c0bc2f8c2e61..0e03668e4dc4751d10c128ba4bfc98dfdd6c354f 100644 GIT binary patch delta 3532 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 SUP-9&ElEs`^)+Uk?foCll|{h- diff --git a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po index 2f460e6..4a0dba9 100644 --- a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.po @@ -727,3 +727,18 @@ msgstr "Cache analysis in SGF" #. TODO msgid "menu:save-as" msgstr "Save Game As..." + +#. TODO +# sgf load button +msgid "Load File" +msgstr "Load File" + +#. TODO +# sgf save popup +msgid "save sgf title" +msgstr "Save SGF File" + +#. TODO +# sgf save as button +msgid "Save File" +msgstr "Save File" diff --git a/katrain/i18n/locales/de/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/de/LC_MESSAGES/katrain.mo index 5bd19c410b187bd5a7abb01e3470deb8ae725948..00a1586e9fbdbba7021279a357b141630eac6363 100644 GIT binary patch delta 3530 zcmYk-4{*s3V?RSPVQFKw7&ozq)>&eXx|JXEujTCK&Yym1i^No1 zb)nmpBJB{rojb*ulaQU;9i}TIr9!4qxRQFl_WRtG`}sXSpU?O6d4E2i_viEdt!c^O zrT%kqp>G-gPVzs6|MeYIGaDcMp9vHvQ16O9jKw9Gh&9*|x48OljH7-WQ}LXu-^0$- zV>_9JVH)!BTR*;IXvjr%80(yhk<{m+0#+h1Y!!CHcQ6WfU?_f$T3`dJe={cGWsJvA zCW$}~YMx%$iTN#?f(DLiYcMN8?XV0rV6n3r6=*HC!_BCjZ*|WDs0HtL?MG2NJ%y~n z&bsHnpyJ+=%-^;g1&U-@>evmn(>|z3clB}3CsF;MMq=4~RGej~46Jg`H=*Ly zIrpOaA3?u5o}r)}UvVAoA|H#SQ3I2m8K@oRpfXW_3N#s&!CBY^m!ZbJiF~YEqIQ;tT0kLcqA8e+<;YN5jS5(c+VO7ZLDaY=)CMo0 zGT4gBkpGVB5W;p8I1XvD3{>EJ)O$V=6=<$=DJnpX^KJA{uSIQOFY2{ChWbf4fr@|H zJ->=9)Ngl#1?$LDO`L>EX(lRAE^23EUHdfWOw^8EKxJqtYJscV^9`>3LsZIlx%vTA zyhiM-_y2rbfy;+laR@(m8qfi?!+2zk)*ahkN7O{aUHx&?0;ZrA>`PRD)2M(K)B&%dCcJ}MSOn*xKnbXwWT2i8Lyez+>Q{n_Gs{_l znrAs`V{f2e1K*{fi9SJHj(XI<1FpRh6}TDI|9ezMZen|k;NaCi26ZV@P!kPBWug#C zu1!OYU+A7!d&s}ec)feD*;$X;*49=?KuumLsU4Wz3@ zuqtJw7nb25+=&~KIsYOG%`(xMc!3hd5i+Tm>C_Z-e&oGnv zHRNMGdIU2y40X3AVlhs}aaiZ4aD&1vd<-wA29IK}H#l$vYA2JB3k6;5nkNP8(nHD^fEUckkgu09^s7(4VQqWGXyM{lVVZDMWi%0D+4Rr^yog-0a zIUW^oIx64{=K|D`y@_E;6m;pPx(5|lK)o8-q#eOX{2dkeAJoF49&)!D)jkM0J%EX8b`gL+MCQ5pFN z_4`AbSqEm(d*2^Bu+IH#~DoI)T;}R8p)#@(J?MYk6}F*PdI&itYeWSI$qNPyN3Gn0dehReKTbm3 z@|Te}&(@+Ax*wIn?@$}O>1_9KaGowm#{8B-f!Eg3of)W0^8o5-rlVH;ENY@Ts0>u1 zGF63I_&U@PY(#!zYzt-(__%BTV^}a#HavKl<1yKuZE8vN43W*qBUOK}&X7)Va`b(Wk!b&TBss!?5 zMu$hMvT)W+Z^i72dA`8%gwpW;^}djLH=@{e_XW;+&m=~vR$MryEm~k#ZffYi0YGA6 delta 3417 zcmYM#4NTQl7{~F4Kn0W+0bfu^&;%8=)G)+M$5bROn$5SFshOjuWV1A#;%yqvVVcHF zjZ9ji)zlU!(*?~e(b9~}Va}IDi%n+E!k3gL_WgCAEr<8>KmY$Z&pFR?&i~$HE9+MT zF2{v!G5*!_KZ*Yzv{#GksQ>N8Wist9n2DWnB6i1F*b$d{do{+K`mfA zD$d@{)L$KI{J}}&&o1-9T=pkw0U?Z1zfP!jPgI4{P!$-4;W!%AZvtw9X{d!3pcYz$ z+M>;z+3&AFRpwnJgq3@{ z%G+NDxX{3}sDZzuGP{jhKqz(BL+MLs4z+*;)Phn`6&&Q|peis8wWZIa4&AG$c*{`Z zR%0i<{~P^58ET>m)Pkx}0lr0L(BRLTQ2|;}{o1o%|1HQ(MU{FmDxp!RxZ_a^n1(tN zb1|TS3;n@zRNytJ0q>wHQI74f8r8oBbr`=xP1J;{z)hq`7Qw;L_!QLhA*ih#p-MHQ-h%u1EQUSE z?*~rD7W^0|;(NV<{eKH^p$zUI+i5W=W&vw$4htwJFrUq7@a_E!71E;S5Sv; zY42d=icpD_c)QdsM^$Ja>TCtRmi`a%1Vs;_T>>DmGrn9BA%lmPD^!^_ty?ky2Nc$Qce$3#v9BbK!dzd$f z51!`^4lZN@b*G9p1+~!EQI#u3ifB795^Iq;>;%T(U&wK=kVk?QPr_)u|HHUYhB?S~ zTRy5Z3sIF>g$h)H>R09WkDw}a3iW>fjGE|zx38iO*$uxR#evG9os8sWb1;(mZ37ny zybX00Do}e=_MLEwfM+c>;9^XQAGj*H8(q!x>oN?fXbEEQymG z(11x?uzmId@(SBp)VA$J9kOE>i;b9zEyx-yn^la#g{X1+@G-2z1Z+d*vUuJ(z1HJV ziA_O$5zWh_{u)@w4J}|TQZ4%owO1FseH)cY`f$Efa4f3i^HG5cF%{oHO}riT8tzA( zg(_6MuP_eJqZ0dLIQ3WHaF)$Ew7#grl#j}|02N>v#^V~)R&7OX#V*tt*@w#PFlyX! z)LHlimEaXr1wyid3yH-P+8F^Zw6~K`ffpgk+Dg=fmB?7DLj`U_9lDqiW)EOjR67w> zkrYhCer^tGq0b?^Ve?V_-$%s@e8h#`uu9aa{1uf^R5m{#n21{71XSr3pfX$KZbVJ+ zA*xb)khj$;-2ME!`}K~QFw7+KR=P phij|yqUu9R`@~GIDvrqsuWINvJG^vs%0E?OQyaQh^~+8U`xildR2cvO diff --git a/katrain/i18n/locales/de/LC_MESSAGES/katrain.po b/katrain/i18n/locales/de/LC_MESSAGES/katrain.po index bc1ecf7..98fa667 100644 --- a/katrain/i18n/locales/de/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/de/LC_MESSAGES/katrain.po @@ -774,3 +774,18 @@ msgstr "" #. TODO msgid "menu:save-as" msgstr "Save Game As..." + +#. TODO +# sgf load button +msgid "Load File" +msgstr "Load File" + +#. TODO +# sgf save popup +msgid "save sgf title" +msgstr "Save SGF File" + +#. TODO +# sgf save as button +msgid "Save File" +msgstr "Save File" diff --git a/katrain/i18n/locales/en/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/en/LC_MESSAGES/katrain.mo index 865aa1d4c17b8762862b1f13b9860a6252e866f1..a8528ea5ffe347ae37521356c19e64c7d571dce8 100644 GIT binary patch delta 3529 zcmYk-3y_Xg7{KwPU9m2^b`ut{h+JwZizrMCVnS1`GZDw53)NUmsD@-ZbCSCsj{mx98wZHeA_q@+}&U4QD?v*EgnUyHdN?jKC zcZB~<`CoFitq|_2`=1TD98CLK%*RZejg4>#*2Xtudn;zqK8Ve+JhuPFdbBgsL#Tl* zk)K3p&+iO6x}yUIMjyahv?rngXCN`cB5Z)KVIACrskj48a5p;sI5x%#tdFTol7`vn zJgqRD`9mHTKG?UaBZLv?3df@lJQd6BeNhcqjJnLMw9|nIfD@ z#E#3cqdIlw*Sl%nyE#rx-wL=)jk z@*>pct`j##OWF|))E!;fz}P=3`Y5`h$I%MSK@(gQ@2`mcYtfQ#iS1ozyhB*e_y60f z3l1NeaWy`7K5#XHnJScz`w8|axU!K(NF zBQD&t&(HwJ(171N056~uR-%ceu^$F%h_0j^djEFx`N8P85onx(=rnYmdFaBHV!{WP zbKykm(Zf-KKDaCPA3_5kN5`K;EAlH=$22zH@fql$Y>G~FD_V&GNO8j`^!cgr{`_p} z?;gJ#Z>))ypey?ny?+7?cm|#5G8#CQ4}2kJV>?`kH{fQpLMMDMI_8;JG~#~blEB*(A~eT%+8 z&(;q(2+v?2?3`e>eO%1IzSygIax0!eOSKqXc@bLjjo1eF;uBbbZr!+?P(tn4JJ0JW1K?7#AOrD(v z=(rZqT--wYHZ1o!yblkx;=udGIIGVj#M*VQ7G{=pmhhZo!L~gUiwJAEK506y5vM*gk^wXn$ir^M~_XaGt_N z%*2dal6&0(b7*(N8aN!?nlb3OLUf|1V*eua&@DqJeiyso2j~`EK;MQ-=t9#wQ-3d- zalyAGDUbyAiEWIVs|`^S(rms ztTlA*LjAAdBA*VnEzCk!_!hcnC1`2)q9r?oeqhSb*X$28(KcO^uk9UZdkmV;Y_t-~ zqOT*zE388k{k$vncW=t*utX=((pJO)f1)L;&2o5U!}Vx@K4?PY(S&DVIxavbd<9Ls z2#vcg_HRPZ(EIWJCkZahq!i7#9Np7ObR{XbCeJ`KzroYzo@PF#e3pf;lM zj-m@Yg}fA@0{v8|cx@Whb4~#@tI2N6FQoKJK+t6N%uJmB+ zKZd?df1`WdqDS(%JTy)pG{GTAr4nH@7rfS?AUXj(923zM6rrd84K$(kXoWVT3GIme z2hh@gfqWFh3H%N#(UO04TXOtqyq5NFRX$9x+mjjPpc!{UKb?Ki2?wB+8H`Ra3{C7o zbo@AUMbohnEhadduhYEDXa9b5Mf=wB7AxO(@QDgOdAoNl!M delta 3417 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 delta 3418 zcmYM$35AN9~mHafw%@&00TWh>BlYh(R(G~U4s6?_(LHxwOUG&<1&bfOE;N3;^{ zw=RSHyP3AehNWovG&+In(ehYdohUwv9JF1#=sW9W1j80%Qx+f-K!j98o z#auM-BDBMDG!vV#67ECWm!g~TI6BZ(Gz0%2NeWfj81~Ob>pP>5c0jy8B08xd`FCYA zV}m7Vht=pnThPFJa2l3j8|=!9{b`(l)-ObVyw;!#*o%|!2)={One9aDu>;;k`?qL9 z{!LLny}dCC^KcIK#O>Gv|3Fui*_0n7Y=gaU3Q`p|p(`&%Pr=VP7|)?`vYK(kaSYn8 zLsl|gL4pfA&WSF^c9gea0#BnE8kx-o#VP2IQR|%K-e`}jDfdS=-5E3k=h1~-L-)`v zG^0;7Pi8nBT~MMK7jB}C=s^9@-8v$c$DjeGq5&2}i}5h!HFzIi&gE|ce1SAx#PwK? zMJ;%Jr||bd%VhgGt@r_>+`Tnfb&W6bK&Nq|OIw~V9X7H2&+*OnA$;@{n~4Y3jq;j~ z$%+1eBqf|jSMUJMU|OdTI1nKh-9vqlu|ht&iD#k0Oe?CKp{{S9G9!G$Sve0~I4DFRZ}YxC1@khtQ0a;Uc_%Irw^49ycz=gu8by7kt7` ze6e9erDu|v$VCGW#|)f|L-Aegk4Mnc@EFsv53@4xa5O_j=y5GZH|Jh_GBI?|m31Tk zHax=(j%2uuJofMyea7v(Cy&>2=*$bzN3jgu-Mi3?e1q(>a1`DB*U(3E8*O(F>thOM z*@a}H3vJhf{ChEs8=lhwtc9DgGVVcVd;nd+G4xTLh~;zWfEUq;+(1`$2hB(Yf;w;= zG+tY*hg~omhbFk-oe&Dq4oi`J7uI4OJdSzzJDQ<1-X1>l*2v)qdFaGCqXYCr+YLY$ zHa^zRLo@e&EN?+GpZJmsj$$~74s{S@Q~Mb@@OCs4yDN1>14FErJU(3Gb2O_rOZ zne2qd8-TtsN1>S;jb>~DRtfCf$xkl$g8}U@8x8P5bRD`UcHj^^*taCV#*Znha?{6@ eEJ+_&rQ~dbE0tFr%eql=AiJ<(NvGaJD*Ol5vrA0? diff --git a/katrain/i18n/locales/es/LC_MESSAGES/katrain.po b/katrain/i18n/locales/es/LC_MESSAGES/katrain.po index 156e2a5..6424d3d 100644 --- a/katrain/i18n/locales/es/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/es/LC_MESSAGES/katrain.po @@ -787,3 +787,18 @@ msgstr "Cache analysis in SGF" #. TODO msgid "menu:save-as" msgstr "Save Game As..." + +#. TODO +# sgf load button +msgid "Load File" +msgstr "Load File" + +#. TODO +# sgf save popup +msgid "save sgf title" +msgstr "Save SGF File" + +#. TODO +# sgf save as button +msgid "Save File" +msgstr "Save File" diff --git a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.mo index 87282c162e847e92a2b0e88e69e5ba6bec5cb9ee..e51cd5cfc49c9bb96b07b255ea16b2e48b37a6bc 100644 GIT binary patch delta 3533 zcmYM$3rv<(9LMqV=qn1yRpkX#=2iO*?Q7b=W?*~x{e{K8EpjP@b zl7qQy@BfX8`=4a~P&x_}L0TG^fLduU)WH6zmFC*^IO|l@_}NG-vji1q4XOg0?ft!| zct@=DsPW&UtAWj2XvMeffXB#>iJ(&tcC}`qRyYt!j`}NsD|9H(U3){F>W|?MT_zos&;V2dqfr4T+x8q(g%+VI@D6ss^{8=M zQStYn5cQTql?_29P=K0fI(EfUbZ-k z1ztl{@E=r#+=q66!*Ucj9_cb!sK9xs_k0Q}P>FRlD!?{t1t!t1LM@;k^;(`qeWYAK z#c#6rTaZLu^VqvEk=)h9$*7X%paKm>t!%9ApJiQuTG8963av&ZxY^#{ZTt75N?v2z z4XAkMF;?&Y@1YA0A1Y&qk2^gOhFW1~BuCR7L$4!hqFmdah)Q5ODxm;sAxo_rQ5D#O z+R}ZfGgpV9_x}VJ+OyNB08OZX*E9g{peB5XN-UiHP#`~QC0VHZ!%)vpK#iM$ic@4Q zL(Q`mwXhG-)q@{%p@}|69gaHGgAKO-JSy-d)c8M96}gY?Fr1Co_!!io?1q|X5ULUd zNO8?9)bq>i{qiL0uRY#jZ&X|BP%Aryy8jC*;7!y-4^V-9e887r686Ron2SeIhqncv zL1m?QnfN9S!2?*?mHnU3MLu7BgYXb$;2+2w#@F3zr(i1WQ8*aq<7BKvC3pu5u@#@i zDJkB!sf()AUewvD#Wna9mf{O;4<>iW2A9)uE7jYIIcZ*iV$=j1k;Rw_d=YDK9o|H3 zT}irEq2;)bb~)-xDwEZy5`Azj4o4lvMpPx;GhFB}G@(xARn(qdx3-|p#68r5Pf%yU z*V7vxi+Vm0b?DMi6Xw|de5|HD9_Ko|WmrV}74{|7VgKv7NaDtCnH&uKmyLWG7iN<^ z*7f1l!^_k)3?KC+A#`$#c>_E4<3p$opZ(7pGY=p3_f|HOGEr1hgxZ2lNYzaxQXF#v zJB8kVF4#76A9YCL270CMi8=!#QHSq!)K)A)o${6Teg*2eWB43?hoOq0D)IzXxkwI} zDjbihSTcrj{!9iJ$}k&Mx)HWL71L-hLhbQZR3a6qy*q%~idt0QZ;)b{)2MOx@Ktm; zv6^risseLSXURoZ8SdsH0S{v_HlR*%)(|h?Yp6ulp(fmq`oH2aWIN3d)_eB8f2jA` zWgt12ahQkeQHgzvivQzK>aW19bmU^{Ft1dzQ7aCh4@+%-87k3Ln1vr9$HAPyUU(Z- zfmniRD~6#~UV_?^GSr!HQCm`#OZ_#$K|A0GD#I^PTX70?SboK1e2knk<7YYAvazUf zb5L8b3>A14>P)OdRd^@r>{O#4gQ!ZLbM1|0)XHw4_O=z3NaS#DrOC)SGB2S5u13zQ zc^{QPBdVlLs87Z=BfLcXsFkPKc9yjtYCd-$7h2gw)C!7`H_$A#?cJD2dmn1z?wsYZdW3TlS)XF|ZJ=ly|!DZXN zfhuu}^*$=_Bh;BOqrA#RU>Ap17*(O1e6QsBsI8lX(faTYaG|{^LuFi!ZE+VW@E+8J zpP>%ZVN|7RP+L@QJ!5S~C2}1(F6M49De9sVKE8C`Td8A;7YBCSjGobc-im-4!MvE! z9ir4&R0pNkf>G%ODN%)L78Z;Ng$ovrSkU%=1XO8{ delta 3420 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 aZ{7XXbJCZlMFxxcdAY%G)whS;2>BOUmTDvb delta 3420 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 BYHk1k delta 3424 zcmYM#3ry8z7{~GFC?cpJ!coCX2q(3?V0i~G5G97z=4E-Anz}TzGRtP_jQ**ihIfhO zB{y?wRMw`a3^#1k8QLl|b2eHzU6Es5XeO0ZuJ4cYY`G(!|NDR6|MNcY^S=Lc$~J~7 zHiUvJsc{v?zYF~D!T&en)#5tof4g$olXhnuhMjOCrsEuJk1u$8EvC}mi<$Vow`(zl z_BCvaH!#^Oux2hgawCzJ24uMXupRADsDMStP@9Qea1nOEmoN@Dp%UDV8h;qO;Ry`m zB~<(dCF6=$n3h2iCS3>CSn2V!3o$J=b~2nnD;M5CAiA(zk*uXc2vAw-v1UV z-Z8ft6{iN1ncpsQp_N_p0gb4Y-ST!kX)8bqDsVTX%kD-6%0;bsocGT_#arYqM~z>H z8dr{5=wS>ru!;*lR>L2)zjo_UEBqZ*iQA|^X*{h`M=%X@QO`Y$d~6nfl;{$_|Dw0c zPzmft#W~W6`fFgdcYKC?>ws!^M^&f~ssckW0rOGg9z;zr9hK-J zRH7xQE!u&4Zg(p6*I_#31FKQ(i>L$|+-C1@PZVuM7HV97w-7bqOws&mRSDM!na`)J=iqzpB|4)3o- zC0ga4MWzbuG8Zc8PpCjmsFk(hY28nEvr#J=fU3|)RD$EYf12N)hbs9JZ?8th+lU&! z*FA!9djC&yp$AT*R(Ju)!Rk;6G@>57awvb-jT{F)PFt_BES=HFxm_aX*87dW3db|CVuqEgrzWaAWpBv!5Ao zAcy_OZG+6Vv?9}c%s!?+Iyjd3vZ1kxtVd#6C8~m7BD-VXqe>eZ#sS0(R67sJ)ux~p zxB~V2V>`J}Ne*HbR-sn>4XOh5s6B7=`;plP)?g|Xk-iQ>z z_F+8p+c_U_9(9PWqW0z%>NRUSBK8_aP!r{%R$hRuaWQHEORx*BK|Q|(0qlB}QPN8?(94p<9W{@EEF;XORPJ^{DTKI0msxmV#q(ERM$#)P$d40e*#=Ae_h6 zVlJvbK%KEI-rkc({nb&)jdVPY90xm(o$()}2$ssbs6>k0Cs38x;BG~7vPzhC{e#DNT5;=wmda+M%q0*g3P4qb`k?W|vZbFqZ>3)8wFgseD pbRkq8={O@=+OaSpdbw*^V)V(Z_)vM>(4^>w>;XNar}B&A{sVp+QriFk diff --git a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po index a7d88ca..012114a 100644 --- a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po @@ -741,3 +741,18 @@ msgstr "ache analysis in SGF" #. TODO msgid "menu:save-as" msgstr "Save Game As..." + +#. TODO +# sgf load button +msgid "Load File" +msgstr "Load File" + +#. TODO +# sgf save popup +msgid "save sgf title" +msgstr "Save SGF File" + +#. TODO +# sgf save as button +msgid "Save File" +msgstr "Save File" diff --git a/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo index 34466babac340e5e4b7ab6a13f199db6bc24ddbb..f44aec680b16378f3eef48684e8c586d8fd6f05a 100644 GIT binary patch delta 3534 zcmYM$3rv+|9LMqhQ3L@21uuY_2%>_ar6%gsyrU%IErn(&Oe94^g>-p4^V%qFUP|Yc zCM-Ac5*{|QY-*dD)5P*pHnj+ssAX-faLcv6Ki+54!TG$;<^4a;|Np%2!DFBLDyx0| zyU{@(8UL>F+lk+rV71I9L_D(tmszyiVF9+m6&Q<~F&sZ}?c*3t`x17+yRQ8owx-=C z(kuiMksrUM@)8M&et%Eb`dJzQY40zVSC((t?(!Y;TNb4ogDqfZI zBx?Qz^lRexTqxs*Zo*UK$HM5;jUAmSs0`Cll^BT%Gy_$^LX5#xsQb1eKUU6%Hd^ia z&$#xLHq>7mxI>2m{pkkOss1QF=(0rAhWev6Fa{NHl55XGRcJn{0?V)^u0ze+go?ih zwb3fnM$bl5f1S|{I&|Y5)Wh|_P1G#4+oLv+<{X9!l#M!~0@S=>=SI|m`%noSas8)J zmAQ#5VfXy5qtSJ=psuN0>OG%=3RL7=i3+gUxdY>9m!lFmiFz$BqP|kDpyJ!0bIi^^ybszNJK8!U6Gd8`BsD*~Q_C(YMa!?y8Kqa!+xe--?J*Xo+ zfO_U?u<89j#f8r7JSxBqRKPk-z{jWspP)7t%6TYI2UI30sPQ4F`?FB#9BTXrRKNz*LXD`vL43g%VjO1U8XS(_B73uFcGDkw zp*B1l7vfTUiuXEl{-s>h@uzP*PVekx@G+`Hr*Jf$!=V`VoLL@@!?B`;EkN3N)*#N!M9s@WPQ!}a_y(l9w$JsS!~pGUIEoFt+tchr+Luzy-tuw&vq^Iq1GT+) zMKB|cU#w@__1NnLvn3eSmkKm9TicJtXji^OhS)lt`+0BM4rC5)8scqq?{G72u^J?# z-NymgZUle(aRPSH`@e__o&6SMbM_++#^%&nM=%VP(L7Y98&GFkjwEHZsE4Z&b@maX zyba`{zCjmbFm6DVd=oakb!xM|9pXZzJ%JpL)uICajr>^nXzy*vM$OAdJ=M#R=gN+` z{#vA1b{}=5v19mF#IC6JepEsSQ3-vAeva23b3yg2-B_~1iKtRN#u=EL;k8%c6xubY z(uR!VO~Ao?DDXPe(|#07@Eg?YHiGi1eGHXYQl|G-4a%hcdbn28k%zlb58=NUjbYR? z3Oi#Grr~g$j2yFVL)NfbWUm%G!R$qxg*+a%6x`MH_y?AOaUn9-_M(pD5k_I+B(DN}F@bh5>I-NK_QZ!6j4_kF#NsiMb{dA^5KKgW z1{eLfnC~X+N4*V4T)Pofs$dR20uwMDd*iD(7nS)b%*WfPz%Nhr7S2a~PrU8ij;dHS z#<0F!*xnGC8&On@~EhbU{I2O^4j@XR`yh f5-WV6Q{DW6z>01!r?paRYR1^6aDmSzFAM%3kTrdM delta 3421 zcmYM$3rv<(9LMoLatRPY!8^)TR4!to2&NRG0%CYU6PaDGn&1#C&C0}HQ<=@mz{{3t z>GHmrMX#AAW;I6_H#IXYww#X0v^CSxC0)P2p0mYX-p@JDIp_bJ^FQZ#U`JEH+wTPU zE<^`yG=5I=+mGKZA*xaC^1r<(_NU$hv#}da!ru4*cE+b%eFa8S-;D9N-_=iISL&DW z4!nVpWs`{H5jj%QKv zuOJ`m;HwAsw=nLm3-PFxWnviSqXw2>AU=dz=_9WFG1LT?xa+G>D{DZ-d)2k?M#X#A z*^G+Qf|1LE;90lK0B_eGj46%}X{YQ+;=`z%zvD(7NU|COkI z>ro5cg+6sWM1haB@TK~BXFFJGCy1Gpc?DHGwP64%gn9DB6ldRKIj*0qTYos0GY(*O#I)vknPi z+g#o6>L2?kXy94Y!0%BjyM>xSAbHn~x??P+BTZI>3OF0J;swrSsBtf$R`@z9V|!5< zI^f!mqT>2aQs86ld?|1T>bZ_2ZwfTXnTrZA(OHIlsLw_%U@_`3tVg{<)}U_C=-T(7 zCVI&EDRL{Houi^DqNRlj!gQ4*WsPL=5cjEugeN`B#eOabY|z#5{Z-=ip7eAIsystvG-c)LU>8Cd8W!#reo3 z+k#5%5nP8Y_%c=`&?ms`GS*X{kz|&Jtv(6^DFi2TkT3%aa57%SMx=|?4KS<3tr&=w zLKYwhI}vy|>d=iOm@=1#T387xqtlVK*u&1{NV3fL1_jQM9Y&@4OV{BCB-<7=$ZL;7 z?fFR5^)mG1d>qFF5(b-Xp#EqoFC*%=@oB71=aIvU8N9Txj#;V|_9Mx%b|mW-HrCtgRAg?p z2=BrzsMMdwSUvxp$hTG$huX_rWKmX)I!q0yz21e&)D6^|GJKqu@;Fq=Q&6Wq%hkuB z`cFl6$Es2B)*>I?f9@Qo9X{@heoS`ccv8F2Y4P7xj3xx_U9s zlvdV^%*oE64p*-d?g z@vyXey-ZZ1Qa%q^oIQ)$%8y)oE9!=AsLb5L0T^BC#mOlp{~27UYH9yldZ%TH!Hw{S@lyx{jF`GKEJRvwak_1*=d4j-WDd z0uwNFs`tW4#lh59VhHX-t;~;+*n;8sH74OjJ6w&`LP=Q z!|NE2MP?KFt}Xz z8NohM&|dbyG)zLBfl?fci%@~y!@2lbxxb{#setv#QM3H@Q3av?bG^zt`*V`t4Dh!N NxO<3yXxZYBe*t`PUWfny diff --git a/katrain/i18n/locales/ru/LC_MESSAGES/katrain.po b/katrain/i18n/locales/ru/LC_MESSAGES/katrain.po index 7397039..1b74dc9 100644 --- a/katrain/i18n/locales/ru/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/ru/LC_MESSAGES/katrain.po @@ -775,3 +775,18 @@ msgstr "Cache analysis in SGF" #. TODO msgid "menu:save-as" msgstr "Save Game As..." + +#. TODO +# sgf load button +msgid "Load File" +msgstr "Load File" + +#. TODO +# sgf save popup +msgid "save sgf title" +msgstr "Save SGF File" + +#. TODO +# sgf save as button +msgid "Save File" +msgstr "Save File" diff --git a/katrain/img/Save-Game - As.png b/katrain/img/Save-Game - As.png new file mode 100644 index 0000000000000000000000000000000000000000..4b0af4e2210fcaab2ff4b9a88c46667ddc4c9c9a GIT binary patch literal 9821 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 literal 0 HcmV?d00001 diff --git a/katrain/popups.kv b/katrain/popups.kv index 6cdca00..46965e2 100644 --- a/katrain/popups.kv +++ b/katrain/popups.kv @@ -181,13 +181,8 @@ orientation: 'horizontal' GridLayout: cols: 2 - rows: 5 + rows: 4 spacing: CP_SPACING - DescriptionLabel: - text: i18n._("general:sgf_save") - AnchorLayout: - LabelledPathInput: - input_property: "general/sgf_save" DescriptionLabel: text: i18n._('count down sound') AnchorLayout: @@ -622,3 +617,13 @@ filters: ["*.sgf","*.gib","*.ngf"] path: "." size_hint: 1,7 + +: + filesel: filesel + orientation: 'vertical' + I18NFileBrowser: + id: filesel + multiselect: False + filters: ["*.sgf","*.gib","*.ngf"] + path: "." + size_hint: 1,7 \ No newline at end of file