From 04ccaec3bb70baa0106bad8136f205bfdc366660 Mon Sep 17 00:00:00 2001
From: JacobTech <jacob@jacobtech.com>
Date: Fri, 6 Jan 2023 01:52:36 -0500
Subject: [PATCH] Friend TabControl

resolves #7
---
 Luski/GUI/MainScreen.cs                 | 48 +++++++++++++++++++++----
 Luski/GUI/MainScreen/UI/Chat.cs         |  9 +++--
 Luski/GUI/MainScreen/UI/ContentEmbed.cs | 15 --------
 Luski/Luski.csproj                      |  2 +-
 4 files changed, 46 insertions(+), 28 deletions(-)

diff --git a/Luski/GUI/MainScreen.cs b/Luski/GUI/MainScreen.cs
index be6dce7..38b2bcf 100644
--- a/Luski/GUI/MainScreen.cs
+++ b/Luski/GUI/MainScreen.cs
@@ -12,10 +12,10 @@ using Luski.net;
 using Luski.net.Enums;
 using Luski.net.Interfaces;
 using Luski.net.JsonTypes;
-using OpenTK.Graphics.OpenGL4;
 using OpenTK.Mathematics;
 using OpenTK.Windowing.Desktop;
 using OpenTK.Windowing.Common;
+using Window = GraphicsManager.Window;
 
 namespace Luski.GUI.MainScreen;
 
@@ -29,7 +29,9 @@ public class MainScreen : Window
         StartFocused = true,
         Size = new OpenTK.Mathematics.Vector2i(481, 838),
     };
-    FlowLayout? channelpicker;
+
+    private TabControl tc;
+    private FlowLayout? channelpicker, friends;
     private RoundedButton? FriendManagerBtn;
     private Chat? chat;
     
@@ -54,7 +56,9 @@ public class MainScreen : Window
     private List<IChannelPick> chans = new();
     public void AddFriend(SocketRemoteUser user)
     {
-        //add to friend pannel as well;
+        Friend friend2 = new(user);
+        friend2.ClickCon += ChannelOnClickCon;
+        friends.Controls.Add(friend2);
         if (user.Channel is not null)
         {
             Friend friend = new(user);
@@ -87,16 +91,37 @@ public class MainScreen : Window
         Controls.Add(new Rectangle(new Texture(Globals.Luski.CurrentUser.GetAvatar().Result)) { Anchor = ObjectAnchor.Bottom | ObjectAnchor.Left, Size = new(70, 70), Location = new(94, 1248)});
         Controls.Add(new Label(){ Anchor = ObjectAnchor.Bottom | ObjectAnchor.Left, Location = new(172, 1271), Text = Globals.Luski.CurrentUser.Username});
         FlowLayout ser;
+        Controls.Add(chat = new() {Location = new(528,0)});
         Controls.Add(ser = new FlowLayout()
         {
             BackgroundColor = new(26, 26, 26, 255),
             Size = new(80,1334),
             Anchor = ObjectAnchor.Top | ObjectAnchor.Left | ObjectAnchor.Bottom,
+            
+        });
+        Controls.Add(tc = new()// this is here to showcase my good friend TCLL
+        {
+            Location = chat.Location,
+            Size = chat.Size,
+            BackgroundColor = chat.BackgroundColor,
+            Anchor = ObjectAnchor.All,
+            Visible = false
+        });
+        UserControl f;
+        tc.AddPage("Frineds", f= new UserControl());
+        tc.AddPage("Friend Request", new UserControl());
+        tc.AddPage("Add Friend", new UserControl());
+        f.Controls.Add(friends = new FlowLayout()
+        {
+            Size = f.Size,
+            BackgroundColor = new(45,45,45,255),
+            Anchor = ObjectAnchor.All
         });
         ser.Controls.Add(new Rectangle(Globals.LuskiTexture)
         {
-            Size = new(80,80)
+            Size = new(80,80),
         });
+        
         Controls.Add(channelpicker = new FlowLayout()
         {
             BackgroundColor = new(34,34,34,255),
@@ -114,7 +139,7 @@ public class MainScreen : Window
         {
             if (item.Channel is not null) AddFriend(item);
         }
-        Controls.Add(chat = new() {Location = new(528,0)});
+        
         SocketTextChannel chan = Globals.Luski.GetChannel<SocketTextChannel>(Globals.Luski.CurrentUser.SelectedChannel).Result;
         chat.UpdateTitle(chans.First(s => s.Channel.Id == chan.Id));
         IReadOnlyList<SocketMessage> messages = chan.GetMessages(200).Result;
@@ -137,10 +162,19 @@ public class MainScreen : Window
         }));
         return Task.CompletedTask;
     }
-
+    
     private Task FriendManagerBtnOnClicked(IRenderObject arg)
     {
-        //open the friend UI
+        if (chat.Visible)
+        {
+            chat.Visible = false;
+            tc.Visible = true;
+        }
+        else
+        {
+            chat.Visible = true;
+            tc.Visible = false;
+        }
         return Task.CompletedTask;
     }
 }
\ No newline at end of file
diff --git a/Luski/GUI/MainScreen/UI/Chat.cs b/Luski/GUI/MainScreen/UI/Chat.cs
index 221ecc1..81953a5 100644
--- a/Luski/GUI/MainScreen/UI/Chat.cs
+++ b/Luski/GUI/MainScreen/UI/Chat.cs
@@ -1,10 +1,8 @@
 using GraphicsManager.Enums;
-using GraphicsManager.Interfaces;
 using GraphicsManager.Objects;
 using Luski.GUI.MainScreen.Interfaces;
 using Luski.net.Enums;
 using Luski.net.JsonTypes;
-using OpenTK.Graphics.ES20;
 using OpenTK.Mathematics;
 using OpenTK.Windowing.Common;
 using OpenTK.Windowing.GraphicsLibraryFramework;
@@ -30,8 +28,8 @@ public class Chat : UserControl
             BackgroundColor = new(40,40,40,255),
             Anchor = ObjectAnchor.All
         });
-        Controls.Add(titlecon = new UserControl(){Size = new(1520, 80), BackgroundColor = BackgroundColor});
-        Controls.Add(typecon = new UserControl(){Location = new(0, 1252), Size = new(1520, 82), BackgroundColor = BackgroundColor});
+        Controls.Add(titlecon = new UserControl(){Anchor = ObjectAnchor.Left | ObjectAnchor.Top | ObjectAnchor.Right, Size = new(1520, 80), BackgroundColor = BackgroundColor});
+        Controls.Add(typecon = new UserControl(){Anchor = ObjectAnchor.Left | ObjectAnchor.Bottom | ObjectAnchor.Right, Location = new(0, 1252), Size = new(1520, 82), BackgroundColor = BackgroundColor});
         titlecon.Controls.Add(title = new Label(){Location = new(27, 40)});
         titlecon.Controls.Add(desc = new Label(){Color = new(161,161,161,255), Location = new(title.Location.X + title.Size.X + 5, title.Location.Y)});
         Globals.Luski.MessageReceived += LuskiOnMessageReceived;
@@ -40,7 +38,8 @@ public class Chat : UserControl
             InsideColor = new(28, 28, 28, 255),
             BorderColor = Color4.DarkCyan,
             Location = new(15, 15),
-            Size = new(1490, 52)
+            Size = new(1490, 52),
+            Anchor = ObjectAnchor.All
         });
         tb.KeyPress += TbOnKeyPress;
     }
diff --git a/Luski/GUI/MainScreen/UI/ContentEmbed.cs b/Luski/GUI/MainScreen/UI/ContentEmbed.cs
index e515c66..0e0341c 100644
--- a/Luski/GUI/MainScreen/UI/ContentEmbed.cs
+++ b/Luski/GUI/MainScreen/UI/ContentEmbed.cs
@@ -38,8 +38,6 @@ public class ContentEmbed : UserControl
         Controls.Add(fileSizeLabel = new Label() {Text = fst, Location = new(64, 39)});
         Controls.Add(fileNameLabel = new Label() { Color = new(102/(float)255,227/(float)255,170/(float)255, 1), Text = file.Name, Location = new(64, 6)});
         fileNameLabel.Clicked += FileNameLabelOnClicked;
-        fileNameLabel.MouseEnter += FileNameLabelOnMouseEnter;
-        fileNameLabel.MouseLeave += FileNameLabelOnMouseLeave;
         byte[] tempp = Tools.GetResourceBytes(Assembly.GetExecutingAssembly(), "Luski.Resources.Textures.Download.png");
         Controls.Add(new Rectangle(new Texture(tempp)) { Location = new(8, 6), Size = new(50, 50)});
         int temp = fileNameLabel.Size.X + fileNameLabel.Location.X;
@@ -48,21 +46,8 @@ public class ContentEmbed : UserControl
         else Size = new(temp2 + 4, Size.Y);
     }
 
-    private Task FileNameLabelOnMouseLeave(IRenderObject arg)
-    {
-        Console.WriteLine("leave");
-        return Task.CompletedTask;
-    }
-
-    private Task FileNameLabelOnMouseEnter(IRenderObject arg)
-    {
-        Console.WriteLine("enter");
-        return Task.CompletedTask;
-    }
-
     private Task FileNameLabelOnClicked(IRenderObject arg)
     {
-        Console.WriteLine("Click");
         string dir = Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Downloads", "LuskiDownloads");
         if (!Directory.Exists(dir)) Directory.CreateDirectory(dir);
         Thread t = new(() => file.DownloadBytes(Path.Join(dir, file.Name), channel));
diff --git a/Luski/Luski.csproj b/Luski/Luski.csproj
index 446cc3d..1682987 100644
--- a/Luski/Luski.csproj
+++ b/Luski/Luski.csproj
@@ -8,7 +8,7 @@
     </PropertyGroup>
 
     <ItemGroup>
-      <PackageReference Include="GraphicsManager" Version="1.0.0-alpha99999999994" />
+      <PackageReference Include="GraphicsManager" Version="1.0.0-alpha99999999999999996" />
       <PackageReference Include="Luski.net" Version="1.0.0-alpha5" />
     </ItemGroup>