mirror of
https://github.com/jorenchik/mdemory.git
synced 2026-03-22 00:26:21 +00:00
165 lines
4.6 KiB
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()
|
|
}
|