mirror of
https://github.com/diamondburned/cchat-gtk.git
synced 2025-04-12 16:24:12 +00:00
WIP
This commit is contained in:
parent
3cb3ad9852
commit
10e8a58bea
internal/ui/messages
|
@ -8,7 +8,6 @@ import (
|
||||||
"github.com/diamondburned/cchat-gtk/internal/ui/messages/container"
|
"github.com/diamondburned/cchat-gtk/internal/ui/messages/container"
|
||||||
"github.com/diamondburned/cchat-gtk/internal/ui/messages/input"
|
"github.com/diamondburned/cchat-gtk/internal/ui/messages/input"
|
||||||
"github.com/diamondburned/cchat-gtk/internal/ui/messages/message"
|
"github.com/diamondburned/cchat-gtk/internal/ui/messages/message"
|
||||||
"github.com/diamondburned/cchat-gtk/internal/ui/rich"
|
|
||||||
"github.com/gotk3/gotk3/gtk"
|
"github.com/gotk3/gotk3/gtk"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -44,7 +43,7 @@ func (c *CollapsedMessage) Collapsed() bool { return true }
|
||||||
|
|
||||||
func (c *CollapsedMessage) UpdateTimestamp(t time.Time) {
|
func (c *CollapsedMessage) UpdateTimestamp(t time.Time) {
|
||||||
c.GenericContainer.UpdateTimestamp(t)
|
c.GenericContainer.UpdateTimestamp(t)
|
||||||
c.Timestamp.SetMarkup(rich.Small(humanize.TimeAgoShort(t)))
|
c.Timestamp.SetText(humanize.TimeAgoShort(t))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *CollapsedMessage) Unwrap(grid *gtk.Grid) *message.GenericContainer {
|
func (c *CollapsedMessage) Unwrap(grid *gtk.Grid) *message.GenericContainer {
|
||||||
|
|
|
@ -10,7 +10,6 @@ import (
|
||||||
"github.com/diamondburned/cchat-gtk/internal/ui/messages/input"
|
"github.com/diamondburned/cchat-gtk/internal/ui/messages/input"
|
||||||
"github.com/diamondburned/cchat-gtk/internal/ui/messages/message"
|
"github.com/diamondburned/cchat-gtk/internal/ui/messages/message"
|
||||||
"github.com/diamondburned/cchat-gtk/internal/ui/primitives"
|
"github.com/diamondburned/cchat-gtk/internal/ui/primitives"
|
||||||
"github.com/diamondburned/cchat-gtk/internal/ui/rich"
|
|
||||||
"github.com/diamondburned/cchat-gtk/internal/ui/service/menu"
|
"github.com/diamondburned/cchat-gtk/internal/ui/service/menu"
|
||||||
"github.com/diamondburned/imgutil"
|
"github.com/diamondburned/imgutil"
|
||||||
"github.com/gotk3/gotk3/gtk"
|
"github.com/gotk3/gotk3/gtk"
|
||||||
|
@ -40,6 +39,10 @@ var (
|
||||||
_ container.GridMessage = (*FullMessage)(nil)
|
_ container.GridMessage = (*FullMessage)(nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var boldCSS = primitives.PrepareCSS(`
|
||||||
|
* { font-weight: 600; }
|
||||||
|
`)
|
||||||
|
|
||||||
func NewFullMessage(msg cchat.MessageCreate) *FullMessage {
|
func NewFullMessage(msg cchat.MessageCreate) *FullMessage {
|
||||||
msgc := WrapFullMessage(message.NewContainer(msg))
|
msgc := WrapFullMessage(message.NewContainer(msg))
|
||||||
// Don't update the avatar. NewMessage in controller will try and reuse the
|
// Don't update the avatar. NewMessage in controller will try and reuse the
|
||||||
|
@ -64,6 +67,9 @@ func WrapFullMessage(gc *message.GenericContainer) *FullMessage {
|
||||||
// Attach the class for the left avatar.
|
// Attach the class for the left avatar.
|
||||||
primitives.AddClass(avatar, "cozy-avatar")
|
primitives.AddClass(avatar, "cozy-avatar")
|
||||||
|
|
||||||
|
// Attach the username style provider.
|
||||||
|
primitives.AttachCSS(gc.Username, boldCSS)
|
||||||
|
|
||||||
header, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0)
|
header, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0)
|
||||||
header.PackStart(gc.Username, false, false, 0)
|
header.PackStart(gc.Username, false, false, 0)
|
||||||
header.PackStart(gc.Timestamp, false, false, 7) // padding
|
header.PackStart(gc.Timestamp, false, false, 7) // padding
|
||||||
|
@ -101,7 +107,7 @@ func (m *FullMessage) Unwrap(grid *gtk.Grid) *message.GenericContainer {
|
||||||
|
|
||||||
func (m *FullMessage) UpdateTimestamp(t time.Time) {
|
func (m *FullMessage) UpdateTimestamp(t time.Time) {
|
||||||
m.GenericContainer.UpdateTimestamp(t)
|
m.GenericContainer.UpdateTimestamp(t)
|
||||||
m.Timestamp.SetMarkup(rich.Small(humanize.TimeAgoLong(t)))
|
m.Timestamp.SetText(humanize.TimeAgoLong(t))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *FullMessage) UpdateAuthor(author cchat.MessageAuthor) {
|
func (m *FullMessage) UpdateAuthor(author cchat.MessageAuthor) {
|
||||||
|
|
|
@ -61,6 +61,15 @@ type GenericContainer struct {
|
||||||
|
|
||||||
var _ Container = (*GenericContainer)(nil)
|
var _ Container = (*GenericContainer)(nil)
|
||||||
|
|
||||||
|
var timestampCSS = primitives.PrepareCSS(`
|
||||||
|
.message-time {
|
||||||
|
opacity: 0.3;
|
||||||
|
font-size: 0.8em;
|
||||||
|
margin-top: 0.2em;
|
||||||
|
margin-bottom: 0.2em;
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
// NewContainer creates a new message container with the given ID and nonce. It
|
// NewContainer creates a new message container with the given ID and nonce. It
|
||||||
// does not update the widgets, so FillContainer should be called afterwards.
|
// does not update the widgets, so FillContainer should be called afterwards.
|
||||||
func NewContainer(msg cchat.MessageCreate) *GenericContainer {
|
func NewContainer(msg cchat.MessageCreate) *GenericContainer {
|
||||||
|
@ -105,6 +114,9 @@ func NewEmptyContainer() *GenericContainer {
|
||||||
primitives.AddClass(user, "message-author")
|
primitives.AddClass(user, "message-author")
|
||||||
primitives.AddClass(content, "message-content")
|
primitives.AddClass(content, "message-content")
|
||||||
|
|
||||||
|
// Attach the timestamp CSS.
|
||||||
|
primitives.AttachCSS(ts, timestampCSS)
|
||||||
|
|
||||||
gc := &GenericContainer{
|
gc := &GenericContainer{
|
||||||
Timestamp: ts,
|
Timestamp: ts,
|
||||||
Username: user,
|
Username: user,
|
||||||
|
@ -145,7 +157,7 @@ func (m *GenericContainer) Nonce() string {
|
||||||
|
|
||||||
func (m *GenericContainer) UpdateTimestamp(t time.Time) {
|
func (m *GenericContainer) UpdateTimestamp(t time.Time) {
|
||||||
m.time = t
|
m.time = t
|
||||||
m.Timestamp.SetMarkup(rich.Small(humanize.TimeAgo(t)))
|
m.Timestamp.SetText(humanize.TimeAgo(t))
|
||||||
m.Timestamp.SetTooltipText(t.Format(time.Stamp))
|
m.Timestamp.SetTooltipText(t.Format(time.Stamp))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,13 +182,6 @@ func (m *GenericContainer) UpdateContent(content text.Rich, edited bool) {
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Content.SetMarkup(markup)
|
m.Content.SetMarkup(markup)
|
||||||
|
|
||||||
// // Render the content.
|
|
||||||
// parser.RenderTextBuffer(m.CBuffer, content)
|
|
||||||
|
|
||||||
// if edited {
|
|
||||||
// parser.AppendEditBadge(m.CBuffer, m.Time())
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// AttachMenu connects signal handlers to handle a list of menu items from
|
// AttachMenu connects signal handlers to handle a list of menu items from
|
||||||
|
|
|
@ -109,9 +109,9 @@ func render(typers []cchat.Typer) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(typers) == 1 {
|
if len(typers) == 1 {
|
||||||
builder.WriteString(" is typing.")
|
builder.WriteString(" is typing...")
|
||||||
} else {
|
} else {
|
||||||
builder.WriteString(" are typing.")
|
builder.WriteString(" are typing...")
|
||||||
}
|
}
|
||||||
|
|
||||||
return builder.String()
|
return builder.String()
|
||||||
|
|
Loading…
Reference in a new issue