Introduce a new layout system for managing main window content and tabs. Integrate file selection and drag-and-drop functionality for adding files to the conversion list, with automatic tab switching to "Added Files". Refactor existing components to support these features.
96 lines
2.6 KiB
Go
96 lines
2.6 KiB
Go
package window
|
|
|
|
import (
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/dialog"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/application"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/application/convertor"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/utils"
|
|
)
|
|
|
|
type WindowContract interface {
|
|
SetContent(content fyne.CanvasObject)
|
|
Show()
|
|
InitLayout()
|
|
NewFileOpen(callback func(fyne.URIReadCloser, error), location fyne.ListableURI) *dialog.FileDialog
|
|
NewFolderOpen(callback func(fyne.ListableURI, error), location fyne.ListableURI) *dialog.FileDialog
|
|
SetOnDropped(callback func(position fyne.Position, uris []fyne.URI))
|
|
GetLayout() LayoutContract
|
|
}
|
|
|
|
type mainWindow struct {
|
|
fyneWindow fyne.Window
|
|
layout LayoutContract
|
|
itemsToConvert convertor.ItemsToConvertContract
|
|
progressBarService application.ProgressBarContract
|
|
queueLayout QueueLayoutContract
|
|
}
|
|
|
|
func NewMainWindow(
|
|
fyneWindow fyne.Window,
|
|
progressBarService application.ProgressBarContract,
|
|
itemsToConvert convertor.ItemsToConvertContract,
|
|
queueLayout QueueLayoutContract,
|
|
) WindowContract {
|
|
fyneWindow.Resize(fyne.Size{Width: 1039, Height: 599})
|
|
fyneWindow.CenterOnScreen()
|
|
|
|
return &mainWindow{
|
|
fyneWindow: fyneWindow,
|
|
progressBarService: progressBarService,
|
|
itemsToConvert: itemsToConvert,
|
|
queueLayout: queueLayout,
|
|
}
|
|
}
|
|
|
|
func (w *mainWindow) InitLayout() {
|
|
fyne.Do(func() {
|
|
w.layout = NewLayout(w.progressBarService, w.itemsToConvert, w.queueLayout)
|
|
})
|
|
}
|
|
|
|
func (w *mainWindow) GetLayout() LayoutContract {
|
|
return w.layout
|
|
}
|
|
|
|
func (w *mainWindow) NewFileOpen(callback func(fyne.URIReadCloser, error), location fyne.ListableURI) *dialog.FileDialog {
|
|
fileDialog := dialog.NewFileOpen(callback, w.fyneWindow)
|
|
utils.FileDialogResize(fileDialog, w.fyneWindow)
|
|
fileDialog.Show()
|
|
if location != nil {
|
|
fileDialog.SetLocation(location)
|
|
}
|
|
return fileDialog
|
|
}
|
|
|
|
func (w *mainWindow) NewFolderOpen(callback func(fyne.ListableURI, error), location fyne.ListableURI) *dialog.FileDialog {
|
|
fileDialog := dialog.NewFolderOpen(callback, w.fyneWindow)
|
|
utils.FileDialogResize(fileDialog, w.fyneWindow)
|
|
fileDialog.Show()
|
|
if location != nil {
|
|
fileDialog.SetLocation(location)
|
|
}
|
|
return fileDialog
|
|
}
|
|
|
|
func (w *mainWindow) SetContent(content fyne.CanvasObject) {
|
|
fyne.Do(func() {
|
|
if w.layout == nil {
|
|
w.fyneWindow.SetContent(content)
|
|
return
|
|
}
|
|
|
|
w.fyneWindow.SetContent(w.layout.SetContent(content))
|
|
})
|
|
}
|
|
|
|
func (w *mainWindow) Show() {
|
|
w.fyneWindow.Show()
|
|
}
|
|
|
|
func (w *mainWindow) SetOnDropped(callback func(position fyne.Position, uris []fyne.URI)) {
|
|
fyne.Do(func() {
|
|
w.fyneWindow.SetOnDropped(callback)
|
|
})
|
|
}
|