UserManagement.DatabaseSettingsDlg and LocalSettings added
This commit is contained in:
parent
721bfdf5c8
commit
7564ed7ba6
@ -9,7 +9,6 @@ using log4net;
|
|||||||
using Config.Entities;
|
using Config.Entities;
|
||||||
using TBF.Resources;
|
using TBF.Resources;
|
||||||
using TBF.Forms;
|
using TBF.Forms;
|
||||||
using TBF.ErrorHandler;
|
|
||||||
|
|
||||||
namespace TBF
|
namespace TBF
|
||||||
{
|
{
|
||||||
|
|||||||
123
UserManagement/DatabaseSettingsDlg.Designer.cs
generated
Normal file
123
UserManagement/DatabaseSettingsDlg.Designer.cs
generated
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
namespace UserManagement
|
||||||
|
{
|
||||||
|
partial class DatabaseSettingsDlg
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.connectionStringTextBox1 = new System.Windows.Forms.TextBox();
|
||||||
|
this.connectionStringLabel = new System.Windows.Forms.Label();
|
||||||
|
this.okButton = new System.Windows.Forms.Button();
|
||||||
|
this.cancelButton = new System.Windows.Forms.Button();
|
||||||
|
this.languageLabel = new System.Windows.Forms.Label();
|
||||||
|
this.languageTextBox = new System.Windows.Forms.TextBox();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// connectionStringTextBox1
|
||||||
|
//
|
||||||
|
this.connectionStringTextBox1.Location = new System.Drawing.Point(29, 44);
|
||||||
|
this.connectionStringTextBox1.Name = "connectionStringTextBox1";
|
||||||
|
this.connectionStringTextBox1.Size = new System.Drawing.Size(555, 20);
|
||||||
|
this.connectionStringTextBox1.TabIndex = 0;
|
||||||
|
//
|
||||||
|
// connectionStringLabel
|
||||||
|
//
|
||||||
|
this.connectionStringLabel.AutoSize = true;
|
||||||
|
this.connectionStringLabel.Location = new System.Drawing.Point(26, 19);
|
||||||
|
this.connectionStringLabel.Name = "connectionStringLabel";
|
||||||
|
this.connectionStringLabel.Size = new System.Drawing.Size(89, 13);
|
||||||
|
this.connectionStringLabel.TabIndex = 3;
|
||||||
|
this.connectionStringLabel.Text = "Connection string";
|
||||||
|
//
|
||||||
|
// okButton
|
||||||
|
//
|
||||||
|
this.okButton.Location = new System.Drawing.Point(378, 85);
|
||||||
|
this.okButton.Name = "okButton";
|
||||||
|
this.okButton.Size = new System.Drawing.Size(95, 38);
|
||||||
|
this.okButton.TabIndex = 6;
|
||||||
|
this.okButton.Text = "OK";
|
||||||
|
this.okButton.UseVisualStyleBackColor = true;
|
||||||
|
this.okButton.Click += new System.EventHandler(this.okButton_Click);
|
||||||
|
//
|
||||||
|
// cancelButton
|
||||||
|
//
|
||||||
|
this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||||
|
this.cancelButton.Location = new System.Drawing.Point(489, 85);
|
||||||
|
this.cancelButton.Name = "cancelButton";
|
||||||
|
this.cancelButton.Size = new System.Drawing.Size(95, 38);
|
||||||
|
this.cancelButton.TabIndex = 7;
|
||||||
|
this.cancelButton.Text = "Cancel";
|
||||||
|
this.cancelButton.UseVisualStyleBackColor = true;
|
||||||
|
this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
|
||||||
|
//
|
||||||
|
// languageLabel
|
||||||
|
//
|
||||||
|
this.languageLabel.AutoSize = true;
|
||||||
|
this.languageLabel.Location = new System.Drawing.Point(26, 79);
|
||||||
|
this.languageLabel.Name = "languageLabel";
|
||||||
|
this.languageLabel.Size = new System.Drawing.Size(55, 13);
|
||||||
|
this.languageLabel.TabIndex = 11;
|
||||||
|
this.languageLabel.Text = "Language";
|
||||||
|
//
|
||||||
|
// languageTextBox
|
||||||
|
//
|
||||||
|
this.languageTextBox.Location = new System.Drawing.Point(29, 103);
|
||||||
|
this.languageTextBox.Name = "languageTextBox";
|
||||||
|
this.languageTextBox.Size = new System.Drawing.Size(100, 20);
|
||||||
|
this.languageTextBox.TabIndex = 12;
|
||||||
|
//
|
||||||
|
// DatabaseSettingsDlg
|
||||||
|
//
|
||||||
|
this.AcceptButton = this.okButton;
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.CancelButton = this.cancelButton;
|
||||||
|
this.ClientSize = new System.Drawing.Size(613, 141);
|
||||||
|
this.Controls.Add(this.languageTextBox);
|
||||||
|
this.Controls.Add(this.languageLabel);
|
||||||
|
this.Controls.Add(this.cancelButton);
|
||||||
|
this.Controls.Add(this.okButton);
|
||||||
|
this.Controls.Add(this.connectionStringLabel);
|
||||||
|
this.Controls.Add(this.connectionStringTextBox1);
|
||||||
|
this.Name = "DatabaseSettingsDlg";
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||||
|
this.Text = "Database Settings";
|
||||||
|
this.Load += new System.EventHandler(this.DatabaseSettings_Load);
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.TextBox connectionStringTextBox1;
|
||||||
|
private System.Windows.Forms.Label connectionStringLabel;
|
||||||
|
private System.Windows.Forms.Button okButton;
|
||||||
|
private System.Windows.Forms.Button cancelButton;
|
||||||
|
private System.Windows.Forms.Label languageLabel;
|
||||||
|
private System.Windows.Forms.TextBox languageTextBox;
|
||||||
|
}
|
||||||
|
}
|
||||||
51
UserManagement/DatabaseSettingsDlg.cs
Normal file
51
UserManagement/DatabaseSettingsDlg.cs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
///
|
||||||
|
/// Copyright (c) 2017 Sensus Metering Systems
|
||||||
|
///
|
||||||
|
using System;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using UserManagement.Resources;
|
||||||
|
|
||||||
|
namespace UserManagement
|
||||||
|
{
|
||||||
|
public partial class DatabaseSettingsDlg : Form
|
||||||
|
{
|
||||||
|
public DatabaseSettingsDlg()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DatabaseSettings_Load(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Localize();
|
||||||
|
|
||||||
|
connectionStringTextBox1.Text = Program.LocalSettings.ConnectionString;
|
||||||
|
languageTextBox.Text = Program.LocalSettings.Language;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Localize()
|
||||||
|
{
|
||||||
|
Text = Strings.Settings;
|
||||||
|
connectionStringLabel.Text = Strings.Connection_string;
|
||||||
|
languageLabel.Text = Strings.Language;
|
||||||
|
okButton.Text = Strings.OkBtnText;
|
||||||
|
cancelButton.Text = Strings.CancelBtnText;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void okButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Program.LocalSettings.ConnectionString = connectionStringTextBox1.Text;
|
||||||
|
Program.LocalSettings.Language = languageTextBox.Text;
|
||||||
|
|
||||||
|
Program.LocalSettings.Save();
|
||||||
|
|
||||||
|
DialogResult = DialogResult.OK;
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cancelButton_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
DialogResult = DialogResult.Cancel;
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
120
UserManagement/DatabaseSettingsDlg.resx
Normal file
120
UserManagement/DatabaseSettingsDlg.resx
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
132
UserManagement/LocalSettings.cs
Normal file
132
UserManagement/LocalSettings.cs
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
///
|
||||||
|
/// Copyright (c) 2017 Sensus Metering Systems
|
||||||
|
///
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
|
namespace UserManagement
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class to be serialized to an XML file...
|
||||||
|
/// Public members are local settings.
|
||||||
|
/// These settings are modified by dialogs invoked by menu items
|
||||||
|
/// Edit->Preferences ... PreferencesDlg ... S1.1(language, etc. local settings), and
|
||||||
|
/// Edit->Advanced settings ... AdvancedSettingsDlg ... S1.2(spec. where bench settings are stored)
|
||||||
|
/// </summary>
|
||||||
|
[XmlRootAttribute("UserManagement")]
|
||||||
|
public class LocalSettings
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// User interface language (used as CultureInfo(..) constructor argument).
|
||||||
|
/// </summary>
|
||||||
|
public string Language = "en";
|
||||||
|
|
||||||
|
public string ConnectionString;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Login method: UserName, FullName or Number
|
||||||
|
/// </summary>
|
||||||
|
public Config.Entities.LoginMethod LoginMethod;
|
||||||
|
|
||||||
|
/// MainWnd
|
||||||
|
public int MainWndLeft;
|
||||||
|
public int MainWndTop;
|
||||||
|
public int MainWndWidth;
|
||||||
|
public int MainWndHeight;
|
||||||
|
public bool ManiWndMaximized;
|
||||||
|
|
||||||
|
|
||||||
|
public LocalSettings()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Load public fields of this class from the XML file.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>LocalSettings object or null when Load() fails</returns>
|
||||||
|
public static LocalSettings Load(string fileName)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (TextReader reader = new StreamReader(fileName))
|
||||||
|
{
|
||||||
|
LocalSettings ls = (new XmlSerializer(typeof(LocalSettings))).Deserialize(reader) as LocalSettings;
|
||||||
|
// Copy the settings just in case De-serialize() completes OK
|
||||||
|
return ls;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
string msg = e.Message;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Save public fields of this class to the XML file.
|
||||||
|
/// </summary>
|
||||||
|
public void Save()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (TextWriter writer = new StreamWriter(Program.LocalSettingsFileName))
|
||||||
|
{
|
||||||
|
(new XmlSerializer(typeof(LocalSettings))).Serialize(writer, this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
string msg = e.Message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates history stored in a string array by a new latest string.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="lastStrValue">Lste entered string</param>
|
||||||
|
/// <returns>true = updated and saved</returns>
|
||||||
|
public bool UpdateHistory(string lastStrValue, ref string[] history, int maxHistoryLen = 10)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(lastStrValue)) return false;
|
||||||
|
|
||||||
|
int currentHistoryCount = (history != null) ? history.Length : 0;
|
||||||
|
|
||||||
|
int match = -1;
|
||||||
|
for (int i = 0; i < currentHistoryCount; i++)
|
||||||
|
{
|
||||||
|
if (history[i] == lastStrValue)
|
||||||
|
{
|
||||||
|
match = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match >= 0 || currentHistoryCount >= maxHistoryLen)
|
||||||
|
{
|
||||||
|
/// History does not have to be (because of a match) or should not be extended (because of the lenght)
|
||||||
|
if (match < 0) match = currentHistoryCount - 1;
|
||||||
|
|
||||||
|
for (int j = match; j > 0; j--)
|
||||||
|
{
|
||||||
|
history[j] = history[j - 1];
|
||||||
|
}
|
||||||
|
history[0] = lastStrValue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/// History wiil be extended, new item inserted at the beginning
|
||||||
|
string[] newHistory = new string[currentHistoryCount + 1];
|
||||||
|
newHistory[0] = lastStrValue;
|
||||||
|
for (int j = 1; j <= currentHistoryCount; j++)
|
||||||
|
{
|
||||||
|
newHistory[j] = history[j - 1];
|
||||||
|
}
|
||||||
|
history = newHistory;
|
||||||
|
}
|
||||||
|
Save();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,21 +1,284 @@
|
|||||||
using System;
|
///
|
||||||
|
/// Copyright (c) 2017 Sensus Metering Systems
|
||||||
|
///
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using Users;
|
using Users.Entities;
|
||||||
|
using Users.Forms;
|
||||||
|
using NHibernate;
|
||||||
|
using FluentNHibernate;
|
||||||
|
|
||||||
namespace UserManagement
|
namespace UserManagement
|
||||||
{
|
{
|
||||||
static class Program
|
static class Program
|
||||||
{
|
{
|
||||||
|
public const string HomeDir = "C:\\UserManagement\\"; /// Contains subdirectories Results, Logs, Images, ...
|
||||||
|
|
||||||
|
/// Program information
|
||||||
|
public static string Version; /// version string
|
||||||
|
public static DateTime BuildDateTime; /// date and time of program build
|
||||||
|
|
||||||
|
/// Local settings
|
||||||
|
public static LocalSettings LocalSettings;
|
||||||
|
public const string LocalSettingsFileName = "config.xml";
|
||||||
|
public const string LocalSettingsBackupName = "config.backup.xml";
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The main entry point for the application.
|
/// The main entry point for the application.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[STAThread]
|
[STAThread]
|
||||||
static void Main()
|
static void Main()
|
||||||
{
|
{
|
||||||
|
/// Program version string
|
||||||
|
System.Reflection.Assembly thisAssembly = System.Reflection.Assembly.GetExecutingAssembly();
|
||||||
|
Version ver = thisAssembly.GetName().Version;
|
||||||
|
Version = string.Format("{0}.{1}.{2}", ver.Major, ver.Minor, ver.Build);
|
||||||
|
BuildDateTime = new System.IO.FileInfo(thisAssembly.Location).LastWriteTime;
|
||||||
|
|
||||||
|
/// Local program configuration directory including the trailing backslash
|
||||||
|
string locAppDataDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) +
|
||||||
|
Path.DirectorySeparatorChar + "UserManagement" + Path.DirectorySeparatorChar;
|
||||||
|
|
||||||
|
/// Check whether local application data directory exists.
|
||||||
|
/// If not, create it and copy the initial configuration to this directory.
|
||||||
|
/// This is done only once after a clean program installation on the first program start-up
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(locAppDataDir))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(locAppDataDir);
|
||||||
|
Environment.CurrentDirectory = locAppDataDir;
|
||||||
|
|
||||||
|
string sampleConfig = Application.StartupPath + Path.DirectorySeparatorChar + "SampleConfig" + Path.DirectorySeparatorChar;
|
||||||
|
if (File.Exists(sampleConfig + LocalSettingsFileName)) { File.Copy(sampleConfig + LocalSettingsFileName, LocalSettingsFileName); }
|
||||||
|
|
||||||
|
File.SetAttributes(LocalSettingsFileName, FileAttributes.Normal);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Environment.CurrentDirectory = locAppDataDir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Load the local settings
|
||||||
|
///
|
||||||
|
Program.LocalSettings = LocalSettings.Load(Program.LocalSettingsFileName);
|
||||||
|
if (Program.LocalSettings == null || Program.LocalSettings.ConnectionString == null)
|
||||||
|
{
|
||||||
|
/// Loading local seetings from regular config file failed. Use the backup
|
||||||
|
Program.LocalSettings = LocalSettings.Load(Program.LocalSettingsBackupName);
|
||||||
|
if (Program.LocalSettings == null || Program.LocalSettings.ConnectionString == null)
|
||||||
|
{
|
||||||
|
return; /// Fatal error
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LocalSettings.Save(); /// Save the settings to overwrite the wrong file
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/// Loading local seetings from the regular config file was successful. Update the backup
|
||||||
|
File.Copy(Program.LocalSettingsFileName, Program.LocalSettingsBackupName, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string culture = LocalSettings.Language.Replace('_', '-');
|
||||||
|
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(culture);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
string msg = e.Message;
|
||||||
|
MessageBox.Show("Selected language not supported.\nUsing English.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
|
||||||
|
System.Threading.Thread.CurrentThread.CurrentUICulture =
|
||||||
|
new System.Globalization.CultureInfo("en");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// This belongs to Application.Run(new MainWnd()) ...
|
||||||
|
/// and should be executed before opening 'loginDlg'
|
||||||
Application.EnableVisualStyles();
|
Application.EnableVisualStyles();
|
||||||
Application.SetCompatibleTextRenderingDefault(false);
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
|
||||||
|
|
||||||
|
/// User login
|
||||||
|
bool retryLogin = true; /// true = stay in a login loop
|
||||||
|
do
|
||||||
|
{
|
||||||
|
LoginDlg loginDlg;
|
||||||
|
if (LocalSettings.LastBenchName != null)
|
||||||
|
{
|
||||||
|
loginDlg = new LoginDlg();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
loginDlg = new LoginDlg();
|
||||||
|
}
|
||||||
|
loginDlg.Method = LocalSettings.LoginMethod;
|
||||||
|
DialogResult dr = loginDlg.ShowDialog();
|
||||||
|
|
||||||
|
if (dr == DialogResult.Cancel)
|
||||||
|
{
|
||||||
|
return; /// Login canceled --> Exit application
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = 0; i < LocalSettings.BenchesCount; i++)
|
||||||
|
{
|
||||||
|
if (LocalSettings.TestBenches[i].BenchName == loginDlg.BenchName)
|
||||||
|
{
|
||||||
|
log.FatalFormat("Test bench name: {0}", loginDlg.BenchName);
|
||||||
|
|
||||||
|
Config.IUser loadedUser = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
bool authorized = false;
|
||||||
|
|
||||||
|
if (User.IsPowerUser(loginDlg.Alias, loginDlg.Password))
|
||||||
|
{
|
||||||
|
loadedUser = new User(loginDlg.Alias, 6, true);
|
||||||
|
authorized = loadedUser.Authorize(loginDlg.Alias, loginDlg.Password);
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Try authorisation with Users DB first
|
||||||
|
///
|
||||||
|
if (!authorized)
|
||||||
|
{
|
||||||
|
bool settingsChanged = false;
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(LocalSettings.TestBenches[i].UsersDBSettings.ConnectionString))
|
||||||
|
{
|
||||||
|
LocalSettings.TestBenches[i].UsersDBSettings.ConnectionString = LocalSettings.TestBenches[i].ProceduresDBSettings.ConnectionString;
|
||||||
|
LocalSettings.TestBenches[i].UsersDBSettings.DbType = LocalSettings.TestBenches[i].ProceduresDBSettings.DbType;
|
||||||
|
settingsChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Load and authorise user from the UsersDB database
|
||||||
|
try
|
||||||
|
{
|
||||||
|
switch (loginDlg.Method)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case Config.Entities.LoginMethod.UserName:
|
||||||
|
loadedUser = Users.Entities.User.LoadUserByName(loginDlg.Alias, LocalSettings.TestBenches[i].UsersDBSettings);
|
||||||
|
if (loadedUser != null) authorized = loadedUser.Authorize(loginDlg.Alias, loginDlg.Password);
|
||||||
|
break;
|
||||||
|
case Config.Entities.LoginMethod.FullName:
|
||||||
|
loadedUser = Users.Entities.User.LoadUserByFullName(loginDlg.Alias, LocalSettings.TestBenches[i].UsersDBSettings);
|
||||||
|
if (loadedUser != null) authorized = loadedUser.AuthorizeFullName(loginDlg.Alias, loginDlg.Password);
|
||||||
|
break;
|
||||||
|
case Config.Entities.LoginMethod.Number:
|
||||||
|
int number;
|
||||||
|
if (!int.TryParse(loginDlg.Alias, out number)) break;
|
||||||
|
loadedUser = Users.Entities.User.LoadUserByNumber(number, LocalSettings.TestBenches[i].UsersDBSettings);
|
||||||
|
if (loadedUser != null) authorized = loadedUser.AuthorizeNumber(number, loginDlg.Password);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
authorized = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settingsChanged && authorized) LocalSettings.Save();
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// One more attempt: authorisation with Config DB
|
||||||
|
///
|
||||||
|
if (!authorized)
|
||||||
|
{
|
||||||
|
/// Load and authorise user from the Config database
|
||||||
|
try
|
||||||
|
{
|
||||||
|
switch (loginDlg.Method)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case Config.Entities.LoginMethod.UserName:
|
||||||
|
loadedUser = Config.Entities.User.LoadUserByName(loginDlg.Alias, LocalSettings.TestBenches[i].ProceduresDBSettings);
|
||||||
|
if (loadedUser != null) authorized = loadedUser.Authorize(loginDlg.Alias, loginDlg.Password);
|
||||||
|
break;
|
||||||
|
case Config.Entities.LoginMethod.FullName:
|
||||||
|
loadedUser = Config.Entities.User.LoadUserByFullName(loginDlg.Alias, LocalSettings.TestBenches[i].ProceduresDBSettings);
|
||||||
|
if (loadedUser != null) authorized = loadedUser.AuthorizeFullName(loginDlg.Alias, loginDlg.Password);
|
||||||
|
break;
|
||||||
|
case Config.Entities.LoginMethod.Number:
|
||||||
|
int number;
|
||||||
|
if (!int.TryParse(loginDlg.Alias, out number)) break;
|
||||||
|
loadedUser = Config.Entities.User.LoadUserByNumber(number, LocalSettings.TestBenches[i].ProceduresDBSettings);
|
||||||
|
if (loadedUser != null) authorized = loadedUser.AuthorizeNumber(number, loginDlg.Password);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
authorized = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (authorized)
|
||||||
|
{
|
||||||
|
LocalSettings.LoginMethod = loginDlg.Method; /// Save the login method actually used
|
||||||
|
|
||||||
|
Users.DB.ConnectionString = Config.Data.CurrentBench.WaterMetersDBSettings.ConnectionString;
|
||||||
|
Users.DB.LoadSharedData();
|
||||||
|
|
||||||
|
/// This is to trigger an exception in case of a power user and no Config database
|
||||||
|
IList<User> listOfProcedures = Config.FluentCommon.CreateSession(Config.Entities.DBKind.Config)
|
||||||
|
.QueryOver<User>()
|
||||||
|
.List();
|
||||||
|
|
||||||
|
retryLogin = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (retryLogin)
|
||||||
|
{
|
||||||
|
/// Close Fluent NHibernate
|
||||||
|
MessageBox.Show("Invalid user, password or bench", "Error", MessageBoxButtons.OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
/// Database connect failed, ask what to do
|
||||||
|
switch ((new DatabaseSettingsDlg().ShowDialog())
|
||||||
|
{
|
||||||
|
case DialogResult.Abort: return; /// Exit program
|
||||||
|
case DialogResult.Retry: break; /// Retry the loop
|
||||||
|
default:
|
||||||
|
/// Open 'DatabaseSetingsDlg' and retry DB connect on OK
|
||||||
|
if (new Users.Forms.LoginDlg(true).ShowDialog() == DialogResult.Cancel ||
|
||||||
|
new BenchesDlg().ShowDialog() == DialogResult.Cancel)
|
||||||
|
{
|
||||||
|
return; /// Exit program
|
||||||
|
}
|
||||||
|
Program.LocalSettings = LocalSettings.Load(Program.LocalSettingsFileName);
|
||||||
|
if (Program.LocalSettings == null) return; /// Fatal error
|
||||||
|
break; /// Retry the loop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // if benchname is OK
|
||||||
|
} // for all benches in local settings loop
|
||||||
|
} // not Canceled
|
||||||
|
} //do
|
||||||
|
while (retryLogin);
|
||||||
|
|
||||||
|
IList<User> listOfUsers = Config.FluentCommon.CreateSession(Config.Entities.DBKind.Config)
|
||||||
|
.QueryOver<User>()
|
||||||
|
.List();
|
||||||
|
|
||||||
Application.Run(new Users.Forms.UserManagementDlg());
|
Application.Run(new Users.Forms.UserManagementDlg());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
108
UserManagement/Resources/Strings.Designer.cs
generated
Normal file
108
UserManagement/Resources/Strings.Designer.cs
generated
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace UserManagement.Resources {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Strings {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Strings() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("UserManagement.Resources.Strings", typeof(Strings).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Cancel.
|
||||||
|
/// </summary>
|
||||||
|
internal static string CancelBtnText {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("CancelBtnText", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Connection string.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Connection_string {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Connection_string", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Language.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Language {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Language", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to OK.
|
||||||
|
/// </summary>
|
||||||
|
internal static string OkBtnText {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("OkBtnText", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Settings.
|
||||||
|
/// </summary>
|
||||||
|
internal static string Settings {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Settings", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
135
UserManagement/Resources/Strings.resx
Normal file
135
UserManagement/Resources/Strings.resx
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="CancelBtnText" xml:space="preserve">
|
||||||
|
<value>Cancel</value>
|
||||||
|
</data>
|
||||||
|
<data name="Connection_string" xml:space="preserve">
|
||||||
|
<value>Connection string</value>
|
||||||
|
</data>
|
||||||
|
<data name="Language" xml:space="preserve">
|
||||||
|
<value>Language</value>
|
||||||
|
</data>
|
||||||
|
<data name="OkBtnText" xml:space="preserve">
|
||||||
|
<value>OK</value>
|
||||||
|
</data>
|
||||||
|
<data name="Settings" xml:space="preserve">
|
||||||
|
<value>Settings</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
||||||
@ -35,6 +35,12 @@
|
|||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="FluentNHibernate">
|
||||||
|
<HintPath>..\packages\FluentNHibernate.2.0.3.0\lib\net40\FluentNHibernate.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="NHibernate">
|
||||||
|
<HintPath>..\packages\NHibernate.4.0.4.4000\lib\net40\NHibernate.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
@ -47,8 +53,23 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="DatabaseSettingsDlg.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="DatabaseSettingsDlg.designer.cs">
|
||||||
|
<DependentUpon>DatabaseSettingsDlg.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="LocalSettings.cs" />
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="Resources\Strings.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<DependentUpon>Strings.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<EmbeddedResource Include="DatabaseSettingsDlg.resx">
|
||||||
|
<DependentUpon>DatabaseSettingsDlg.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Properties\Resources.resx">
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
@ -59,6 +80,10 @@
|
|||||||
<DependentUpon>Resources.resx</DependentUpon>
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
<DesignTime>True</DesignTime>
|
<DesignTime>True</DesignTime>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<EmbeddedResource Include="Resources\Strings.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Strings.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
<None Include="app.config" />
|
<None Include="app.config" />
|
||||||
<None Include="Properties\Settings.settings">
|
<None Include="Properties\Settings.settings">
|
||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
@ -71,6 +96,10 @@
|
|||||||
</Compile>
|
</Compile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Config\Config.csproj">
|
||||||
|
<Project>{743DF7DB-C7B6-42EB-986D-0F485E5588E4}</Project>
|
||||||
|
<Name>Config</Name>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\Users\Users.csproj">
|
<ProjectReference Include="..\Users\Users.csproj">
|
||||||
<Project>{6E5CB0E9-E1B6-4E5D-AC6E-B1049E180F2B}</Project>
|
<Project>{6E5CB0E9-E1B6-4E5D-AC6E-B1049E180F2B}</Project>
|
||||||
<Name>Users</Name>
|
<Name>Users</Name>
|
||||||
|
|||||||
@ -25,7 +25,7 @@ namespace Users.Forms
|
|||||||
bool noDatabase;
|
bool noDatabase;
|
||||||
|
|
||||||
|
|
||||||
Config.Entities.LoginMethod method;
|
public Config.Entities.LoginMethod Method;
|
||||||
public string VersionString;
|
public string VersionString;
|
||||||
|
|
||||||
|
|
||||||
@ -97,7 +97,7 @@ namespace Users.Forms
|
|||||||
|
|
||||||
string GetAliasLabel()
|
string GetAliasLabel()
|
||||||
{
|
{
|
||||||
switch (method)
|
switch (Method)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case Config.Entities.LoginMethod.UserName: return Strings.User_name;
|
case Config.Entities.LoginMethod.UserName: return Strings.User_name;
|
||||||
@ -121,7 +121,7 @@ namespace Users.Forms
|
|||||||
Config.Entities.User loadedUser = Config.Entities.User.LoadUserByName(user);
|
Config.Entities.User loadedUser = Config.Entities.User.LoadUserByName(user);
|
||||||
if (loadedUser != null)
|
if (loadedUser != null)
|
||||||
{
|
{
|
||||||
switch (method)
|
switch (Method)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case Config.Entities.LoginMethod.UserName:
|
case Config.Entities.LoginMethod.UserName:
|
||||||
@ -168,9 +168,8 @@ namespace Users.Forms
|
|||||||
|
|
||||||
private void aliasLabel_Click(object sender, EventArgs e)
|
private void aliasLabel_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
method++;
|
if (++Method == Config.Entities.LoginMethod.Count) Method = 0;
|
||||||
if (method == Config.Entities.LoginMethod.Count)
|
|
||||||
method = 0;
|
|
||||||
aliasLabel.Text = GetAliasLabel();
|
aliasLabel.Text = GetAliasLabel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user