-
Notifications
You must be signed in to change notification settings - Fork 1
/
Message.go
95 lines (77 loc) · 2.25 KB
/
Message.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package main
import (
"github.com/carylorrk/goline-gotk3/res/glade"
"github.com/conformal/gotk3/glib"
"github.com/conformal/gotk3/gtk"
)
type MessageType int
const (
MESSAGE_NORMAL MessageType = 0
MESSAGE_YOU MessageType = 1
)
type Message struct {
msgBuilder *gtk.Builder
builder *gtk.Builder
message *gtk.Box
alignment *gtk.Alignment
name *gtk.Label
content *gtk.Box
parent *ChatWindow
}
func NewMessage(parent *ChatWindow, msgType MessageType, from, gladeStr string) *Message {
msg := &Message{parent: parent}
msg.setupBuilder(msgType, gladeStr)
msg.setupWidges()
msg.setupDefault(msgType, from)
return msg
}
func (self *Message) setupDefault(msgType MessageType, from string) {
if msgType == MESSAGE_NORMAL {
name := getNameById(from)
self.name.SetMarkup(markupById(from, name))
}
}
func (self *Message) setupBuilder(msgType MessageType, gladeStr string) {
var err error
self.msgBuilder, err = gtk.BuilderNew()
if err != nil {
goline.LoggerPanicln(err)
}
switch msgType {
case MESSAGE_NORMAL:
err = self.msgBuilder.AddFromString(glade.Message)
case MESSAGE_YOU:
err = self.msgBuilder.AddFromString(glade.YouMessage)
}
if err != nil {
goline.LoggerPanicln(err)
}
self.builder, err = gtk.BuilderNew()
if err != nil {
goline.LoggerPanicln(err)
}
err = self.builder.AddFromString(gladeStr)
if err != nil {
goline.LoggerPanicln(err)
}
}
func (self *Message) setupWidges() {
self.message = getIObjectWithType(self.msgBuilder, "Message", >k.Box{}).(*gtk.Box)
self.alignment = getIObjectWithType(self.msgBuilder, "Alignment", >k.Alignment{}).(*gtk.Alignment)
self.name = getIObjectWithType(self.msgBuilder, "Name", >k.Label{}).(*gtk.Label)
self.content = self.getIObjectWithType("Content", >k.Box{}).(*gtk.Box)
self.alignment.Add(self.content)
}
func (self *Message) getIObjectWithType(name string, proto interface{}) glib.IObject {
return getIObjectWithType(self.builder, name, proto)
}
func (self *Message) GetIWidget() gtk.IWidget {
return self.message
}
func (self *Message) Connect(obj Connectable, detailedSignal string, f interface{}, userData ...interface{}) glib.SignalHandle {
handler, err := obj.Connect(detailedSignal, f, userData...)
if err != nil {
goline.LoggerPanicln(err)
}
return handler
}