roomlist.go (3865B)
1 package ui 2 3 import ( 4 "github.com/Nordgedanken/Morpheus/matrix" 5 "github.com/therecipe/qt/core" 6 "github.com/therecipe/qt/gui" 7 "github.com/therecipe/qt/uitools" 8 "github.com/therecipe/qt/widgets" 9 ) 10 11 //////////////////////////////////////////////////// 12 // // 13 // // 14 // // 15 // // 16 // DON'T TOUCH I HAVE NO IDEA WHY THIS EVEN WORKS // 17 // // 18 // // 19 // // 20 //////////////////////////////////////////////////// 21 22 // QRoomVBoxLayoutWithTriggerSlot defines the QVBoxLayout with TriggerMessage slot to add messages to the View 23 type QRoomVBoxLayoutWithTriggerSlot struct { 24 widgets.QVBoxLayout 25 26 _ func(roomID string) `slot:"TriggerRoom"` 27 _ func(url *core.QUrl) `slot:"ChangeRoom"` 28 } 29 30 // NewRoomList generates a new QRoomVBoxLayoutWithTriggerSlot and adds it to the room scrollArea 31 func NewRoomList(scrollArea *widgets.QScrollArea, roomView *widgets.QWidget) (roomViewLayout *QRoomVBoxLayoutWithTriggerSlot) { 32 roomViewLayout = NewQRoomVBoxLayoutWithTriggerSlot2(roomView) 33 34 roomViewLayout.SetSpacing(0) 35 roomViewLayout.SetContentsMargins(0, 0, 0, 0) 36 roomView.SetContentsMargins(0, 0, 0, 0) 37 scrollArea.SetWidget(roomView) 38 scrollArea.Widget().SetLayout(roomViewLayout) 39 40 return 41 } 42 43 // NewRoom adds a new room object to the view 44 func (roomViewLayout *QRoomVBoxLayoutWithTriggerSlot) NewRoom(room *matrix.Room, scrollArea *widgets.QScrollArea, mainUIStruct *MainUI) (err error) { 45 roomAvatar, roomAvatarErr := room.GetRoomAvatar() 46 if roomAvatarErr != nil { 47 err = roomAvatarErr 48 return 49 } 50 51 var widget = widgets.NewQWidget(nil, 0) 52 53 var loader = uitools.NewQUiLoader(nil) 54 var file = core.NewQFile2(":/qml/ui/room.ui") 55 56 file.Open(core.QIODevice__ReadOnly) 57 var wrapperWidget = loader.Load(file, widget) 58 file.Close() 59 60 roomAvatarQLabel := widgets.NewQLabelFromPointer(widget.FindChild("roomAvatar", core.Qt__FindChildrenRecursively).Pointer()) 61 roomName := widgets.NewQLabelFromPointer(widget.FindChild("roomName", core.Qt__FindChildrenRecursively).Pointer()) 62 /*lastMessageContent := widgets.NewQLabelFromPointer(widget.FindChild("lastMessage", core.Qt__FindChildrenRecursively).Pointer())*/ 63 64 roomAvatarQLabel.SetPixmap(roomAvatar) 65 roomName.SetText(room.GetRoomName()) 66 67 /* 68 messageContent.SetText(markdownMessage) 69 70 messageContent.SetMinimumWidth(messageContent.LineWidth()) 71 72 roomWidget.SetMinimumWidth(messageContent.LineWidth() + 100) 73 */ 74 widget.Resize(wrapperWidget.Size()) 75 76 var filterObject = core.NewQObject(nil) 77 filterObject.ConnectEventFilter(func(watched *core.QObject, event *core.QEvent) bool { 78 if event.Type() == core.QEvent__MouseButtonPress { 79 var mouseEvent = gui.NewQMouseEventFromPointer(event.Pointer()) 80 81 if mouseEvent.Button() == core.Qt__LeftButton { 82 if mainUIStruct.currentRoom != room.RoomID { 83 mainUIStruct.SetCurrentRoom(room.RoomID) 84 mainUIStruct.MainWidget.SetWindowTitle("Morpheus - " + room.GetRoomTopic()) 85 86 mainUIStruct.RoomAvatar.SetPixmap(roomAvatar) 87 88 mainUIStruct.RoomTitle.SetText(room.GetRoomName()) 89 90 mainUIStruct.RoomTopic.SetText(room.GetRoomTopic()) 91 count := mainUIStruct.MessageListLayout.Count() 92 for i := 0; i < count; i++ { 93 widgetScroll := mainUIStruct.MessageListLayout.ItemAt(i).Widget() 94 widgetScroll.DeleteLater() 95 } 96 97 go mainUIStruct.loadCache() 98 } 99 100 return true 101 } 102 103 return false 104 } 105 106 return false 107 }) 108 109 roomViewLayout.SetSpacing(0) 110 roomViewLayout.SetContentsMargins(0, 0, 0, 0) 111 112 wrapperWidget.InstallEventFilter(filterObject) 113 114 roomViewLayout.InsertWidget(roomViewLayout.Count()+1, wrapperWidget, 0, 0) 115 116 return 117 }