using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DiagramUI.Interfaces;
using DataWarehouse;
using DataWarehouse.Interfaces;
using DiagramUI;
using DataPerformer;
using EngineeringInitializer;
using BasicEngineeringUIFactory.Forms;
using BasicEngineeringUIFactory.Interfaces;
using DataPerformer.Interfaces;
using Diagram.UI.Factory;
using System.IO;
namespace BasicEngineeringUIFactory
{
public class EngineeringInitializer : IApplicationInitializer
{
#region Fields
IDatabaseCoordinator coordinator;
private static bool isInitialized;
OrdinaryDifferentialEquations.IDifferentialEquationSolver ordSolver;
DataPerformer.DifferentialEquationProcessor diffProcessor;
IDataPerformerRuntimeFactory strategy;
IApplicationInitializer[] initializers;
bool throwsRepeatException;
Dictionary<string, object>[] resources;
private TextWriter logWriter = null;
#endregion
#region Ctor
public EngineeringInitializer(IDatabaseCoordinator coordinator, OrdinaryDifferentialEquations.IDifferentialEquationSolver ordSolver,
DataPerformer.DifferentialEquationProcessor diffProcessor,
DataPerformer.Interfaces.IDataPerformerRuntimeFactory strategy, IApplicationInitializer[] initializers,
bool throwsRepeatException, Dictionary<string, object>[] resources, TextWriter logWriter)
{
this.coordinator = coordinator;
this.ordSolver = ordSolver;
this.diffProcessor = diffProcessor;
this.strategy = strategy;
this.initializers = initializers;
this.throwsRepeatException = throwsRepeatException;
DatabaseInterface.Coordinator = coordinator;
this.resources = resources;
this.logWriter = logWriter;
}
#endregion
#region IApplicationInitializer Members
void IApplicationInitializer.InitializeApplication()
{
if (isInitialized)
{
if (throwsRepeatException)
{
throw new Exception("Double initialization");
}
return;
}
isInitialized = true;
DatabaseInterface.Coordinator = coordinator;
Initialize(ordSolver, strategy, coordinator, initializers, throwsRepeatException);
if (logWriter == null)
{
//DataPerformerUI.Utils.ControlUtilites.ErrorHandler = DataPerformerUI.Utils.DataPerformerErrorHandler.Object;
}
else
{
// DataPerformerUI.Utils.ControlUtilites.ErrorHandler = new DiagramUI.ErrorHandlers.TextWriterErrorHandler(logWriter);
}
// ================== Formula Editor UI preparation ================
Chart.Classes.DataTextChooser.Localize = delegate(Control control)
{
ResourceService.Resources.LoadControlResources(control, resources);
};
FormulaEditorUI.FormulaEditorPanel fp = new FormulaEditorUI.FormulaEditorPanel();
fp.Prepare();
string seb = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string sel = "abcdefghijklmnopqrstuvwxyz_";
string[] sym = new string[] { seb, sel };
System.Globalization.CultureInfo c = System.Globalization.CultureInfo.CurrentCulture;
if (c.TwoLetterISOLanguageName.ToLower().Equals("ru"))
{
string srb = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
string srl = "абвгдеёжзийклмнопрстуфхцчшщьыъэюя";
sym = new string[] { seb, sel, srb, srl };
}
//char ct = '\u0442';
DataPerformerUI.PanelFormula.Symbols = sym;
// ================== End formula Editor UI preparation ================
DataPerformerUI.HeaderControl.Object = new DataPerformerUI.HeaderControl();
PanelDesktop.Cleaner = new StaticDataPerformer();
DataPerformerUI.SimplePointCollectionChooserFactory.Set();
Chart.Drawing.Factory.CirclePointFactory.Set();
}
#endregion
private static void Initialize(OrdinaryDifferentialEquations.IDifferentialEquationSolver ordSolver,
IDataPerformerRuntimeFactory strategy, IDatabaseCoordinator coordinator, IApplicationInitializer[] initializers,
bool throwsRepeatException)
{
DataPerformerInitializer.Initializer.InitializeApplication();
List<IApplicationInitializer> init = null;
if (initializers == null)
{
init = new List<IApplicationInitializer>();
}
else
{
init = new List<IApplicationInitializer>(initializers);
}
IApplicationInitializer initializer = new BasicEngineeringInitializer(ordSolver, DataPerformer.RungeProcessor.Processor, strategy, init.ToArray(),
throwsRepeatException);
initializer.InitializeApplication();
}
}
}