diff --git a/src/main/kotlin/BonusEditor.kt b/src/main/kotlin/BonusEditor.kt new file mode 100644 index 0000000..b130d54 --- /dev/null +++ b/src/main/kotlin/BonusEditor.kt @@ -0,0 +1,93 @@ +import java.awt.BorderLayout +import java.awt.Dimension +import java.awt.FlowLayout +import javax.swing.* + +object BonusEditor : JFrame("Bonus Editor") { + val bonusFiels = ArrayList() + val bonusLabels = arrayOf("Stab ATK: ", "Slash ATK: ", "Crush ATK: ", "Magic ATK: ", "Ranged ATK: ", "Stab DEF: ", "Slash DEF: ", "Crush DEF: ", "Magic DEF: ", "Ranged DEF: ", "Summoning DEF: ", "Strength Bonus: ", "Prayer Bonus: ", "Magic Strength: ", "Ranged Strength: ") + var initialValues = Array(15) { "0" } + private var callback: (result: String) -> Unit = {} + + init { + layout = BorderLayout() + val panel = JPanel() + panel.layout = BoxLayout(panel, BoxLayout.PAGE_AXIS) + defaultCloseOperation = HIDE_ON_CLOSE + + for(bonus in bonusLabels.indices){ + val rowPanel = JPanel(FlowLayout()) + val rowLabel = JLabel(bonusLabels[bonus]) + val rowField = JTextField() + rowField.text = initialValues[bonus] + rowLabel.preferredSize = Dimension(200,20) + rowField.preferredSize = Dimension(100,20) + bonusFiels.add(rowField) + rowPanel.add(rowLabel) + rowPanel.add(rowField) + panel.add(rowPanel) + panel.add(JSeparator(JSeparator.HORIZONTAL)) + } + + val buttonPanel = JPanel(BorderLayout()) + buttonPanel.minimumSize = Dimension(300,20) + + val submit = JButton("Submit") + submit.addActionListener { + val sb = StringBuilder() + for(field in bonusFiels.indices){ + sb.append(bonusFiels[field].text) + if(field != bonusFiels.size - 1) sb.append(",") + } + callback.invoke(sb.toString()) + isVisible = false + } + + val reset = JButton("Reset") + reset.addActionListener { + setFieldsToInitial() + repaint() + } + + val clear = JButton("Clear") + clear.addActionListener { + setInitialValues("") + setFieldsToInitial() + repaint() + } + + buttonPanel.add(reset, BorderLayout.WEST) + buttonPanel.add(submit, BorderLayout.CENTER) + buttonPanel.add(clear, BorderLayout.EAST) + + panel.add(buttonPanel) + + add(panel) + + setLocationRelativeTo(null) + isVisible = false + pack() + } + + fun setInitialValues(string: String){ + val split = string.split(",") + if(split.size > 3){ + for(i in initialValues.indices){ + initialValues[i] = split.getOrElse(i) {"0"} + } + } else { + initialValues = Array(15) {"0"} + } + setFieldsToInitial() + } + + private fun setFieldsToInitial(){ + for(i in bonusFiels.indices){ + bonusFiels[i].text = initialValues[i] + } + } + + fun setCallback(method: (result: String) -> Unit){ + callback = method + } +} \ No newline at end of file diff --git a/src/main/kotlin/TableEditor.kt b/src/main/kotlin/TableEditor.kt index 60699be..dbba370 100644 --- a/src/main/kotlin/TableEditor.kt +++ b/src/main/kotlin/TableEditor.kt @@ -6,12 +6,14 @@ import java.awt.FlowLayout import java.awt.event.ActionEvent import java.awt.event.KeyEvent import java.awt.event.KeyListener +import java.util.* import java.util.regex.PatternSyntaxException import javax.swing.* import javax.swing.event.TableModelEvent import javax.swing.event.TableModelListener import javax.swing.table.DefaultTableModel import javax.swing.table.TableRowSorter +import kotlin.collections.ArrayList /** * Represents a generic JTable-based editor. Pretty much just a cleaner visualisation of JSON objects with editing functionality. @@ -19,7 +21,26 @@ import javax.swing.table.TableRowSorter class TableEditor(val editor: Editors) : JFrame("Editing ${editor.name.replace("_"," ").toLowerCase()}") { val searchField = JTextField() val model = DefaultTableModel() - var table = JTable(model) + var table = object : JTable(model){ + override fun editCellAt(p0: Int, p1: Int): Boolean { + return super.editCellAt(p0, p1, null) + } + override fun editCellAt(p0: Int, p1: Int, p2: EventObject?): Boolean { + val realRow = convertRowIndexToModel(p0) + val realColumn = convertColumnIndexToModel(p1) + val columnName = model.getColumnName(realColumn) + if(columnName == "bonuses"){ + val existingBonuses = model.getValueAt(realRow,realColumn).toString() + BonusEditor.setInitialValues(existingBonuses) + BonusEditor.setCallback { result -> + model.setValueAt(result, realRow, realColumn) + } + BonusEditor.isVisible = true + return false + } + return super.editCellAt(p0, p1, p2) + } + } val sorter = TableRowSorter(model) init {