Separate DirectConnectScreen into DirectConnectScreen and DirectConnectView.

This commit is contained in:
UnknownShadow200 2016-05-09 16:10:46 +10:00
parent d22b9a4527
commit cc57a1960a
9 changed files with 153 additions and 98 deletions

View File

@ -11,51 +11,38 @@ namespace Launcher {
public sealed class DirectConnectScreen : LauncherInputScreen { public sealed class DirectConnectScreen : LauncherInputScreen {
Font booleanFont; Font booleanFont;
const int skinsIndex = 7; DirectConnectView view;
public DirectConnectScreen( LauncherWindow game ) : base( game, true ) { public DirectConnectScreen( LauncherWindow game ) : base( game, true ) {
booleanFont = new Font( game.FontName, 22, FontStyle.Regular ); booleanFont = new Font( game.FontName, 22, FontStyle.Regular );
enterIndex = 3; enterIndex = 3;
widgets = new LauncherWidget[8]; view = new DirectConnectView( game );
widgets = view.widgets;
} }
public override void Init() { public override void Init() {
base.Init(); base.Init();
MakeWidgets(); view.Init();
RedrawAllButtonBackgrounds(); SetWidgetHandlers();
Resize();
using( drawer ) {
drawer.SetBitmap( game.Framebuffer );
RedrawAll();
LoadSavedInfo();
}
Dirty = true;
} }
public override void Resize() { public override void Resize() {
MakeWidgets(); view.DrawAll();
RedrawAllButtonBackgrounds();
using( drawer ) {
drawer.SetBitmap( game.Framebuffer );
RedrawAll();
}
Dirty = true; Dirty = true;
} }
void MakeWidgets() { void SetWidgetHandlers() {
widgetIndex = 0; widgets[view.backIndex].OnClick =
(x, y) => game.SetScreen( new MainScreen( game ) );
widgets[view.connectIndex].OnClick = StartClient;
widgets[view.ccSkinsIndex].OnClick = UseClassicubeSkinsClick;
MakeInput( Get(), 330, Anchor.Centre, false, 0, -100, 32, "&7Username.." ); for( int i = 0; i < widgets.Length; i++ ) {
MakeInput( Get(), 330, Anchor.Centre, false, 0, -50, 64, "&7IP address:Port number.." ); if( widgets[i] == null || !(widgets[i] is LauncherInputWidget) )
MakeInput( Get(), 330, Anchor.Centre, false, 0, 0, 32, "&7Mppass.." ); continue;
widgets[i].OnClick = InputClick;
MakeButtonAt( "Connect", 110, 35, titleFont, Anchor.Centre, -110, 50, StartClient ); }
MakeButtonAt( "Back", 80, 35, titleFont, Anchor.Centre, LoadSavedInfo();
125, 50, (x, y) => game.SetScreen( new MainScreen( game ) ) );
MakeLabelAt( "", titleFont, Anchor.Centre, Anchor.Centre, 0, 100 );
MakeLabelAt( "Use classicube.net for skins", inputFont, Anchor.Centre, Anchor.Centre, 30, 130 );
MakeBooleanAt( Anchor.Centre, Anchor.Centre, booleanFont, true,
30, 30, -110, 130, UseClassicubeSkinsClick );
} }
void SetStatus( string text ) { void SetStatus( string text ) {
@ -73,18 +60,13 @@ namespace Launcher {
void UseClassicubeSkinsClick( int mouseX, int mouseY ) { void UseClassicubeSkinsClick( int mouseX, int mouseY ) {
using( drawer ) { using( drawer ) {
game.Drawer.SetBitmap( game.Framebuffer ); game.Drawer.SetBitmap( game.Framebuffer );
LauncherBooleanWidget widget = (LauncherBooleanWidget)widgets[skinsIndex]; LauncherBoolWidget widget = (LauncherBoolWidget)widgets[view.ccSkinsIndex];
SetBool( !widget.Value ); widget.Value = !widget.Value;
widget.Redraw( drawer );
Dirty = true;
} }
} }
void SetBool( bool value ) {
LauncherBooleanWidget widget = (LauncherBooleanWidget)widgets[skinsIndex];
widget.Value = value;
widget.Redraw( game.Drawer );
Dirty = true;
}
public override void Dispose() { public override void Dispose() {
StoreFields(); StoreFields();
base.Dispose(); base.Dispose();
@ -95,9 +77,9 @@ namespace Launcher {
Dictionary<string, object> metadata; Dictionary<string, object> metadata;
// restore what user last typed into the various fields // restore what user last typed into the various fields
if( game.ScreenMetadata.TryGetValue( "screen-DC", out metadata ) ) { if( game.ScreenMetadata.TryGetValue( "screen-DC", out metadata ) ) {
Set( 0, (string)metadata["user"] ); SetText( 0, (string)metadata["user"] );
Set( 1, (string)metadata["address"] ); SetText( 1, (string)metadata["address"] );
Set( 2, (string)metadata["mppass"] ); SetText( 2, (string)metadata["mppass"] );
SetBool( (bool)metadata["skins"] ); SetBool( (bool)metadata["skins"] );
} else { } else {
LoadFromOptions(); LoadFromOptions();
@ -114,12 +96,11 @@ namespace Launcher {
metadata["user"] = Get( 0 ); metadata["user"] = Get( 0 );
metadata["address"] = Get( 1 ); metadata["address"] = Get( 1 );
metadata["mppass"] = Get( 2 ); metadata["mppass"] = Get( 2 );
metadata["skins"] = ((LauncherBooleanWidget)widgets[skinsIndex]).Value; metadata["skins"] = ((LauncherBoolWidget)widgets[view.ccSkinsIndex]).Value;
} }
void LoadFromOptions() { void LoadFromOptions() {
if( !Options.Load() ) if( !Options.Load() ) return;
return;
string user = Options.Get( "launcher-dc-username" ) ?? ""; string user = Options.Get( "launcher-dc-username" ) ?? "";
string ip = Options.Get( "launcher-dc-ip" ) ?? "127.0.0.1"; string ip = Options.Get( "launcher-dc-ip" ) ?? "127.0.0.1";
@ -134,9 +115,9 @@ namespace Launcher {
string mppass = Options.Get( "launcher-dc-mppass" ); string mppass = Options.Get( "launcher-dc-mppass" );
mppass = Secure.Decode( mppass, user ); mppass = Secure.Decode( mppass, user );
Set( 0, user ); SetText( 0, user );
Set( 1, ip + ":" + port ); SetText( 1, ip + ":" + port );
Set( 2, mppass ); SetText( 2, mppass );
SetBool( ccSkins ); SetBool( ccSkins );
} }
@ -152,6 +133,14 @@ namespace Launcher {
Options.Save(); Options.Save();
} }
void SetText( int index, string text ) {
((LauncherInputWidget)widgets[index]).SetDrawData( drawer, text );
}
void SetBool( bool value ) {
((LauncherBoolWidget)widgets[view.ccSkinsIndex]).Value = value;
}
void StartClient( int mouseX, int mouseY ) { void StartClient( int mouseX, int mouseY ) {
string address = Get( 1 ); string address = Get( 1 );
int index = address.LastIndexOf( ':' ); int index = address.LastIndexOf( ':' );
@ -164,7 +153,7 @@ namespace Launcher {
ClientStartData data = GetStartData( Get( 0 ), Get( 2 ), ipPart, portPart ); ClientStartData data = GetStartData( Get( 0 ), Get( 2 ), ipPart, portPart );
if( data == null ) return; if( data == null ) return;
bool ccSkins = ((LauncherBooleanWidget)widgets[skinsIndex]).Value; bool ccSkins = ((LauncherBoolWidget)widgets[view.ccSkinsIndex]).Value;
SaveToOptions( data, ccSkins ); SaveToOptions( data, ccSkins );
Client.Start( data, ccSkins, ref game.ShouldExit ); Client.Start( data, ccSkins, ref game.ShouldExit );
} }

View File

@ -74,7 +74,7 @@ namespace Launcher {
if( signingIn ) return; if( signingIn ) return;
UpdateSignInInfo( Get( 0 ), Get( 1 ) ); UpdateSignInInfo( Get( 0 ), Get( 1 ) );
LauncherBooleanWidget booleanWidget = widgets[skipSSLIndex] as LauncherBooleanWidget; LauncherBoolWidget booleanWidget = widgets[skipSSLIndex] as LauncherBoolWidget;
if( booleanWidget != null && booleanWidget.Value ) { if( booleanWidget != null && booleanWidget.Value ) {
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
} else { } else {
@ -137,13 +137,13 @@ namespace Launcher {
void SSLSkipValidationClick( int mouseX, int mouseY ) { void SSLSkipValidationClick( int mouseX, int mouseY ) {
using( drawer ) { using( drawer ) {
drawer.SetBitmap( game.Framebuffer ); drawer.SetBitmap( game.Framebuffer );
LauncherBooleanWidget widget = (LauncherBooleanWidget)widgets[skipSSLIndex]; LauncherBoolWidget widget = (LauncherBoolWidget)widgets[skipSSLIndex];
SetBool( !widget.Value ); SetBool( !widget.Value );
} }
} }
void SetBool( bool value ) { void SetBool( bool value ) {
LauncherBooleanWidget widget = (LauncherBooleanWidget)widgets[skipSSLIndex]; LauncherBoolWidget widget = (LauncherBoolWidget)widgets[skipSSLIndex];
widget.Value = value; widget.Value = value;
widget.Redraw( game.Drawer ); widget.Redraw( game.Drawer );
Dirty = true; Dirty = true;

View File

@ -21,7 +21,6 @@ namespace Launcher {
drawer.SetBitmap( game.Framebuffer ); drawer.SetBitmap( game.Framebuffer );
RedrawAll(); RedrawAll();
} }
Dirty = true;
} }
public override void Init() { public override void Init() {

View File

@ -0,0 +1,68 @@
// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Net;
using ClassicalSharp;
namespace Launcher {
public sealed class DirectConnectView : IView {
internal int connectIndex, backIndex, ccSkinsIndex;
Font booleanFont;
public DirectConnectView( LauncherWindow game ) : base( game ) {
widgets = new LauncherWidget[8];
}
public override void Init() {
booleanFont = new Font( game.FontName, 22, FontStyle.Regular );
titleFont = new Font( game.FontName, 15, FontStyle.Bold );
inputFont = new Font( game.FontName, 14, FontStyle.Regular );
inputHintFont = new Font( game.FontName, 12, FontStyle.Italic );
MakeWidgets();
}
public override void DrawAll() {
MakeWidgets();
RedrawAllButtonBackgrounds();
using( drawer ) {
drawer.SetBitmap( game.Framebuffer );
RedrawAll();
}
}
void MakeWidgets() {
widgetIndex = 0;
MakeInput( Get( 0 ), 330, Anchor.Centre, Anchor.Centre,
false, 0, -100, 32, "&7Username.." );
MakeInput( Get( 1 ), 330, Anchor.Centre, Anchor.Centre,
false, 0, -50, 64, "&7IP address:Port number.." );
MakeInput( Get( 2 ), 330, Anchor.Centre, Anchor.Centre,
false, 0, 0, 32, "&7Mppass.." );
connectIndex = widgetIndex;
MakeButtonAt( "Connect", 110, 35, titleFont, Anchor.Centre, -110, 50 );
backIndex = widgetIndex;
MakeButtonAt( "Back", 80, 35, titleFont, Anchor.Centre, 125, 50 );
MakeLabelAt( "", titleFont, Anchor.Centre, Anchor.Centre, 0, 100 );
MakeLabelAt( "Use classicube.net for skins", inputFont, Anchor.Centre, Anchor.Centre, 30, 130 );
ccSkinsIndex = widgetIndex;
MakeBooleanAt( Anchor.Centre, Anchor.Centre, booleanFont, true, 30, 30, -110, 130 );
}
string Get( int index ) {
LauncherWidget widget = widgets[index];
return widget == null ? "" : widget.Text;
}
public override void Dispose() {
base.Dispose();
booleanFont.Dispose();
}
}
}

View File

@ -10,7 +10,6 @@ namespace Launcher {
protected internal LauncherWindow game; protected internal LauncherWindow game;
protected internal IDrawer2D drawer; protected internal IDrawer2D drawer;
public bool Dirty;
protected int widgetIndex; protected int widgetIndex;
internal LauncherWidget[] widgets; internal LauncherWidget[] widgets;
protected Font titleFont, inputFont, inputHintFont; protected Font titleFont, inputFont, inputHintFont;

View File

@ -35,7 +35,6 @@ namespace Launcher {
game.Drawer.DrawRect( col, game.Width / 2 - 160, middle - 100, 320, 1 ); game.Drawer.DrawRect( col, game.Width / 2 - 160, middle - 100, 320, 1 );
game.Drawer.DrawRect( col, game.Width / 2 - 160, middle - 10, 320, 1 ); game.Drawer.DrawRect( col, game.Width / 2 - 160, middle - 10, 320, 1 );
} }
Dirty = true;
} }
const string dateFormat = "dd-MM-yyyy HH:mm"; const string dateFormat = "dd-MM-yyyy HH:mm";

View File

@ -6,13 +6,13 @@ using ClassicalSharp;
namespace Launcher { namespace Launcher {
/// <summary> Widget that represents text can have modified by the user. </summary> /// <summary> Widget that represents text can have modified by the user. </summary>
public sealed class LauncherBooleanWidget : LauncherWidget { public sealed class LauncherBoolWidget : LauncherWidget {
public int BoxWidth, BoxHeight; public int BoxWidth, BoxHeight;
public bool Value; public bool Value;
Font font; Font font;
public LauncherBooleanWidget( LauncherWindow window, Font font, int width, int height ) : base( window ) { public LauncherBoolWidget( LauncherWindow window, Font font, int width, int height ) : base( window ) {
BoxWidth = width; BoxHeight = height; BoxWidth = width; BoxHeight = height;
Width = width; Height = height; Width = width; Height = height;
this.font = font; this.font = font;

View File

@ -43,11 +43,11 @@ namespace Launcher {
public static void MakeBooleanAt( LauncherWindow game, LauncherWidget[] widgets, ref int widgetIndex, public static void MakeBooleanAt( LauncherWindow game, LauncherWidget[] widgets, ref int widgetIndex,
Anchor horAnchor, Anchor verAnchor, Font font, bool initValue, Anchor horAnchor, Anchor verAnchor, Font font, bool initValue,
int width, int height, int x, int y, Action<int, int> onClick ) { int width, int height, int x, int y, Action<int, int> onClick ) {
LauncherBooleanWidget widget; LauncherBoolWidget widget;
if( widgets[widgetIndex] != null ) { if( widgets[widgetIndex] != null ) {
widget = (LauncherBooleanWidget)widgets[widgetIndex]; widget = (LauncherBoolWidget)widgets[widgetIndex];
} else { } else {
widget = new LauncherBooleanWidget( game, font, width, height ); widget = new LauncherBoolWidget( game, font, width, height );
widget.Value = initValue; widget.Value = initValue;
widget.OnClick = onClick; widget.OnClick = onClick;
widgets[widgetIndex] = widget; widgets[widgetIndex] = widget;

View File

@ -75,9 +75,10 @@
<Compile Include="Gui\TableWidget\LauncherTableWidget.Input.cs" /> <Compile Include="Gui\TableWidget\LauncherTableWidget.Input.cs" />
<Compile Include="Gui\Views\ChooseModeView.cs" /> <Compile Include="Gui\Views\ChooseModeView.cs" />
<Compile Include="Gui\Views\ColoursView.cs" /> <Compile Include="Gui\Views\ColoursView.cs" />
<Compile Include="Gui\Views\DirectConnectView.cs" />
<Compile Include="Gui\Views\IView.cs" /> <Compile Include="Gui\Views\IView.cs" />
<Compile Include="Gui\Views\UpdatesView.cs" /> <Compile Include="Gui\Views\UpdatesView.cs" />
<Compile Include="Gui\Widgets\LauncherBooleanWidget.cs" /> <Compile Include="Gui\Widgets\LauncherBoolWidget.cs" />
<Compile Include="Gui\Widgets\LauncherButtonWidget.cs" /> <Compile Include="Gui\Widgets\LauncherButtonWidget.cs" />
<Compile Include="Gui\Widgets\LauncherInputWidget.cs" /> <Compile Include="Gui\Widgets\LauncherInputWidget.cs" />
<Compile Include="Gui\Widgets\LauncherLabelWidget.cs" /> <Compile Include="Gui\Widgets\LauncherLabelWidget.cs" />