Skip to content

Commit

Permalink
Human supervised learning GUI sgf drag and drop support (#918)
Browse files Browse the repository at this point in the history
  • Loading branch information
Emanuel-de-Jong authored Mar 24, 2024
1 parent 10b5316 commit 8ce439d
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 additions & 0 deletions python/humanslnet_gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import subprocess
import json
import sys
import os
from threading import Thread
import atexit
import datetime
Expand Down Expand Up @@ -409,13 +410,23 @@ def update_metadata(self):
self.GetParent().board.set_sgfmeta(sgfmeta)
self.GetParent().board.refresh_model()

class FileDropTarget(wx.FileDropTarget):
def __init__(self, window):
super().__init__()
self.window = window

def OnDropFiles(self, x, y, sgf_files):
return self.window.on_drop_files(sgf_files)

class GoClient(wx.Frame):
def __init__(self, server_command, game_state):
super().__init__(parent=None, title="HumanSLNetViz")
self.server_command = server_command
self.game_state = game_state
self.board_size = self.game_state.board_size

self.SetDropTarget(FileDropTarget(self))

self.start_server()
self.init_ui()

Expand Down Expand Up @@ -471,6 +482,9 @@ def print_stderr():
t.daemon = True
t.start()

self.init_server()

def init_server(self):
command = {"command": "start", "board_size": self.board_size, "rules": GameState.RULES_JAPANESE}
self.send_command(command)
response = self.receive_response()
Expand Down Expand Up @@ -540,6 +554,30 @@ def redo(self):
self.handle_error(f"Unexpected response from server: {response}")
self.board.Refresh()
self.board.refresh_model()

def on_drop_files(self, sgf_files):
if len(sgf_files) == 0:
return False

sgf_file = sgf_files[0]
file_extension = os.path.splitext(sgf_file)[1]
if file_extension != ".sgf":
return False

game_state = load_sgf_game_state(sgf_file)

self.game_state = game_state
self.board_size = self.game_state.board_size

self.board.game_state = game_state
self.board.board_size = self.board_size

self.init_server()

self.board.Refresh()
self.board.refresh_model()

return True

def on_close(self, event):
self.server_process.terminate()
Expand Down

0 comments on commit 8ce439d

Please sign in to comment.