Compare commits

...

6 Commits

Author SHA1 Message Date
70b3f97368 shuffle each entry comparison 2025-05-04 13:49:13 +12:00
ba1e7964ab hide buttons when complete 2025-05-04 13:49:05 +12:00
bbc5730b19 multiline button text 2025-05-04 13:48:59 +12:00
0fe8a10bc3 keyboard support 2025-05-04 13:48:45 +12:00
962e7cce3b window: update miqt-uic to fix sizePolicy (bigger buttons) 2025-05-04 13:48:20 +12:00
3697a2e127 esc2025: fix extra hyphen in data 2025-05-03 12:53:04 +12:00
3 changed files with 92 additions and 15 deletions

View File

@ -34,6 +34,6 @@
🇵🇹 Portugal - Napa - Deslocado 🇵🇹 Portugal - Napa - Deslocado
🇷🇸 Serbia - Princ - Mila 🇷🇸 Serbia - Princ - Mila
🇸🇪 Sweden - KAJ - Bara bada bastu 🇸🇪 Sweden - KAJ - Bara bada bastu
🇸🇮 Slovenia - Klemen - How Much Time - Do We Have Left 🇸🇮 Slovenia - Klemen - How Much Time Do We Have Left
🇸🇲 San Marino - Gabry Ponte - Tutta l'Italia 🇸🇲 San Marino - Gabry Ponte - Tutta l'Italia
🇺🇦 Ukraine - Ziferblat - Bird of Pray 🇺🇦 Ukraine - Ziferblat - Bird of Pray

54
main.go
View File

@ -11,6 +11,15 @@ import (
"github.com/mappu/miqt/qt6/mainthread" "github.com/mappu/miqt/qt6/mainthread"
) )
func formatButtonText(s string) string {
// Escape & used as an alt-accelerator
s = strings.ReplaceAll(s, `&`, `&&`)
// Replace " - " with newlines
s = strings.ReplaceAll(s, ` - `, "\n")
return s
}
func main() { func main() {
qt.NewQApplication(os.Args) qt.NewQApplication(os.Args)
@ -49,7 +58,10 @@ func main() {
ui.MainWindow.SetWindowTitle(os.Args[1] + " - " + appName) ui.MainWindow.SetWindowTitle(os.Args[1] + " - " + appName)
ui.infoArea.AddItem(fmt.Sprintf("Sorting %d entries", len(entries))) ui.infoArea.AddItem(fmt.Sprintf("Sorting %d entries", len(entries)))
ui.infoArea.AddItem("Use [Q] and [Z] to select with the keyboard")
ui.infoArea.ScrollToBottom()
active := true
ret := make(chan bool, 0) ret := make(chan bool, 0)
ui.b1.OnClicked(func() { // Set up click handlers only once ui.b1.OnClicked(func() { // Set up click handlers only once
ret <- true ret <- true
@ -58,30 +70,62 @@ func main() {
ret <- false ret <- false
}) })
ui.MainWindow.OnKeyPressEvent(func(super func(event *qt.QKeyEvent), event *qt.QKeyEvent) {
if !active {
super(event)
return
}
keytext := strings.ToLower(event.Text())
if keytext == `q` {
ret <- true
} else if keytext == `z` {
ret <- false
} else { // not our event
super(event)
}
})
ui.MainWindow.Show() ui.MainWindow.Show()
ui.infoArea.SetFocusPolicy(qt.NoFocus) // prevent stealing keyboard input
comparisons := 0 comparisons := 0
go func() { go func() {
sort.SliceStable(entries, func(i, j int) bool { sort.SliceStable(entries, func(i, j int) bool {
// Towards the end, sort.SliceStable has the pattern of putting one
// entry in the top button all the time
// Maybe shuffle them
shuf := (rand.Int()%2 == 0)
if shuf {
i, j = j, i
}
mainthread.Wait(func() { mainthread.Wait(func() {
comparisons++ comparisons++
ui.infoArea.AddItem(fmt.Sprintf("Comparison #%d", comparisons)) ui.infoArea.AddItem(fmt.Sprintf("Comparison #%d", comparisons))
ui.infoArea.ScrollToBottom() ui.infoArea.ScrollToBottom()
// Escape & used as an alt-accelerator ui.b1.SetText(formatButtonText(entries[i]))
ui.b1.SetText(strings.ReplaceAll(entries[i], `&`, `&&`)) ui.b2.SetText(formatButtonText(entries[j]))
ui.b2.SetText(strings.ReplaceAll(entries[j], `&`, `&&`))
}) })
if shuf {
return !<-ret
}
return <-ret return <-ret
}) })
active = false
mainthread.Start(func() { mainthread.Start(func() {
ui.b1.SetEnabled(false) ui.b1.SetVisible(false)
ui.b2.SetEnabled(false) ui.b2.SetVisible(false)
// Sorting 39 entries took 77 comparisons // Sorting 39 entries took 77 comparisons
// Finished sorting 37 entries in 219 comparisons // Finished sorting 37 entries in 219 comparisons

View File

@ -21,29 +21,62 @@ type MainWindowUi struct {
// NewMainWindowUi creates all Qt widget classes for MainWindow. // NewMainWindowUi creates all Qt widget classes for MainWindow.
func NewMainWindowUi() *MainWindowUi { func NewMainWindowUi() *MainWindowUi {
ui := &MainWindowUi{} ui := &MainWindowUi{}
ui.MainWindow = qt.NewQMainWindow(nil) ui.MainWindow = qt.NewQMainWindow(nil)
MainWindow__objectName := qt.NewQAnyStringView3("MainWindow")
ui.MainWindow.SetObjectName(*MainWindow__objectName)
MainWindow__objectName.Delete() // setter copied value
ui.MainWindow.Resize(320, 415) ui.MainWindow.Resize(320, 415)
ui.MainWindow.SetWindowTitle("SortVote") ui.MainWindow.SetWindowTitle("SortVote")
ui.centralwidget = qt.NewQWidget(ui.MainWindow.QWidget) ui.centralwidget = qt.NewQWidget(ui.MainWindow.QWidget)
centralwidget__objectName := qt.NewQAnyStringView3("centralwidget")
ui.centralwidget.SetObjectName(*centralwidget__objectName)
centralwidget__objectName.Delete() // setter copied value
ui.verticalLayout = qt.NewQVBoxLayout(ui.centralwidget) ui.verticalLayout = qt.NewQVBoxLayout(ui.centralwidget)
verticalLayout__objectName := qt.NewQAnyStringView3("verticalLayout")
ui.verticalLayout.SetObjectName(*verticalLayout__objectName)
verticalLayout__objectName.Delete() // setter copied value
ui.verticalLayout.SetContentsMargins(11, 11, 11, 11) ui.verticalLayout.SetContentsMargins(11, 11, 11, 11)
ui.verticalLayout.SetSpacing(6) ui.verticalLayout.SetSpacing(6)
ui.infoArea = qt.NewQListWidget(ui.centralwidget) ui.infoArea = qt.NewQListWidget(ui.centralwidget)
/* miqt-uic: no handler for infoArea property 'sizePolicy' */ infoArea__objectName := qt.NewQAnyStringView3("infoArea")
ui.infoArea.SetObjectName(*infoArea__objectName)
infoArea__objectName.Delete() // setter copied value
infoArea__sizePolicy := qt.NewQSizePolicy()
infoArea__sizePolicy.SetHorizontalPolicy(qt.QSizePolicy__Minimum)
infoArea__sizePolicy.SetVerticalPolicy(qt.QSizePolicy__MinimumExpanding)
infoArea__sizePolicy.SetHorizontalStretch(0)
infoArea__sizePolicy.SetVerticalStretch(0)
infoArea__sizePolicy.SetHeightForWidth(ui.infoArea.SizePolicy().HasHeightForWidth())
ui.infoArea.SetSizePolicy(*infoArea__sizePolicy)
infoArea__sizePolicy.Delete() // setter copies values
ui.verticalLayout.AddWidget(ui.infoArea.QWidget) ui.verticalLayout.AddWidget(ui.infoArea.QWidget)
ui.b1 = qt.NewQPushButton(ui.centralwidget) ui.b1 = qt.NewQPushButton(ui.centralwidget)
/* miqt-uic: no handler for b1 property 'sizePolicy' */ b1__objectName := qt.NewQAnyStringView3("b1")
ui.b1.SetObjectName(*b1__objectName)
b1__objectName.Delete() // setter copied value
b1__sizePolicy := qt.NewQSizePolicy()
b1__sizePolicy.SetHorizontalPolicy(qt.QSizePolicy__Minimum)
b1__sizePolicy.SetVerticalPolicy(qt.QSizePolicy__MinimumExpanding)
b1__sizePolicy.SetHorizontalStretch(0)
b1__sizePolicy.SetVerticalStretch(0)
b1__sizePolicy.SetHeightForWidth(ui.b1.SizePolicy().HasHeightForWidth())
ui.b1.SetSizePolicy(*b1__sizePolicy)
b1__sizePolicy.Delete() // setter copies values
ui.verticalLayout.AddWidget(ui.b1.QWidget) ui.verticalLayout.AddWidget(ui.b1.QWidget)
ui.b2 = qt.NewQPushButton(ui.centralwidget) ui.b2 = qt.NewQPushButton(ui.centralwidget)
/* miqt-uic: no handler for b2 property 'sizePolicy' */ b2__objectName := qt.NewQAnyStringView3("b2")
ui.b2.SetObjectName(*b2__objectName)
b2__objectName.Delete() // setter copied value
b2__sizePolicy := qt.NewQSizePolicy()
b2__sizePolicy.SetHorizontalPolicy(qt.QSizePolicy__Minimum)
b2__sizePolicy.SetVerticalPolicy(qt.QSizePolicy__MinimumExpanding)
b2__sizePolicy.SetHorizontalStretch(0)
b2__sizePolicy.SetVerticalStretch(0)
b2__sizePolicy.SetHeightForWidth(ui.b2.SizePolicy().HasHeightForWidth())
ui.b2.SetSizePolicy(*b2__sizePolicy)
b2__sizePolicy.Delete() // setter copies values
ui.verticalLayout.AddWidget(ui.b2.QWidget) ui.verticalLayout.AddWidget(ui.b2.QWidget)
ui.MainWindow.SetCentralWidget(ui.centralwidget) // Set central widget ui.MainWindow.SetCentralWidget(ui.centralwidget) // Set central widget