Skip to content

Commit

Permalink
Add tickets list page (#406)
Browse files Browse the repository at this point in the history
* Add progress bar for each ticket list item
  • Loading branch information
song50119 committed May 20, 2021
1 parent 57d83db commit 55759a6
Show file tree
Hide file tree
Showing 11 changed files with 583 additions and 168 deletions.
Binary file added ui/assets/decredicons/list.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added ui/assets/decredicons/list_grid.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
137 changes: 137 additions & 0 deletions ui/compontents.go
Expand Up @@ -803,6 +803,143 @@ func (page pageCommon) initSelectAccountWidget(wallAcct map[int][]walletAccount,
}
}

// ticketCard layouts out ticket info with the shadow box, use for list horizontal or list grid
func ticketCard(gtx layout.Context, c pageCommon, t *wallet.Ticket) layout.Dimensions {
var itemWidth int
st := ticketStatusIcon(&c, t.Info.Status)
if st == nil {
return layout.Dimensions{}
}
st.icon.Scale = 1.0
return c.theme.Shadow().Layout(gtx, func(gtx C) D {
return layout.Flex{Axis: layout.Vertical}.Layout(gtx,
layout.Rigid(func(gtx C) D {
wrap := c.theme.Card()
wrap.Radius = decredmaterial.CornerRadius{NE: 8, NW: 8, SE: 0, SW: 0}
wrap.Color = st.background
return wrap.Layout(gtx, func(gtx C) D {
return layout.Stack{Alignment: layout.S}.Layout(gtx,

layout.Expanded(func(gtx C) D {
return layout.NE.Layout(gtx, func(gtx C) D {
wTimeLabel := c.theme.Card()
wTimeLabel.Radius = decredmaterial.CornerRadius{NE: 0, NW: 8, SE: 0, SW: 8}
return wTimeLabel.Layout(gtx, func(gtx C) D {
return layout.Inset{
Top: values.MarginPadding4,
Bottom: values.MarginPadding4,
Right: values.MarginPadding8,
Left: values.MarginPadding8,
}.Layout(gtx, func(gtx C) D {
return c.theme.Label(values.TextSize14, "10h 47m").Layout(gtx)
})
})
})
}),

layout.Stacked(func(gtx C) D {
content := layout.Inset{
Top: values.MarginPadding24,
Right: values.MarginPadding62,
Left: values.MarginPadding62,
Bottom: values.MarginPadding24,
}.Layout(gtx, func(gtx C) D {
return st.icon.Layout(gtx)
})
itemWidth = content.Size.X
return content
}),

layout.Stacked(func(gtx C) D {
return layout.Center.Layout(gtx, func(gtx C) D {
return layout.Inset{Top: values.MarginPadding20}.Layout(gtx, func(gtx C) D {
gtx.Constraints.Max.X = itemWidth
p := c.theme.ProgressBar(20)
p.Height, p.Radius = values.MarginPadding4, values.MarginPadding1
p.Color = st.color
return p.Layout(gtx)
})
})
}),
)
})
}),
layout.Rigid(func(gtx C) D {
wrap := c.theme.Card()
wrap.Radius = decredmaterial.CornerRadius{NE: 0, NW: 0, SE: 8, SW: 8}
return wrap.Layout(gtx, func(gtx C) D {
gtx.Constraints.Min.X, gtx.Constraints.Max.X = itemWidth, itemWidth
return layout.Inset{
Left: values.MarginPadding12,
Right: values.MarginPadding12,
Bottom: values.MarginPadding8,
}.Layout(gtx, func(gtx C) D {
return layout.Flex{Axis: layout.Vertical}.Layout(gtx,
layout.Rigid(func(gtx C) D {
return layout.Inset{
Top: values.MarginPadding16,
}.Layout(gtx, func(gtx C) D {
return c.layoutBalance(gtx, t.Amount)
})
}),
layout.Rigid(func(gtx C) D {
return layout.Flex{Alignment: layout.Middle}.Layout(gtx,
layout.Rigid(func(gtx C) D {
txt := c.theme.Label(values.MarginPadding14, t.Info.Status)
txt.Color = st.color
return txt.Layout(gtx)
}),
layout.Rigid(func(gtx C) D {
return layout.Inset{
Left: values.MarginPadding4,
Right: values.MarginPadding4,
}.Layout(gtx, func(gtx C) D {
ic := c.icons.imageBrightness1
ic.Color = c.theme.Color.Gray2
return c.icons.imageBrightness1.Layout(gtx, values.MarginPadding5)
})
}),
layout.Rigid(func(gtx C) D {
return c.theme.Label(values.MarginPadding14, t.WalletName).Layout(gtx)
}),
)
}),
layout.Rigid(func(gtx C) D {
return layout.Inset{
Top: values.MarginPadding16,
Bottom: values.MarginPadding16,
}.Layout(gtx, func(gtx C) D {
txt := c.theme.Label(values.TextSize14, t.MonthDay)
txt.Color = c.theme.Color.Gray2
return layout.Flex{Alignment: layout.Middle}.Layout(gtx,
layout.Rigid(func(gtx C) D {
return txt.Layout(gtx)
}),
layout.Rigid(func(gtx C) D {
return layout.Inset{
Left: values.MarginPadding4,
Right: values.MarginPadding4,
}.Layout(gtx, func(gtx C) D {
ic := c.icons.imageBrightness1
ic.Color = c.theme.Color.Gray2
return c.icons.imageBrightness1.Layout(gtx, values.MarginPadding5)
})
}),
layout.Rigid(func(gtx C) D {
txt.Text = t.DaysBehind
return txt.Layout(gtx)
}),
)
})
}),
)
})
})
}),
)
})
}

func (page pageCommon) handleNavEvents() {
for page.minimizeNavDrawerButton.Button.Clicked() {
*page.isNavDrawerMinimized = true
Expand Down
4 changes: 4 additions & 0 deletions ui/decredmaterial/theme.go
Expand Up @@ -60,6 +60,8 @@ type Theme struct {
Gray1 color.NRGBA
Gray2 color.NRGBA
Gray3 color.NRGBA
Orange color.NRGBA
Orange2 color.NRGBA
}
Icon struct {
ContentCreate *widget.Icon
Expand Down Expand Up @@ -105,6 +107,8 @@ func NewTheme(fontCollection []text.FontFace, decredIcons map[string]image.Image
t.Color.Black = rgb(0x000000)
t.Color.Background = argb(0x22444444)
t.Color.LightBlue = rgb(0xe4f6ff)
t.Color.Orange = rgb(0xD34A21)
t.Color.Orange2 = rgb(0xF8E8E7)
t.TextSize = unit.Sp(16)

t.checkBoxCheckedIcon = mustIcon(widget.NewIcon(icons.ToggleCheckBox))
Expand Down
6 changes: 5 additions & 1 deletion ui/page.go
Expand Up @@ -34,7 +34,8 @@ type pageIcons struct {
arrowForwardIcon, transactionFingerPrintIcon, settingsIcon, securityIcon, helpIcon,
aboutIcon, debugIcon, verifyMessageIcon, locationPinIcon, alertGray, arrowDownIcon,
watchOnlyWalletIcon, currencySwapIcon, syncingIcon, proposalIconActive, proposalIconInactive,
restore, documentationIcon, downloadIcon, timerIcon, ticketIcon, ticketIconInactive, stakeyIcon *widget.Image
restore, documentationIcon, downloadIcon, timerIcon, ticketIcon, ticketIconInactive, stakeyIcon,
list, listGridIcon *widget.Image

ticketPurchasedIcon,
ticketImmatureIcon,
Expand Down Expand Up @@ -216,6 +217,8 @@ func (win *Window) addPages(decredIcons map[string]image.Image) {
ticketMissedIcon: &widget.Image{Src: paint.NewImageOp(decredIcons["ticket_missed"])},
ticketExpiredIcon: &widget.Image{Src: paint.NewImageOp(decredIcons["ticket_expired"])},
ticketRevokedIcon: &widget.Image{Src: paint.NewImageOp(decredIcons["ticket_revoked"])},
list: &widget.Image{Src: paint.NewImageOp(decredIcons["list"])},
listGridIcon: &widget.Image{Src: paint.NewImageOp(decredIcons["list_grid"])},
}

appBarNavItems := []navHandler{
Expand Down Expand Up @@ -371,6 +374,7 @@ func (win *Window) addPages(decredIcons map[string]image.Image) {
win.pages[PagePrivacy] = win.PrivacyPage(common)
win.pages[PageTickets] = win.TicketPage(common)
win.pages[ValidateAddress] = win.ValidateAddressPage(common)
win.pages[PageTicketsList] = win.TicketPageList(common)
}

func (page *pageCommon) fetchExchangeValue(target interface{}) error {
Expand Down
10 changes: 2 additions & 8 deletions ui/receive_page.go
Expand Up @@ -227,10 +227,7 @@ func (pg *receivePage) addressLayout(gtx layout.Context, c pageCommon) layout.Di
pg.receiveAddress.Text = pg.addrs
pg.receiveAddress.Alignment = text.Middle
pg.receiveAddress.MaxLines = 1
card.Radius.NE = 8
card.Radius.SW = 8
card.Radius.NW = 0
card.Radius.SE = 0
card.Radius = decredmaterial.CornerRadius{NE: 8, NW: 0, SE: 0, SW: 8}
return card.Layout(gtx, func(gtx C) D {
gtx.Constraints.Min.X = gtx.Constraints.Max.X
return layout.UniformInset(values.MarginPadding16).Layout(gtx, func(gtx C) D {
Expand All @@ -242,10 +239,7 @@ func (pg *receivePage) addressLayout(gtx layout.Context, c pageCommon) layout.Di
return layout.Inset{Left: values.MarginPadding1}.Layout(gtx, func(gtx C) D { return layout.Dimensions{} })
}),
layout.Rigid(func(gtx C) D {
card.Radius.NE = 0
card.Radius.SW = 0
card.Radius.NW = 8
card.Radius.SE = 8
card.Radius = decredmaterial.CornerRadius{NE: 0, NW: 8, SE: 8, SW: 0}
return card.Layout(gtx, func(gtx C) D {
return pg.copy.Layout(gtx)
})
Expand Down

0 comments on commit 55759a6

Please sign in to comment.