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(), ), ), ), ) }