Add name changer backend

You can use the DefaultTitleAttribute on an IShiftOSWindow to specify a
default title for the window and name changer entry.
This commit is contained in:
Michael 2017-02-04 11:14:39 -05:00
parent 9aa2c1f03b
commit 28a087d2d4
7 changed files with 224 additions and 44 deletions

View file

@ -429,8 +429,10 @@ Contents:
bool legionExists = false;
foreach (var legion in legions)
{
if (legion.ShortName == l.ShortName)
legionExists = true;
}
if (legionExists == false)
{

View file

@ -66,21 +66,27 @@ namespace ShiftOS.WinForms.Applications
BannerColor = ConsoleColor.DarkRed
});
}
else if(msg.Name == "legion_create_ok")
else if (msg.Name == "legion_create_ok")
{
SaveSystem.CurrentSave.CurrentLegions.Clear();
SaveSystem.CurrentSave.CurrentLegions.Add(editingLegion.ShortName);
SaveSystem.SaveGame();
myLegionToolStripMenuItem_Click(this, EventArgs.Empty);
this.Invoke(new Action(() =>
{
myLegionToolStripMenuItem_Click(this, EventArgs.Empty);
}));
}
else if(msg.Name == "legion_alreadyexists")
else if (msg.Name == "legion_alreadyexists")
{
Infobox.Show("Legion already exists", "A legion with the short name you provided already exists. Please choose another.");
this.Invoke(new Action(() =>
{
Infobox.Show("Legion already exists", "A legion with the short name you provided already exists. Please choose another.");
}));
}
else if(msg.Name == "legion_users_found")
else if (msg.Name == "legion_users_found")
{
lvusers.Items.Clear();
foreach(var usr in JsonConvert.DeserializeObject<string[]>(msg.Contents))
foreach (var usr in JsonConvert.DeserializeObject<string[]>(msg.Contents))
{
lvusers.Items.Add(usr);
}
@ -89,7 +95,7 @@ namespace ShiftOS.WinForms.Applications
{
ShowLegionInfo(JsonConvert.DeserializeObject<Legion>(msg.Contents));
}
else if(msg.Name == "legion_all")
else if (msg.Name == "legion_all")
{
PopulateJoinLegion(JsonConvert.DeserializeObject<List<Legion>>(msg.Contents));
}

View file

@ -47,33 +47,134 @@ namespace ShiftOS.WinForms.Applications {
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.listBox1 = new System.Windows.Forms.ListBox();
this.panel1 = new System.Windows.Forms.Panel();
this.flnames = new System.Windows.Forms.FlowLayoutPanel();
this.flbuttons = new System.Windows.Forms.FlowLayoutPanel();
this.btnclose = new System.Windows.Forms.Button();
this.btnloaddefault = new System.Windows.Forms.Button();
this.btnimport = new System.Windows.Forms.Button();
this.btnexport = new System.Windows.Forms.Button();
this.btnapply = new System.Windows.Forms.Button();
this.panel1.SuspendLayout();
this.flbuttons.SuspendLayout();
this.SuspendLayout();
//
// listBox1
// panel1
//
this.listBox1.FormattingEnabled = true;
this.listBox1.Location = new System.Drawing.Point(3, 3);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(138, 342);
this.listBox1.TabIndex = 0;
this.listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged);
this.panel1.Controls.Add(this.flnames);
this.panel1.Controls.Add(this.flbuttons);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(354, 349);
this.panel1.TabIndex = 0;
//
// flnames
//
this.flnames.AutoScroll = true;
this.flnames.Dock = System.Windows.Forms.DockStyle.Fill;
this.flnames.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;
this.flnames.Location = new System.Drawing.Point(0, 0);
this.flnames.Name = "flnames";
this.flnames.Size = new System.Drawing.Size(354, 320);
this.flnames.TabIndex = 0;
this.flnames.WrapContents = false;
//
// flbuttons
//
this.flbuttons.AutoSize = true;
this.flbuttons.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.flbuttons.Controls.Add(this.btnclose);
this.flbuttons.Controls.Add(this.btnloaddefault);
this.flbuttons.Controls.Add(this.btnimport);
this.flbuttons.Controls.Add(this.btnexport);
this.flbuttons.Controls.Add(this.btnapply);
this.flbuttons.Dock = System.Windows.Forms.DockStyle.Bottom;
this.flbuttons.Location = new System.Drawing.Point(0, 320);
this.flbuttons.Name = "flbuttons";
this.flbuttons.Size = new System.Drawing.Size(354, 29);
this.flbuttons.TabIndex = 0;
//
// btnclose
//
this.btnclose.AutoSize = true;
this.btnclose.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.btnclose.Location = new System.Drawing.Point(3, 3);
this.btnclose.Name = "btnclose";
this.btnclose.Size = new System.Drawing.Size(43, 23);
this.btnclose.TabIndex = 0;
this.btnclose.Text = "Close";
this.btnclose.UseVisualStyleBackColor = true;
//
// btnloaddefault
//
this.btnloaddefault.AutoSize = true;
this.btnloaddefault.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.btnloaddefault.Location = new System.Drawing.Point(52, 3);
this.btnloaddefault.Name = "btnloaddefault";
this.btnloaddefault.Size = new System.Drawing.Size(76, 23);
this.btnloaddefault.TabIndex = 1;
this.btnloaddefault.Text = "Load default";
this.btnloaddefault.UseVisualStyleBackColor = true;
//
// btnimport
//
this.btnimport.AutoSize = true;
this.btnimport.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.btnimport.Location = new System.Drawing.Point(134, 3);
this.btnimport.Name = "btnimport";
this.btnimport.Size = new System.Drawing.Size(46, 23);
this.btnimport.TabIndex = 2;
this.btnimport.Text = "Import";
this.btnimport.UseVisualStyleBackColor = true;
//
// btnexport
//
this.btnexport.AutoSize = true;
this.btnexport.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.btnexport.Location = new System.Drawing.Point(186, 3);
this.btnexport.Name = "btnexport";
this.btnexport.Size = new System.Drawing.Size(47, 23);
this.btnexport.TabIndex = 3;
this.btnexport.Text = "Export";
this.btnexport.UseVisualStyleBackColor = true;
//
// btnapply
//
this.btnapply.AutoSize = true;
this.btnapply.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.btnapply.Location = new System.Drawing.Point(239, 3);
this.btnapply.Name = "btnapply";
this.btnapply.Size = new System.Drawing.Size(43, 23);
this.btnapply.TabIndex = 4;
this.btnapply.Text = "Apply";
this.btnapply.UseVisualStyleBackColor = true;
//
// NameChanger
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.listBox1);
this.Controls.Add(this.panel1);
this.Name = "NameChanger";
this.Text = "Name Changer";
this.Size = new System.Drawing.Size(459, 406);
this.Size = new System.Drawing.Size(354, 349);
this.Load += new System.EventHandler(this.NameChanger_Load);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.flbuttons.ResumeLayout(false);
this.flbuttons.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.FlowLayoutPanel flnames;
private System.Windows.Forms.FlowLayoutPanel flbuttons;
private System.Windows.Forms.Button btnclose;
private System.Windows.Forms.Button btnloaddefault;
private System.Windows.Forms.Button btnimport;
private System.Windows.Forms.Button btnexport;
private System.Windows.Forms.Button btnapply;
}
}

View file

@ -38,8 +38,10 @@ namespace ShiftOS.WinForms.Applications {
[Launcher("Name Changer", true, "al_name_changer", "Customization")]
[RequiresUpgrade("name_changer")]
[WinOpen("name_changer")]
public partial class NameChanger : UserControl, IShiftOSWindow {
public NameChanger() {
public partial class NameChanger : UserControl, IShiftOSWindow
{
public NameChanger()
{
InitializeComponent();
}
@ -60,13 +62,50 @@ namespace ShiftOS.WinForms.Applications {
{
}
private void NameChanger_Load(object sender, EventArgs e) {
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
private void NameChanger_Load(object sender, EventArgs e)
{
}
}
public static class NameChangerBackend
{
public static Dictionary<string, string> GetDefault()
{
var dict = new Dictionary<string, string>();
foreach(var winType in AppearanceManager.GetAllWindowTypes())
{
if (dict.ContainsKey(winType.Name))
dict[winType.Name] = AppearanceManager.GetDefaultTitle(winType);
else
dict.Add(winType.Name, AppearanceManager.GetDefaultTitle(winType));
}
return dict;
}
public static Dictionary<string,string> GetCurrent()
{
if (SkinEngine.LoadedSkin == null)
return GetDefault();
if (SkinEngine.LoadedSkin.AppNames == null)
SkinEngine.LoadedSkin.AppNames = GetDefault();
return SkinEngine.LoadedSkin.AppNames;
}
public static string GetName(IShiftOSWindow win)
{
if (SkinEngine.LoadedSkin == null)
return AppearanceManager.GetDefaultTitle(win.GetType());
if (SkinEngine.LoadedSkin.AppNames == null)
SkinEngine.LoadedSkin.AppNames = GetDefault();
if (!SkinEngine.LoadedSkin.AppNames.ContainsKey(win.GetType().Name))
SkinEngine.LoadedSkin.AppNames.Add(win.GetType().Name, AppearanceManager.GetDefaultTitle(win.GetType()));
return SkinEngine.LoadedSkin.AppNames[win.GetType().Name];
}
}
}

View file

@ -36,6 +36,7 @@ using static ShiftOS.Engine.SkinEngine;
using System.Runtime.InteropServices;
using ShiftOS.Engine;
using ShiftOS.WinForms.Tools;
using ShiftOS.WinForms.Applications;
/// <summary>
/// Window border.
@ -211,7 +212,7 @@ namespace ShiftOS.WinForms
/// </summary>
public void Setup()
{
this.lbtitletext.Text = Localization.Parse(this._parentWindow.Text);
this.lbtitletext.Text = NameChangerBackend.GetName(ParentWindow);
if (SaveSystem.CurrentSave != null)
{
@ -231,23 +232,6 @@ namespace ShiftOS.WinForms
}
}
/// <summary>
/// Gets or sets the text.
/// </summary>
/// <value>The text.</value>
public override string Text
{
get
{
return lbtitletext?.Text;
}
set
{
lbtitletext.Text = value;
}
}
/// <summary>
/// Setups the skin.
/// </summary>

View file

@ -29,6 +29,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
@ -75,6 +76,39 @@ namespace ShiftOS.Engine
}
}
public static IEnumerable<Type> GetAllWindowTypes()
{
List<Type> types = new List<Type>();
foreach(var file in System.IO.Directory.GetFiles(Environment.CurrentDirectory))
{
if(file.EndsWith(".exe") || file.EndsWith(".dll"))
{
try
{
var asm = Assembly.LoadFile(file);
foreach(var type in asm.GetTypes())
{
if (type.GetInterfaces().Contains(typeof(IShiftOSWindow)))
types.Add(type);
}
}
catch { }
}
}
return types;
}
public static string GetDefaultTitle(Type winType)
{
foreach(var attrib in winType.GetCustomAttributes(false))
{
if(attrib is DefaultTitleAttribute)
{
return (attrib as DefaultTitleAttribute).Title;
}
}
return winType.Name;
}
public static string LastTerminalText { get; set; }
public static int CurrentPosition { get; set; }
@ -205,4 +239,15 @@ namespace ShiftOS.Engine
string Text { get; set; }
IShiftOSWindow ParentWindow { get; set; }
}
public class DefaultTitleAttribute : Attribute
{
public DefaultTitleAttribute(string title)
{
Title = title;
}
public string Title { get; private set; }
}
}

View file

@ -137,6 +137,9 @@ namespace ShiftOS.Engine {
return JsonConvert.SerializeObject(this, Formatting.Indented);
}
[ShifterHidden]
public Dictionary<string, string> AppNames = new Dictionary<string, string>();
[ShifterMeta("Windows")]
[ShifterCategory("Titlebar")]
[RequiresUpgrade("shift_title_text")]