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.
147 lines
4.2 KiB
147 lines
4.2 KiB
package ui |
|
|
|
import ( |
|
"fmt" |
|
|
|
"github.com/Arceliar/phony" |
|
"github.com/rivo/tview" |
|
|
|
"github.com/RasmusLindroth/tut/config" |
|
) |
|
|
|
type MainView struct { |
|
phony.Inbox |
|
tv *TutView |
|
View *tview.Flex |
|
accView *tview.Flex |
|
} |
|
|
|
func NewMainView(tv *TutView) *MainView { |
|
mv := &MainView{ |
|
tv: tv, |
|
accView: NewControlView(tv.tut.Config), |
|
} |
|
mv.View = mv.mainViewUI(tv) |
|
return mv |
|
} |
|
|
|
func (mv *MainView) Be_ForceUpdate(from phony.Actor) { |
|
mv.Act(from, func() { |
|
tv := mv.tv |
|
go tv.tut.App.QueueUpdateDraw(func() { |
|
tv.MainView.View = mv.mainViewUI(tv) |
|
tv.ShouldSync() |
|
}) |
|
}) |
|
} |
|
|
|
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) |
|
} |
|
switch tv.tut.Config.General.ListPlacement { |
|
case 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) |
|
case 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) |
|
case 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) |
|
case 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 |
|
}
|
|
|