morpheus

A Matrix client written in Go-QT
git clone git://archive.git.mtrnord.blog/Nordgedanken/morpheus.git
Log | Files | Refs | README | LICENSE

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 }