commit 579aad7c7d9df11111fef21a854ec66e5dd25200
parent 6b6847e4405bbf63abd40c8678918b61d1312d8c
Author: MTRNord <mtrnord1@gmail.com>
Date: Sat, 14 Oct 2017 20:15:17 +0200
Delint a lot of code and close #18
Signed-off-by: MTRNord <mtrnord1@gmail.com>
Diffstat:
8 files changed, 331 insertions(+), 310 deletions(-)
diff --git a/elements/messageList.go b/elements/messageList.go
@@ -20,12 +20,14 @@ import (
// //
////////////////////////////////////////////////////
+// QVBoxLayoutWithTriggerSlot defines the QVBoxLayout with TriggerMessage slot to add messages to the View
type QVBoxLayoutWithTriggerSlot struct {
widgets.QVBoxLayout
_ func(messageBody, sender string) `slot:"TriggerMessage"`
}
+// NewMessageList generates a new QVBoxLayoutWithTriggerSlot and adds it to the message scrollArea
func NewMessageList(scrollArea *widgets.QScrollArea, messageView *widgets.QWidget) (messageViewLayout *QVBoxLayoutWithTriggerSlot) {
messageViewLayout = NewQVBoxLayoutWithTriggerSlot2(messageView)
@@ -38,6 +40,7 @@ func NewMessageList(scrollArea *widgets.QScrollArea, messageView *widgets.QWidge
return
}
+// NewMessage adds a new message object to the view
func (messageViewLayout *QVBoxLayoutWithTriggerSlot) NewMessage(body string, cli *gomatrix.Client, sender string, scrollArea *widgets.QScrollArea) {
avatar := matrix.GetUserAvatar(cli, sender)
@@ -69,7 +72,7 @@ func (messageViewLayout *QVBoxLayoutWithTriggerSlot) NewMessage(body string, cli
messageWidget.SetMinimumWidth(messageContent.LineWidth() + 100)
messageWidget.Resize(wrapperWidget.Size())
- messageViewLayout.SetSpacing(0)
+ messageViewLayout.SetSpacing(1)
messageViewLayout.SetContentsMargins(0, 0, 0, 0)
messageViewLayout.AddWidget(messageWidget, 0, core.Qt__AlignBottom)
diff --git a/main.go b/main.go
@@ -38,13 +38,17 @@ func main() {
appIcon := gui.NewQIcon5(":/qml/resources/logos/MorpheusBig.png")
app.SetWindowIcon(appIcon)
+ window = widgets.NewQMainWindow(nil, 0)
+ windowHeight := 600
+ windowWidth := 950
+
desktopApp := widgets.QApplication_Desktop()
primaryScreen := desktopApp.PrimaryScreen()
screen := desktopApp.Screen(primaryScreen)
- windowWidth := screen.Width() / 2
- windowHeight := screen.Height() / 2
+ windowX := (screen.Width() - windowHeight) / 2
+ windowY := (screen.Height() - windowWidth) / 2
- window = widgets.NewQMainWindow(nil, 0)
+ window.Move2(windowX, windowY)
var accessToken string
var homeserverURL string
@@ -52,22 +56,32 @@ func main() {
// Get cache
db.View(func(tx *buntdb.Tx) error {
- QueryErr := tx.AscendKeys("user:accessToken",
+ accessTokenErr := tx.AscendKeys("user:accessToken",
func(key, value string) bool {
accessToken = value
return true
})
- QueryErr = tx.AscendKeys("user:homeserverURL",
+ if accessTokenErr != nil {
+ return accessTokenErr
+ }
+ homeserverURLErr := tx.AscendKeys("user:homeserverURL",
func(key, value string) bool {
homeserverURL = value
return true
})
- QueryErr = tx.AscendKeys("user:userID",
+ if homeserverURLErr != nil {
+ return homeserverURLErr
+ }
+ userIDErr := tx.AscendKeys("user:userID",
func(key, value string) bool {
userID = value
return true
})
- return QueryErr
+ if userIDErr != nil {
+ return userIDErr
+ }
+
+ return nil
})
if accessToken != "" && homeserverURL != "" && userID != "" {
@@ -86,16 +100,18 @@ func main() {
//Show MainUI
for result := range results {
//TODO Don't switch screen on wrong login data.
- mainUI := NewMainUI(windowWidth, windowHeight, result)
- mainUI.SetMinimumSize2(windowWidth, windowHeight)
+ mainUI := NewMainUI(windowWidth, windowHeight, result, window)
+ mainUI.Resize2(windowWidth, windowHeight)
window.SetCentralWidget(mainUI)
}
} else {
//Show loginUI
- loginUI := NewLoginUI(windowWidth, windowHeight)
- loginUI.SetMinimumSize2(windowWidth, windowHeight)
+ loginUI := NewLoginUI(windowWidth, windowHeight, window)
+ loginUI.Resize2(windowWidth, windowHeight)
window.SetCentralWidget(loginUI)
}
+
+ window.Resize2(windowWidth, windowHeight)
window.Show()
//enter the main event loop
diff --git a/matrix/db.go b/matrix/db.go
@@ -12,6 +12,7 @@ import (
var db *buntdb.DB
+// OpenDB opens or generates the Database file for settings and Cache
func OpenDB() (expDB *buntdb.DB) {
// Open the data.db file. It will be created if it doesn't exist.
configDirs := configdir.New("Nordgedanken", "Morpheus")
@@ -27,6 +28,7 @@ func OpenDB() (expDB *buntdb.DB) {
return
}
+// InitData inits basic Data like getting aliases of joinedRooms
func InitData(cli *gomatrix.Client, db *buntdb.DB) {
roomsURL := cli.BuildURL("joined_rooms")
var rooms JoinedRooms
@@ -56,6 +58,7 @@ func InitData(cli *gomatrix.Client, db *buntdb.DB) {
}
}
+// CacheMessageEvents writes message infos into the cache into the defined room
func CacheMessageEvents(id, sender, roomID, message string, timestamp int64, db *buntdb.DB) {
// Update cache
DBerr := db.Update(func(tx *buntdb.Tx) error {
diff --git a/matrix/ownUser.go b/matrix/ownUser.go
@@ -1,228 +0,0 @@
-package matrix
-
-import (
- "log"
- "os"
- "strings"
-
- "bytes"
- "fmt"
- "github.com/Nordgedanken/Morpheus/util"
- "github.com/matrix-org/gomatrix"
- "github.com/therecipe/qt/gui"
- "github.com/tidwall/buntdb"
- "image"
- "image/color"
- "image/draw"
- _ "image/gif"
- _ "image/jpeg"
- "image/png"
- "math/rand"
-)
-
-var localLog *log.Logger
-
-func init() {
- var file *os.File
- localLog = util.Logger()
- localLog, file = util.StartFileLog(localLog)
- defer file.Close()
-}
-
-type circle struct {
- p image.Point
- r int
-}
-
-func (c *circle) ColorModel() color.Model {
- return color.AlphaModel
-}
-
-func (c *circle) Bounds() image.Rectangle {
- return image.Rect(c.p.X-c.r, c.p.Y-c.r, c.p.X+c.r, c.p.Y+c.r)
-}
-
-func (c *circle) At(x, y int) color.Color {
- xx, yy, rr := float64(x-c.p.X)+0.5, float64(y-c.p.Y)+0.5, float64(c.r)
- if xx*xx+yy*yy < rr*rr {
- return color.Alpha{255}
- }
- return color.Alpha{0}
-}
-
-func generateGenericImages(displayname string) string {
- // Create an 100 x 100 image
- img := image.NewRGBA(image.Rect(0, 0, 100, 100))
-
- // Draw a red dot at (2, 3)
- img.Set(50, 50, color.RGBA{uint8(rand.Intn(200)), uint8(rand.Intn(255)), uint8(rand.Intn(255)), 255})
-
- buf := new(bytes.Buffer)
- png.Encode(buf, img)
- return string(buf.Bytes())
-}
-
-// getOwnUserAvatar returns a *gui.QPixmap of an UserAvatar
-func GetOwnUserAvatar(cli *gomatrix.Client) *gui.QPixmap {
- // Init local vars
- var avatarData string
- var IMGdata string
-
- // Get cache
- db.View(func(tx *buntdb.Tx) error {
- QueryErr := tx.AscendKeys("user:"+cli.UserID+":avatarData100x100",
- func(key, value string) bool {
- avatarData = value
- return true
- })
- if QueryErr != nil {
- return QueryErr
- }
- return nil
- })
-
- //If cache is empty do a ServerQuery
- if avatarData == "" {
- // Get avatarURL
- avatarURL, avatarErr := cli.GetAvatarURL()
- if avatarErr != nil {
- localLog.Println(avatarErr)
- }
-
- // If avatarURL is not empty (aka. has a avatar set) download it at the size of 100x100. Else make the data string empty
- if avatarURL != "" {
- hsURL := cli.HomeserverURL.String()
- avatarURLSplits := strings.Split(strings.Replace(avatarURL, "mxc://", "", -1), "/")
-
- urlPath := hsURL + "/_matrix/media/r0/thumbnail/" + avatarURLSplits[0] + "/" + avatarURLSplits[1] + "?width=100&height=100"
-
- data, err := cli.MakeRequest("GET", urlPath, nil, nil)
- if err != nil {
- localLog.Println(err)
- }
- IMGdata = string(data[:])
- } else {
- //TODO Generate default image (Step: AfterUI)
- DisplayNameResp, _ := cli.GetOwnDisplayName()
- DisplayName := DisplayNameResp.DisplayName
- IMGdata = generateGenericImages(DisplayName)
- }
-
- // Update cache
- DBerr := db.Update(func(tx *buntdb.Tx) error {
- tx.Set("user:"+cli.UserID+":avatarData100x100", IMGdata, nil)
- return nil
- })
- if DBerr != nil {
- localLog.Fatalln("DB ERROR: ", DBerr)
- }
- } else {
- IMGdata = avatarData
- }
-
- r := bytes.NewReader([]byte(IMGdata))
- srcIMG, _, err := image.Decode(r)
- if err != nil {
- localLog.Println("Decoder error: ", err)
- }
-
- // Convert avatarimage to QPixmap for usage in QT
- canvas := image.NewRGBA(srcIMG.Bounds())
- cx := srcIMG.Bounds().Min.X + srcIMG.Bounds().Dx()/2
- cy := srcIMG.Bounds().Min.Y + srcIMG.Bounds().Dy()/2
- draw.DrawMask(canvas, canvas.Bounds(), srcIMG, image.ZP, &circle{image.Point{cx, cy}, 110}, image.ZP, draw.Over)
- avatar := gui.NewQPixmap()
- buf := new(bytes.Buffer)
- Converr := png.Encode(buf, canvas)
- if Converr != nil {
- localLog.Println("Converting error: ", Converr)
- }
-
- str := fmt.Sprintf("%s", buf)
- avatar.LoadFromData(str, uint(len(str)), "", 0)
- return avatar
-}
-
-// getOwnUserAvatar returns a *gui.QPixmap of an UserAvatar
-func GetUserAvatar(cli *gomatrix.Client, mxid string) *gui.QPixmap {
- // Init local vars
- var avatarData string
- var IMGdata string
-
- // Get cache
- db.View(func(tx *buntdb.Tx) error {
- QueryErr := tx.AscendKeys("user:"+mxid+":avatarData100x100",
- func(key, value string) bool {
- avatarData = value
- return true
- })
- if QueryErr != nil {
- return QueryErr
- }
- return nil
- })
-
- //If cache is empty do a ServerQuery
- if avatarData == "" {
- // Get avatarURL
- urlPath := cli.BuildURL("profile", mxid, "avatar_url")
- s := struct {
- AvatarURL string `json:"avatar_url"`
- }{}
-
- cli.MakeRequest("GET", urlPath, nil, &s)
- avatarURL := s.AvatarURL
-
- // If avatarURL is not empty (aka. has a avatar set) download it at the size of 100x100. Else make the data string empty
- if avatarURL != "" {
- hsURL := cli.HomeserverURL.String()
- avatarURLSplits := strings.Split(strings.Replace(avatarURL, "mxc://", "", -1), "/")
-
- urlPath := hsURL + "/_matrix/media/r0/thumbnail/" + avatarURLSplits[0] + "/" + avatarURLSplits[1] + "?width=100&height=100"
-
- data, err := cli.MakeRequest("GET", urlPath, nil, nil)
- if err != nil {
- localLog.Println(err)
- }
- IMGdata = string(data[:])
- } else {
- //TODO Generate default image (Step: AfterUI)
- DisplayNameResp, _ := cli.GetOwnDisplayName()
- DisplayName := DisplayNameResp.DisplayName
- IMGdata = generateGenericImages(DisplayName)
- }
-
- // Update cache
- DBerr := db.Update(func(tx *buntdb.Tx) error {
- tx.Set("user:"+mxid+":avatarData100x100", IMGdata, nil)
- return nil
- })
- if DBerr != nil {
- localLog.Fatalln("DB ERROR: ", DBerr)
- }
- } else {
- IMGdata = avatarData
- }
-
- r := bytes.NewReader([]byte(IMGdata))
- srcIMG, _, err := image.Decode(r)
- if err != nil {
- localLog.Println("Decoder error: ", err)
- }
-
- // Convert avatarimage to QPixmap for usage in QT
- canvas := image.NewRGBA(srcIMG.Bounds())
- cx := srcIMG.Bounds().Min.X + srcIMG.Bounds().Dx()/2
- cy := srcIMG.Bounds().Min.Y + srcIMG.Bounds().Dy()/2
- draw.DrawMask(canvas, canvas.Bounds(), srcIMG, image.ZP, &circle{image.Point{cx, cy}, 110}, image.ZP, draw.Over)
- avatar := gui.NewQPixmap()
- buf := new(bytes.Buffer)
- Converr := png.Encode(buf, canvas)
- if Converr != nil {
- localLog.Println("Converting error: ", Converr)
- }
-
- str := fmt.Sprintf("%s", buf)
- avatar.LoadFromData(str, uint(len(str)), "", 0)
- return avatar
-}
diff --git a/matrix/types.go b/matrix/types.go
@@ -8,6 +8,7 @@ type HTMLMessage struct {
Format string `json:"format"`
}
+// RoomAliases is the json response when getting the room aliases
type RoomAliases struct {
Age int `json:"age"`
Content struct {
@@ -21,6 +22,7 @@ type RoomAliases struct {
Type string `json:"type"`
}
+// JoinedRooms is the json response when getting the joined rooms list
type JoinedRooms struct {
JoinedRooms []string `json:"joined_rooms"`
}
diff --git a/matrix/user.go b/matrix/user.go
@@ -0,0 +1,228 @@
+package matrix
+
+import (
+ "log"
+ "os"
+ "strings"
+
+ "bytes"
+ "fmt"
+ "github.com/Nordgedanken/Morpheus/util"
+ "github.com/matrix-org/gomatrix"
+ "github.com/therecipe/qt/gui"
+ "github.com/tidwall/buntdb"
+ "image"
+ "image/color"
+ "image/draw"
+ // image/jpeg needed to load jpeg images
+ _ "image/jpeg"
+ "image/png"
+ "math/rand"
+)
+
+var localLog *log.Logger
+
+func init() {
+ var file *os.File
+ localLog = util.Logger()
+ localLog, file = util.StartFileLog(localLog)
+ defer file.Close()
+}
+
+type circle struct {
+ p image.Point
+ r int
+}
+
+func (c *circle) ColorModel() color.Model {
+ return color.AlphaModel
+}
+
+func (c *circle) Bounds() image.Rectangle {
+ return image.Rect(c.p.X-c.r, c.p.Y-c.r, c.p.X+c.r, c.p.Y+c.r)
+}
+
+func (c *circle) At(x, y int) color.Color {
+ xx, yy, rr := float64(x-c.p.X)+0.5, float64(y-c.p.Y)+0.5, float64(c.r)
+ if xx*xx+yy*yy < rr*rr {
+ return color.Alpha{255}
+ }
+ return color.Alpha{0}
+}
+
+func generateGenericImages(displayname string) string {
+ // Create an 100 x 100 image
+ img := image.NewRGBA(image.Rect(0, 0, 100, 100))
+
+ // Draw a red dot at (2, 3)
+ img.Set(50, 50, color.RGBA{uint8(rand.Intn(200)), uint8(rand.Intn(255)), uint8(rand.Intn(255)), 255})
+
+ buf := new(bytes.Buffer)
+ png.Encode(buf, img)
+ return string(buf.Bytes())
+}
+
+// GetOwnUserAvatar returns a *gui.QPixmap of an UserAvatar
+func GetOwnUserAvatar(cli *gomatrix.Client) *gui.QPixmap {
+ // Init local vars
+ var avatarData string
+ var IMGdata string
+
+ // Get cache
+ db.View(func(tx *buntdb.Tx) error {
+ QueryErr := tx.AscendKeys("user:"+cli.UserID+":avatarData100x100",
+ func(key, value string) bool {
+ avatarData = value
+ return true
+ })
+ if QueryErr != nil {
+ return QueryErr
+ }
+ return nil
+ })
+
+ //If cache is empty do a ServerQuery
+ if avatarData == "" {
+ // Get avatarURL
+ avatarURL, avatarErr := cli.GetAvatarURL()
+ if avatarErr != nil {
+ localLog.Println(avatarErr)
+ }
+
+ // If avatarURL is not empty (aka. has a avatar set) download it at the size of 100x100. Else make the data string empty
+ if avatarURL != "" {
+ hsURL := cli.HomeserverURL.String()
+ avatarURLSplits := strings.Split(strings.Replace(avatarURL, "mxc://", "", -1), "/")
+
+ urlPath := hsURL + "/_matrix/media/r0/thumbnail/" + avatarURLSplits[0] + "/" + avatarURLSplits[1] + "?width=100&height=100"
+
+ data, err := cli.MakeRequest("GET", urlPath, nil, nil)
+ if err != nil {
+ localLog.Println(err)
+ }
+ IMGdata = string(data[:])
+ } else {
+ //TODO Generate default image (Step: AfterUI)
+ DisplayNameResp, _ := cli.GetOwnDisplayName()
+ DisplayName := DisplayNameResp.DisplayName
+ IMGdata = generateGenericImages(DisplayName)
+ }
+
+ // Update cache
+ DBerr := db.Update(func(tx *buntdb.Tx) error {
+ tx.Set("user:"+cli.UserID+":avatarData100x100", IMGdata, nil)
+ return nil
+ })
+ if DBerr != nil {
+ localLog.Fatalln("DB ERROR: ", DBerr)
+ }
+ } else {
+ IMGdata = avatarData
+ }
+
+ r := bytes.NewReader([]byte(IMGdata))
+ srcIMG, _, err := image.Decode(r)
+ if err != nil {
+ localLog.Println("Decoder error: ", err)
+ }
+
+ // Convert avatarimage to QPixmap for usage in QT
+ canvas := image.NewRGBA(srcIMG.Bounds())
+ cx := srcIMG.Bounds().Min.X + srcIMG.Bounds().Dx()/2
+ cy := srcIMG.Bounds().Min.Y + srcIMG.Bounds().Dy()/2
+ draw.DrawMask(canvas, canvas.Bounds(), srcIMG, image.ZP, &circle{image.Point{cx, cy}, 110}, image.ZP, draw.Over)
+ avatar := gui.NewQPixmap()
+ buf := new(bytes.Buffer)
+ Converr := png.Encode(buf, canvas)
+ if Converr != nil {
+ localLog.Println("Converting error: ", Converr)
+ }
+
+ str := fmt.Sprintf("%s", buf)
+ avatar.LoadFromData(str, uint(len(str)), "", 0)
+ return avatar
+}
+
+// GetUserAvatar returns a *gui.QPixmap of an UserAvatar
+func GetUserAvatar(cli *gomatrix.Client, mxid string) *gui.QPixmap {
+ // Init local vars
+ var avatarData string
+ var IMGdata string
+
+ // Get cache
+ db.View(func(tx *buntdb.Tx) error {
+ QueryErr := tx.AscendKeys("user:"+mxid+":avatarData100x100",
+ func(key, value string) bool {
+ avatarData = value
+ return true
+ })
+ if QueryErr != nil {
+ return QueryErr
+ }
+ return nil
+ })
+
+ //If cache is empty do a ServerQuery
+ if avatarData == "" {
+ // Get avatarURL
+ urlPath := cli.BuildURL("profile", mxid, "avatar_url")
+ s := struct {
+ AvatarURL string `json:"avatar_url"`
+ }{}
+
+ cli.MakeRequest("GET", urlPath, nil, &s)
+ avatarURL := s.AvatarURL
+
+ // If avatarURL is not empty (aka. has a avatar set) download it at the size of 100x100. Else make the data string empty
+ if avatarURL != "" {
+ hsURL := cli.HomeserverURL.String()
+ avatarURLSplits := strings.Split(strings.Replace(avatarURL, "mxc://", "", -1), "/")
+
+ urlPath := hsURL + "/_matrix/media/r0/thumbnail/" + avatarURLSplits[0] + "/" + avatarURLSplits[1] + "?width=100&height=100"
+
+ data, err := cli.MakeRequest("GET", urlPath, nil, nil)
+ if err != nil {
+ localLog.Println(err)
+ }
+ IMGdata = string(data[:])
+ } else {
+ //TODO Generate default image (Step: AfterUI)
+ DisplayNameResp, _ := cli.GetOwnDisplayName()
+ DisplayName := DisplayNameResp.DisplayName
+ IMGdata = generateGenericImages(DisplayName)
+ }
+
+ // Update cache
+ DBerr := db.Update(func(tx *buntdb.Tx) error {
+ tx.Set("user:"+mxid+":avatarData100x100", IMGdata, nil)
+ return nil
+ })
+ if DBerr != nil {
+ localLog.Fatalln("DB ERROR: ", DBerr)
+ }
+ } else {
+ IMGdata = avatarData
+ }
+
+ r := bytes.NewReader([]byte(IMGdata))
+ srcIMG, _, err := image.Decode(r)
+ if err != nil {
+ localLog.Println("Decoder error: ", err)
+ }
+
+ // Convert avatarimage to QPixmap for usage in QT
+ canvas := image.NewRGBA(srcIMG.Bounds())
+ cx := srcIMG.Bounds().Min.X + srcIMG.Bounds().Dx()/2
+ cy := srcIMG.Bounds().Min.Y + srcIMG.Bounds().Dy()/2
+ draw.DrawMask(canvas, canvas.Bounds(), srcIMG, image.ZP, &circle{image.Point{cx, cy}, 110}, image.ZP, draw.Over)
+ avatar := gui.NewQPixmap()
+ buf := new(bytes.Buffer)
+ Converr := png.Encode(buf, canvas)
+ if Converr != nil {
+ localLog.Println("Converting error: ", Converr)
+ }
+
+ str := fmt.Sprintf("%s", buf)
+ avatar.LoadFromData(str, uint(len(str)), "", 0)
+ return avatar
+}
diff --git a/qml/ui/chat.ui b/qml/ui/chat.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>1585</width>
- <height>745</height>
+ <width>950</width>
+ <height>600</height>
</rect>
</property>
<property name="sizePolicy">
@@ -16,8 +16,18 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="minimumSize">
+ <size>
+ <width>950</width>
+ <height>600</height>
+ </size>
+ </property>
<property name="windowTitle">
- <string>Neo</string>
+ <string>Morpheus</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="../../rcc.qrc">
+ <normaloff>:/qml/resources/logos/MorpheusBig.png</normaloff>:/qml/resources/logos/MorpheusBig.png</iconset>
</property>
<property name="autoFillBackground">
<bool>false</bool>
@@ -171,8 +181,8 @@
</property>
<property name="minimumSize">
<size>
- <width>41</width>
- <height>41</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="toolTip">
@@ -233,8 +243,8 @@
</property>
<property name="minimumSize">
<size>
- <width>41</width>
- <height>41</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="toolTip">
@@ -295,8 +305,8 @@
</property>
<property name="minimumSize">
<size>
- <width>41</width>
- <height>41</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="toolTip">
@@ -357,8 +367,8 @@
</property>
<property name="minimumSize">
<size>
- <width>41</width>
- <height>41</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="mouseTracking">
@@ -419,8 +429,8 @@
</property>
<property name="minimumSize">
<size>
- <width>41</width>
- <height>41</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="toolTip">
@@ -553,15 +563,15 @@ border-radius: 5px;</string>
<item>
<widget class="QScrollArea" name="roomBarArea">
<property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Expanding">
+ <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
- <width>291</width>
- <height>671</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="styleSheet">
@@ -584,14 +594,14 @@ border-radius: 5px;</string>
<rect>
<x>0</x>
<y>0</y>
- <width>291</width>
- <height>696</height>
+ <width>271</width>
+ <height>551</height>
</rect>
</property>
<property name="minimumSize">
<size>
- <width>291</width>
- <height>671</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
</widget>
@@ -631,8 +641,8 @@ border-radius: 5px;</string>
<widget class="QWidget" name="titleBar" native="true">
<property name="minimumSize">
<size>
- <width>901</width>
- <height>91</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="styleSheet">
@@ -650,8 +660,8 @@ border-radius: 2px;</string>
</property>
<property name="minimumSize">
<size>
- <width>71</width>
- <height>71</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="text">
@@ -671,8 +681,8 @@ border-radius: 2px;</string>
<widget class="QLabel" name="RoomTitel">
<property name="minimumSize">
<size>
- <width>611</width>
- <height>31</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="font">
@@ -692,8 +702,8 @@ border-radius: 2px;</string>
<widget class="QLabel" name="subTitle">
<property name="minimumSize">
<size>
- <width>611</width>
- <height>31</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="font">
@@ -732,8 +742,8 @@ border-radius: 2px;</string>
</property>
<property name="minimumSize">
<size>
- <width>41</width>
- <height>41</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="toolTip">
@@ -773,8 +783,8 @@ border-radius: 2px;</string>
</property>
<property name="minimumSize">
<size>
- <width>41</width>
- <height>41</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="toolTip">
@@ -812,15 +822,15 @@ border-radius: 2px;</string>
<item>
<widget class="QScrollArea" name="messageScroll">
<property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
- <width>901</width>
- <height>581</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="styleSheet">
@@ -837,14 +847,14 @@ border-radius: 2px;</string>
<rect>
<x>0</x>
<y>0</y>
- <width>1216</width>
- <height>581</height>
+ <width>601</width>
+ <height>425</height>
</rect>
</property>
<property name="minimumSize">
<size>
- <width>901</width>
- <height>581</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
</widget>
@@ -853,15 +863,15 @@ border-radius: 2px;</string>
<item>
<widget class="QWidget" name="messageInputWrapper" native="true">
<property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
- <width>889</width>
- <height>50</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<layout class="QGridLayout" name="gridLayout_3">
@@ -883,15 +893,15 @@ border-radius: 2px;</string>
<item row="0" column="0">
<widget class="QLineEdit" name="MessageInput">
<property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
- <width>861</width>
- <height>31</height>
+ <width>0</width>
+ <height>0</height>
</size>
</property>
<property name="styleSheet">
diff --git a/uis.go b/uis.go
@@ -19,6 +19,7 @@ import (
var username string
var password string
+// DoLogin generates the needed Client
func DoLogin(username, password, homeserverURL, userID, accessToken string, localLog *log.Logger, results chan<- *gomatrix.Client, wg *sync.WaitGroup) {
defer wg.Done()
var cli *gomatrix.Client
@@ -47,7 +48,7 @@ func DoLogin(username, password, homeserverURL, userID, accessToken string, loca
}
//NewLoginUI initializes the login Screen
-func NewLoginUI(windowWidth, windowHeight int) *widgets.QWidget {
+func NewLoginUI(windowWidth, windowHeight int, window *widgets.QMainWindow) *widgets.QWidget {
widget := widgets.NewQWidget(nil, 0)
widget.SetObjectName("LoginWrapper")
widget.SetStyleSheet("QWidget#LoginWrapper { border: 0px; };")
@@ -55,7 +56,6 @@ func NewLoginUI(windowWidth, windowHeight int) *widgets.QWidget {
formWidget := widgets.NewQWidget(nil, 0)
formWrapper := widgets.NewQHBoxLayout()
- formWidget.SetMinimumSize2(350, 200)
formLayout := widgets.NewQVBoxLayout()
formLayout.SetSpacing(20)
@@ -132,8 +132,7 @@ func NewLoginUI(windowWidth, windowHeight int) *widgets.QWidget {
//Show MainUI
for result := range results {
//TODO Don't switch screen on wrong login data.
- mainUI := NewMainUI(windowWidth, windowHeight, result)
- mainUI.SetMinimumSize2(windowWidth, windowHeight)
+ mainUI := NewMainUI(windowWidth, windowHeight, result, window)
window.SetCentralWidget(mainUI)
}
} else {
@@ -148,7 +147,7 @@ func NewLoginUI(windowWidth, windowHeight int) *widgets.QWidget {
//NewMainUI initializes the login Screen
//func NewMainUI(windowWidth, windowHeight int, cli *gomatrix.Client) *widgets.QWidget {
-func NewMainUI(windowWidth, windowHeight int, cli *gomatrix.Client) *widgets.QWidget {
+func NewMainUI(windowWidth, windowHeight int, cli *gomatrix.Client, window *widgets.QMainWindow) *widgets.QWidget {
var widget = widgets.NewQWidget(nil, 0)
var loader = uitools.NewQUiLoader(nil)
@@ -159,21 +158,12 @@ func NewMainUI(windowWidth, windowHeight int, cli *gomatrix.Client) *widgets.QWi
file.Close()
matrix.InitData(cli, db)
- mainWidget.SetMinimumSize2(window.Size().Width(), window.Size().Height())
- mainWidget.SetGeometry2(0, 0, window.Size().Width(), window.Size().Height())
- mainWidget.Resize2(window.Size().Width(), window.Size().Height())
-
- widget.SetMinimumSize2(window.Size().Width(), window.Size().Height())
- widget.SetGeometry2(0, 0, window.Size().Width(), window.Size().Height())
-
- chatWidget := widgets.NewQWidgetFromPointer(widget.FindChild("ChatWidget", core.Qt__FindChildrenRecursively).Pointer())
- chatWidget.SetMinimumSize2(window.Size().Width(), window.Size().Height())
- chatWidget.SetGeometry2(0, 0, window.Size().Width(), window.Size().Height())
messageScrollArea := widgets.NewQScrollAreaFromPointer(widget.FindChild("messageScroll", core.Qt__FindChildrenRecursively).Pointer())
messagesScrollAreaContent := widgets.NewQWidgetFromPointer(widget.FindChild("messagesScrollAreaContent", core.Qt__FindChildrenRecursively).Pointer())
mainWidget.SetWindowTitle("Morpheus - MatrixHQ")
+
var layout = widgets.NewQHBoxLayout()
layout.AddWidget(mainWidget, 1, core.Qt__AlignTop|core.Qt__AlignLeft)
widget.SetLayout(layout)
@@ -181,18 +171,16 @@ func NewMainUI(windowWidth, windowHeight int, cli *gomatrix.Client) *widgets.QWi
layout.SetContentsMargins(0, 0, 0, 0)
window.ConnectResizeEvent(func(event *gui.QResizeEvent) {
- mainWidget.SetMinimumSize2(1, 1)
- widget.SetMinimumSize2(1, 1)
- chatWidget.SetMinimumSize2(1, 1)
+ widget.Resize2(event.Size().Width(), event.Size().Height())
- widget.Resize(event.Size())
- mainWidget.Resize(event.Size())
- chatWidget.Resize(event.Size())
})
- messageScrollArea.ConnectResizeEvent(func(event *gui.QResizeEvent) {
- messageScrollArea.SetMinimumSize2(1, 1)
+ widget.ConnectResizeEvent(func(event *gui.QResizeEvent) {
+ mainWidget.Resize2(event.Size().Width(), event.Size().Height())
+ })
+
+ messageScrollArea.ConnectResizeEvent(func(event *gui.QResizeEvent) {
messageScrollArea.Resize(event.Size())
})
@@ -234,8 +222,7 @@ func NewMainUI(windowWidth, windowHeight int, cli *gomatrix.Client) *widgets.QWi
//Show LoginUI
for result := range results {
if result {
- loginUI := NewLoginUI(windowWidth, windowHeight)
- loginUI.SetMinimumSize2(windowWidth, windowHeight)
+ loginUI := NewLoginUI(windowWidth, windowHeight, window)
window.SetCentralWidget(loginUI)
}
}