update to miqt 0.10, update to qt 6

This commit is contained in:
mappu 2025-04-16 18:17:44 +12:00
parent 18331ae007
commit 18f10fc1b4
10 changed files with 68 additions and 120 deletions

View File

@ -8,7 +8,7 @@ DOCKER := docker
MIQT_UIC := miqt-uic MIQT_UIC := miqt-uic
MIQT_RCC := miqt-rcc MIQT_RCC := miqt-rcc
GO_WINRES := go-winres GO_WINRES := go-winres
SOURCES := $(wildcard *.go *.ui *.qrc) resources.go mainwindow_ui.go itemwindow_ui.go rsrc_windows_amd64.syso SOURCES := $(wildcard *.go *.ui *.qrc) resources.go resources.rcc mainwindow_ui.go itemwindow_ui.go rsrc_windows_amd64.syso
.PHONY: all .PHONY: all
all: build/qbolt build/qbolt.exe all: build/qbolt build/qbolt.exe
@ -18,20 +18,25 @@ dist: build/qbolt-${VERSION}-windows-x86_64.zip build/qbolt-${VERSION}-debian12-
.PHONY: clean .PHONY: clean
clean: clean:
rm -f qbolt || true rm -f qbolt
rm -rf build || true rm -rf build
rm -f windows-manifest.json || true mkdir -p build
touch build/.create_dir
rm -f windows-manifest.json
rm -f rsrc_windows_amd64.syso
rm -f resources.go
rm -f resources.rcc
# Generated files # Generated files
resources.rcc resources.go: resources.qrc resources.rcc resources.go: resources.qrc
$(MIQT_RCC) resources.qrc $(MIQT_RCC) -Qt6 -Input resources.qrc
mainwindow_ui.go: mainwindow.ui mainwindow_ui.go: mainwindow.ui
$(MIQT_UIC) -InFile mainwindow.ui -OutFile mainwindow_ui.go $(MIQT_UIC) -Qt6 -InFile mainwindow.ui -OutFile mainwindow_ui.go
itemwindow_ui.go: itemwindow.ui itemwindow_ui.go: itemwindow.ui
$(MIQT_UIC) -InFile itemwindow.ui -OutFile itemwindow_ui.go $(MIQT_UIC) -Qt6 -InFile itemwindow.ui -OutFile itemwindow_ui.go
windows-manifest.json: windows-manifest.template.json Makefile windows-manifest.json: windows-manifest.template.json Makefile
cat windows-manifest.template.json | sed -re 's_%VERSION%_$(VERSION)_' > windows-manifest.json cat windows-manifest.template.json | sed -re 's_%VERSION%_$(VERSION)_' > windows-manifest.json

2
go.mod
View File

@ -3,7 +3,7 @@ module code.ivysaur.me/qbolt
go 1.23 go 1.23
require ( require (
github.com/mappu/miqt v0.5.0 github.com/mappu/miqt v0.10.0
go.etcd.io/bbolt v1.3.11 go.etcd.io/bbolt v1.3.11
) )

9
go.sum
View File

@ -1,11 +1,16 @@
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/mappu/miqt v0.5.0 h1:BWajkNI9PWlWN6ZDgWKwv1gieBGEImRqlWS8ZqDmDfA= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/mappu/miqt v0.5.0/go.mod h1:xFg7ADaO1QSkmXPsPODoKe/bydJpRG9fgCYyIDl/h1U= github.com/mappu/miqt v0.10.0 h1:w+ucRwdoIO7xS32us34lL2Mh0+aarywNpQz6c76ZSDY=
github.com/mappu/miqt v0.10.0/go.mod h1:xFg7ADaO1QSkmXPsPODoKe/bydJpRG9fgCYyIDl/h1U=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
go.etcd.io/bbolt v1.3.11 h1:yGEzV1wPz2yVCLsD8ZAiGHhHVlczyC9d1rP43/VCRJ0= go.etcd.io/bbolt v1.3.11 h1:yGEzV1wPz2yVCLsD8ZAiGHhHVlczyC9d1rP43/VCRJ0=
go.etcd.io/bbolt v1.3.11/go.mod h1:dksAq7YMXoljX0xu6VF5DMZGbhYYoLUalEiSySYAS4I= go.etcd.io/bbolt v1.3.11/go.mod h1:dksAq7YMXoljX0xu6VF5DMZGbhYYoLUalEiSySYAS4I=
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@ -1,12 +1,12 @@
// Generated by miqt-uic. To update this file, edit the .ui file in // Generated by miqt-uic. To update this file, edit the .ui file in
// Qt Designer, and then run 'go generate'. // Qt Designer, and then run 'go generate'.
// //
//go:generate miqt-uic -InFile itemwindow.ui -OutFile itemwindow_ui.go //go:generate miqt-uic -Qt6 -InFile itemwindow.ui -OutFile itemwindow_ui.go
package main package main
import ( import (
"github.com/mappu/miqt/qt" qt "github.com/mappu/miqt/qt6"
) )
type ItemWindowUi struct { type ItemWindowUi struct {
@ -22,8 +22,7 @@ type ItemWindowUi struct {
func NewItemWindowUi() *ItemWindowUi { func NewItemWindowUi() *ItemWindowUi {
ui := &ItemWindowUi{} ui := &ItemWindowUi{}
ui.ItemWindow = qt.NewQDialog2(nil) ui.ItemWindow = qt.NewQDialog(nil)
ui.ItemWindow.SetObjectName("ItemWindow")
ui.ItemWindow.Resize(370, 353) ui.ItemWindow.Resize(370, 353)
ui.ItemWindow.SetWindowTitle("") ui.ItemWindow.SetWindowTitle("")
icon0 := qt.NewQIcon() icon0 := qt.NewQIcon()
@ -31,27 +30,22 @@ func NewItemWindowUi() *ItemWindowUi {
ui.ItemWindow.SetWindowIcon(icon0) ui.ItemWindow.SetWindowIcon(icon0)
ui.gridLayout_2 = qt.NewQGridLayout(ui.ItemWindow.QWidget) ui.gridLayout_2 = qt.NewQGridLayout(ui.ItemWindow.QWidget)
ui.gridLayout_2.SetObjectName("gridLayout_2")
ui.gridLayout_2.SetVerticalSpacing(0) ui.gridLayout_2.SetVerticalSpacing(0)
ui.gridLayout_2.SetContentsMargins(0, 0, 0, 0) ui.gridLayout_2.SetContentsMargins(0, 0, 0, 0)
ui.gridLayout_2.SetSpacing(6) ui.gridLayout_2.SetSpacing(6)
ui.contentArea = qt.NewQPlainTextEdit3(ui.ItemWindow.QWidget) ui.contentArea = qt.NewQPlainTextEdit(ui.ItemWindow.QWidget)
ui.contentArea.SetObjectName("contentArea")
ui.contentArea.SetFrameShape(qt.QFrame__NoFrame) ui.contentArea.SetFrameShape(qt.QFrame__NoFrame)
ui.gridLayout_2.AddWidget2(ui.contentArea.QWidget, 0, 0) ui.gridLayout_2.AddWidget2(ui.contentArea.QWidget, 0, 0)
ui.frame = qt.NewQFrame2(ui.ItemWindow.QWidget) ui.frame = qt.NewQFrame(ui.ItemWindow.QWidget)
ui.frame.SetObjectName("frame")
ui.gridLayout = qt.NewQGridLayout(ui.frame.QWidget) ui.gridLayout = qt.NewQGridLayout(ui.frame.QWidget)
ui.gridLayout.SetObjectName("gridLayout")
ui.gridLayout.SetContentsMargins(11, 11, 11, 11) ui.gridLayout.SetContentsMargins(11, 11, 11, 11)
ui.gridLayout.SetSpacing(6) ui.gridLayout.SetSpacing(6)
ui.buttonBox = qt.NewQDialogButtonBox5(ui.frame.QWidget) ui.buttonBox = qt.NewQDialogButtonBox(ui.frame.QWidget)
ui.buttonBox.SetObjectName("buttonBox")
ui.buttonBox.SetStandardButtons(qt.QDialogButtonBox__Cancel | qt.QDialogButtonBox__Save) ui.buttonBox.SetStandardButtons(qt.QDialogButtonBox__Cancel | qt.QDialogButtonBox__Save)
ui.buttonBox.OnAccepted(ui.ItemWindow.Accept) ui.buttonBox.OnAccepted(ui.ItemWindow.Accept)
ui.buttonBox.OnRejected(ui.ItemWindow.Reject) ui.buttonBox.OnRejected(ui.ItemWindow.Reject)

View File

@ -3,7 +3,7 @@ package main
import ( import (
"os" "os"
"github.com/mappu/miqt/qt" qt "github.com/mappu/miqt/qt6"
) )
var Version string = "v0.0.0-devel" var Version string = "v0.0.0-devel"

View File

@ -6,7 +6,7 @@ import (
"strconv" "strconv"
"strings" "strings"
"github.com/mappu/miqt/qt" qt "github.com/mappu/miqt/qt6"
bolt "go.etcd.io/bbolt" bolt "go.etcd.io/bbolt"
) )
@ -24,13 +24,13 @@ func NewMainWindow() *MainWindow {
this.on_bucketTree_currentItemChanged(nil, nil) this.on_bucketTree_currentItemChanged(nil, nil)
this.databaseContext = qt.NewQMenu() this.databaseContext = qt.NewQMenu(this.ui.MainWindow.QWidget)
this.databaseContext.QWidget.AddAction(this.ui.actionRefresh_buckets) this.databaseContext.QWidget.AddAction(this.ui.actionRefresh_buckets)
this.databaseContext.QWidget.AddAction(this.ui.actionAdd_bucket) this.databaseContext.QWidget.AddAction(this.ui.actionAdd_bucket)
this.databaseContext.AddSeparator() this.databaseContext.AddSeparator()
this.databaseContext.QWidget.AddAction(this.ui.actionDisconnect) this.databaseContext.QWidget.AddAction(this.ui.actionDisconnect)
this.bucketContext = qt.NewQMenu() this.bucketContext = qt.NewQMenu(this.ui.MainWindow.QWidget)
this.bucketContext.QWidget.AddAction(this.ui.actionRefresh_buckets) this.bucketContext.QWidget.AddAction(this.ui.actionRefresh_buckets)
this.bucketContext.QWidget.AddAction(this.ui.actionAdd_bucket) this.bucketContext.QWidget.AddAction(this.ui.actionAdd_bucket)
this.bucketContext.AddSeparator() this.bucketContext.AddSeparator()
@ -68,7 +68,7 @@ var bdbs []*bolt.DB = nil
func SET_BDB(top *qt.QTreeWidgetItem, bdb *bolt.DB) { func SET_BDB(top *qt.QTreeWidgetItem, bdb *bolt.DB) {
idx := len(bdbs) idx := len(bdbs)
bdbs = append(bdbs, bdb) bdbs = append(bdbs, bdb)
top.SetData(0, BdbPointerRole, qt.NewQVariant7(idx)) // Don't store a Go pointer in Qt memory top.SetData(0, BdbPointerRole, qt.NewQVariant4(idx)) // Don't store a Go pointer in Qt memory
} }
func GET_BDB(top *qt.QTreeWidgetItem) *bolt.DB { func GET_BDB(top *qt.QTreeWidgetItem) *bolt.DB {
@ -157,7 +157,7 @@ func (this *MainWindow) refreshBucketTree(itm *qt.QTreeWidgetItem) {
child := qt.NewQTreeWidgetItem6(itm) // NewQTreeWidgetItem() child := qt.NewQTreeWidgetItem6(itm) // NewQTreeWidgetItem()
child.SetText(0, getDisplayName(qba)) child.SetText(0, getDisplayName(qba))
child.SetData(0, BinaryDataRole, qt.NewQVariant15(MakeQByteArray(qba))) child.SetData(0, BinaryDataRole, qt.NewQVariant12([]byte(qba)))
child.SetIcon(0, qt.NewQIcon4(":/rsrc/table.png")) child.SetIcon(0, qt.NewQIcon4(":/rsrc/table.png"))
itm.AddChild(child) itm.AddChild(child)
@ -215,11 +215,11 @@ func (this *MainWindow) on_bucketTree_customContextMenuRequested(pos *qt.QPoint)
if itm.Parent() != nil { if itm.Parent() != nil {
// Child item, show the bucket menu // Child item, show the bucket menu
this.bucketContext.Popup(this.ui.bucketTree.Viewport().MapToGlobal(pos)) this.bucketContext.Popup(this.ui.bucketTree.Viewport().MapToGlobalWithQPoint(pos))
} else { } else {
// Top-level item, show the database menu // Top-level item, show the database menu
this.databaseContext.Popup(this.ui.bucketTree.Viewport().MapToGlobal(pos)) this.databaseContext.Popup(this.ui.bucketTree.Viewport().MapToGlobalWithQPoint(pos))
} }
} }
@ -283,7 +283,7 @@ func (this *MainWindow) refreshData(bdb *bolt.DB, browse []string) {
err := Bolt_ListItems(bdb, browse, func(lii ListItemInfo) error { err := Bolt_ListItems(bdb, browse, func(lii ListItemInfo) error {
itm := qt.NewQTreeWidgetItem() itm := qt.NewQTreeWidgetItem()
itm.SetText(0, getDisplayName(lii.Name)) itm.SetText(0, getDisplayName(lii.Name))
itm.SetData(0, BinaryDataRole, qt.NewQVariant15(MakeQByteArray(lii.Name))) itm.SetData(0, BinaryDataRole, qt.NewQVariant12([]byte(lii.Name)))
itm.SetText(1, fmt.Sprintf("%d", lii.DataLen)) itm.SetText(1, fmt.Sprintf("%d", lii.DataLen))
this.ui.bucketData.AddTopLevelItem(itm) this.ui.bucketData.AddTopLevelItem(itm)
return nil return nil
@ -328,7 +328,7 @@ func (this *MainWindow) getSelection(itm *qt.QTreeWidgetItem) windowSelection {
if top.Parent() == nil { if top.Parent() == nil {
break break
} else { } else {
browse = append(browse, FromQByteArray(top.Data(0, BinaryDataRole).ToByteArray())) browse = append(browse, string(top.Data(0, BinaryDataRole).ToByteArray()))
top = top.Parent() top = top.Parent()
} }
} }
@ -370,8 +370,7 @@ func (this *MainWindow) on_bucketData_doubleClicked(index *qt.QModelIndex) {
// Get item key // Get item key
model := index.Model() key := string(index.DataWithRole(BinaryDataRole).ToByteArray())
key := FromQByteArray(model.Data2(model.Index(index.Row(), 0), BinaryDataRole).ToByteArray())
// DB lookup // DB lookup
content, err := Bolt_GetItem(ws.bdb, ws.browse, key) content, err := Bolt_GetItem(ws.bdb, ws.browse, key)
@ -415,8 +414,8 @@ func (this *MainWindow) on_actionDelete_bucket_triggered() {
} }
// Prompt for confirmation // Prompt for confirmation
bucketToDelete := FromQByteArray(ws.itm.Data(0, BinaryDataRole).ToByteArray()) bucketToDelete := string(ws.itm.Data(0, BinaryDataRole).ToByteArray())
if qt.QMessageBox_Question4( if qt.QMessageBox_Question2(
this.Widget(), this.Widget(),
"Delete bucket", "Delete bucket",
fmt.Sprintf("Are you sure you want to remove the bucket '%s'?", getDisplayName(bucketToDelete)), fmt.Sprintf("Are you sure you want to remove the bucket '%s'?", getDisplayName(bucketToDelete)),
@ -474,13 +473,13 @@ func (this *MainWindow) on_DeleteDataButton_clicked() {
} }
// Prompt for confirmation // Prompt for confirmation
if qt.QMessageBox_Question4(this.Widget(), "Delete items", fmt.Sprintf("Are you sure you want to remove %d item(s)?", len(selection)), qt.QMessageBox__Yes, qt.QMessageBox__Cancel) != int(qt.QMessageBox__Yes) { if qt.QMessageBox_Question2(this.Widget(), "Delete items", fmt.Sprintf("Are you sure you want to remove %d item(s)?", len(selection)), qt.QMessageBox__Yes, qt.QMessageBox__Cancel) != int(qt.QMessageBox__Yes) {
return return
} }
var i int = len(selection) var i int = len(selection)
for i > 0 { for i > 0 {
err := Bolt_DeleteItem(ws.bdb, ws.browse, FromQByteArray(selection[i-1].Data(0, BinaryDataRole).ToByteArray())) err := Bolt_DeleteItem(ws.bdb, ws.browse, string(selection[i-1].Data(0, BinaryDataRole).ToByteArray()))
if err != nil { if err != nil {
this.alert(fmt.Sprintf("Error removing item: %s", err.Error())) this.alert(fmt.Sprintf("Error removing item: %s", err.Error()))
return return

View File

@ -1,12 +1,12 @@
// Generated by miqt-uic. To update this file, edit the .ui file in // Generated by miqt-uic. To update this file, edit the .ui file in
// Qt Designer, and then run 'go generate'. // Qt Designer, and then run 'go generate'.
// //
//go:generate miqt-uic -InFile mainwindow.ui -OutFile mainwindow_ui.go //go:generate miqt-uic -Qt6 -InFile mainwindow.ui -OutFile mainwindow_ui.go
package main package main
import ( import (
"github.com/mappu/miqt/qt" qt "github.com/mappu/miqt/qt6"
) )
type MainWindowUi struct { type MainWindowUi struct {
@ -57,8 +57,7 @@ type MainWindowUi struct {
func NewMainWindowUi() *MainWindowUi { func NewMainWindowUi() *MainWindowUi {
ui := &MainWindowUi{} ui := &MainWindowUi{}
ui.MainWindow = qt.NewQMainWindow2(nil) ui.MainWindow = qt.NewQMainWindow(nil)
ui.MainWindow.SetObjectName("MainWindow")
ui.MainWindow.Resize(668, 405) ui.MainWindow.Resize(668, 405)
ui.MainWindow.SetWindowTitle("QBolt") ui.MainWindow.SetWindowTitle("QBolt")
icon0 := qt.NewQIcon() icon0 := qt.NewQIcon()
@ -66,105 +65,83 @@ func NewMainWindowUi() *MainWindowUi {
ui.MainWindow.SetWindowIcon(icon0) ui.MainWindow.SetWindowIcon(icon0)
ui.actionAbout_qbolt = qt.NewQAction() ui.actionAbout_qbolt = qt.NewQAction()
ui.actionAbout_qbolt.SetObjectName("actionAbout_qbolt")
icon1 := qt.NewQIcon() icon1 := qt.NewQIcon()
icon1.AddFile4(":/rsrc/information.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off) icon1.AddFile4(":/rsrc/information.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off)
ui.actionAbout_qbolt.SetIcon(icon1) ui.actionAbout_qbolt.SetIcon(icon1)
ui.actionAbout_Qt = qt.NewQAction() ui.actionAbout_Qt = qt.NewQAction()
ui.actionAbout_Qt.SetObjectName("actionAbout_Qt")
ui.actionOpen_database = qt.NewQAction() ui.actionOpen_database = qt.NewQAction()
ui.actionOpen_database.SetObjectName("actionOpen_database")
icon2 := qt.NewQIcon() icon2 := qt.NewQIcon()
icon2.AddFile4(":/rsrc/database.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off) icon2.AddFile4(":/rsrc/database.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off)
ui.actionOpen_database.SetIcon(icon2) ui.actionOpen_database.SetIcon(icon2)
ui.actionExit = qt.NewQAction() ui.actionExit = qt.NewQAction()
ui.actionExit.SetObjectName("actionExit")
icon3 := qt.NewQIcon() icon3 := qt.NewQIcon()
icon3.AddFile4(":/rsrc/door_out.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off) icon3.AddFile4(":/rsrc/door_out.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off)
ui.actionExit.SetIcon(icon3) ui.actionExit.SetIcon(icon3)
ui.actionDisconnect = qt.NewQAction() ui.actionDisconnect = qt.NewQAction()
ui.actionDisconnect.SetObjectName("actionDisconnect")
icon4 := qt.NewQIcon() icon4 := qt.NewQIcon()
icon4.AddFile4(":/rsrc/disconnect.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off) icon4.AddFile4(":/rsrc/disconnect.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off)
ui.actionDisconnect.SetIcon(icon4) ui.actionDisconnect.SetIcon(icon4)
ui.actionDelete_bucket = qt.NewQAction() ui.actionDelete_bucket = qt.NewQAction()
ui.actionDelete_bucket.SetObjectName("actionDelete_bucket")
icon5 := qt.NewQIcon() icon5 := qt.NewQIcon()
icon5.AddFile4(":/rsrc/table_delete.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off) icon5.AddFile4(":/rsrc/table_delete.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off)
ui.actionDelete_bucket.SetIcon(icon5) ui.actionDelete_bucket.SetIcon(icon5)
ui.actionRefresh_buckets = qt.NewQAction() ui.actionRefresh_buckets = qt.NewQAction()
ui.actionRefresh_buckets.SetObjectName("actionRefresh_buckets")
icon6 := qt.NewQIcon() icon6 := qt.NewQIcon()
icon6.AddFile4(":/rsrc/arrow_refresh.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off) icon6.AddFile4(":/rsrc/arrow_refresh.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off)
ui.actionRefresh_buckets.SetIcon(icon6) ui.actionRefresh_buckets.SetIcon(icon6)
ui.actionClear_selection = qt.NewQAction() ui.actionClear_selection = qt.NewQAction()
ui.actionClear_selection.SetObjectName("actionClear_selection")
ui.actionNew_database = qt.NewQAction() ui.actionNew_database = qt.NewQAction()
ui.actionNew_database.SetObjectName("actionNew_database")
icon7 := qt.NewQIcon() icon7 := qt.NewQIcon()
icon7.AddFile4(":/rsrc/database_add.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off) icon7.AddFile4(":/rsrc/database_add.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off)
ui.actionNew_database.SetIcon(icon7) ui.actionNew_database.SetIcon(icon7)
ui.actionAdd_bucket = qt.NewQAction() ui.actionAdd_bucket = qt.NewQAction()
ui.actionAdd_bucket.SetObjectName("actionAdd_bucket")
icon8 := qt.NewQIcon() icon8 := qt.NewQIcon()
icon8.AddFile4(":/rsrc/table_add.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off) icon8.AddFile4(":/rsrc/table_add.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off)
ui.actionAdd_bucket.SetIcon(icon8) ui.actionAdd_bucket.SetIcon(icon8)
ui.actionOpen_database_as_read_only = qt.NewQAction() ui.actionOpen_database_as_read_only = qt.NewQAction()
ui.actionOpen_database_as_read_only.SetObjectName("actionOpen_database_as_read_only")
ui.centralWidget = qt.NewQWidget2(ui.MainWindow.QWidget) ui.centralWidget = qt.NewQWidget(ui.MainWindow.QWidget)
ui.centralWidget.SetObjectName("centralWidget")
ui.gridLayout = qt.NewQGridLayout(ui.centralWidget) ui.gridLayout = qt.NewQGridLayout(ui.centralWidget)
ui.gridLayout.SetObjectName("gridLayout")
ui.gridLayout.SetContentsMargins(0, 0, 0, 0) ui.gridLayout.SetContentsMargins(0, 0, 0, 0)
ui.gridLayout.SetSpacing(6) ui.gridLayout.SetSpacing(6)
ui.splitter = qt.NewQSplitter3(ui.centralWidget) ui.splitter = qt.NewQSplitter(ui.centralWidget)
ui.splitter.SetObjectName("splitter")
ui.splitter.SetOrientation(qt.Horizontal) ui.splitter.SetOrientation(qt.Horizontal)
ui.splitter.SetChildrenCollapsible(false) ui.splitter.SetChildrenCollapsible(false)
ui.bucketTree = qt.NewQTreeWidget2(ui.splitter.QWidget) ui.bucketTree = qt.NewQTreeWidget(ui.splitter.QWidget)
ui.bucketTree.SetObjectName("bucketTree")
ui.bucketTree.SetContextMenuPolicy(qt.CustomContextMenu) ui.bucketTree.SetContextMenuPolicy(qt.CustomContextMenu)
ui.bucketTree.SetUniformRowHeights(true) ui.bucketTree.SetUniformRowHeights(true)
ui.splitter.AddWidget(ui.bucketTree.QWidget) ui.splitter.AddWidget(ui.bucketTree.QWidget)
ui.stackedWidget = qt.NewQStackedWidget2(ui.splitter.QWidget) ui.stackedWidget = qt.NewQStackedWidget(ui.splitter.QWidget)
ui.stackedWidget.SetObjectName("stackedWidget")
ui.databasePage = qt.NewQWidget2(ui.stackedWidget.QWidget) ui.databasePage = qt.NewQWidget(ui.stackedWidget.QWidget)
ui.databasePage.SetObjectName("databasePage")
ui.gridLayout_4 = qt.NewQGridLayout(ui.databasePage) ui.gridLayout_4 = qt.NewQGridLayout(ui.databasePage)
ui.gridLayout_4.SetObjectName("gridLayout_4")
ui.gridLayout_4.SetContentsMargins(0, 0, 0, 0) ui.gridLayout_4.SetContentsMargins(0, 0, 0, 0)
ui.gridLayout_4.SetSpacing(6) ui.gridLayout_4.SetSpacing(6)
ui.databaseTabWidget = qt.NewQTabWidget2(ui.databasePage) ui.databaseTabWidget = qt.NewQTabWidget(ui.databasePage)
ui.databaseTabWidget.SetObjectName("databaseTabWidget")
ui.databasePropertiesTab = qt.NewQWidget2(ui.databaseTabWidget.QWidget) ui.databasePropertiesTab = qt.NewQWidget(ui.databaseTabWidget.QWidget)
ui.databasePropertiesTab.SetObjectName("databasePropertiesTab")
ui.gridLayout_2 = qt.NewQGridLayout(ui.databasePropertiesTab) ui.gridLayout_2 = qt.NewQGridLayout(ui.databasePropertiesTab)
ui.gridLayout_2.SetObjectName("gridLayout_2")
ui.gridLayout_2.SetContentsMargins(3, 3, 3, 3) ui.gridLayout_2.SetContentsMargins(3, 3, 3, 3)
ui.gridLayout_2.SetSpacing(6) ui.gridLayout_2.SetSpacing(6)
ui.databasePropertiesArea = qt.NewQPlainTextEdit3(ui.databasePropertiesTab) ui.databasePropertiesArea = qt.NewQPlainTextEdit(ui.databasePropertiesTab)
ui.databasePropertiesArea.SetObjectName("databasePropertiesArea")
ui.databasePropertiesArea.SetFrameShape(qt.QFrame__NoFrame) ui.databasePropertiesArea.SetFrameShape(qt.QFrame__NoFrame)
ui.databasePropertiesArea.SetReadOnly(true) ui.databasePropertiesArea.SetReadOnly(true)
@ -176,27 +153,21 @@ func NewMainWindowUi() *MainWindowUi {
ui.gridLayout_4.AddWidget2(ui.databaseTabWidget.QWidget, 0, 0) ui.gridLayout_4.AddWidget2(ui.databaseTabWidget.QWidget, 0, 0)
ui.stackedWidget.AddWidget(ui.databasePage) ui.stackedWidget.AddWidget(ui.databasePage)
ui.bucketPage = qt.NewQWidget2(ui.stackedWidget.QWidget) ui.bucketPage = qt.NewQWidget(ui.stackedWidget.QWidget)
ui.bucketPage.SetObjectName("bucketPage")
ui.gridLayout_3 = qt.NewQGridLayout(ui.bucketPage) ui.gridLayout_3 = qt.NewQGridLayout(ui.bucketPage)
ui.gridLayout_3.SetObjectName("gridLayout_3")
ui.gridLayout_3.SetContentsMargins(0, 0, 0, 0) ui.gridLayout_3.SetContentsMargins(0, 0, 0, 0)
ui.gridLayout_3.SetSpacing(6) ui.gridLayout_3.SetSpacing(6)
ui.bucketTabWidget = qt.NewQTabWidget2(ui.bucketPage) ui.bucketTabWidget = qt.NewQTabWidget(ui.bucketPage)
ui.bucketTabWidget.SetObjectName("bucketTabWidget")
ui.bucketPropertiesTab = qt.NewQWidget2(ui.bucketTabWidget.QWidget) ui.bucketPropertiesTab = qt.NewQWidget(ui.bucketTabWidget.QWidget)
ui.bucketPropertiesTab.SetObjectName("bucketPropertiesTab")
ui.gridLayout_5 = qt.NewQGridLayout(ui.bucketPropertiesTab) ui.gridLayout_5 = qt.NewQGridLayout(ui.bucketPropertiesTab)
ui.gridLayout_5.SetObjectName("gridLayout_5")
ui.gridLayout_5.SetContentsMargins(3, 3, 3, 3) ui.gridLayout_5.SetContentsMargins(3, 3, 3, 3)
ui.gridLayout_5.SetSpacing(6) ui.gridLayout_5.SetSpacing(6)
ui.bucketPropertiesArea = qt.NewQPlainTextEdit3(ui.bucketPropertiesTab) ui.bucketPropertiesArea = qt.NewQPlainTextEdit(ui.bucketPropertiesTab)
ui.bucketPropertiesArea.SetObjectName("bucketPropertiesArea")
ui.bucketPropertiesArea.SetFrameShape(qt.QFrame__NoFrame) ui.bucketPropertiesArea.SetFrameShape(qt.QFrame__NoFrame)
ui.bucketPropertiesArea.SetReadOnly(true) ui.bucketPropertiesArea.SetReadOnly(true)
@ -205,16 +176,13 @@ func NewMainWindowUi() *MainWindowUi {
icon10.AddFile4(":/rsrc/chart_bar.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off) icon10.AddFile4(":/rsrc/chart_bar.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off)
ui.bucketTabWidget.AddTab2(ui.bucketPropertiesTab, icon10, "") ui.bucketTabWidget.AddTab2(ui.bucketPropertiesTab, icon10, "")
ui.bucketDataTab = qt.NewQWidget2(ui.bucketTabWidget.QWidget) ui.bucketDataTab = qt.NewQWidget(ui.bucketTabWidget.QWidget)
ui.bucketDataTab.SetObjectName("bucketDataTab")
ui.gridLayout_6 = qt.NewQGridLayout(ui.bucketDataTab) ui.gridLayout_6 = qt.NewQGridLayout(ui.bucketDataTab)
ui.gridLayout_6.SetObjectName("gridLayout_6")
ui.gridLayout_6.SetContentsMargins(3, 3, 3, 3) ui.gridLayout_6.SetContentsMargins(3, 3, 3, 3)
ui.gridLayout_6.SetSpacing(6) ui.gridLayout_6.SetSpacing(6)
ui.bucketData = qt.NewQTreeWidget2(ui.bucketDataTab) ui.bucketData = qt.NewQTreeWidget(ui.bucketDataTab)
ui.bucketData.SetObjectName("bucketData")
ui.bucketData.SetSelectionMode(qt.QAbstractItemView__ExtendedSelection) ui.bucketData.SetSelectionMode(qt.QAbstractItemView__ExtendedSelection)
ui.bucketData.SetIndentation(0) ui.bucketData.SetIndentation(0)
ui.bucketData.SetRootIsDecorated(false) ui.bucketData.SetRootIsDecorated(false)
@ -223,8 +191,7 @@ func NewMainWindowUi() *MainWindowUi {
ui.gridLayout_6.AddWidget3(ui.bucketData.QWidget, 0, 0, 1, 3) ui.gridLayout_6.AddWidget3(ui.bucketData.QWidget, 0, 0, 1, 3)
ui.AddDataButton = qt.NewQPushButton4(ui.bucketDataTab) ui.AddDataButton = qt.NewQPushButton(ui.bucketDataTab)
ui.AddDataButton.SetObjectName("AddDataButton")
icon11 := qt.NewQIcon() icon11 := qt.NewQIcon()
icon11.AddFile4(":/rsrc/add.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off) icon11.AddFile4(":/rsrc/add.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off)
ui.AddDataButton.SetIcon(icon11) ui.AddDataButton.SetIcon(icon11)
@ -232,8 +199,7 @@ func NewMainWindowUi() *MainWindowUi {
ui.gridLayout_6.AddWidget2(ui.AddDataButton.QWidget, 1, 0) ui.gridLayout_6.AddWidget2(ui.AddDataButton.QWidget, 1, 0)
/* miqt-uic: no handler for spacer */ /* miqt-uic: no handler for spacer */
ui.DeleteDataButton = qt.NewQPushButton4(ui.bucketDataTab) ui.DeleteDataButton = qt.NewQPushButton(ui.bucketDataTab)
ui.DeleteDataButton.SetObjectName("DeleteDataButton")
icon12 := qt.NewQIcon() icon12 := qt.NewQIcon()
icon12.AddFile4(":/rsrc/delete.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off) icon12.AddFile4(":/rsrc/delete.png", qt.NewQSize(), qt.QIcon__Normal, qt.QIcon__Off)
ui.DeleteDataButton.SetIcon(icon12) ui.DeleteDataButton.SetIcon(icon12)
@ -250,41 +216,35 @@ func NewMainWindowUi() *MainWindowUi {
ui.gridLayout.AddWidget2(ui.splitter.QWidget, 0, 0) ui.gridLayout.AddWidget2(ui.splitter.QWidget, 0, 0)
ui.MainWindow.SetCentralWidget(ui.centralWidget) // Set central widget ui.MainWindow.SetCentralWidget(ui.centralWidget) // Set central widget
ui.menuBar = qt.NewQMenuBar2(ui.MainWindow.QWidget) ui.menuBar = qt.NewQMenuBar(ui.MainWindow.QWidget)
ui.menuBar.SetObjectName("menuBar")
ui.menuBar.Resize(668, 29) ui.menuBar.Resize(668, 29)
ui.menuFile = qt.NewQMenu3(ui.menuBar.QWidget) ui.menuFile = qt.NewQMenu(ui.menuBar.QWidget)
ui.menuFile.SetObjectName("menuFile")
ui.menuFile.QWidget.AddAction(ui.actionNew_database) ui.menuFile.QWidget.AddAction(ui.actionNew_database)
ui.menuFile.QWidget.AddAction(ui.actionOpen_database) ui.menuFile.QWidget.AddAction(ui.actionOpen_database)
ui.menuFile.QWidget.AddAction(ui.actionOpen_database_as_read_only) ui.menuFile.QWidget.AddAction(ui.actionOpen_database_as_read_only)
ui.menuFile.AddSeparator() ui.menuFile.AddSeparator()
ui.menuFile.QWidget.AddAction(ui.actionExit) ui.menuFile.QWidget.AddAction(ui.actionExit)
ui.menuHelp = qt.NewQMenu3(ui.menuBar.QWidget) ui.menuHelp = qt.NewQMenu(ui.menuBar.QWidget)
ui.menuHelp.SetObjectName("menuHelp")
ui.menuHelp.QWidget.AddAction(ui.actionAbout_qbolt) ui.menuHelp.QWidget.AddAction(ui.actionAbout_qbolt)
ui.menuHelp.QWidget.AddAction(ui.actionAbout_Qt) ui.menuHelp.QWidget.AddAction(ui.actionAbout_Qt)
ui.menuView = qt.NewQMenu3(ui.menuBar.QWidget) ui.menuView = qt.NewQMenu(ui.menuBar.QWidget)
ui.menuView.SetObjectName("menuView")
ui.menuView.QWidget.AddAction(ui.actionClear_selection) ui.menuView.QWidget.AddAction(ui.actionClear_selection)
ui.menuBar.AddMenu(ui.menuFile) ui.menuBar.AddMenu(ui.menuFile)
ui.menuBar.AddMenu(ui.menuView) ui.menuBar.AddMenu(ui.menuView)
ui.menuBar.AddMenu(ui.menuHelp) ui.menuBar.AddMenu(ui.menuHelp)
ui.MainWindow.SetMenuBar(ui.menuBar) ui.MainWindow.SetMenuBar(ui.menuBar)
ui.mainToolBar = qt.NewQToolBar4(ui.MainWindow.QWidget) ui.mainToolBar = qt.NewQToolBar(ui.MainWindow.QWidget)
ui.mainToolBar.SetObjectName("mainToolBar")
ui.MainWindow.AddToolBar(qt.TopToolBarArea, ui.mainToolBar) ui.MainWindow.AddToolBar(qt.TopToolBarArea, ui.mainToolBar)
/* miqt-uic: no handler for mainToolBar attribute 'toolBarBreak' */ /* miqt-uic: no handler for mainToolBar attribute 'toolBarBreak' */
ui.mainToolBar.QWidget.AddAction(ui.actionNew_database) ui.mainToolBar.QWidget.AddAction(ui.actionNew_database)
ui.mainToolBar.QWidget.AddAction(ui.actionOpen_database) ui.mainToolBar.QWidget.AddAction(ui.actionOpen_database)
ui.mainToolBar.AddSeparator() ui.mainToolBar.AddSeparator()
ui.statusBar = qt.NewQStatusBar2(ui.MainWindow.QWidget) ui.statusBar = qt.NewQStatusBar(ui.MainWindow.QWidget)
ui.statusBar.SetObjectName("statusBar")
ui.MainWindow.SetStatusBar(ui.statusBar) ui.MainWindow.SetStatusBar(ui.statusBar)
ui.Retranslate() ui.Retranslate()

View File

@ -1,11 +1,11 @@
package main package main
//go:generate miqt-rcc.sh resources.qrc //go:generate miqt-rcc -Input "resources.qrc" -OutputGo "resources.go" -OutputRcc "resources.rcc" -Qt6
import ( import (
"embed" "embed"
"github.com/mappu/miqt/qt" qt "github.com/mappu/miqt/qt6"
) )
//go:embed resources.rcc //go:embed resources.rcc

Binary file not shown.

15
util.go
View File

@ -1,11 +1,5 @@
package main package main
import (
"unsafe"
"github.com/mappu/miqt/qt"
)
// ReverseSlice reverses a slice. // ReverseSlice reverses a slice.
// @ref https://stackoverflow.com/a/28058324 // @ref https://stackoverflow.com/a/28058324
func ReverseSlice[S ~[]E, E any](s S) { func ReverseSlice[S ~[]E, E any](s S) {
@ -13,12 +7,3 @@ func ReverseSlice[S ~[]E, E any](s S) {
s[i], s[j] = s[j], s[i] s[i], s[j] = s[j], s[i]
} }
} }
func MakeQByteArray(s string) *qt.QByteArray {
return qt.NewQByteArray7(s, len(s))
}
func FromQByteArray(qba *qt.QByteArray) string {
var rawData []byte = unsafe.Slice((*byte)(qba.Data()), qba.Length())
return string(rawData) // copy
}