From 1511fb4f4fe053d164d62308af305a9a8fcbd587 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Thu, 6 Oct 2016 16:23:18 +1100 Subject: [PATCH] Launcher: Reduce code duplication. --- Launcher2/Gui/Screens/ChooseModeScreen.cs | 28 ++---------------- Launcher2/Gui/Screens/InputScreen.cs | 21 +++---------- Launcher2/Gui/Screens/ResourcesScreen.cs | 7 ++--- Launcher2/Gui/Screens/Screen.cs | 36 +++++++++++++++++++---- Launcher2/Gui/Screens/UpdatesScreen.cs | 29 +++--------------- Launcher2/Gui/Views/MainView.cs | 3 +- 6 files changed, 47 insertions(+), 77 deletions(-) diff --git a/Launcher2/Gui/Screens/ChooseModeScreen.cs b/Launcher2/Gui/Screens/ChooseModeScreen.cs index 681ea57d1..53c3c32a9 100644 --- a/Launcher2/Gui/Screens/ChooseModeScreen.cs +++ b/Launcher2/Gui/Screens/ChooseModeScreen.cs @@ -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(); } } diff --git a/Launcher2/Gui/Screens/InputScreen.cs b/Launcher2/Gui/Screens/InputScreen.cs index 82ffe39e1..4c3af2410 100644 --- a/Launcher2/Gui/Screens/InputScreen.cs +++ b/Launcher2/Gui/Screens/InputScreen.cs @@ -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; } } diff --git a/Launcher2/Gui/Screens/ResourcesScreen.cs b/Launcher2/Gui/Screens/ResourcesScreen.cs index 405e631db..70abc151b 100644 --- a/Launcher2/Gui/Screens/ResourcesScreen.cs +++ b/Launcher2/Gui/Screens/ResourcesScreen.cs @@ -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(); } } diff --git a/Launcher2/Gui/Screens/Screen.cs b/Launcher2/Gui/Screens/Screen.cs index 870ada2fc..ea2194b15 100644 --- a/Launcher2/Gui/Screens/Screen.cs +++ b/Launcher2/Gui/Screens/Screen.cs @@ -19,7 +19,12 @@ namespace Launcher.Gui.Screens { } /// Function called to setup the widgets and other data for this screen. - 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; + } /// Function that is repeatedly called multiple times every second. public abstract void Tick(); @@ -28,7 +33,12 @@ namespace Launcher.Gui.Screens { public abstract void Resize(); /// Cleans up all native resources held by this screen. - 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; + } /// Function called when the pixels from the framebuffer /// are about to be transferred to the window. @@ -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; diff --git a/Launcher2/Gui/Screens/UpdatesScreen.cs b/Launcher2/Gui/Screens/UpdatesScreen.cs index b0357a608..6b1c5f19a 100644 --- a/Launcher2/Gui/Screens/UpdatesScreen.cs +++ b/Launcher2/Gui/Screens/UpdatesScreen.cs @@ -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(); } } diff --git a/Launcher2/Gui/Views/MainView.cs b/Launcher2/Gui/Views/MainView.cs index 3b0fa98b0..7983106e8 100644 --- a/Launcher2/Gui/Views/MainView.cs +++ b/Launcher2/Gui/Views/MainView.cs @@ -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 );