compact mode
This commit is contained in:
+139
-117
@@ -17,6 +17,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
xmpp_color "mellium.im/xmpp/color"
|
||||||
)
|
)
|
||||||
|
|
||||||
func generatePresenceWidget(p stanza.Packet) gtk.Widgetter {
|
func generatePresenceWidget(p stanza.Packet) gtk.Widgetter {
|
||||||
@@ -84,7 +85,13 @@ func generateMessageWidget(p stanza.Packet) gtk.Widgetter {
|
|||||||
sid := StanzaID{}
|
sid := StanzaID{}
|
||||||
m.Get(&sid)
|
m.Get(&sid)
|
||||||
|
|
||||||
mainBox := gtk.NewBox(gtk.OrientationVertical, 10)
|
padding := 10
|
||||||
|
orientation := gtk.OrientationVertical
|
||||||
|
if loadedConfig.CompactMode {
|
||||||
|
padding = 5
|
||||||
|
orientation = gtk.OrientationHorizontal
|
||||||
|
}
|
||||||
|
mainBox := gtk.NewBox(orientation, padding)
|
||||||
gesture := gtk.NewGestureClick()
|
gesture := gtk.NewGestureClick()
|
||||||
gesture.SetButton(3) // Right click
|
gesture.SetButton(3) // Right click
|
||||||
|
|
||||||
@@ -141,143 +148,158 @@ func generateMessageWidget(p stanza.Packet) gtk.Widgetter {
|
|||||||
ocu := OccupantID{}
|
ocu := OccupantID{}
|
||||||
|
|
||||||
m.Get(&ocu)
|
m.Get(&ocu)
|
||||||
//id := ocu.ID
|
|
||||||
// if id == "" {
|
|
||||||
id := JidMustParse(m.From).Resource
|
id := JidMustParse(m.From).Resource
|
||||||
// }
|
|
||||||
|
|
||||||
authorBox := gtk.NewBox(gtk.OrientationHorizontal, 10)
|
if loadedConfig.CompactMode {
|
||||||
|
al := gtk.NewLabel(id)
|
||||||
|
ycbcr := xmpp_color.String(id, 255, loadedConfig.CVD)
|
||||||
|
r, g, b, _ := ycbcr.RGBA()
|
||||||
|
hexcolor := fmt.Sprintf("#%02x%02x%02x", r, g, b)
|
||||||
|
|
||||||
contentBox := gtk.NewBox(gtk.OrientationHorizontal, 0)
|
al.SetMarkup(fmt.Sprintf("<span foreground='%s'>%s</span>", hexcolor, id))
|
||||||
// im := newImageFromPath("debug.png")
|
al.SetSelectable(true)
|
||||||
|
al.SetVAlign(gtk.AlignStart)
|
||||||
|
mainBox.Append(al)
|
||||||
|
|
||||||
// authorBox.Append(im)
|
mlabel := gtk.NewLabel(m.Body)
|
||||||
|
|
||||||
n := JidMustParse(m.From).Resource
|
if m.Body == "" {
|
||||||
if n == "" {
|
mlabel.SetText(loadedLocale["noBodySet"])
|
||||||
n = JidMustParse(m.From).Resource
|
mlabel.AddCSSClass("visitor")
|
||||||
}
|
}
|
||||||
al := gtk.NewLabel(n)
|
mlabel.SetWrap(true)
|
||||||
al.AddCSSClass("author")
|
mlabel.SetSelectable(true)
|
||||||
al.SetSelectable(true)
|
// mlabel.SetHAlign(gtk.AlignFill)
|
||||||
|
mainBox.Append(mlabel)
|
||||||
|
} else {
|
||||||
|
authorBox := gtk.NewBox(gtk.OrientationHorizontal, 10)
|
||||||
|
contentBox := gtk.NewBox(gtk.OrientationHorizontal, 0)
|
||||||
|
n := JidMustParse(m.From).Resource
|
||||||
|
if n == "" {
|
||||||
|
n = JidMustParse(m.From).Resource
|
||||||
|
}
|
||||||
|
al := gtk.NewLabel(n)
|
||||||
|
al.AddCSSClass("author")
|
||||||
|
al.SetSelectable(true)
|
||||||
|
|
||||||
if m.Type == stanza.MessageTypeGroupchat {
|
if m.Type == stanza.MessageTypeGroupchat {
|
||||||
mo, _ := mucmembers.Load(JidMustParse(m.From).Bare())
|
mo, _ := mucmembers.Load(JidMustParse(m.From).Bare())
|
||||||
mm := mo.(mucUnit)
|
mm := mo.(mucUnit)
|
||||||
mmm := mm.Members
|
mmm := mm.Members
|
||||||
mmmm, ok := mmm.Load(id)
|
mmmm, ok := mmm.Load(id)
|
||||||
if ok {
|
if ok {
|
||||||
pres := mmmm.(stanza.Presence)
|
pres := mmmm.(stanza.Presence)
|
||||||
var vu VCardUpdate
|
var vu VCardUpdate
|
||||||
pres.Get(&vu)
|
pres.Get(&vu)
|
||||||
im := createIdenticon(m.From, false)
|
im := createIdenticon(m.From, false)
|
||||||
im.SetPixelSize(40)
|
im.SetPixelSize(40)
|
||||||
im.AddCSSClass("author_img")
|
im.AddCSSClass("author_img")
|
||||||
authorBox.Append(im)
|
authorBox.Append(im)
|
||||||
if vu.Photo != "" {
|
if vu.Photo != "" {
|
||||||
go func() {
|
go func() {
|
||||||
new_im := getAvatar(m.From, vu.Photo)
|
new_im := getAvatar(m.From, vu.Photo)
|
||||||
glib.IdleAdd(func() {
|
glib.IdleAdd(func() {
|
||||||
new_im.SetPixelSize(40)
|
new_im.SetPixelSize(40)
|
||||||
new_im.AddCSSClass("author_img")
|
new_im.AddCSSClass("author_img")
|
||||||
authorBox.Remove(im)
|
authorBox.Remove(im)
|
||||||
authorBox.Prepend(new_im)
|
authorBox.Prepend(new_im)
|
||||||
})
|
})
|
||||||
}()
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
im := createIdenticon(m.From, false)
|
||||||
|
im.SetPixelSize(40)
|
||||||
|
im.AddCSSClass("author_img")
|
||||||
|
authorBox.Append(im)
|
||||||
}
|
}
|
||||||
|
} else if m.Type == stanza.MessageTypeChat {
|
||||||
|
al.SetText(al.Text() + loadedLocale["whispers"])
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
authorBox.Append(al)
|
||||||
im := createIdenticon(m.From, false)
|
|
||||||
im.SetPixelSize(40)
|
if m.Thread != "" {
|
||||||
im.AddCSSClass("author_img")
|
im := createIdenticon(m.Thread, true)
|
||||||
|
im.SetPixelSize(10)
|
||||||
authorBox.Append(im)
|
authorBox.Append(im)
|
||||||
}
|
}
|
||||||
} else if m.Type == stanza.MessageTypeChat {
|
|
||||||
al.SetText(al.Text() + loadedLocale["whispers"])
|
|
||||||
}
|
|
||||||
|
|
||||||
authorBox.Append(al)
|
wxdc := XDCEl{}
|
||||||
|
ok = m.Get(&wxdc)
|
||||||
if m.Thread != "" {
|
|
||||||
im := createIdenticon(m.Thread, true)
|
|
||||||
im.SetPixelSize(10)
|
|
||||||
authorBox.Append(im)
|
|
||||||
}
|
|
||||||
|
|
||||||
wxdc := XDCEl{}
|
|
||||||
ok = m.Get(&wxdc)
|
|
||||||
if ok {
|
|
||||||
authorBox.Append(gtk.NewLabel("🎮"))
|
|
||||||
}
|
|
||||||
|
|
||||||
mlabel := gtk.NewLabel(m.Body)
|
|
||||||
if m.Body == "" {
|
|
||||||
mlabel.SetText(loadedLocale["noBodySet"])
|
|
||||||
mlabel.AddCSSClass("visitor")
|
|
||||||
}
|
|
||||||
mlabel.SetWrap(true)
|
|
||||||
mlabel.SetSelectable(true)
|
|
||||||
mlabel.SetHAlign(gtk.AlignFill)
|
|
||||||
|
|
||||||
/*
|
|
||||||
mum := MucUser{}
|
|
||||||
ok = m.Get(&mum)
|
|
||||||
if ok {
|
if ok {
|
||||||
mlabel.SetText(fmt.Sprintf("%s%s%s", mum.MucUserItem.JID, loadedLocale["affilChange"], mum.MucUserItem.Affiliation))
|
authorBox.Append(gtk.NewLabel("🎮"))
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
contentBox.Append(mlabel)
|
mlabel := gtk.NewLabel(m.Body)
|
||||||
|
if m.Body == "" {
|
||||||
|
mlabel.SetText(loadedLocale["noBodySet"])
|
||||||
|
mlabel.AddCSSClass("visitor")
|
||||||
|
}
|
||||||
|
mlabel.SetWrap(true)
|
||||||
|
mlabel.SetSelectable(true)
|
||||||
|
mlabel.SetHAlign(gtk.AlignFill)
|
||||||
|
|
||||||
mainBox.Append(authorBox)
|
/*
|
||||||
mainBox.Append(contentBox)
|
mum := MucUser{}
|
||||||
|
ok = m.Get(&mum)
|
||||||
|
if ok {
|
||||||
|
mlabel.SetText(fmt.Sprintf("%s%s%s", mum.MucUserItem.JID, loadedLocale["affilChange"], mum.MucUserItem.Affiliation))
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
oob := stanza.OOB{}
|
contentBox.Append(mlabel)
|
||||||
ok = m.Get(&oob)
|
|
||||||
if ok {
|
|
||||||
// media := newPictureFromWeb(oob.URL)
|
|
||||||
// media.SetCanShrink(false)
|
|
||||||
// mainBox.Append(media)
|
|
||||||
// media.AddCSSClass("chat_image")
|
|
||||||
mbtn := gtk.NewButtonWithLabel("🖼️")
|
|
||||||
// mbtn.SetChild(newImageFromWeb(oob.URL))
|
|
||||||
mbtn.ConnectClicked(func() {
|
|
||||||
gopen.Open(oob.URL)
|
|
||||||
})
|
|
||||||
authorBox.Append(mbtn)
|
|
||||||
}
|
|
||||||
|
|
||||||
if m.Subject != "" {
|
mainBox.Append(authorBox)
|
||||||
subjectlabel := gtk.NewLabel(m.Subject)
|
mainBox.Append(contentBox)
|
||||||
subjectlabel.SetWrap(true)
|
|
||||||
subjectlabel.SetSelectable(true)
|
|
||||||
subjectlabel.SetHAlign(gtk.AlignFill)
|
|
||||||
subjectlabel.AddCSSClass("subject")
|
|
||||||
mainBox.Append(subjectlabel)
|
|
||||||
}
|
|
||||||
|
|
||||||
link_preview := LinkPreview{}
|
oob := stanza.OOB{}
|
||||||
ok = m.Get(&link_preview)
|
ok = m.Get(&oob)
|
||||||
if ok {
|
if ok {
|
||||||
lp_box := gtk.NewBox(gtk.OrientationVertical, 10)
|
// media := newPictureFromWeb(oob.URL)
|
||||||
lp_box.AddCSSClass("link_preview")
|
// media.SetCanShrink(false)
|
||||||
lp_title := gtk.NewLabel(link_preview.Title)
|
// mainBox.Append(media)
|
||||||
lp_title.SetSelectable(true)
|
// media.AddCSSClass("chat_image")
|
||||||
lp_title.SetWrap(true)
|
mbtn := gtk.NewButtonWithLabel("🖼️")
|
||||||
lp_title.SetHAlign(gtk.AlignFill)
|
// mbtn.SetChild(newImageFromWeb(oob.URL))
|
||||||
lp_desc := gtk.NewLabel(link_preview.URL + "\n" + link_preview.Description)
|
mbtn.ConnectClicked(func() {
|
||||||
lp_desc.SetSelectable(true)
|
gopen.Open(oob.URL)
|
||||||
lp_desc.SetWrap(true)
|
})
|
||||||
lp_desc.SetHAlign(gtk.AlignFill)
|
authorBox.Append(mbtn)
|
||||||
|
}
|
||||||
|
|
||||||
lp_box.Append(lp_title)
|
if m.Subject != "" {
|
||||||
lp_box.Append(lp_desc)
|
subjectlabel := gtk.NewLabel(m.Subject)
|
||||||
|
subjectlabel.SetWrap(true)
|
||||||
|
subjectlabel.SetSelectable(true)
|
||||||
|
subjectlabel.SetHAlign(gtk.AlignFill)
|
||||||
|
subjectlabel.AddCSSClass("subject")
|
||||||
|
mainBox.Append(subjectlabel)
|
||||||
|
}
|
||||||
|
|
||||||
warning := gtk.NewLabel("⚠️")
|
link_preview := LinkPreview{}
|
||||||
warning.SetTooltipText(loadedLocale["linkPreviewWarning"])
|
ok = m.Get(&link_preview)
|
||||||
lp_box.Append(warning)
|
if ok {
|
||||||
|
lp_box := gtk.NewBox(gtk.OrientationVertical, 10)
|
||||||
|
lp_box.AddCSSClass("link_preview")
|
||||||
|
lp_title := gtk.NewLabel(link_preview.Title)
|
||||||
|
lp_title.SetSelectable(true)
|
||||||
|
lp_title.SetWrap(true)
|
||||||
|
lp_title.SetHAlign(gtk.AlignFill)
|
||||||
|
lp_desc := gtk.NewLabel(link_preview.URL + "\n" + link_preview.Description)
|
||||||
|
lp_desc.SetSelectable(true)
|
||||||
|
lp_desc.SetWrap(true)
|
||||||
|
lp_desc.SetHAlign(gtk.AlignFill)
|
||||||
|
|
||||||
mainBox.Append(lp_box)
|
lp_box.Append(lp_title)
|
||||||
|
lp_box.Append(lp_desc)
|
||||||
|
|
||||||
|
warning := gtk.NewLabel("⚠️")
|
||||||
|
warning.SetTooltipText(loadedLocale["linkPreviewWarning"])
|
||||||
|
lp_box.Append(warning)
|
||||||
|
|
||||||
|
mainBox.Append(lp_box)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return mainBox
|
return mainBox
|
||||||
|
|||||||
Reference in New Issue
Block a user