Launcher: Reduce code duplication.

This commit is contained in:
UnknownShadow200 2016-10-06 16:23:18 +11:00
parent 994f1cf31b
commit 1511fb4f4f
6 changed files with 47 additions and 77 deletions

View File

@ -10,21 +10,17 @@ namespace Launcher.Gui.Screens {
ChooseModeView view;
public ChooseModeScreen( LauncherWindow game, bool firstTime ) : base( game ) {
game.Window.Mouse.Move += MouseMove;
game.Window.Mouse.ButtonDown += MouseButtonDown;
view = new ChooseModeView( game );
view.FirstTime = firstTime;
widgets = view.widgets;
}
public override void Init() {
game.Window.Keyboard.KeyDown += KeyDown;
game.Window.Keyboard.KeyUp += KeyUp;
base.Init();
view.Init();
widgets[view.nIndex].OnClick = (x, y) => ModeClick( false, false );
widgets[view.clIndex ].OnClick = (x, y) => ModeClick( true, false );
widgets[view.clIndex].OnClick = (x, y) => ModeClick( true, false );
widgets[view.clHaxIndex].OnClick = (x, y) => ModeClick( true, true );
if( view.backIndex >= 0 ) {
@ -36,21 +32,6 @@ namespace Launcher.Gui.Screens {
public override void Tick() { }
void KeyDown( object sender, KeyboardKeyEventArgs e ) {
if( e.Key == Key.Tab ) {
HandleTab();
} else if( e.Key == Key.Enter ) {
Widget widget = selectedWidget;
if( widget != null && widget.OnClick != null )
widget.OnClick( 0, 0 );
}
}
void KeyUp( object sender, KeyboardKeyEventArgs e ) {
if( e.Key == Key.Tab )
tabDown = false;
}
public override void Resize() {
view.DrawAll();
game.Dirty = true;
@ -75,10 +56,7 @@ namespace Launcher.Gui.Screens {
}
public override void Dispose() {
game.Window.Keyboard.KeyDown -= KeyDown;
game.Window.Keyboard.KeyUp -= KeyUp;
game.Window.Mouse.Move -= MouseMove;
game.Window.Mouse.ButtonDown -= MouseButtonDown;
base.Dispose();
view.Dispose();
}
}

View File

@ -13,13 +13,9 @@ namespace Launcher.Gui.Screens {
public InputScreen( LauncherWindow game ) : base( game ) { }
public override void Init() {
game.Window.Mouse.Move += MouseMove;
game.Window.Mouse.ButtonDown += MouseButtonDown;
base.Init();
game.Window.Mouse.WheelChanged += MouseWheelChanged;
game.Window.KeyPress += KeyPress;
game.Window.Keyboard.KeyDown += KeyDown;
game.Window.Keyboard.KeyUp += KeyUp;
game.Window.Keyboard.KeyRepeat = true;
}
@ -49,7 +45,7 @@ namespace Launcher.Gui.Screens {
lastCaretFlash = caretShow;
}
protected virtual void KeyDown( object sender, KeyboardKeyEventArgs e ) {
protected override void KeyDown( object sender, KeyboardKeyEventArgs e ) {
if( e.Key == Key.Enter && enterIndex >= 0 ) {
Widget widget = (selectedWidget != null && mouseMoved) ?
selectedWidget : widgets[enterIndex];
@ -93,11 +89,6 @@ namespace Launcher.Gui.Screens {
return keyboard[Key.ControlLeft] || keyboard[Key.ControlRight];
}
}
protected void KeyUp( object sender, KeyboardKeyEventArgs e ) {
if( e.Key == Key.Tab )
tabDown = false;
}
protected void KeyPress( object sender, KeyPressEventArgs e ) {
if( curInput != null && curInput.Chars.Append( e.KeyChar ) ) {
@ -171,13 +162,9 @@ namespace Launcher.Gui.Screens {
}
public override void Dispose() {
game.Window.Mouse.Move -= MouseMove;
game.Window.Mouse.ButtonDown -= MouseButtonDown;
game.Window.Mouse.WheelChanged -= MouseWheelChanged;
base.Dispose();
game.Window.Mouse.WheelChanged -= MouseWheelChanged;
game.Window.KeyPress -= KeyPress;
game.Window.Keyboard.KeyDown -= KeyDown;
game.Window.Keyboard.KeyUp -= KeyUp;
game.Window.Keyboard.KeyRepeat = false;
}
}

View File

@ -11,14 +11,14 @@ namespace Launcher.Gui.Screens {
ResourceFetcher fetcher;
ResourcesView view;
public ResourcesScreen( LauncherWindow game ) : base( game ) {
game.Window.Mouse.Move += MouseMove;
game.Window.Mouse.ButtonDown += MouseButtonDown;
view = new ResourcesView( game );
widgets = view.widgets;
}
public override void Init() {
base.Init();
view.Init();
SetWidgetHandlers();
Resize();
}
@ -103,8 +103,7 @@ namespace Launcher.Gui.Screens {
}
public override void Dispose() {
game.Window.Mouse.Move -= MouseMove;
game.Window.Mouse.ButtonDown -= MouseButtonDown;
base.Dispose();
view.Dispose();
}
}

View File

@ -19,7 +19,12 @@ namespace Launcher.Gui.Screens {
}
/// <summary> Function called to setup the widgets and other data for this screen. </summary>
public abstract void Init();
public virtual void Init() {
game.Window.Mouse.Move += MouseMove;
game.Window.Mouse.ButtonDown += MouseButtonDown;
game.Window.Keyboard.KeyDown += KeyDown;
game.Window.Keyboard.KeyUp += KeyUp;
}
/// <summary> Function that is repeatedly called multiple times every second. </summary>
public abstract void Tick();
@ -28,7 +33,12 @@ namespace Launcher.Gui.Screens {
public abstract void Resize();
/// <summary> Cleans up all native resources held by this screen. </summary>
public abstract void Dispose();
public virtual void Dispose() {
game.Window.Mouse.Move -= MouseMove;
game.Window.Mouse.ButtonDown -= MouseButtonDown;
game.Window.Keyboard.KeyDown -= KeyDown;
game.Window.Keyboard.KeyUp -= KeyUp;
}
/// <summary> Function called when the pixels from the framebuffer
/// are about to be transferred to the window. </summary>
@ -75,6 +85,7 @@ namespace Launcher.Gui.Screens {
game.Dirty = true;
}
protected Widget lastClicked;
protected void MouseButtonDown( object sender, MouseButtonEventArgs e ) {
if( e.Button != MouseButton.Left ) return;
@ -86,8 +97,7 @@ namespace Launcher.Gui.Screens {
lastClicked = selectedWidget;
}
protected virtual void WidgetUnclicked( Widget widget ) {
}
protected virtual void WidgetUnclicked( Widget widget ) { }
protected virtual void MouseMove( object sender, MouseMoveEventArgs e ) {
if( supressMove ) { supressMove = false; return; }
@ -117,6 +127,22 @@ namespace Launcher.Gui.Screens {
selectedWidget = null;
}
protected virtual void KeyDown( object sender, KeyboardKeyEventArgs e ) {
if( e.Key == Key.Tab ) {
HandleTab();
} else if( e.Key == Key.Enter ) {
Widget widget = selectedWidget;
if( widget != null && widget.OnClick != null )
widget.OnClick( 0, 0 );
}
}
protected virtual void KeyUp( object sender, KeyboardKeyEventArgs e ) {
if( e.Key == Key.Tab )
tabDown = false;
}
protected bool tabDown = false;
MouseMoveEventArgs moveArgs = new MouseMoveEventArgs();
MouseButtonEventArgs pressArgs = new MouseButtonEventArgs();
@ -131,7 +157,7 @@ namespace Launcher.Gui.Screens {
Utils.Clamp( ref index, 0, widgets.Length - 1 );
for( int j = 0; j < widgets.Length * 2; j++ ) {
int i = (j * dir + index) % widgets.Length;
int i = (index + j * dir) % widgets.Length;
if( i < 0 ) i += widgets.Length;
if( !widgets[i].Visible || !widgets[i].TabSelectable ) continue;

View File

@ -14,43 +14,25 @@ namespace Launcher.Gui.Screens {
UpdatesView view;
public UpdatesScreen( LauncherWindow game ) : base( game ) {
game.Window.Mouse.Move += MouseMove;
game.Window.Mouse.ButtonDown += MouseButtonDown;
view = new UpdatesView( game );
widgets = view.widgets;
}
UpdateCheckTask checkTask;
public override void Init() {
view.Init();
base.Init();
view.Init();
if( game.checkTask != null && game.checkTask.Done && game.checkTask.Success )
SuccessfulUpdateCheck( game.checkTask );
checkTask = new UpdateCheckTask();
checkTask.CheckForUpdatesAsync();
game.Window.Keyboard.KeyDown += KeyDown;
game.Window.Keyboard.KeyUp += KeyUp;
SetWidgetHandlers();
Resize();
}
void KeyDown( object sender, KeyboardKeyEventArgs e ) {
if( e.Key == Key.Tab ) {
HandleTab();
} else if( e.Key == Key.Enter ) {
Widget widget = selectedWidget;
if( widget != null && widget.OnClick != null )
widget.OnClick( 0, 0 );
}
}
void KeyUp( object sender, KeyboardKeyEventArgs e ) {
if( e.Key == Key.Tab )
tabDown = false;
}
Build dev, stable;
public override void Tick() {
if( checkTask != null && checkTask.Done ) {
@ -136,10 +118,7 @@ namespace Launcher.Gui.Screens {
}
public override void Dispose() {
game.Window.Keyboard.KeyDown -= KeyDown;
game.Window.Keyboard.KeyUp -= KeyUp;
game.Window.Mouse.Move -= MouseMove;
game.Window.Mouse.ButtonDown -= MouseButtonDown;
base.Dispose();
view.Dispose();
}
}

View File

@ -9,7 +9,7 @@ namespace Launcher.Gui.Views {
Font buttonFont, updateFont;
internal int loginIndex, resIndex, dcIndex, spIndex, colIndex, statusIndex;
internal int updatesIndex, modeIndex, sslIndex;
internal int updatesIndex, modeIndex, sslIndex, settingsIndex;
const int buttonWidth = 220, buttonHeight = 35, sideButtonWidth = 150;
public MainView( LauncherWindow game ) : base( game ) {
@ -91,6 +91,7 @@ namespace Launcher.Gui.Views {
widgets[sslIndex].Visible = sslVisible;
widgets[sslIndex + 1].Visible = sslVisible;
settingsIndex = widgetIndex;
Makers.Bitmap( this, Bitmaps.OptionsIndices,
Bitmaps.OptionsPalette, Bitmaps.OptionsSize )
.SetLocation( Anchor.BottomOrRight, Anchor.LeftOrTop, -5, 5 );