173 lines
4.8 KiB
Go
173 lines
4.8 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/convertor"
|
|
)
|
|
|
|
type LayoutContract interface {
|
|
SetContent(content fyne.CanvasObject) fyne.CanvasObject
|
|
GetRContainer() RightMainContainerContract
|
|
}
|
|
|
|
type layout struct {
|
|
layoutContainer *fyne.Container
|
|
rContainer RightMainContainerContract
|
|
}
|
|
|
|
func NewLayout(progressBarService convertor.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(),
|
|
),
|
|
),
|
|
),
|
|
)
|
|
}
|