Initial Commit
This commit is contained in:
229
MainLauncherForm.cs
Normal file
229
MainLauncherForm.cs
Normal file
@@ -0,0 +1,229 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using CmlLib.Core.Auth.Microsoft;
|
||||
using WolfLauncher.core;
|
||||
using WolfLauncher.gui.launcher;
|
||||
using WolfLauncher.model;
|
||||
using MojangAPI.Model;
|
||||
|
||||
/**
|
||||
* Author: HypherionSA
|
||||
* Main Launcher Interface Window
|
||||
**/
|
||||
namespace WolfLauncher
|
||||
{
|
||||
public partial class MainLauncherForm : Form
|
||||
{
|
||||
// Static References
|
||||
private Launcher launcher = Launcher.INSTANCE;
|
||||
public static MainLauncherForm INSTANCE;
|
||||
|
||||
public MainLauncherForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
INSTANCE = this;
|
||||
|
||||
this.Text = String.Format("{0} [{1}] - {2}", LauncherConstants.LauncherName, LauncherConstants.LauncherBuild, LauncherConstants.Version);
|
||||
}
|
||||
|
||||
private void Form1_LoadAsync(object sender, EventArgs e)
|
||||
{
|
||||
// Alpha Warning. Will be removed in beta
|
||||
MessageBox.Show("This is a very early, usable alpha version. Shit will definitely break or be broken. Don't trust your life with this", "Alpha Warning", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||
|
||||
// Load player profile and instances
|
||||
loadProfile();
|
||||
loadInstances();
|
||||
}
|
||||
|
||||
private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
// Instance was double clicked, so we open the console window
|
||||
if (listView1.SelectedItems.Count > 0)
|
||||
{
|
||||
InstanceWindow instanceWindow = new InstanceWindow((Instance)listView1.SelectedItems[0].Tag);
|
||||
instanceWindow.ShowDialog(this);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load instaces from drive
|
||||
**/
|
||||
public void loadInstances()
|
||||
{
|
||||
// Load from disk
|
||||
List<Instance> instances = launcher.loadInstances();
|
||||
listView1.Items.Clear();
|
||||
|
||||
foreach (var i in instances)
|
||||
{
|
||||
// Set up listview item
|
||||
ListViewItem itm = new ListViewItem(i.name);
|
||||
itm.Tag = i;
|
||||
// TODO Custom Icons
|
||||
itm.ImageKey = "mclogo.png";
|
||||
listView1.Items.Add(itm);
|
||||
}
|
||||
}
|
||||
|
||||
private void instanceMenu_Opening(object sender, CancelEventArgs e)
|
||||
{
|
||||
// If no instance was selected, we don't allow the menu to open
|
||||
if (listView1.SelectedItems.Count == 0)
|
||||
{
|
||||
e.Cancel = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if play and kill menu items can be enabled for the instance
|
||||
killToolStripMenuItem.Enabled = !(launcher.getRunning() == null || launcher.getRunning() != (Instance)listView1.SelectedItems[0].Tag);
|
||||
playToolStripMenuItem.Enabled = launcher.getRunning() == null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete Instance
|
||||
**/
|
||||
private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
// No instance was selected, so we return
|
||||
if (listView1.SelectedItems.Count == 0)
|
||||
return;
|
||||
|
||||
// Show warning to user
|
||||
var res = MessageBox.Show("Are you sure? This action cannot be reversed", "Confirm Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
|
||||
|
||||
// User accepted, so we nuke it
|
||||
if (res == DialogResult.Yes)
|
||||
Launcher.INSTANCE.deleteInstance((Instance)listView1.SelectedItems[0].Tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Open Launcher Settings
|
||||
**/
|
||||
private void settingsToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
// No instance was selected, so we return
|
||||
if (listView1.SelectedItems.Count == 0)
|
||||
return;
|
||||
|
||||
// Display settings dialog.
|
||||
// TODO: Move this into console window
|
||||
InstanceSettings settings = new InstanceSettings((Instance)listView1.SelectedItems[0].Tag);
|
||||
settings.ShowDialog(this);
|
||||
}
|
||||
|
||||
private void MainLauncherForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
// Kill running instance if any
|
||||
Launcher.INSTANCE.killInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Kill running instance
|
||||
**/
|
||||
private void killToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
// No instance was selected, so we return
|
||||
if (listView1.SelectedItems.Count == 0)
|
||||
return;
|
||||
|
||||
// Micheal Meyers it! It must die
|
||||
launcher.killInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Launch Instance
|
||||
**/
|
||||
public void launchInstance(Instance ins = null)
|
||||
{
|
||||
// Launched from Console Window
|
||||
if (ins != null)
|
||||
{
|
||||
launcher.launch(this, ins);
|
||||
return;
|
||||
}
|
||||
|
||||
// Launched from context menu
|
||||
if (listView1.SelectedItems.Count > 0)
|
||||
{
|
||||
launcher.launch(this, (model.Instance)listView1.SelectedItems[0].Tag);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Start Instance
|
||||
**/
|
||||
private void playToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
launchInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add new instance
|
||||
**/
|
||||
private void addInstanceButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
// Show instance create dialog
|
||||
CreateVanillaInstance vanillaInstance = new CreateVanillaInstance();
|
||||
vanillaInstance.ShowDialog(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logout from signed in account
|
||||
**/
|
||||
private void logoutToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
// Signout and refresh profile dropdown
|
||||
launcher.accountHandler().Signout();
|
||||
loadProfile();
|
||||
}
|
||||
|
||||
/**
|
||||
* Load user profile information from the Mojang API
|
||||
**/
|
||||
private async void loadProfile()
|
||||
{
|
||||
// Check if any accounts are stored
|
||||
if (launcher.accountHandler().AccountManager.GetAccounts().Count > 0)
|
||||
{
|
||||
// Get first stored account
|
||||
var acc = launcher.accountHandler().AccountManager.GetAccounts().First();
|
||||
// Check authentication
|
||||
var s = launcher.accountHandler().Authenticate(acc);
|
||||
// Retrieve MC profile
|
||||
PlayerProfile profile = await launcher.getMojangApi().GetProfileUsingAccessToken(s.Result.AccessToken);
|
||||
|
||||
// Set Dropdown text to profile name
|
||||
userDropdown.Text = profile.Name;
|
||||
|
||||
// Set Profile Image
|
||||
userDropdown.Image = launcher.loadProfileImage(profile);
|
||||
}
|
||||
else
|
||||
{
|
||||
// No accounts are stored
|
||||
userDropdown.Text = "No Account";
|
||||
}
|
||||
}
|
||||
|
||||
private void userDropdown_DropDownOpening(object sender, EventArgs e)
|
||||
{
|
||||
// No account is loaded or stored, so start login process
|
||||
if (userDropdown.Text == "No Account")
|
||||
{
|
||||
// Cancel dropdown
|
||||
userDropdown.AllowDrop = false;
|
||||
|
||||
// Authenticate
|
||||
var loginHandler = JELoginHandlerBuilder.BuildDefault();
|
||||
loginHandler.Authenticate().Wait();
|
||||
|
||||
// Refresh Dropdown
|
||||
loadProfile();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user