Messenger/MSGer.tk/Forms/SettingsForm.cs

112 lines
3.9 KiB
C#

using System; //Copyright (c) NorbiPeti 2015 - See LICENSE file
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MSGer.tk
{
public partial class SettingsForm : ThemedForms
{
public static bool ApplyingSettings = false;
public SettingsForm()
{
InitializeComponent();
this.Text = Language.Translate(Language.StringID.Settings);
ActivePanel = new SettingsPanelPersonal(); //2015.05.23.
ShownPanels.Add(ActivePanel); //2015.05.23.
glacialList1.Items.Add(Language.Translate(Language.StringID.Settings_Personal));
glacialList1.Items.Add(Language.Translate(Language.StringID.Settings_Layout));
glacialList1.Items.Add(Language.Translate(Language.StringID.Settings_Packs));
glacialList1.Items.Add(Language.Translate(Language.StringID.Settings_Network));
}
private List<SettingsPanel> ShownPanels = new List<SettingsPanel>();
private void glacialList1_Click(object sender, EventArgs e)
{
int tmp = glacialList1.HotItemIndex;
if (tmp > glacialList1.Items.Count)
return;
switch (tmp)
{
case 0:
//Személyes
SetActivePanel<SettingsPanelPersonal>(); //2015.05.23.
break;
case 1:
//Kinézet
SetActivePanel<SettingsPanelLayout>(); //2015.05.23.
break;
case 2:
//Csomagok
SetActivePanel<SettingsPanelPacks>(); //2015.05.23.
break;
case 3:
//Hálózat
SetActivePanel<SettingsPanelNetwork>(); //2015.05.24.
break;
}
}
private void SetActivePanel<T>() where T : SettingsPanel
{
T panel = null; //2015.05.23.
panel = ShownPanels.FirstOrDefault(entry => entry.GetType() == typeof(T)) as T; //Single-->FirstOrDefault: 2015.06.06.
if (panel == null)
{ //2015.05.23.
ActivePanel = Activator.CreateInstance<T>();
ShownPanels.Add(ActivePanel);
}
else
ActivePanel = panel;
}
private SettingsPanel activepanel;
private SettingsPanel ActivePanel
{ //2015.05.23.
get
{
return activepanel;
}
set
{
if (activepanel != null)
activepanel.Hide();
activepanel = value;
panel1.Controls.Add(activepanel);
activepanel.Dock = DockStyle.Fill;
activepanel.Show();
}
}
private void okbtn_Click(object sender, EventArgs e)
{
ApplyingSettings = true;
bool reopen = false;
foreach (SettingsPanel panel in ShownPanels) //2015.05.23.
if (panel.SaveSettings()) //2015.05.23.
reopen = true; //2015.05.23.
if (reopen)
{
ChatPanel.ReopenChatWindows(true);
Program.MainF.ChangeChatWindowLayout(true); //2015.06.14.
}
ApplyingSettings = false;
this.Close();
}
private void cancelbtn_Click(object sender, EventArgs e)
{
this.Close();
}
private void SettingsForm_FormClosed(object sender, FormClosedEventArgs e)
{
Program.SettingsF = null;
}
}
}