mirror of
https://gitlab.com/2009scape/09launcher.git
synced 2025-12-09 16:45:54 -07:00
321 lines
No EOL
12 KiB
Kotlin
321 lines
No EOL
12 KiB
Kotlin
package settingseditor
|
|
|
|
import BackgroundLabel
|
|
import BackgroundPanel
|
|
import Checkbox
|
|
import ImgButton
|
|
import placeAt
|
|
import java.awt.BorderLayout
|
|
import java.awt.Color
|
|
import java.awt.Dimension
|
|
import java.awt.LayoutManager
|
|
import javax.imageio.ImageIO
|
|
import javax.swing.*
|
|
|
|
object SettingsWindow : JFrame("Client Settings") {
|
|
|
|
val xpDropModeOptions = arrayOf("instant","incremental")
|
|
val xpTrackModeOptions = arrayOf("total xp","recent skill")
|
|
|
|
var tabs = ArrayList<JPanel>()
|
|
var buttons = ArrayList<ImgButton>()
|
|
var tabNotes = ArrayList<JLabel>()
|
|
var activeTab = 0
|
|
var buttonSpacer = 0
|
|
val itemDebugCheckbox = Checkbox()
|
|
val objectDebugCheckbox = Checkbox()
|
|
val npcDebugCheckbox = Checkbox()
|
|
val rs3Border = Checkbox()
|
|
val bgColorField = JTextField()
|
|
val bgOpacityField = JTextField()
|
|
val titleColorField = JTextField()
|
|
val titleOpacityField = JTextField()
|
|
val titleFontColor = JTextField()
|
|
val borderColor = JTextField()
|
|
val borderOpacity = JTextField()
|
|
val loginTheme = JTextField()
|
|
val xpDropsEnabled = Checkbox()
|
|
val xpDropMode = JComboBox(xpDropModeOptions)
|
|
val xpTrackMode = JComboBox(xpTrackModeOptions)
|
|
val slayerColor = JTextField()
|
|
val slayerOpacity = JTextField()
|
|
val slayerEnabled = Checkbox()
|
|
val closeLauncherOnLaunch = Checkbox()
|
|
val checkForLauncherUpdates = Checkbox()
|
|
|
|
init {
|
|
isUndecorated = true
|
|
isVisible = false
|
|
isResizable = false
|
|
defaultCloseOperation = HIDE_ON_CLOSE
|
|
preferredSize = Dimension(400,300)
|
|
size = Dimension(400,300)
|
|
val tileBG = BackgroundPanel(ImageIO.read(javaClass.getResource("/topBar.png")))
|
|
contentPane = tileBG
|
|
layout = null
|
|
setLocationRelativeTo(null)
|
|
|
|
addDebugTab()
|
|
addRightClickTab()
|
|
addMiscTab()
|
|
addLauncherSettingsTab()
|
|
|
|
val saveButton = ImgButton("/save_hi.png","/save_lo.png")
|
|
saveButton.onClick {
|
|
Json.save()
|
|
isVisible = false
|
|
}
|
|
saveButton.placeAt(width - 30, height - 30, 30, 30)
|
|
add(saveButton)
|
|
|
|
val closeButton = ImgButton("/close_hi.png", "/close_dark.png")
|
|
closeButton.onClick {
|
|
isVisible = false
|
|
Json.parse()
|
|
}
|
|
closeButton.placeAt(width - 25, 5, 20, 20)
|
|
add(closeButton)
|
|
}
|
|
|
|
fun addMiscTab() {
|
|
val pane = getThemedPanel()
|
|
pane.layout = BoxLayout(pane, BoxLayout.PAGE_AXIS)
|
|
val button = ImgButton("/misc.png", "/misc.png", false)
|
|
|
|
val xpTogglePanel = getThemedPanel(BorderLayout())
|
|
val xpDropPanel = getThemedPanel(BorderLayout())
|
|
val xpTrackPanel = getThemedPanel(BorderLayout())
|
|
val slayerTogglePanel = getThemedPanel(BorderLayout())
|
|
val slayerColorPanel = getThemedPanel(BorderLayout())
|
|
val slayerOpacityPanel = getThemedPanel(BorderLayout())
|
|
val loginThemePanel = getThemedPanel(BorderLayout())
|
|
val xpToggleLabel = getLabel("XP Drops Enabled")
|
|
val xpDropLabel = getLabel("XP Drop Mode")
|
|
val xpTrackLabel = getLabel("XP Track Mode")
|
|
val slayerToggleLabel = getLabel("Slayer Tracker Enabled")
|
|
val slayerColorLabel = getLabel("Slayer Tracker Color")
|
|
val slayerOpacityLabel = getLabel("Slayer Tracker Opacity")
|
|
val loginThemeLabel = getLabel("Login Theme")
|
|
|
|
for(field in arrayOf(loginTheme, xpDropMode, xpTrackMode, slayerColor, slayerOpacity))
|
|
{
|
|
field.size = Dimension(200,10)
|
|
field.minimumSize = Dimension(200,10)
|
|
field.maximumSize = Dimension(200,10)
|
|
field.preferredSize = Dimension(200,10)
|
|
}
|
|
|
|
loginThemePanel.add(loginThemeLabel, BorderLayout.WEST)
|
|
loginThemePanel.add(loginTheme, BorderLayout.EAST)
|
|
pane.add(loginThemePanel)
|
|
pane.add(getSeparator())
|
|
|
|
xpTogglePanel.add(xpToggleLabel, BorderLayout.WEST)
|
|
xpTogglePanel.add(xpDropsEnabled, BorderLayout.EAST)
|
|
pane.add(xpTogglePanel)
|
|
|
|
xpDropPanel.add(xpDropLabel, BorderLayout.WEST)
|
|
xpDropPanel.add(xpDropMode, BorderLayout.EAST)
|
|
pane.add(xpDropPanel)
|
|
|
|
xpTrackPanel.add(xpTrackLabel, BorderLayout.WEST)
|
|
xpTrackPanel.add(xpTrackMode, BorderLayout.EAST)
|
|
pane.add(xpTrackPanel)
|
|
pane.add(getSeparator())
|
|
|
|
slayerTogglePanel.add(slayerToggleLabel, BorderLayout.WEST)
|
|
slayerTogglePanel.add(slayerEnabled, BorderLayout.EAST)
|
|
pane.add(slayerTogglePanel)
|
|
|
|
slayerColorPanel.add(slayerColorLabel, BorderLayout.WEST)
|
|
slayerColorPanel.add(slayerColor, BorderLayout.EAST)
|
|
pane.add(slayerColorPanel)
|
|
|
|
slayerOpacityPanel.add(slayerOpacityLabel, BorderLayout.WEST)
|
|
slayerOpacityPanel.add(slayerOpacity, BorderLayout.EAST)
|
|
pane.add(slayerOpacityPanel)
|
|
|
|
addTab(pane, button, getLabel("Misc Settings"))
|
|
}
|
|
|
|
fun addDebugTab(){
|
|
val pane = getThemedPanel()
|
|
pane.layout = BoxLayout(pane, BoxLayout.PAGE_AXIS)
|
|
val button = ImgButton("/debug_settings.png", "/debug_settings.png", false)
|
|
|
|
val itemDebug = getThemedPanel(BorderLayout())
|
|
val itemDebugLabel = getLabel("Item IDs Visible")
|
|
itemDebug.add(itemDebugLabel, BorderLayout.WEST)
|
|
itemDebug.add(itemDebugCheckbox, BorderLayout.EAST)
|
|
pane.add(itemDebug)
|
|
pane.add(getSeparator())
|
|
|
|
val objectDebug = getThemedPanel(BorderLayout())
|
|
val objectDebugLabel = getLabel("Object IDs Visible")
|
|
objectDebug.add(objectDebugLabel, BorderLayout.WEST)
|
|
objectDebug.add(objectDebugCheckbox, BorderLayout.EAST)
|
|
pane.add(objectDebug)
|
|
pane.add(getSeparator())
|
|
|
|
val npcDebug = getThemedPanel(BorderLayout())
|
|
val npcDebugLabel = getLabel("NPC IDs Visible")
|
|
npcDebug.add(npcDebugLabel, BorderLayout.WEST)
|
|
npcDebug.add(npcDebugCheckbox, BorderLayout.EAST)
|
|
pane.add(npcDebug)
|
|
|
|
addTab(pane, button, getLabel("Debug Settings"))
|
|
}
|
|
|
|
fun addRightClickTab() {
|
|
val pane = getThemedPanel()
|
|
pane.layout = BoxLayout(pane, BoxLayout.PAGE_AXIS)
|
|
val button = ImgButton("/rightClick.png", "/rightClick.png", false)
|
|
|
|
val rs3BorderPanel = getThemedPanel(BorderLayout())
|
|
val bgColorPanel = getThemedPanel(BorderLayout())
|
|
val bgOpacityPanel = getThemedPanel(BorderLayout())
|
|
val titleColorPanel = getThemedPanel(BorderLayout())
|
|
val titleOpacityPanel = getThemedPanel(BorderLayout())
|
|
val titleFontPanel = getThemedPanel(BorderLayout())
|
|
val borderColorPanel = getThemedPanel(BorderLayout())
|
|
val borderOpacityPanel = getThemedPanel(BorderLayout())
|
|
val rs3BorderLabel = getLabel("Use RS3-Style Menu Border")
|
|
val bgColorLabel = getLabel("Background Color")
|
|
val bgOpacityLabel = getLabel("Background Opacity")
|
|
val titleColorLabel = getLabel("Title Bar Color")
|
|
val titleOpacityLabel = getLabel("Title Bar Opacity")
|
|
val titleFontLabel = getLabel("Title Bar Font Color")
|
|
val borderColorLabel = getLabel("Border Color")
|
|
val borderOpacityLabel = getLabel("Border Opacity")
|
|
|
|
for(field in arrayOf(bgColorField, bgOpacityField, titleColorField, titleOpacityField, titleFontColor, borderColor, borderOpacity))
|
|
{
|
|
field.size = Dimension(100,10)
|
|
field.minimumSize = Dimension(100,10)
|
|
field.maximumSize = Dimension(100,10)
|
|
field.preferredSize = Dimension(100,10)
|
|
}
|
|
|
|
rs3BorderPanel.add(rs3BorderLabel, BorderLayout.WEST)
|
|
rs3BorderPanel.add(rs3Border, BorderLayout.EAST)
|
|
pane.add(rs3BorderPanel)
|
|
pane.add(getSeparator())
|
|
|
|
bgColorPanel.add(bgColorLabel, BorderLayout.WEST)
|
|
bgColorPanel.add(bgColorField, BorderLayout.EAST)
|
|
pane.add(bgColorPanel)
|
|
|
|
bgOpacityPanel.add(bgOpacityLabel, BorderLayout.WEST)
|
|
bgOpacityPanel.add(bgOpacityField, BorderLayout.EAST)
|
|
pane.add(bgOpacityPanel)
|
|
pane.add(getSeparator())
|
|
|
|
titleColorPanel.add(titleColorLabel, BorderLayout.WEST)
|
|
titleColorPanel.add(titleColorField, BorderLayout.EAST)
|
|
pane.add(titleColorPanel)
|
|
|
|
titleFontPanel.add(titleFontLabel, BorderLayout.WEST)
|
|
titleFontPanel.add(titleFontColor, BorderLayout.EAST)
|
|
pane.add(titleFontPanel)
|
|
|
|
titleOpacityPanel.add(titleOpacityLabel, BorderLayout.WEST)
|
|
titleOpacityPanel.add(titleOpacityField, BorderLayout.EAST)
|
|
pane.add(titleOpacityPanel)
|
|
pane.add(getSeparator())
|
|
|
|
borderColorPanel.add(borderColorLabel, BorderLayout.WEST)
|
|
borderColorPanel.add(borderColor, BorderLayout.EAST)
|
|
pane.add(borderColorPanel)
|
|
|
|
borderOpacityPanel.add(borderOpacityLabel, BorderLayout.WEST)
|
|
borderOpacityPanel.add(borderOpacity, BorderLayout.EAST)
|
|
pane.add(borderOpacityPanel)
|
|
|
|
addTab(pane, button, getLabel("Rightclick Settings"))
|
|
}
|
|
|
|
fun addLauncherSettingsTab(){
|
|
val pane = getThemedPanel()
|
|
pane.layout = BoxLayout(pane, BoxLayout.PAGE_AXIS)
|
|
val button = ImgButton("/launcher_settings.png", "/launcher_settings.png", false)
|
|
|
|
val closeLauncherOnLaunchPanel = getThemedPanel(BorderLayout())
|
|
val closeLauncherOnLaunchLabel = getLabel("Close launcher when client starts")
|
|
val checkForUpdatePanel = getThemedPanel(BorderLayout())
|
|
val checkForUpdateLabel = getLabel("Notify me of launcher updates")
|
|
|
|
checkForLauncherUpdates.onClick {
|
|
checkForLauncherUpdates.isToggled = !checkForLauncherUpdates.isToggled
|
|
Settings.CHECK_FOR_UPDATES = checkForLauncherUpdates.isToggled
|
|
}
|
|
|
|
closeLauncherOnLaunchPanel.add(closeLauncherOnLaunchLabel, BorderLayout.WEST)
|
|
closeLauncherOnLaunchPanel.add(closeLauncherOnLaunch, BorderLayout.EAST)
|
|
pane.add(closeLauncherOnLaunchPanel)
|
|
pane.add(getSeparator())
|
|
|
|
checkForUpdatePanel.add(checkForUpdateLabel, BorderLayout.WEST)
|
|
checkForUpdatePanel.add(checkForLauncherUpdates, BorderLayout.EAST)
|
|
pane.add(checkForUpdatePanel)
|
|
|
|
addTab(pane, button, getLabel("Launcher Settings"))
|
|
}
|
|
|
|
fun addTab(content: JPanel, button: ImgButton, tabNote: JLabel = getLabel("")){
|
|
content.placeAt(0,30,width,height - 60)
|
|
add(content)
|
|
tabs.add(content)
|
|
content.isVisible = false
|
|
button.placeAt(buttonSpacer, 0, 30, 30)
|
|
button.onClick { activeTab = buttons.indexOf(button); updateVisibleTab() }
|
|
buttonSpacer += 40
|
|
add(button)
|
|
button.isEnabled = false
|
|
buttons.add(button)
|
|
tabNote.placeAt(5, 275, width / 2, 20)
|
|
tabNote.isVisible = true
|
|
add(tabNote)
|
|
tabNotes.add(tabNote)
|
|
}
|
|
|
|
fun open(){
|
|
activeTab = 0
|
|
updateVisibleTab()
|
|
Json.parse()
|
|
checkForLauncherUpdates.isToggled = Settings.CHECK_FOR_UPDATES
|
|
isVisible = true
|
|
}
|
|
|
|
fun updateVisibleTab(){
|
|
for(i in 0 until tabs.size){
|
|
if(i != activeTab){
|
|
tabs[i].isVisible = false
|
|
tabNotes[i].isVisible = false
|
|
}
|
|
else {
|
|
tabs[i].isVisible = true
|
|
tabNotes[i].isVisible = true
|
|
}
|
|
}
|
|
repaint()
|
|
}
|
|
|
|
fun getThemedPanel(layout: LayoutManager? = null): JPanel{
|
|
val panel = if(layout == null) JPanel() else JPanel(layout)
|
|
panel.background = Color(102,90,69)
|
|
return panel
|
|
}
|
|
|
|
fun getSeparator(): JSeparator{
|
|
val sep = JSeparator(JSeparator.HORIZONTAL)
|
|
sep.background = Color(57,49,39)
|
|
sep.foreground = Color(57,49,39)
|
|
return sep
|
|
}
|
|
|
|
fun getLabel(text: String): JLabel{
|
|
val label = JLabel(text)
|
|
label.foreground = Color(227,208,179)
|
|
return label
|
|
}
|
|
} |