Files
mdemory/src/mdemory-app-qt/main.go

165 lines
4.6 KiB
Go

package main
import (
"fmt"
"os"
"github.com/jorenchik/mdemory/src/compiler/api"
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/widgets"
)
var workingPath string = "/home/jorenchik/Code/mdemory/memorybase"
func main() {
// InitApp
app := widgets.NewQApplication(len(os.Args), os.Args)
window := widgets.NewQMainWindow(nil, 0)
hSplitter := widgets.NewQSplitter(nil)
window.SetWindowTitle("MDemory")
window.SetMinimumSize2(400, 300)
leftWidget := widgets.NewQWidget(nil, 0)
leftLayout := widgets.NewQVBoxLayout()
mdemLabel := widgets.NewQLabel2("Mdems", nil, 0)
model := widgets.NewQFileSystemModel(nil)
mdemList := widgets.NewQTreeView(nil)
leftWidget.SetLayout(leftLayout)
leftLayout.AddWidget(mdemLabel, 0, 0)
model.SetRootPath(workingPath)
mdemList.SetModel(model)
rootIndex := model.Index2("/home/jorenchik/Code/mdemory/memorybase", 0)
fmt.Printf("Root index: %s\n", model.FileName(rootIndex))
mdemList.SetRootIndex(rootIndex)
mdemList.HideColumn(1)
mdemList.HideColumn(2)
mdemList.HideColumn(3)
mdemList.ConnectDoubleClicked(func(index *core.QModelIndex) {
if model.IsDir(index) {
return
}
filePath := model.FilePath(index)
fileContents, err := os.ReadFile(filePath)
if (err != nil) {
widgets.QMessageBox_Critical(
nil,
"Compilation error",
err.Error(),
widgets.QMessageBox__Ok,
widgets.QMessageBox__Ok,
)
return
}
_, err = api.Compile(string(fileContents))
if (err != nil) {
widgets.QMessageBox_Critical(
nil,
"Compilation error",
err.Error(),
widgets.QMessageBox__Ok,
widgets.QMessageBox__Ok,
)
}
})
deckLabel := widgets.NewQLabel2("Decks", nil, 0)
deckList := widgets.NewQListView(nil)
leftLayout.AddWidget(mdemList, 1, 0)
leftLayout.AddWidget(deckLabel, 0, 0)
leftLayout.AddWidget(deckList, 1, 0)
rightWidget := widgets.NewQWidget(nil, 0)
rightLayout := widgets.NewQVBoxLayout()
rightWidget.SetLayout(rightLayout)
top := widgets.NewQWidget(nil, 0)
hTop := widgets.NewQHBoxLayout()
deckListLabel := widgets.NewQLabel2("Mdem: file.mdem", nil, 0)
top.SetLayout(hTop)
rightLayout.AddWidget(top, 0, 0)
hTop.AddWidget(deckListLabel, 0, 0)
hTop.AddStretch(1)
refresh := widgets.NewQToolButton(nil)
practice := widgets.NewQToolButton(nil)
shuffle := widgets.NewQToolButton(nil)
hTop.AddWidget(refresh, 0, 0)
hTop.AddWidget(shuffle, 0, 0)
hTop.AddWidget(practice, 0, 0)
refresh.SetText("Refresh")
shuffle.SetText("Shuffle")
practice.SetText("Practice")
mdemScroll := widgets.NewQScrollArea(nil)
hMdemScroll := widgets.NewQVBoxLayout()
mdemScroll.SetLayout(hMdemScroll)
var mdem widgets.QWidget_ITF
{ // CreateMdem
// DefineMdem
mdem := widgets.NewQWidget(nil, 0)
mdem.SetMinimumHeight(60)
hMdem := widgets.NewQHBoxLayout()
hMdem.AddStretch(1)
mdem.SetLayout(hMdem)
// DefineId
id := fmt.Sprintf("mdem_%d", 1)
mdem.SetObjectName(id)
mdem.SetStyleSheet(fmt.Sprintf(`
QWidget#%s {
border: 1px solid gray;
background: white;
}
`, id))
// AddContent
mdemText := widgets.NewQLabel2(
"What is the capital of Latvia?", nil, 0,
)
hMdem.AddWidget(mdemText, 0, 0)
hideButton := widgets.NewQToolButton(nil)
showAnswer := widgets.NewQToolButton(nil)
hideButton.SetText("Hide")
showAnswer.SetText("Show")
hMdem.AddWidget(hideButton, 0, 0)
hMdem.AddWidget(showAnswer, 0, 0)
}
hMdemScroll.AddWidget(mdem, 0, 0)
hMdemScroll.AddStretch(1)
rightLayout.AddWidget(mdemScroll, 1, 0)
// Pagination
pagination := widgets.NewQWidget(nil, 0)
hPagination := widgets.NewQHBoxLayout()
pagination.SetLayout(hPagination)
// TEMP: mock pagination
prevButton := widgets.NewQToolButton(nil)
prevButton.SetText("<")
hPagination.AddWidget(prevButton, 0, 0)
for i := 0; i < 5; i++ {
button := widgets.NewQToolButton(nil)
button.SetText(fmt.Sprintf("%d", i+1))
hPagination.AddWidget(button, 0, 0)
}
nextButton := widgets.NewQToolButton(nil)
nextButton.SetText(">")
hPagination.AddWidget(nextButton, 0, 0)
hPagination.AddStretch(1)
rightLayout.AddWidget(pagination, 0, 0)
hSplitter.AddWidget(leftWidget)
hSplitter.AddWidget(rightWidget)
hSplitter.SetStretchFactor(0, 1)
hSplitter.SetStretchFactor(1, 3)
window.SetCentralWidget(hSplitter)
window.Show()
app.Exec()
}