mirror of
https://github.com/terrymacdonald/DisplayMagician.git
synced 2024-08-30 18:32:20 +00:00
This informs the user that the user UI is locked until they close the game/application that is started.
259 lines
10 KiB
C#
259 lines
10 KiB
C#
using HeliosPlus.GameLibraries;
|
|
using HeliosPlus.Resources;
|
|
using HeliosPlus.Shared;
|
|
using Manina.Windows.Forms;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Drawing.IconLib;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace HeliosPlus.UIForms
|
|
{
|
|
public partial class ShortcutLibraryForm : Form
|
|
{
|
|
|
|
private ShortcutAdaptor _shortcutAdaptor = new ShortcutAdaptor();
|
|
//private ImageListViewItem _selectedShortcutILVItem = null;
|
|
private ShortcutItem _selectedShortcut = null;
|
|
|
|
public ShortcutLibraryForm()
|
|
{
|
|
InitializeComponent();
|
|
//_shortcutAdaptor = new ShortcutAdaptor();
|
|
//_shortcutRepository = new ShortcutRepository();
|
|
//_profileRepository = new ProfileRepository();
|
|
ilv_saved_shortcuts.MultiSelect = false;
|
|
ilv_saved_shortcuts.ThumbnailSize = new Size(100,100);
|
|
ilv_saved_shortcuts.AllowDrag = false;
|
|
ilv_saved_shortcuts.AllowDrop = false;
|
|
}
|
|
|
|
private void btn_back_Click(object sender, EventArgs e)
|
|
{
|
|
this.Close();
|
|
}
|
|
|
|
private void ShortcutLibraryForm_Load(object sender, EventArgs e)
|
|
{
|
|
// Refresh the Shortcut Library UI
|
|
RefreshShortcutLibraryUI();
|
|
}
|
|
|
|
private void RefreshShortcutLibraryUI()
|
|
{
|
|
|
|
if (ShortcutRepository.ShortcutCount == 0)
|
|
return;
|
|
|
|
// Temporarily stop updating the saved_profiles listview
|
|
ilv_saved_shortcuts.SuspendLayout();
|
|
|
|
ImageListViewItem newItem = null;
|
|
ilv_saved_shortcuts.Items.Clear();
|
|
|
|
|
|
foreach (ShortcutItem loadedShortcut in ShortcutRepository.AllShortcuts.OrderBy(s => s.Name))
|
|
{
|
|
//loadedProfile.SaveProfileImageToCache();
|
|
//newItem = new ImageListViewItem(loadedProfile.SavedProfileCacheFilename, loadedProfile.Name);
|
|
//newItem = new ImageListViewItem(loadedProfile, loadedProfile.Name);
|
|
newItem = new ImageListViewItem(loadedShortcut, loadedShortcut.Name);
|
|
|
|
// Select it if its the selectedProfile
|
|
if (_selectedShortcut is ShortcutItem && _selectedShortcut.Equals(loadedShortcut))
|
|
newItem.Selected = true;
|
|
|
|
//ilv_saved_profiles.Items.Add(newItem);
|
|
ilv_saved_shortcuts.Items.Add(newItem, _shortcutAdaptor);
|
|
}
|
|
|
|
|
|
// Restart updating the saved_profiles listview
|
|
ilv_saved_shortcuts.ResumeLayout();
|
|
|
|
}
|
|
|
|
private ShortcutItem GetShortcutFromName(string shortcutName)
|
|
{
|
|
return (from item in ShortcutRepository.AllShortcuts where item.Name == shortcutName select item).First();
|
|
}
|
|
|
|
private void btn_save_Click(object sender, EventArgs e)
|
|
{
|
|
DialogResult = DialogResult.None;
|
|
|
|
// Only do something if there is a shortcut selected
|
|
if (_selectedShortcut != null)
|
|
{
|
|
|
|
try
|
|
{
|
|
// Set the Shortcut save folder to the Desktop as that's where people will want it most likely
|
|
dialog_save.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
|
|
// Try to set up some sensible suggestions for the Shortcut name
|
|
if (_selectedShortcut.Permanence == ShortcutPermanence.Permanent)
|
|
{
|
|
|
|
dialog_save.FileName = _selectedShortcut.Name;
|
|
}
|
|
else
|
|
{
|
|
if (_selectedShortcut.Category == ShortcutCategory.Application)
|
|
{
|
|
dialog_save.FileName = String.Concat(Path.GetFileNameWithoutExtension(_selectedShortcut.ExecutableNameAndPath), @" (", _selectedShortcut.Name.ToLower(CultureInfo.InvariantCulture), @")");
|
|
}
|
|
else
|
|
{
|
|
dialog_save.FileName = _selectedShortcut.Name;
|
|
}
|
|
}
|
|
|
|
// Show the Save Shortcut window
|
|
if (dialog_save.ShowDialog(this) == DialogResult.OK)
|
|
{
|
|
if (_selectedShortcut.CreateShortcut(dialog_save.FileName))
|
|
{
|
|
MessageBox.Show(
|
|
String.Format(Language.Shortcut_placed_successfully, dialog_save.FileName),
|
|
Language.Shortcut,
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Information);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(
|
|
Language.Failed_to_create_the_shortcut_Unexpected_exception_occurred,
|
|
Language.Shortcut,
|
|
MessageBoxButtons.OK,
|
|
MessageBoxIcon.Exclamation);
|
|
}
|
|
|
|
dialog_save.FileName = string.Empty;
|
|
DialogResult = DialogResult.OK;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message, Language.Shortcut, MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void ilv_saved_shortcuts_ItemClick(object sender, ItemClickEventArgs e)
|
|
{
|
|
_selectedShortcut = GetShortcutFromName(e.Item.Text);
|
|
}
|
|
|
|
private void ilv_saved_shortcuts_ItemDoubleClick(object sender, ItemClickEventArgs e)
|
|
{
|
|
_selectedShortcut = GetShortcutFromName(e.Item.Text);
|
|
|
|
if (_selectedShortcut == null)
|
|
return;
|
|
|
|
ShortcutItem oldShortcut = _selectedShortcut;
|
|
var shortcutForm = new ShortcutForm(_selectedShortcut);
|
|
shortcutForm.ShowDialog(this);
|
|
if (shortcutForm.DialogResult == DialogResult.OK)
|
|
{
|
|
ShortcutRepository.RemoveShortcut(oldShortcut);
|
|
_selectedShortcut = shortcutForm.Shortcut;
|
|
ShortcutRepository.AddShortcut(_selectedShortcut);
|
|
RefreshShortcutLibraryUI();
|
|
// As this is an edit, we need to manually force saving the shortcut library
|
|
//ShortcutRepository.SaveShortcuts();
|
|
}
|
|
|
|
}
|
|
|
|
private void btn_new_Click(object sender, EventArgs e)
|
|
{
|
|
var shortcutForm = new ShortcutForm();
|
|
shortcutForm.ShowDialog(this);
|
|
if (shortcutForm.DialogResult == DialogResult.OK)
|
|
{
|
|
ShortcutRepository.AddShortcut(shortcutForm.Shortcut);
|
|
_selectedShortcut = shortcutForm.Shortcut;
|
|
RefreshShortcutLibraryUI();
|
|
}
|
|
}
|
|
|
|
private void btn_edit_Click(object sender, EventArgs e)
|
|
{
|
|
int currentIlvIndex = ilv_saved_shortcuts.SelectedItems[0].Index;
|
|
string shortcutName = ilv_saved_shortcuts.Items[currentIlvIndex].Text;
|
|
_selectedShortcut = GetShortcutFromName(shortcutName);
|
|
|
|
if (_selectedShortcut == null)
|
|
return;
|
|
|
|
ShortcutItem oldShortcut = _selectedShortcut;
|
|
var shortcutForm = new ShortcutForm(_selectedShortcut);
|
|
shortcutForm.ShowDialog(this);
|
|
if (shortcutForm.DialogResult == DialogResult.OK)
|
|
{
|
|
ShortcutRepository.RemoveShortcut(oldShortcut);
|
|
_selectedShortcut = shortcutForm.Shortcut;
|
|
ShortcutRepository.AddShortcut(_selectedShortcut);
|
|
RefreshShortcutLibraryUI();
|
|
// As this is an edit, we need to manually force saving the shortcut library
|
|
//ShortcutRepository.SaveShortcuts();
|
|
}
|
|
|
|
}
|
|
|
|
private void btn_delete_Click(object sender, EventArgs e)
|
|
{
|
|
if (_selectedShortcut == null)
|
|
return;
|
|
|
|
if (MessageBox.Show($"Are you sure you want to delete the '{_selectedShortcut.Name}' Shortcut?", $"Delete '{_selectedShortcut.Name}' Shortcut?", MessageBoxButtons.YesNo, MessageBoxIcon.Error) == DialogResult.No)
|
|
return;
|
|
|
|
// remove the profile from the imagelistview
|
|
int currentIlvIndex = ilv_saved_shortcuts.SelectedItems[0].Index;
|
|
ilv_saved_shortcuts.Items.RemoveAt(currentIlvIndex);
|
|
|
|
// Remove the shortcut
|
|
ShortcutRepository.RemoveShortcut(_selectedShortcut);
|
|
_selectedShortcut = null;
|
|
|
|
RefreshShortcutLibraryUI();
|
|
}
|
|
|
|
private void btn_run_Click(object sender, EventArgs e)
|
|
{
|
|
if (_selectedShortcut == null)
|
|
return;
|
|
|
|
// Figure out the string we're going to use as the MaskedForm message
|
|
string message = "";
|
|
if (_selectedShortcut.Category.Equals(ShortcutCategory.Application))
|
|
message = $"Starting the {_selectedShortcut.ExecutableNameAndPath} application and waiting until you close it.";
|
|
else if (_selectedShortcut.Category.Equals(ShortcutCategory.Game))
|
|
message = $"Starting the {_selectedShortcut.GameName} game and waiting until you close it.";
|
|
|
|
// Create a MaskForm that will cover the ShortcutLibrary Window to lock
|
|
// the controls and inform the user that the game is running....
|
|
MaskedForm maskedForm = MaskedForm.Show(this, message);
|
|
|
|
// Get the MainForm so we can access the NotifyIcon on it.
|
|
MainForm mainForm = (MainForm)this.Owner;
|
|
|
|
|
|
// Run the shortcut
|
|
ShortcutRepository.RunShortcut(_selectedShortcut, mainForm.notifyIcon);
|
|
|
|
maskedForm.Close();
|
|
}
|
|
}
|
|
}
|