From e22833f4b714b95b056224b053d6094eca9beccd Mon Sep 17 00:00:00 2001 From: Rick Calixte <10281587+rcalixte@users.noreply.github.com> Date: Sat, 9 Nov 2024 21:21:25 -0500 Subject: [PATCH] Add mdoutliner6 --- .gitignore | 1 + examples/mdoutliner6/README.md | 8 ++ examples/mdoutliner6/main.go | 187 +++++++++++++++++++++++++++ examples/mdoutliner6/mdoutliner6.png | Bin 0 -> 35511 bytes 4 files changed, 196 insertions(+) create mode 100644 examples/mdoutliner6/README.md create mode 100644 examples/mdoutliner6/main.go create mode 100644 examples/mdoutliner6/mdoutliner6.png diff --git a/.gitignore b/.gitignore index ef3f3b3d..ceb23afb 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ cmd/miqt-rcc/miqt-rcc examples/helloworld/helloworld examples/helloworld6/helloworld6 examples/mdoutliner/mdoutliner +examples/mdoutliner/mdoutliner6 examples/windowsmanifest/windowsmanifest examples/uidesigner/uidesigner examples/libraries/extras-scintillaedit/extras-scintillaedit diff --git a/examples/mdoutliner6/README.md b/examples/mdoutliner6/README.md new file mode 100644 index 00000000..f00f0722 --- /dev/null +++ b/examples/mdoutliner6/README.md @@ -0,0 +1,8 @@ +# Markdown Outliner + +This is sample markdown content. + +## Features + +- You can use the outline on the left to jump to parts of the document +- Demonstrates use of the MIQT library diff --git a/examples/mdoutliner6/main.go b/examples/mdoutliner6/main.go new file mode 100644 index 00000000..ed0a3ecf --- /dev/null +++ b/examples/mdoutliner6/main.go @@ -0,0 +1,187 @@ +package main + +import ( + "embed" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "strings" + + qt "github.com/mappu/miqt/qt6" +) + +//go:embed README.md +var embedContent embed.FS + +const ( + lineNumberRole = int(qt.UserRole + 1) +) + +type AppWindow struct { + w *qt.QMainWindow + cw *qt.QWidget + + tabs *qt.QTabWidget +} + +type AppTab struct { + tab *qt.QWidget + outline *qt.QListWidget + textArea *qt.QTextEdit +} + +func NewAppTab() *AppTab { + var ret AppTab + + tab := qt.NewQWidget2() + ret.tab = tab + + layout := qt.NewQHBoxLayout(tab) + + panes := qt.NewQSplitter2() + layout.AddWidget(panes.QWidget) + + ret.outline = qt.NewQListWidget(tab) + panes.AddWidget(ret.outline.QWidget) + ret.outline.OnCurrentItemChanged(ret.handleJumpToBookmark) + + ret.textArea = qt.NewQTextEdit(tab) + ret.textArea.OnTextChanged(ret.handleTextChanged) + + panes.AddWidget(ret.textArea.QWidget) + + panes.SetSizes([]int{250, 550}) + + return &ret +} + +func NewAppWindow() *AppWindow { + ret := AppWindow{} + + ret.w = qt.NewQMainWindow2() + ret.w.SetWindowTitle("Markdown Outliner") + + // Menu + + mnu := qt.NewQMenuBar2() + fileMenu := mnu.AddMenuWithTitle("&File") + + newtab := fileMenu.QWidget.AddActionWithText("New Tab") + newtab.SetShortcut(qt.NewQKeySequence2("Ctrl+N")) + newtab.SetIcon(qt.QIcon_FromTheme("document-new")) + newtab.OnTriggered(func() { + ret.createTabWithContents("New Document", "") + }) + + open := fileMenu.QWidget.AddActionWithText("Open...") + open.SetShortcut(qt.NewQKeySequence2("Ctrl+O")) + open.SetIcon(qt.QIcon_FromTheme("document-open")) + open.OnTriggered(ret.handleFileOpen) + + fileMenu.AddSeparator() + exit := fileMenu.QWidget.AddActionWithText("Exit") + exit.SetShortcut(qt.NewQKeySequence2("Ctrl+Q")) + exit.SetIcon(qt.QIcon_FromTheme("application-exit")) + exit.OnTriggered(func() { + os.Exit(0) + }) + + helpMenu := mnu.AddMenuWithTitle("&Help") + aboutQt := helpMenu.QWidget.AddActionWithText("About Qt") + aboutQt.SetIcon(qt.QIcon_FromTheme("help-about")) + aboutQt.SetShortcut(qt.NewQKeySequence2("F1")) + aboutQt.OnTriggered(func() { + qt.QApplication_AboutQt() + }) + ret.w.SetMenuBar(mnu) + + // Main widgets + + ret.tabs = qt.NewQTabWidget(ret.w.QWidget) + ret.tabs.SetTabsClosable(true) + ret.tabs.OnTabCloseRequested(func(index int) { + ret.handleTabClose(index) + }) + + ret.w.SetCentralWidget(ret.tabs.QWidget) + + // Add initial tab + + sampleContent, err := embedContent.ReadFile("README.md") + if err != nil { + panic(err) + } + ret.createTabWithContents("README.md", string(sampleContent)) + + return &ret +} + +func (a *AppWindow) handleTabClose(tabIndex int) { + a.tabs.RemoveTab(tabIndex) +} + +func (a *AppWindow) handleFileOpen() { + fname := qt.QFileDialog_GetOpenFileName4(a.w.QWidget, "Open markdown file...", "", "Markdown files (*.md *.txt);;All Files (*)") + if fname == "" { + return + } + + contents, err := ioutil.ReadFile(fname) + if err != nil { + qt.QMessageBox_Warning(a.w.QWidget, "Failed to open file", fmt.Sprintf("Opening file %q: %v", fname, err)) + return + } + + a.createTabWithContents(filepath.Base(fname), string(contents)) +} + +func (a *AppWindow) createTabWithContents(tabTitle, tabContent string) { + tab := NewAppTab() + tab.textArea.SetText(tabContent) + + tabIdx := a.tabs.AddTab2(tab.tab, qt.QIcon_FromTheme("text-markdown"), tabTitle) + a.tabs.SetCurrentIndex(tabIdx) +} + +func (t *AppTab) handleTextChanged() { + content := t.textArea.ToPlainText() + t.updateOutlineForContent(content) +} + +func (t *AppTab) updateOutlineForContent(content string) { + t.outline.Clear() + + lines := strings.Split(content, "\n") + + for lineNumber, line := range lines { + if strings.HasPrefix(line, `#`) { + bookmark := qt.NewQListWidgetItem7(line, t.outline) + bookmark.SetToolTip(fmt.Sprintf("Line %d", lineNumber+1)) + bookmark.SetData(lineNumberRole, qt.NewQVariant4(lineNumber)) + } + } +} + +func (t *AppTab) handleJumpToBookmark(current *qt.QListWidgetItem, previous *qt.QListWidgetItem) { + itm := t.outline.CurrentItem() + if itm == nil { + return + } + + lineNumber := itm.Data(lineNumberRole).ToInt() + + targetBlock := t.textArea.Document().FindBlockByLineNumber(lineNumber) + t.textArea.SetTextCursor(qt.NewQTextCursor4(targetBlock)) + + t.textArea.SetFocus() +} + +func main() { + qt.NewQApplication(os.Args) + + app := NewAppWindow() + app.w.Show() + + qt.QApplication_Exec() +} diff --git a/examples/mdoutliner6/mdoutliner6.png b/examples/mdoutliner6/mdoutliner6.png new file mode 100644 index 0000000000000000000000000000000000000000..7a35371b4538b6e47434efce8b704dc44582a534 GIT binary patch literal 35511 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