Skip to content

Commit

Permalink
Gui: add ability to change player names
Browse files Browse the repository at this point in the history
Still a warning for those with saves who have less than three
characters. I don't know how these will be handled.
  • Loading branch information
rrooij committed May 27, 2017
1 parent fcf78cb commit 15e52a9
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 3 deletions.
18 changes: 18 additions & 0 deletions sd3save_editor/gui/mainwindow.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from PyQt5.QtWidgets import QMainWindow, QFileDialog, QMessageBox
from sd3save_editor.gui.mainwindow_ui import Ui_MainWindow

from sd3save_editor.save import NameTooLongException
import sd3save_editor.save as save
import sd3save_editor.locations as locations

Expand All @@ -10,12 +11,18 @@ def __init__(self):
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.init_file_open_events()
self.init_change_name_input()
self.init_location_combobox()
self.show()

def init_file_open_events(self):
self.ui.actionOpen.triggered.connect(self.open_file_dialog)

def init_change_name_input(self):
self.ui.c1NameLineEdit.setMaxLength(6)
self.ui.c2NameLineEdit.setMaxLength(6)
self.ui.c3NameLineEdit.setMaxLength(6)

def init_location_combobox(self):
self.ui.locationComboBox.addItems(locations.get_locations())

Expand All @@ -26,6 +33,13 @@ def init_save_event(self):
def save_form_values(self):
location_id = self.ui.locationComboBox.currentIndex() + 1
save.change_location(self.save_file, location_id)
c1Name = self.ui.c1NameLineEdit.text()
c2Name = self.ui.c2NameLineEdit.text()
c3Name = self.ui.c3NameLineEdit.text()
try:
save.change_character_names(self.save_file, (c1Name, c2Name, c3Name))
except NameTooLongException as err:
QMessageBox.warning(self, "Name too long", str(err))
save.write_checksum(self.save_file)
self.save_file.flush()

Expand All @@ -43,6 +57,10 @@ def open_file_dialog(self):
self.ui.saveButton.setEnabled(True)
self.ui.actionSave.setEnabled(True)
self.ui.locationComboBox.setCurrentIndex(save.read_location(self.save_file) - 1)
names = save.read_character_names(self.save_file)
self.ui.c1NameLineEdit.insert(names[0])
self.ui.c2NameLineEdit.insert(names[1])
self.ui.c3NameLineEdit.insert(names[2])
self.init_save_event()
except Exception as ex:
QMessageBox.warning(self, "Can't open Seiken3 save", str(ex))
32 changes: 31 additions & 1 deletion sd3save_editor/gui/mainwindow.ui
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
<x>0</x>
<y>0</y>
<width>791</width>
<height>80</height>
<height>131</height>
</rect>
</property>
<layout class="QFormLayout" name="formLayout">
Expand All @@ -37,6 +37,36 @@
<item row="0" column="1">
<widget class="QComboBox" name="locationComboBox"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="labelCharacter1Name">
<property name="text">
<string>Character 1 Name</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="c1NameLineEdit"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="labelCharacter2Name">
<property name="text">
<string>Character 2 Name</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="c2NameLineEdit"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="labelCharacter3Name">
<property name="text">
<string>Character 3 Name</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="c3NameLineEdit"/>
</item>
</layout>
</widget>
<widget class="QPushButton" name="saveButton">
Expand Down
23 changes: 22 additions & 1 deletion sd3save_editor/gui/mainwindow_ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def setupUi(self, MainWindow):
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.formLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.formLayoutWidget.setGeometry(QtCore.QRect(0, 0, 791, 80))
self.formLayoutWidget.setGeometry(QtCore.QRect(0, 0, 791, 131))
self.formLayoutWidget.setObjectName("formLayoutWidget")
self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget)
self.formLayout.setFieldGrowthPolicy(QtWidgets.QFormLayout.AllNonFixedFieldsGrow)
Expand All @@ -27,6 +27,24 @@ def setupUi(self, MainWindow):
self.locationComboBox = QtWidgets.QComboBox(self.formLayoutWidget)
self.locationComboBox.setObjectName("locationComboBox")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.locationComboBox)
self.labelCharacter1Name = QtWidgets.QLabel(self.formLayoutWidget)
self.labelCharacter1Name.setObjectName("labelCharacter1Name")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.labelCharacter1Name)
self.c1NameLineEdit = QtWidgets.QLineEdit(self.formLayoutWidget)
self.c1NameLineEdit.setObjectName("c1NameLineEdit")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.c1NameLineEdit)
self.labelCharacter2Name = QtWidgets.QLabel(self.formLayoutWidget)
self.labelCharacter2Name.setObjectName("labelCharacter2Name")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.labelCharacter2Name)
self.c2NameLineEdit = QtWidgets.QLineEdit(self.formLayoutWidget)
self.c2NameLineEdit.setObjectName("c2NameLineEdit")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.c2NameLineEdit)
self.labelCharacter3Name = QtWidgets.QLabel(self.formLayoutWidget)
self.labelCharacter3Name.setObjectName("labelCharacter3Name")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.labelCharacter3Name)
self.c3NameLineEdit = QtWidgets.QLineEdit(self.formLayoutWidget)
self.c3NameLineEdit.setObjectName("c3NameLineEdit")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.c3NameLineEdit)
self.saveButton = QtWidgets.QPushButton(self.centralwidget)
self.saveButton.setEnabled(False)
self.saveButton.setGeometry(QtCore.QRect(690, 530, 81, 22))
Expand Down Expand Up @@ -57,6 +75,9 @@ def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Seiken Densetsu 3 Save Editor"))
self.locationLabel.setText(_translate("MainWindow", "Location"))
self.labelCharacter1Name.setText(_translate("MainWindow", "Character 1 Name"))
self.labelCharacter2Name.setText(_translate("MainWindow", "Character 2 Name"))
self.labelCharacter3Name.setText(_translate("MainWindow", "Character 3 Name"))
self.saveButton.setText(_translate("MainWindow", "Save"))
self.menuFile.setTitle(_translate("MainWindow", "File"))
self.actionOpen.setText(_translate("MainWindow", "Open"))
Expand Down
2 changes: 1 addition & 1 deletion sd3save_editor/save.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def change_character_names(save, names):
space_between = 0x20 # Each name in header is seperated by 0x20
for idx, name in enumerate(names):
if len(name) > 6:
raise NameTooLongException("Name is too long. Max is 6 characters")
raise NameTooLongException("Name: {0} is too long. Max is 6 characters".format(name))
encoded = name.encode('utf-16-le')
zeroes = bytearray(6 - len(name))
save.seek(character_1_header_name_offset + (space_between * idx))
Expand Down

0 comments on commit 15e52a9

Please sign in to comment.