You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.3 KiB
145 lines
4.3 KiB
package ui |
|
|
|
import ( |
|
"fmt" |
|
|
|
"github.com/RasmusLindroth/tut/config" |
|
"github.com/rivo/tview" |
|
) |
|
|
|
type MainView struct { |
|
View *tview.Flex |
|
accView *tview.Flex |
|
update chan bool |
|
} |
|
|
|
func NewMainView(tv *TutView, update chan bool) *MainView { |
|
mv := &MainView{ |
|
update: update, |
|
accView: NewControlView(tv.tut.Config), |
|
} |
|
mv.View = mv.mainViewUI(tv) |
|
go func() { |
|
for range mv.update { |
|
tv.tut.App.QueueUpdateDraw(func() { |
|
*tv.MainView.View = *mv.mainViewUI(tv) |
|
tv.ShouldSync() |
|
}) |
|
} |
|
}() |
|
return mv |
|
} |
|
|
|
func (mv *MainView) ForceUpdate() { |
|
mv.update <- true |
|
} |
|
|
|
func feedList(mv *TutView, fh *FeedHolder) *tview.Flex { |
|
iw := 3 |
|
if !mv.tut.Config.General.ShowIcons { |
|
iw = 0 |
|
} |
|
return tview.NewFlex().SetDirection(tview.FlexColumn). |
|
AddItem(fh.GetFeedList().Text, 0, 1, false). |
|
AddItem(fh.GetFeedList().Symbol, iw, 0, false) |
|
} |
|
|
|
func (mv *MainView) mainViewUI(tv *TutView) *tview.Flex { |
|
vl := NewVerticalLine(tv.tut.Config) |
|
hl := NewHorizontalLine(tv.tut.Config) |
|
lp := tv.tut.Config.General.ListProportion |
|
cp := tv.tut.Config.General.ContentProportion |
|
var list *tview.Flex |
|
if tv.tut.Config.General.ListSplit == config.ListColumn { |
|
list = tview.NewFlex().SetDirection(tview.FlexColumn) |
|
} else { |
|
list = tview.NewFlex().SetDirection(tview.FlexRow) |
|
} |
|
|
|
if tv.tut.Config.General.ListSplit == config.ListColumn { |
|
feeds := tview.NewFlex() |
|
for _, fh := range tv.Timeline.Feeds { |
|
fTitle := fh.GetTitle() |
|
if len(fTitle) > 0 { |
|
txt := NewTextView(tv.tut.Config) |
|
txt.SetText(tview.Escape(fTitle)) |
|
txt.SetBackgroundColor(tv.tut.Config.Style.TimelineNameBackground) |
|
txt.SetTextColor(tv.tut.Config.Style.TimelineNameText) |
|
feeds.AddItem(tview.NewFlex().SetDirection(tview.FlexRow). |
|
AddItem(txt, 1, 0, false). |
|
AddItem(feedList(tv, fh), 0, 1, false), 0, 1, false) |
|
} else { |
|
feeds.AddItem(feedList(tv, fh), 0, 1, false) |
|
} |
|
} |
|
list.AddItem(tview.NewFlex().SetDirection(tview.FlexRow). |
|
AddItem(feeds, 0, 1, false), 0, 1, false) |
|
} else { |
|
feeds := tview.NewFlex().SetDirection(tview.FlexRow) |
|
for _, fh := range tv.Timeline.Feeds { |
|
fTitle := fh.GetTitle() |
|
if len(fTitle) > 0 { |
|
txt := NewTextView(tv.tut.Config) |
|
txt.SetText(tview.Escape(fTitle)) |
|
txt.SetBackgroundColor(tv.tut.Config.Style.TimelineNameBackground) |
|
txt.SetTextColor(tv.tut.Config.Style.TimelineNameText) |
|
feeds.AddItem(txt, 1, 0, false) |
|
} |
|
feeds.AddItem(feedList(tv, fh), 0, 1, false) |
|
} |
|
list.AddItem(feeds, 0, 1, false) |
|
} |
|
|
|
fc := tv.Timeline.GetFeedContent() |
|
content := fc.Main |
|
controls := fc.Controls |
|
|
|
mv.accView.Clear() |
|
for i, t := range TutViews.Views { |
|
acct := t.tut.Client.Me.Acct |
|
acct = fmt.Sprintf("%s ", acct) |
|
if i > 0 { |
|
acct = fmt.Sprintf(" %s", acct) |
|
} |
|
item := NewAccButton(tv, tv.tut.Config, acct, i, i == TutViews.Current) |
|
mv.accView.AddItem(item, len(acct), 0, false) |
|
} |
|
|
|
r := tview.NewFlex().SetDirection(tview.FlexRow) |
|
if tv.tut.Config.General.TerminalTitle < 2 { |
|
r.AddItem(tv.Shared.Top.View, 1, 0, false) |
|
} |
|
if tv.tut.Config.General.ListPlacement == config.ListPlacementTop { |
|
r.AddItem(list, 0, lp, false). |
|
AddItem(hl, 1, 0, false). |
|
AddItem(content, 0, cp, false). |
|
AddItem(controls, 1, 0, false). |
|
AddItem(tv.Shared.Bottom.View, 2, 0, false) |
|
} else if tv.tut.Config.General.ListPlacement == config.ListPlacementBottom { |
|
r.AddItem(content, 0, cp, false). |
|
AddItem(controls, 1, 0, false). |
|
AddItem(hl, 1, 0, false). |
|
AddItem(list, 0, lp, false). |
|
AddItem(tv.Shared.Bottom.View, 2, 0, false) |
|
} else if tv.tut.Config.General.ListPlacement == config.ListPlacementLeft { |
|
r.AddItem(tview.NewFlex().SetDirection(tview.FlexColumn). |
|
AddItem(list, 0, lp, false). |
|
AddItem(vl, 1, 0, false). |
|
AddItem(tview.NewFlex().SetDirection(tview.FlexRow). |
|
AddItem(content, 0, 1, false). |
|
AddItem(controls, 1, 0, false), 0, cp, false), 0, 1, false). |
|
AddItem(tv.Shared.Bottom.View, 2, 0, false) |
|
} else if tv.tut.Config.General.ListPlacement == config.ListPlacementRight { |
|
r.AddItem(tview.NewFlex().SetDirection(tview.FlexColumn). |
|
AddItem(tview.NewFlex().SetDirection(tview.FlexRow). |
|
AddItem(content, 0, 1, false). |
|
AddItem(controls, 1, 0, false), 0, cp, false). |
|
AddItem(vl, 1, 0, false). |
|
AddItem(list, 0, lp, false), 0, 1, false). |
|
AddItem(tv.Shared.Bottom.View, 2, 0, false) |
|
} |
|
if len(TutViews.Views) > 1 { |
|
r.AddItem(mv.accView, 1, 0, false) |
|
} |
|
return r |
|
}
|
|
|