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.
174 lines
4.9 KiB
Go
174 lines
4.9 KiB
Go
package window
|
|
|
|
import (
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/canvas"
|
|
"fyne.io/fyne/v2/container"
|
|
"fyne.io/fyne/v2/lang"
|
|
"fyne.io/fyne/v2/theme"
|
|
"fyne.io/fyne/v2/widget"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/application"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/application/convertor"
|
|
)
|
|
|
|
type LayoutContract interface {
|
|
SetContent(content fyne.CanvasObject) fyne.CanvasObject
|
|
GetRContainer() RightMainContainerContract
|
|
}
|
|
|
|
type layout struct {
|
|
layoutContainer *fyne.Container
|
|
rContainer RightMainContainerContract
|
|
}
|
|
|
|
func NewLayout(progressBarService application.ProgressBarContract, itemsToConvert convertor.ItemsToConvertContract, queueLayout QueueLayoutContract) LayoutContract {
|
|
rContainer := newRightContainer(progressBarService.GetContainer(), itemsToConvert, queueLayout)
|
|
layoutContainer := container.NewAdaptiveGrid(2, widget.NewLabel(""), rContainer.GetCanvasObject())
|
|
|
|
return &layout{
|
|
layoutContainer: layoutContainer,
|
|
rContainer: rContainer,
|
|
}
|
|
}
|
|
|
|
func (l *layout) SetContent(content fyne.CanvasObject) fyne.CanvasObject {
|
|
l.layoutContainer.Objects[0] = content
|
|
return l.layoutContainer
|
|
}
|
|
|
|
func (l *layout) GetRContainer() RightMainContainerContract {
|
|
return l.rContainer
|
|
}
|
|
|
|
type RightMainContainerContract interface {
|
|
GetCanvasObject() fyne.CanvasObject
|
|
GetTabs() *container.AppTabs
|
|
SelectFileQueueTab()
|
|
SelectAddedFilesTab()
|
|
}
|
|
|
|
type rightMainContainer struct {
|
|
container fyne.CanvasObject
|
|
tabs *container.AppTabs
|
|
addedFilesTab *container.TabItem
|
|
fileQueueTab *container.TabItem
|
|
}
|
|
|
|
func newRightContainer(blockProgressbar *fyne.Container, itemsToConvert convertor.ItemsToConvertContract, queueLayout QueueLayoutContract) RightMainContainerContract {
|
|
addedFilesTab := container.NewTabItem(lang.L("addedFilesTitle"), addedFilesContainer(itemsToConvert))
|
|
fileQueueTab := container.NewTabItem(lang.L("fileQueueTitle"), fileQueueContainer(queueLayout))
|
|
|
|
tabs := container.NewAppTabs(
|
|
addedFilesTab,
|
|
fileQueueTab,
|
|
)
|
|
|
|
rightContainer := container.NewBorder(
|
|
container.NewVBox(
|
|
blockProgressbar,
|
|
widget.NewSeparator(),
|
|
),
|
|
nil,
|
|
nil,
|
|
nil,
|
|
tabs,
|
|
)
|
|
|
|
return &rightMainContainer{
|
|
container: rightContainer,
|
|
tabs: tabs,
|
|
addedFilesTab: addedFilesTab,
|
|
fileQueueTab: fileQueueTab,
|
|
}
|
|
}
|
|
|
|
func (r *rightMainContainer) GetCanvasObject() fyne.CanvasObject {
|
|
return r.container
|
|
}
|
|
|
|
func (r *rightMainContainer) GetTabs() *container.AppTabs {
|
|
return r.tabs
|
|
}
|
|
|
|
func (r *rightMainContainer) SelectFileQueueTab() {
|
|
fyne.Do(func() {
|
|
r.tabs.Select(r.fileQueueTab)
|
|
})
|
|
}
|
|
|
|
func (r *rightMainContainer) SelectAddedFilesTab() {
|
|
fyne.Do(func() {
|
|
r.tabs.Select(r.addedFilesTab)
|
|
})
|
|
}
|
|
|
|
func addedFilesContainer(itemsToConvert convertor.ItemsToConvertContract) *fyne.Container {
|
|
line := canvas.NewLine(theme.Color(theme.ColorNameFocus))
|
|
line.StrokeWidth = 5
|
|
checkboxAutoRemove := widget.NewCheck(
|
|
lang.L("autoClearAfterAddingToQueue"),
|
|
func(checked bool) {
|
|
itemsToConvert.SetIsAutoRemove(checked)
|
|
},
|
|
)
|
|
checkboxAutoRemove.SetChecked(itemsToConvert.GetIsAutoRemove())
|
|
|
|
buttonClear := widget.NewButton(
|
|
lang.L("clearAll"),
|
|
func() {
|
|
itemsToConvert.Clear()
|
|
},
|
|
)
|
|
buttonClear.Importance = widget.DangerImportance
|
|
return container.NewBorder(
|
|
container.NewVBox(
|
|
container.NewPadded(),
|
|
container.NewBorder(nil, nil, nil, buttonClear, container.NewHScroll(checkboxAutoRemove)),
|
|
container.NewPadded(),
|
|
line,
|
|
), nil, nil, nil,
|
|
container.NewVScroll(
|
|
container.NewBorder(
|
|
nil, nil, nil, container.NewPadded(),
|
|
container.NewVBox(
|
|
container.NewPadded(),
|
|
itemsToConvert.GetItemsContainer(),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
}
|
|
|
|
func fileQueueContainer(queueLayout QueueLayoutContract) *fyne.Container {
|
|
title := widget.NewLabel(lang.L("queue"))
|
|
title.TextStyle.Bold = true
|
|
|
|
line := canvas.NewLine(theme.Color(theme.ColorNameFocus))
|
|
line.StrokeWidth = 5
|
|
|
|
queueLayout.GetQueueStatistics().GetWaiting().SetTitle(lang.L("waitingQueue"))
|
|
queueLayout.GetQueueStatistics().GetInProgress().SetTitle(lang.L("inProgressQueue"))
|
|
queueLayout.GetQueueStatistics().GetCompleted().SetTitle(lang.L("completedQueue"))
|
|
queueLayout.GetQueueStatistics().GetError().SetTitle(lang.L("errorQueue"))
|
|
queueLayout.GetQueueStatistics().GetTotal().SetTitle(lang.L("total"))
|
|
|
|
return container.NewBorder(
|
|
container.NewVBox(
|
|
container.NewPadded(),
|
|
container.NewHBox(title, queueLayout.GetQueueStatistics().GetCompleted().GetCheckbox(), queueLayout.GetQueueStatistics().GetError().GetCheckbox()),
|
|
container.NewHBox(queueLayout.GetQueueStatistics().GetInProgress().GetCheckbox(), queueLayout.GetQueueStatistics().GetWaiting().GetCheckbox(), queueLayout.GetQueueStatistics().GetTotal().GetCheckbox()),
|
|
container.NewPadded(),
|
|
line,
|
|
), nil, nil, nil,
|
|
container.NewVScroll(
|
|
container.NewBorder(
|
|
nil, nil, nil, container.NewPadded(),
|
|
container.NewVBox(
|
|
container.NewPadded(),
|
|
queueLayout.GetItemsContainer(),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
}
|