diff options
author | marcinzelent <zelent.marcin@protonmail.com> | 2017-10-10 11:21:01 +0200 |
---|---|---|
committer | marcinzelent <zelent.marcin@protonmail.com> | 2017-10-10 11:21:01 +0200 |
commit | a7b4fc7be6dac8c4ff9ae7924eb499d7e2ac1453 (patch) | |
tree | a9a560ccfa0fb990ed766d1a1d225115c16ffa55 | |
parent | 9ce162142924b6f3c8c977624ed2b2c1916f9be2 (diff) |
-rw-r--r-- | Client/Client.csproj | 61 | ||||
-rw-r--r-- | Client/MainWindow.cs | 35 | ||||
-rw-r--r-- | Client/Program.cs | 16 | ||||
-rw-r--r-- | Client/Properties/AssemblyInfo.cs | 26 | ||||
-rw-r--r-- | Client/TcpChatClient.cs | 69 | ||||
-rw-r--r-- | Client/gtk-gui/MainWindow.cs | 179 | ||||
-rw-r--r-- | Client/gtk-gui/generated.cs | 30 | ||||
-rw-r--r-- | Client/gtk-gui/gui.stetic | 187 | ||||
-rw-r--r-- | TcpChatX.sln | 2 | ||||
-rw-r--r-- | TcpChatX.userprefs | 1 | ||||
-rw-r--r-- | packages/Xwt.0.2.40/LICENSE.txt | 21 | ||||
-rw-r--r-- | packages/Xwt.0.2.40/README.markdown | 221 | ||||
-rw-r--r-- | packages/Xwt.0.2.40/Xwt.0.2.40.nupkg | bin | 177505 -> 0 bytes | |||
-rw-r--r-- | packages/Xwt.0.2.40/lib/net40/Xwt.dll | bin | 414720 -> 0 bytes | |||
-rw-r--r-- | packages/Xwt.Gtk.0.2.40/LICENSE.txt | 21 | ||||
-rw-r--r-- | packages/Xwt.Gtk.0.2.40/README.markdown | 221 | ||||
-rw-r--r-- | packages/Xwt.Gtk.0.2.40/Xwt.Gtk.0.2.40.nupkg | bin | 138439 -> 0 bytes | |||
-rw-r--r-- | packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.dll.config | 22 | ||||
-rw-r--r-- | packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.props | 10 | ||||
-rw-r--r-- | packages/Xwt.Gtk.0.2.40/lib/net40/Xwt.Gtk.dll | bin | 286720 -> 0 bytes |
20 files changed, 604 insertions, 518 deletions
diff --git a/Client/Client.csproj b/Client/Client.csproj new file mode 100644 index 0000000..f0d2993 --- /dev/null +++ b/Client/Client.csproj @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <ProjectGuid>{73154F68-BBEB-48FC-86C4-BB4909C1C7B4}</ProjectGuid>
+ <OutputType>WinExe</OutputType>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <RootNamespace>Client</RootNamespace>
+ <AssemblyName>Client</AssemblyName>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug</OutputPath>
+ <DefineConstants>DEBUG;</DefineConstants>
+ <WarningLevel>4</WarningLevel>
+ <PlatformTarget>x86</PlatformTarget>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release</OutputPath>
+ <WarningLevel>4</WarningLevel>
+ <PlatformTarget>x86</PlatformTarget>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="gtk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <SpecificVersion>False</SpecificVersion>
+ </Reference>
+ <Reference Include="gdk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <SpecificVersion>False</SpecificVersion>
+ </Reference>
+ <Reference Include="glib-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <SpecificVersion>False</SpecificVersion>
+ </Reference>
+ <Reference Include="glade-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <SpecificVersion>False</SpecificVersion>
+ </Reference>
+ <Reference Include="pango-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <SpecificVersion>False</SpecificVersion>
+ </Reference>
+ <Reference Include="atk-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f">
+ <SpecificVersion>False</SpecificVersion>
+ </Reference>
+ <Reference Include="Mono.Posix" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="gtk-gui\gui.stetic">
+ <LogicalName>gui.stetic</LogicalName>
+ </EmbeddedResource>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="gtk-gui\generated.cs" />
+ <Compile Include="MainWindow.cs" />
+ <Compile Include="gtk-gui\MainWindow.cs" />
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="TcpChatClient.cs" />
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file diff --git a/Client/MainWindow.cs b/Client/MainWindow.cs new file mode 100644 index 0000000..22564ac --- /dev/null +++ b/Client/MainWindow.cs @@ -0,0 +1,35 @@ +using System; +using Gtk; +using Client; + +public partial class MainWindow : Gtk.Window +{ + TcpChatClient tcpChat; + + public MainWindow() : base(Gtk.WindowType.Toplevel) + { + Build(); + tcpChat = new TcpChatClient(); + tcpChat.PropertyChanged += (sender, args) => + outputTv.Buffer.Text = tcpChat.Log; + } + + protected void OnDeleteEvent(object sender, DeleteEventArgs a) + { + Application.Quit(); + a.RetVal = true; + } + + protected async void Connect(object sender, EventArgs e) + { + await tcpChat.Connect(ipEntry.Text, Int32.Parse(portEntry.Text)); + tcpChat.SendMessage($"{usernameEntry.Text} connected."); + } + + protected void SendMessage(object sender, EventArgs e) + { + string message = $"{usernameEntry.Text}: {messageEntry.Text}"; + tcpChat.SendMessage(message); + messageEntry.Text = ""; + } +} diff --git a/Client/Program.cs b/Client/Program.cs new file mode 100644 index 0000000..22bf2bb --- /dev/null +++ b/Client/Program.cs @@ -0,0 +1,16 @@ +using System; +using Gtk; + +namespace Client +{ + class MainClass + { + public static void Main(string[] args) + { + Application.Init(); + MainWindow win = new MainWindow(); + win.Show(); + Application.Run(); + } + } +} diff --git a/Client/Properties/AssemblyInfo.cs b/Client/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..7614f1a --- /dev/null +++ b/Client/Properties/AssemblyInfo.cs @@ -0,0 +1,26 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle("Client")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("${AuthorCopyright}")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion("1.0.*")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] diff --git a/Client/TcpChatClient.cs b/Client/TcpChatClient.cs new file mode 100644 index 0000000..e9d4b54 --- /dev/null +++ b/Client/TcpChatClient.cs @@ -0,0 +1,69 @@ +using System; +using System.ComponentModel; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; + +namespace Client +{ + public class TcpChatClient : INotifyPropertyChanged + { + public int Port { get; set; } + + private string log; + public string Log + { + get + { + return log; + } + set + { + log = value; + OnPropertyChanged(); + } + } + public bool Status { get; set; } + private StreamReader sr; + private StreamWriter sw; + + public TcpChatClient() + { + } + + public async Task Connect(string ipAddress, int port) + { + TcpClient clientSocket = new TcpClient(ipAddress, port); + NetworkStream ns = clientSocket.GetStream(); + sr = new StreamReader(ns); + sw = new StreamWriter(ns); + sw.AutoFlush = true; + Status = true; + await ReceiveMessageAsync(); + } + + public void SendMessage(string message) + { + sw.WriteLine(message); + } + + private async Task ReceiveMessageAsync() + { + while (Status) + { + string message = await sr.ReadLineAsync(); + Log += $"{message}\n"; + } + } + + public event PropertyChangedEventHandler PropertyChanged; + + protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Client/gtk-gui/MainWindow.cs b/Client/gtk-gui/MainWindow.cs new file mode 100644 index 0000000..f123796 --- /dev/null +++ b/Client/gtk-gui/MainWindow.cs @@ -0,0 +1,179 @@ + +// This file has been generated by the GUI designer. Do not modify. + +public partial class MainWindow +{ + private global::Gtk.VBox vbox2; + + private global::Gtk.HBox hbox2; + + private global::Gtk.Label usernameLabel; + + private global::Gtk.Entry usernameEntry; + + private global::Gtk.Label ipLabel; + + private global::Gtk.Entry ipEntry; + + private global::Gtk.Label portLabel; + + private global::Gtk.Entry portEntry; + + private global::Gtk.Button connectButton; + + private global::Gtk.ScrolledWindow GtkScrolledWindow; + + private global::Gtk.TextView outputTv; + + private global::Gtk.HBox hbox1; + + private global::Gtk.Entry messageEntry; + + private global::Gtk.Button sendButton; + + protected virtual void Build() + { + global::Stetic.Gui.Initialize(this); + // Widget MainWindow + this.Name = "MainWindow"; + this.Title = global::Mono.Unix.Catalog.GetString("TcpChat Client"); + this.WindowPosition = ((global::Gtk.WindowPosition)(4)); + this.BorderWidth = ((uint)(10)); + // Container child MainWindow.Gtk.Container+ContainerChild + this.vbox2 = new global::Gtk.VBox(); + this.vbox2.Name = "vbox2"; + this.vbox2.Spacing = 6; + // Container child vbox2.Gtk.Box+BoxChild + this.hbox2 = new global::Gtk.HBox(); + this.hbox2.Name = "hbox2"; + this.hbox2.Spacing = 6; + // Container child hbox2.Gtk.Box+BoxChild + this.usernameLabel = new global::Gtk.Label(); + this.usernameLabel.Name = "usernameLabel"; + this.usernameLabel.LabelProp = global::Mono.Unix.Catalog.GetString("Username:"); + this.hbox2.Add(this.usernameLabel); + global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.hbox2[this.usernameLabel])); + w1.Position = 0; + w1.Expand = false; + w1.Fill = false; + // Container child hbox2.Gtk.Box+BoxChild + this.usernameEntry = new global::Gtk.Entry(); + this.usernameEntry.CanFocus = true; + this.usernameEntry.Name = "usernameEntry"; + this.usernameEntry.Text = global::Mono.Unix.Catalog.GetString("Marcin"); + this.usernameEntry.IsEditable = true; + this.usernameEntry.InvisibleChar = '•'; + this.hbox2.Add(this.usernameEntry); + global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.hbox2[this.usernameEntry])); + w2.Position = 1; + // Container child hbox2.Gtk.Box+BoxChild + this.ipLabel = new global::Gtk.Label(); + this.ipLabel.Name = "ipLabel"; + this.ipLabel.LabelProp = global::Mono.Unix.Catalog.GetString("IP address:"); + this.hbox2.Add(this.ipLabel); + global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.hbox2[this.ipLabel])); + w3.Position = 2; + w3.Expand = false; + w3.Fill = false; + // Container child hbox2.Gtk.Box+BoxChild + this.ipEntry = new global::Gtk.Entry(); + this.ipEntry.WidthRequest = 110; + this.ipEntry.CanFocus = true; + this.ipEntry.Name = "ipEntry"; + this.ipEntry.Text = global::Mono.Unix.Catalog.GetString("127.0.0.1"); + this.ipEntry.IsEditable = true; + this.ipEntry.InvisibleChar = '•'; + this.hbox2.Add(this.ipEntry); + global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.hbox2[this.ipEntry])); + w4.Position = 3; + // Container child hbox2.Gtk.Box+BoxChild + this.portLabel = new global::Gtk.Label(); + this.portLabel.Name = "portLabel"; + this.portLabel.LabelProp = global::Mono.Unix.Catalog.GetString("Port:"); + this.hbox2.Add(this.portLabel); + global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.hbox2[this.portLabel])); + w5.Position = 4; + w5.Expand = false; + w5.Fill = false; + // Container child hbox2.Gtk.Box+BoxChild + this.portEntry = new global::Gtk.Entry(); + this.portEntry.WidthRequest = 50; + this.portEntry.CanFocus = true; + this.portEntry.Name = "portEntry"; + this.portEntry.Text = global::Mono.Unix.Catalog.GetString("6789"); + this.portEntry.IsEditable = true; + this.portEntry.InvisibleChar = '•'; + this.hbox2.Add(this.portEntry); + global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.hbox2[this.portEntry])); + w6.Position = 5; + // Container child hbox2.Gtk.Box+BoxChild + this.connectButton = new global::Gtk.Button(); + this.connectButton.CanFocus = true; + this.connectButton.Name = "connectButton"; + this.connectButton.UseUnderline = true; + this.connectButton.Label = global::Mono.Unix.Catalog.GetString("Connect"); + this.hbox2.Add(this.connectButton); + global::Gtk.Box.BoxChild w7 = ((global::Gtk.Box.BoxChild)(this.hbox2[this.connectButton])); + w7.Position = 6; + w7.Expand = false; + w7.Fill = false; + this.vbox2.Add(this.hbox2); + global::Gtk.Box.BoxChild w8 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.hbox2])); + w8.Position = 0; + w8.Expand = false; + w8.Fill = false; + // Container child vbox2.Gtk.Box+BoxChild + this.GtkScrolledWindow = new global::Gtk.ScrolledWindow(); + this.GtkScrolledWindow.Name = "GtkScrolledWindow"; + this.GtkScrolledWindow.ShadowType = ((global::Gtk.ShadowType)(1)); + // Container child GtkScrolledWindow.Gtk.Container+ContainerChild + this.outputTv = new global::Gtk.TextView(); + this.outputTv.CanFocus = true; + this.outputTv.Name = "outputTv"; + this.outputTv.Editable = false; + this.GtkScrolledWindow.Add(this.outputTv); + this.vbox2.Add(this.GtkScrolledWindow); + global::Gtk.Box.BoxChild w10 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.GtkScrolledWindow])); + w10.Position = 1; + // Container child vbox2.Gtk.Box+BoxChild + this.hbox1 = new global::Gtk.HBox(); + this.hbox1.Name = "hbox1"; + this.hbox1.Spacing = 6; + // Container child hbox1.Gtk.Box+BoxChild + this.messageEntry = new global::Gtk.Entry(); + this.messageEntry.CanFocus = true; + this.messageEntry.Name = "messageEntry"; + this.messageEntry.IsEditable = true; + this.messageEntry.InvisibleChar = '•'; + this.hbox1.Add(this.messageEntry); + global::Gtk.Box.BoxChild w11 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.messageEntry])); + w11.Position = 0; + // Container child hbox1.Gtk.Box+BoxChild + this.sendButton = new global::Gtk.Button(); + this.sendButton.CanFocus = true; + this.sendButton.Name = "sendButton"; + this.sendButton.UseUnderline = true; + this.sendButton.Label = global::Mono.Unix.Catalog.GetString("Send"); + this.hbox1.Add(this.sendButton); + global::Gtk.Box.BoxChild w12 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.sendButton])); + w12.Position = 1; + w12.Expand = false; + w12.Fill = false; + this.vbox2.Add(this.hbox1); + global::Gtk.Box.BoxChild w13 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.hbox1])); + w13.Position = 2; + w13.Expand = false; + w13.Fill = false; + this.Add(this.vbox2); + if ((this.Child != null)) + { + this.Child.ShowAll(); + } + this.DefaultWidth = 594; + this.DefaultHeight = 412; + this.Show(); + this.DeleteEvent += new global::Gtk.DeleteEventHandler(this.OnDeleteEvent); + this.connectButton.Clicked += new global::System.EventHandler(this.Connect); + this.sendButton.Clicked += new global::System.EventHandler(this.SendMessage); + } +} diff --git a/Client/gtk-gui/generated.cs b/Client/gtk-gui/generated.cs new file mode 100644 index 0000000..4842e95 --- /dev/null +++ b/Client/gtk-gui/generated.cs @@ -0,0 +1,30 @@ + +// This file has been generated by the GUI designer. Do not modify. +namespace Stetic +{ + internal class Gui + { + private static bool initialized; + + internal static void Initialize(Gtk.Widget iconRenderer) + { + if ((Stetic.Gui.initialized == false)) + { + Stetic.Gui.initialized = true; + } + } + } + + internal class ActionGroups + { + public static Gtk.ActionGroup GetActionGroup(System.Type type) + { + return Stetic.ActionGroups.GetActionGroup(type.FullName); + } + + public static Gtk.ActionGroup GetActionGroup(string name) + { + return null; + } + } +} diff --git a/Client/gtk-gui/gui.stetic b/Client/gtk-gui/gui.stetic new file mode 100644 index 0000000..204b8b1 --- /dev/null +++ b/Client/gtk-gui/gui.stetic @@ -0,0 +1,187 @@ +<?xml version="1.0" encoding="utf-8"?> +<stetic-interface> + <configuration> + <images-root-path>..</images-root-path> + </configuration> + <import> + <widget-library name="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" /> + <widget-library name="../bin/Debug/Client.exe" internal="true" /> + </import> + <widget class="Gtk.Window" id="MainWindow" design-size="594 412"> + <property name="MemberName" /> + <property name="Title" translatable="yes">TcpChat Client</property> + <property name="WindowPosition">CenterOnParent</property> + <property name="BorderWidth">10</property> + <signal name="DeleteEvent" handler="OnDeleteEvent" /> + <child> + <widget class="Gtk.VBox" id="vbox2"> + <property name="MemberName" /> + <property name="Spacing">6</property> + <child> + <widget class="Gtk.HBox" id="hbox2"> + <property name="MemberName" /> + <property name="Spacing">6</property> + <child> + <widget class="Gtk.Label" id="usernameLabel"> + <property name="MemberName" /> + <property name="LabelProp" translatable="yes">Username:</property> + </widget> + <packing> + <property name="Position">0</property> + <property name="AutoSize">True</property> + <property name="Expand">False</property> + <property name="Fill">False</property> + </packing> + </child> + <child> + <widget class="Gtk.Entry" id="usernameEntry"> + <property name="MemberName" /> + <property name="CanFocus">True</property> + <property name="Text" translatable="yes">Marcin</property> + <property name="IsEditable">True</property> + <property name="InvisibleChar">•</property> + </widget> + <packing> + <property name="Position">1</property> + <property name="AutoSize">True</property> + </packing> + </child> + <child> + <widget class="Gtk.Label" id="ipLabel"> + <property name="MemberName" /> + <property name="LabelProp" translatable="yes">IP address:</property> + </widget> + <packing> + <property name="Position">2</property> + <property name="AutoSize">True</property> + <property name="Expand">False</property> + <property name="Fill">False</property> + </packing> + </child> + <child> + <widget class="Gtk.Entry" id="ipEntry"> + <property name="MemberName" /> + <property name="WidthRequest">110</property> + <property name="CanFocus">True</property> + <property name="Text" translatable="yes">127.0.0.1</property> + <property name="IsEditable">True</property> + <property name="InvisibleChar">•</property> + </widget> + <packing> + <property name="Position">3</property> + <property name="AutoSize">True</property> + </packing> + </child> + <child> + <widget class="Gtk.Label" id="portLabel"> + <property name="MemberName" /> + <property name="LabelProp" translatable="yes">Port:</property> + </widget> + <packing> + <property name="Position">4</property> + <property name="AutoSize">True</property> + <property name="Expand">False</property> + <property name="Fill">False</property> + </packing> + </child> + <child> + <widget class="Gtk.Entry" id="portEntry"> + <property name="MemberName" /> + <property name="WidthRequest">50</property> + <property name="CanFocus">True</property> + <property name="Text" translatable="yes">6789</property> + <property name="IsEditable">True</property> + <property name="InvisibleChar">•</property> + </widget> + <packing> + <property name="Position">5</property> + <property name="AutoSize">True</property> + </packing> + </child> + <child> + <widget class="Gtk.Button" id="connectButton"> + <property name="MemberName" /> + <property name="CanFocus">True</property> + <property name="Type">TextOnly</property> + <property name="Label" translatable="yes">Connect</property> + <property name="UseUnderline">True</property> + <signal name="Clicked" handler="Connect" /> + </widget> + <packing> + <property name="Position">6</property> + <property name="AutoSize">True</property> + <property name="Expand">False</property> + <property name="Fill">False</property> + </packing> + </child> + </widget> + <packing> + <property name="Position">0</property> + <property name="AutoSize">True</property> + <property name="Expand">False</property> + <property name="Fill">False</property> + </packing> + </child> + <child> + <widget class="Gtk.ScrolledWindow" id="GtkScrolledWindow"> + <property name="MemberName" /> + <property name="ShadowType">In</property> + <child> + <widget class="Gtk.TextView" id="outputTv"> + <property name="MemberName" /> + <property name="CanFocus">True</property> + <property name="ShowScrollbars">True</property> + <property name="Editable">False</property> + <property name="Text" translatable="yes" /> + </widget> + </child> + </widget> + <packing> + <property name="Position">1</property> + <property name="AutoSize">True</property> + </packing> + </child> + <child> + <widget class="Gtk.HBox" id="hbox1"> + <property name="MemberName" /> + <property name="Spacing">6</property> + <child> + <widget class="Gtk.Entry" id="messageEntry"> + <property name="MemberName" /> + <property name="CanFocus">True</property> + <property name="IsEditable">True</property> + <property name="InvisibleChar">•</property> + </widget> + <packing> + <property name="Position">0</property> + <property name="AutoSize">True</property> + </packing> + </child> + <child> + <widget class="Gtk.Button" id="sendButton"> + <property name="MemberName" /> + <property name="CanFocus">True</property> + <property name="Type">TextOnly</property> + <property name="Label" translatable="yes">Send</property> + <property name="UseUnderline">True</property> + <signal name="Clicked" handler="SendMessage" /> + </widget> + <packing> + <property name="Position">1</property> + <property name="AutoSize">True</property> + <property name="Expand">False</property> + <property name="Fill">False</property> + </packing> + </child> + </widget> + <packing> + <property name="Position">2</property> + <property name="AutoSize">True</property> + <property name="Expand">False</property> + <property name="Fill">False</property> + </packing> + </child> + </widget> + </child> + </widget> +</stetic-interface>
\ No newline at end of file diff --git a/TcpChatX.sln b/TcpChatX.sln index 66e9ea4..240b385 100644 --- a/TcpChatX.sln +++ b/TcpChatX.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server", "Server\Server.csproj", "{8CB98A13-75A8-42B1-9E03-4FA3ABCEAA3B}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Client", "..\TcpChatGui\Client\Client.csproj", "{73154F68-BBEB-48FC-86C4-BB4909C1C7B4}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Client", "Client\Client.csproj", "{73154F68-BBEB-48FC-86C4-BB4909C1C7B4}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/TcpChatX.userprefs b/TcpChatX.userprefs index c461aec..269ef23 100644 --- a/TcpChatX.userprefs +++ b/TcpChatX.userprefs @@ -17,5 +17,4 @@ </MonoDevelop.Ide.DebuggingService.Breakpoints> <MonoDevelop.Ide.DebuggingService.PinnedWatches /> <MultiItemStartupConfigurations /> - <MonoDevelop.Ide.ItemProperties.Client PreferredExecutionTarget="MonoDevelop.Default" /> </Properties>
\ No newline at end of file diff --git a/packages/Xwt.0.2.40/LICENSE.txt b/packages/Xwt.0.2.40/LICENSE.txt deleted file mode 100644 index 170a488..0000000 --- a/packages/Xwt.0.2.40/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Xamarin, Inc - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/Xwt.0.2.40/README.markdown b/packages/Xwt.0.2.40/README.markdown deleted file mode 100644 index 54de416..0000000 --- a/packages/Xwt.0.2.40/README.markdown +++ /dev/null @@ -1,221 +0,0 @@ -This document is an introduction to XWT, a cross-platform UI toolkit -for creating desktop applications. - -If you have any question about XWT or do you want to contribute -a discussion group for XWT is available here: - -http://groups.google.com/group/xwt-list - -Introduction -============ - -Xwt is a new .NET framework for creating desktop applications that run -on multiple platforms from the same codebase. Xwt works by exposing -one unified API across all environments that is mapped to a set of -native controls on each platform. - -This means that Xwt tends to focus on providing controls that will -work across all platforms. However, that doesn't mean that the -functionality available is a common denominator of all platforms. -If a specific feature or widget is not available in the -native framework of a platform, it will be emulated or implemented -as a set of native widgets. - -Xwt can be used as a standalone framework to power the entire application -or it can be embedded into an existing host. This allows developers -to develop their "shell" using native components (for example a Ribbon -on Windows, toolbars on Linux) and use Xwt for specific bits of the -application, like dialog boxes or cross platform surfaces. - -Xwt works by creating an engine at runtime that will map to the -underlying platform. These are the engines that are supported on -each platform: - -* Windows: WPF engine, Gtk engine (using Gtk#) -* MacOS X: Cocoa engine (using Xamarin.Mac) and Gtk engine (using Gtk#) -* Linux: Gtk engine (using Gtk#) - -This means for example that you can write code for Xwt on Windows that -can be hosted on an existing WPF application (like Visual Studio) or -an existing Gtk# application (like MonoDevelop). Or on Mac, you can -host Xwt on an existing Cocoa/Xamarin.Mac application or you can host it -in our own MonoDevelop IDE. - -Getting Started ---------------- - -Open the Xwt.sln with MonoDevelop (or VisualStudio on Windows) and -build the solution. You should end up with the libraries that you -can use in your project and a couple of sample applications. - -Using Xwt in your app ---------------------- - -Based on your platform and the backend that you want to use, you need -to pick the libraries that you want to use in your project. - -* Windows+WPF: Xwt.dll + Xwt.WPF.dll (requires WPF) -* Windows+Gtk: Xwt.dll + Xwt.Gtk.dll (requires Gtk#) -* Linux+Gtk: Xwt.dll + Xwt.Gtk.dll (requires Gtk#) -* Mac+Gtk: Xwt.dll + Xwt.Gtk.dll (requires Gtk#) -* Mac+Cocoa: Xwt.dll + Xwt.XamMac.dll (requires Xamarin.Mac.dll) - -Hello World ------------ - -To write your first application, create an empty .NET project in your -favorite language in MonoDevelop or Visual Studio and reference the -Xwt.dll library. This is the only library that you need to reference -at compile time. - -This is the simplest Xwt program you can write: - - using System; - using Xwt; - - class XwtDemo { - [STAThread] - static void Main () - { - Application.Initialize (ToolkitType.Gtk); - var mainWindow = new Window (){ - Title = "Xwt Demo Application", - Width = 500, - Height = 400 - }; - mainWindow.Show (); - Application.Run (); - mainWindow.Dispose (); - } - } - -You use the Application.Initialize() method to get the backend -initialized. In this example we are using the Gtk backend. If you -want to use another backend, just change the parameter provided -to the Initialize() method. Also make sure the appropiate backend -DLL is available in the application directory. - -Then we create an instance of the Window class, this class exposes two -interesting properties, MainMenu which can be used to set the Window's -main menu and "Content" which is of type "Widget" and allows you to -add some content to the window. - -Finally, the Application.Run method is called to get the UI events -processing going. - -Widget Class Hierarchy -====================== - -You will be using widgets to create the contents for your -application. Xwt.Widget is the abstract base class from which all -the other components are created. - -Some Widgets can contain other widgets, these are container widgets, -and in Xwt those are Canvas, Paned, HBox, VBox and Table. The first -two implement a box layout system, while the last one implements a -Table layout that allows widgets to be attached to different -anchor-points in a grid. - -The layout system uses an auto-sizing system similar to what is -availble in Gtk and HTML allowing the user interface to grow or shrink -based on the contents of the childrens on it. - -* XwtComponent - * Menu - * MenuItem - * Widget - * Box (Container) - * HBox (Container) - * VBox (Container) - * Button - * MenuButton - * ToggleButton - * Calendar - * Canvas (Container) - * Checkbox - * ComboBox - * Frame - * ImageView - * Label - * ListView - * NoteBook - * Paned (Container) - * HPaned (Container) - * VPaned (Container) - * ProgressBar - * ScrollView - * Separator - * VSeparator - * HSeparator - * Table (Container) - * TextEntry - * TreeView - * WindowFrame - * Window - * Dialog - -For example, the following attaches various labels and data entries to -a Table: - - t = new Table (); - t.Attach (new Label ("One:"), 0, 1, 0, 1); - t.Attach (new TextEntry (), 1, 2, 0, 1); - t.Attach (new Label ("Two:"), 0, 1, 1, 2); - t.Attach (new TextEntry (), 1, 2, 1, 2); - t.Attach (new Label ("Three:"), 0, 1, 2, 3); - t.Attach (new TextEntry (), 1, 2, 2, 3); - - -The Application Class -===================== - -The Application class is a static class that provides services to run -your application. - -Initialization --------------- - -The Application.Initialize API will instruct Xwt to initialize its -binding to the native toolkit. You can pass an optional parameter to -this method that specifies the full type name to load as the backend. - -For example, you can force the initialization of the backend to be -specifically Gtk+ or specifically Xamarin.Mac based on MacOS. This is -currently done like this: - - Application.Initialize ("Xwt.GtkBackend.GtkEngine, Xwt.Gtk, Version=1.0.0.0"); - -or: - - Application.Initialize ("Xwt.Mac.MacEngine, Xwt.XamMac, Version=1.0.0.0"); - -As you saw from the Hello World sample, toplevel windows are created -by creating an instance of the "Xwt.Window" class. This class -exposes a couple of properties that you can use to spice it up. The -MainMenu property is used to control the contents of the application -menus while the "Content" property is used to hold a Widget. - -Timers ------- - -The Application.TimeoutInvoke method takes a timespan and a Func<bool> -action method and invokes that method in the main user interface -loop. - -If the provided function returns true, then the timer is restarted, -otherwise the timer ends. - -Background Threads ------------------- - -It is very common to perform tasks in the background and for those -tasks in the background to later update the user interface. The Xwt -API is not thread safe, which means that calls to the Xwt API must -only be done from the main user interface thread. - -This is a trait from the underlying toolkits used by Xwt. - -If you want a background thread to run some code on the main loop, you -use the Application.Invoke (Action action) method. The provided -"action" method is guaranteed to run on the main loop. - diff --git a/packages/Xwt.0.2.40/Xwt.0.2.40.nupkg b/packages/Xwt.0.2.40/Xwt.0.2.40.nupkg Binary files differdeleted file mode 100644 index f428a4c..0000000 --- a/packages/Xwt.0.2.40/Xwt.0.2.40.nupkg +++ /dev/null diff --git a/packages/Xwt.0.2.40/lib/net40/Xwt.dll b/packages/Xwt.0.2.40/lib/net40/Xwt.dll Binary files differdeleted file mode 100644 index c50a574..0000000 --- a/packages/Xwt.0.2.40/lib/net40/Xwt.dll +++ /dev/null diff --git a/packages/Xwt.Gtk.0.2.40/LICENSE.txt b/packages/Xwt.Gtk.0.2.40/LICENSE.txt deleted file mode 100644 index 170a488..0000000 --- a/packages/Xwt.Gtk.0.2.40/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Xamarin, Inc - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/packages/Xwt.Gtk.0.2.40/README.markdown b/packages/Xwt.Gtk.0.2.40/README.markdown deleted file mode 100644 index 54de416..0000000 --- a/packages/Xwt.Gtk.0.2.40/README.markdown +++ /dev/null @@ -1,221 +0,0 @@ -This document is an introduction to XWT, a cross-platform UI toolkit -for creating desktop applications. - -If you have any question about XWT or do you want to contribute -a discussion group for XWT is available here: - -http://groups.google.com/group/xwt-list - -Introduction -============ - -Xwt is a new .NET framework for creating desktop applications that run -on multiple platforms from the same codebase. Xwt works by exposing -one unified API across all environments that is mapped to a set of -native controls on each platform. - -This means that Xwt tends to focus on providing controls that will -work across all platforms. However, that doesn't mean that the -functionality available is a common denominator of all platforms. -If a specific feature or widget is not available in the -native framework of a platform, it will be emulated or implemented -as a set of native widgets. - -Xwt can be used as a standalone framework to power the entire application -or it can be embedded into an existing host. This allows developers -to develop their "shell" using native components (for example a Ribbon -on Windows, toolbars on Linux) and use Xwt for specific bits of the -application, like dialog boxes or cross platform surfaces. - -Xwt works by creating an engine at runtime that will map to the -underlying platform. These are the engines that are supported on -each platform: - -* Windows: WPF engine, Gtk engine (using Gtk#) -* MacOS X: Cocoa engine (using Xamarin.Mac) and Gtk engine (using Gtk#) -* Linux: Gtk engine (using Gtk#) - -This means for example that you can write code for Xwt on Windows that -can be hosted on an existing WPF application (like Visual Studio) or -an existing Gtk# application (like MonoDevelop). Or on Mac, you can -host Xwt on an existing Cocoa/Xamarin.Mac application or you can host it -in our own MonoDevelop IDE. - -Getting Started ---------------- - -Open the Xwt.sln with MonoDevelop (or VisualStudio on Windows) and -build the solution. You should end up with the libraries that you -can use in your project and a couple of sample applications. - -Using Xwt in your app ---------------------- - -Based on your platform and the backend that you want to use, you need -to pick the libraries that you want to use in your project. - -* Windows+WPF: Xwt.dll + Xwt.WPF.dll (requires WPF) -* Windows+Gtk: Xwt.dll + Xwt.Gtk.dll (requires Gtk#) -* Linux+Gtk: Xwt.dll + Xwt.Gtk.dll (requires Gtk#) -* Mac+Gtk: Xwt.dll + Xwt.Gtk.dll (requires Gtk#) -* Mac+Cocoa: Xwt.dll + Xwt.XamMac.dll (requires Xamarin.Mac.dll) - -Hello World ------------ - -To write your first application, create an empty .NET project in your -favorite language in MonoDevelop or Visual Studio and reference the -Xwt.dll library. This is the only library that you need to reference -at compile time. - -This is the simplest Xwt program you can write: - - using System; - using Xwt; - - class XwtDemo { - [STAThread] - static void Main () - { - Application.Initialize (ToolkitType.Gtk); - var mainWindow = new Window (){ - Title = "Xwt Demo Application", - Width = 500, - Height = 400 - }; - mainWindow.Show (); - Application.Run (); - mainWindow.Dispose (); - } - } - -You use the Application.Initialize() method to get the backend -initialized. In this example we are using the Gtk backend. If you -want to use another backend, just change the parameter provided -to the Initialize() method. Also make sure the appropiate backend -DLL is available in the application directory. - -Then we create an instance of the Window class, this class exposes two -interesting properties, MainMenu which can be used to set the Window's -main menu and "Content" which is of type "Widget" and allows you to -add some content to the window. - -Finally, the Application.Run method is called to get the UI events -processing going. - -Widget Class Hierarchy -====================== - -You will be using widgets to create the contents for your -application. Xwt.Widget is the abstract base class from which all -the other components are created. - -Some Widgets can contain other widgets, these are container widgets, -and in Xwt those are Canvas, Paned, HBox, VBox and Table. The first -two implement a box layout system, while the last one implements a -Table layout that allows widgets to be attached to different -anchor-points in a grid. - -The layout system uses an auto-sizing system similar to what is -availble in Gtk and HTML allowing the user interface to grow or shrink -based on the contents of the childrens on it. - -* XwtComponent - * Menu - * MenuItem - * Widget - * Box (Container) - * HBox (Container) - * VBox (Container) - * Button - * MenuButton - * ToggleButton - * Calendar - * Canvas (Container) - * Checkbox - * ComboBox - * Frame - * ImageView - * Label - * ListView - * NoteBook - * Paned (Container) - * HPaned (Container) - * VPaned (Container) - * ProgressBar - * ScrollView - * Separator - * VSeparator - * HSeparator - * Table (Container) - * TextEntry - * TreeView - * WindowFrame - * Window - * Dialog - -For example, the following attaches various labels and data entries to -a Table: - - t = new Table (); - t.Attach (new Label ("One:"), 0, 1, 0, 1); - t.Attach (new TextEntry (), 1, 2, 0, 1); - t.Attach (new Label ("Two:"), 0, 1, 1, 2); - t.Attach (new TextEntry (), 1, 2, 1, 2); - t.Attach (new Label ("Three:"), 0, 1, 2, 3); - t.Attach (new TextEntry (), 1, 2, 2, 3); - - -The Application Class -===================== - -The Application class is a static class that provides services to run -your application. - -Initialization --------------- - -The Application.Initialize API will instruct Xwt to initialize its -binding to the native toolkit. You can pass an optional parameter to -this method that specifies the full type name to load as the backend. - -For example, you can force the initialization of the backend to be -specifically Gtk+ or specifically Xamarin.Mac based on MacOS. This is -currently done like this: - - Application.Initialize ("Xwt.GtkBackend.GtkEngine, Xwt.Gtk, Version=1.0.0.0"); - -or: - - Application.Initialize ("Xwt.Mac.MacEngine, Xwt.XamMac, Version=1.0.0.0"); - -As you saw from the Hello World sample, toplevel windows are created -by creating an instance of the "Xwt.Window" class. This class -exposes a couple of properties that you can use to spice it up. The -MainMenu property is used to control the contents of the application -menus while the "Content" property is used to hold a Widget. - -Timers ------- - -The Application.TimeoutInvoke method takes a timespan and a Func<bool> -action method and invokes that method in the main user interface -loop. - -If the provided function returns true, then the timer is restarted, -otherwise the timer ends. - -Background Threads ------------------- - -It is very common to perform tasks in the background and for those -tasks in the background to later update the user interface. The Xwt -API is not thread safe, which means that calls to the Xwt API must -only be done from the main user interface thread. - -This is a trait from the underlying toolkits used by Xwt. - -If you want a background thread to run some code on the main loop, you -use the Application.Invoke (Action action) method. The provided -"action" method is guaranteed to run on the main loop. - diff --git a/packages/Xwt.Gtk.0.2.40/Xwt.Gtk.0.2.40.nupkg b/packages/Xwt.Gtk.0.2.40/Xwt.Gtk.0.2.40.nupkg Binary files differdeleted file mode 100644 index 82046f5..0000000 --- a/packages/Xwt.Gtk.0.2.40/Xwt.Gtk.0.2.40.nupkg +++ /dev/null diff --git a/packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.dll.config b/packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.dll.config deleted file mode 100644 index f1630bb..0000000 --- a/packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.dll.config +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<configuration> - <dllmap os="!windows,osx" dll="libglib-2.0-0.dll" target="libglib-2.0.so.0"/> - <dllmap os="!windows,osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.so.0"/> - <dllmap os="!windows,osx" dll="libatk-1.0-0.dll" target="libatk-1.0.so.0"/> - <dllmap os="!windows,osx" dll="libgtk-win32-2.0-0.dll" target="libgtk-x11-2.0.so.0"/> - <dllmap os="!windows,osx" dll="libgdk-win32-2.0-0.dll" target="libgdk-x11-2.0.so.0"/> - <dllmap os="!windows,osx" dll="libpango-1.0-0.dll" target="libpango-1.0.so.0"/> - <dllmap os="!windows,osx" dll="libpangocairo-1.0-0.dll" target="libpangocairo-1.0.so.0"/> - <dllmap os="!windows,osx" dll="libwebkitgtk-1.0-0.dll" target="libwebkitgtk-1.0.so.0"/> - <dllmap os="!windows,osx" dll="fontconfig" target="libfontconfig.so.1"/> - - <dllmap os="osx" dll="libglib-2.0-0.dll" target="libglib-2.0.0.dylib"/> - <dllmap os="osx" dll="libgobject-2.0-0.dll" target="libgobject-2.0.0.dylib"/> - <dllmap os="osx" dll="libatk-1.0-0.dll" target="libatk-1.0.0.dylib"/> - <dllmap os="osx" dll="libgtk-win32-2.0-0.dll" target="libgtk-quartz-2.0.0.dylib"/> - <dllmap os="osx" dll="libgdk-win32-2.0-0.dll" target="libgdk-quartz-2.0.0.dylib"/> - <dllmap os="osx" dll="libpango-1.0-0.dll" target="libpango-1.0.0.dylib"/> - <dllmap os="osx" dll="libpangocairo-1.0-0.dll" target="libpangocairo-1.0.0.dylib"/> - <dllmap os="osx" dll="libwebkitgtk-1.0-0.dll" target="libwebkitgtk-1.0.0.dylib"/> - <dllmap os="osx" dll="fontconfig" target="libfontconfig.1.dylib"/> -</configuration> diff --git a/packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.props b/packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.props deleted file mode 100644 index f66dc3a..0000000 --- a/packages/Xwt.Gtk.0.2.40/build/Xwt.Gtk.props +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <None Include="$(MSBuildThisFileDirectory)Xwt.Gtk.dll.config"> - <Link>Xwt.Gtk.dll.config</Link> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - <Visible>False</Visible> - </None> - </ItemGroup> -</Project>
\ No newline at end of file diff --git a/packages/Xwt.Gtk.0.2.40/lib/net40/Xwt.Gtk.dll b/packages/Xwt.Gtk.0.2.40/lib/net40/Xwt.Gtk.dll Binary files differdeleted file mode 100644 index b80892c..0000000 --- a/packages/Xwt.Gtk.0.2.40/lib/net40/Xwt.Gtk.dll +++ /dev/null |