refactored and redesigned ui

This commit is contained in:
aomizu
2025-06-07 13:37:21 +09:00
parent c7746af7da
commit 3460969409
7 changed files with 669 additions and 378 deletions

160
pkg/ui/components.go Normal file
View File

@@ -0,0 +1,160 @@
package ui
import (
"log"
"net/url"
"turtlesilicon/pkg/launcher"
"turtlesilicon/pkg/patching"
"turtlesilicon/pkg/service"
"turtlesilicon/pkg/utils"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
// createOptionsComponents initializes all option-related UI components
func createOptionsComponents() {
// Load preferences for initial values
prefs, _ := utils.LoadPrefs()
metalHudCheckbox = widget.NewCheck("Enable Metal Hud (show FPS)", func(checked bool) {
launcher.EnableMetalHud = checked
log.Printf("Metal HUD enabled: %v", launcher.EnableMetalHud)
})
metalHudCheckbox.SetChecked(launcher.EnableMetalHud)
showTerminalCheckbox = widget.NewCheck("Show Terminal", func(checked bool) {
// Save to preferences
prefs, _ := utils.LoadPrefs()
prefs.ShowTerminalNormally = checked
utils.SavePrefs(prefs)
log.Printf("Show terminal normally: %v", checked)
})
showTerminalCheckbox.SetChecked(prefs.ShowTerminalNormally)
vanillaTweaksCheckbox = widget.NewCheck("Enable vanilla-tweaks", func(checked bool) {
launcher.EnableVanillaTweaks = checked
// Save to preferences
prefs, _ := utils.LoadPrefs()
prefs.EnableVanillaTweaks = checked
utils.SavePrefs(prefs)
log.Printf("Vanilla-tweaks enabled: %v", launcher.EnableVanillaTweaks)
})
vanillaTweaksCheckbox.SetChecked(prefs.EnableVanillaTweaks)
launcher.EnableVanillaTweaks = prefs.EnableVanillaTweaks
// Load environment variables from preferences
if prefs.EnvironmentVariables != "" {
launcher.CustomEnvVars = prefs.EnvironmentVariables
}
envVarsEntry = widget.NewEntry()
envVarsEntry.SetPlaceHolder(`Custom environment variables (KEY=VALUE format)`)
envVarsEntry.SetText(launcher.CustomEnvVars)
envVarsEntry.OnChanged = func(text string) {
launcher.CustomEnvVars = text
// Save to preferences
prefs, _ := utils.LoadPrefs()
prefs.EnvironmentVariables = text
utils.SavePrefs(prefs)
log.Printf("Environment variables updated: %v", launcher.CustomEnvVars)
}
}
// createPatchingButtons creates all patching-related buttons
func createPatchingButtons(myWindow fyne.Window) {
patchTurtleWoWButton = widget.NewButton("Patch TurtleWoW", func() {
patching.PatchTurtleWoW(myWindow, UpdateAllStatuses)
})
unpatchTurtleWoWButton = widget.NewButton("Unpatch TurtleWoW", func() {
patching.UnpatchTurtleWoW(myWindow, UpdateAllStatuses)
})
patchCrossOverButton = widget.NewButton("Patch CrossOver", func() {
patching.PatchCrossOver(myWindow, UpdateAllStatuses)
})
unpatchCrossOverButton = widget.NewButton("Unpatch CrossOver", func() {
patching.UnpatchCrossOver(myWindow, UpdateAllStatuses)
})
}
// createServiceButtons creates service-related buttons
func createServiceButtons(myWindow fyne.Window) {
startServiceButton = widget.NewButton("Start Service", func() {
service.StartRosettaX87Service(myWindow, UpdateAllStatuses)
})
stopServiceButton = widget.NewButton("Stop Service", func() {
service.StopRosettaX87Service(myWindow, UpdateAllStatuses)
})
}
// createLaunchButton creates the legacy launch button
func createLaunchButton(myWindow fyne.Window) {
launchButton = widget.NewButton("Launch Game", func() {
launcher.LaunchGame(myWindow)
})
}
// createBottomBar creates the bottom bar with Options, GitHub, and PLAY buttons
func createBottomBar(myWindow fyne.Window) fyne.CanvasObject {
// Set the current window for popup functionality
currentWindow = myWindow
// Options button
optionsButton := widget.NewButton("Options", func() {
showOptionsPopup()
})
// GitHub button
githubButton := widget.NewButton("GitHub", func() {
githubURL := "https://github.com/tairasu/TurtleSilicon"
parsedURL, err := url.Parse(githubURL)
if err != nil {
log.Printf("Error parsing GitHub URL: %v", err)
return
}
fyne.CurrentApp().OpenURL(parsedURL)
})
playButtonText = widget.NewRichTextFromMarkdown("# PLAY")
playButtonText.Wrapping = fyne.TextWrapOff
playButton = widget.NewButton("", func() {
launcher.LaunchGame(myWindow)
})
playButton.Importance = widget.HighImportance
playButton.Disable()
playButtonWithText := container.NewStack(
playButton,
container.NewCenter(playButtonText),
)
leftButtons := container.NewHBox(
optionsButton,
widget.NewSeparator(), // Visual separator
githubButton,
)
// Create the large play button with fixed size
buttonWidth := float32(120)
buttonHeight := float32(80)
playButtonWithText.Resize(fyne.NewSize(buttonWidth, buttonHeight))
// Create a container for the play button that ensures it's positioned at bottom-right
playButtonContainer := container.NewWithoutLayout(playButtonWithText)
playButtonContainer.Resize(fyne.NewSize(buttonWidth+40, buttonHeight+20)) // Add padding
playButtonWithText.Move(fyne.NewPos(-50, -32))
// Use border layout to position elements
bottomContainer := container.NewBorder(
nil, // top
nil, // bottom
leftButtons, // left
playButtonContainer, // right - our large play button
nil, // center
)
return container.NewPadded(bottomContainer)
}