PageRenderTime 43ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 1ms

/Views/Controllers/Mediator.cs

https://github.com/dimpapadim3/NErgyPlatformSample
C# | 615 lines | 447 code | 113 blank | 55 comment | 53 complexity | f4e65b625cee277a193b03c5cb9d03a9 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Xml.Linq;
  8. using NCad.Application.Views.Controllers;
  9. using NCad.Models;
  10. using NCad.Views;
  11. using NCad.Views.Controllers;
  12. using NErgy.Building;
  13. using NErgy.Building.BuildingShell;
  14. using NErgy.Building.Calculations;
  15. using NErgy.Building.ThermalZones;
  16. using NErgy.Silverlight.Building;
  17. using NErgy.Silverlight.Helpers;
  18. using NErgy.Silverlight.Models;
  19. using NErgy.Silverlight.Views.ViewModels;
  20. using NErgy.Silverlight.Web.Models;
  21. using Silverlight.Wizard;
  22. using SimpleMvvmToolkit;
  23. using TranslusentElement = NErgy.Silverlight.Models.StructuralElements.TranslusentElement;
  24. using System.IO;
  25. using System.Text;
  26. namespace NErgy.Silverlight.Views.Controllers
  27. {
  28. public enum HelpPageTypeId
  29. {
  30. SystemsPage = 1,
  31. ThermalZonePage = 2,
  32. ShellPage = 3,
  33. ProjectsPage = 4,
  34. }
  35. public class Mediator : NCad.Application.Views.Controllers.Mediator
  36. {
  37. private static Mediator instance;
  38. public int ActivePageType { get; set; }
  39. public static User User;
  40. private readonly CalculationEngine _CalculationEngine = new CalculationEngine();
  41. public SectionEditorController SectionEditorController;
  42. private ThermalSectionEditor _ThermalSectionEditor; // = new ThermalSectionEditor();
  43. private OpeningEditorController openingcontroller;
  44. #region Views region
  45. private ToolbarView _ToolbarView;
  46. public IDesignView DesignView { get; set; }
  47. public ToolbarView ToolbarView
  48. {
  49. get { return _ToolbarView; }
  50. set
  51. {
  52. _ToolbarView = value;
  53. _ToolbarView.CommandSelected += _ToolbarView_CommandSelected;
  54. }
  55. }
  56. public ProjectView ProjectView { get; set; }
  57. #endregion
  58. public Mediator(ThermalBuildingModel Model)
  59. : base(Model)
  60. {
  61. ApplicationUser = WebContext.Current.User;
  62. SectionEditorController = new SectionEditorController { ActionManager = ActionManager };
  63. //MainView3D = new BalderView() {Height = 100, Width = 200};
  64. }
  65. public Web.User ApplicationUser { get; set; }
  66. public IView3D MainView3D { get; set; }
  67. public static Mediator Instance
  68. {
  69. get
  70. {
  71. if (instance == null)
  72. {
  73. instance = new Mediator(ThermalBuildingModel.Instance);
  74. instance.ActionManager = new ActionManager();
  75. }
  76. return instance;
  77. }
  78. }
  79. private ControllState ConstrolState { get; set; }
  80. public ThermalBuildingModel Model
  81. {
  82. get { return base.Model as ThermalBuildingModel; }
  83. }
  84. public IStatusBar StatusBar { get; set; }
  85. public bool IsEnergyStudy
  86. {
  87. get {
  88. if (Model.Project != null)
  89. return Model.Project.IsProjectEnergyStudy.HasValue? Model.Project.IsProjectEnergyStudy.Value: false;
  90. return false;
  91. }
  92. }
  93. public void ProjectListViewModelSelectedProjectChanged(object sender, NotificationEventArgs<Project> e)
  94. {
  95. ThermalBuildingModel.Instance.Project = e.Data;
  96. }
  97. private void DisplaySlectedElement(object e)
  98. {
  99. if (e is Web.Models.Building)
  100. {
  101. DesignView.MainRegion.Content = new BuildingView() { ViewModel = new BuildingViewModel(e as Web.Models.Building) };
  102. }
  103. if (e is Project)
  104. {
  105. DesignView.MainRegion.Content = new ProjectView() { ViewModel = e as ProjectViewModel };
  106. }
  107. }
  108. public void SerialzeModel()
  109. {
  110. string serilizedData = XmlSerializer.Serialize(Model);
  111. }
  112. private void _ToolbarView_CommandSelected(object sender, EventArgs e)
  113. {
  114. ConstrolState = sender as ControllState;
  115. if (ConstrolState is AddBeamFree)
  116. {
  117. Instance.SaveBuildingData();
  118. }
  119. if (ConstrolState is AddSlabRectangular)
  120. {
  121. }
  122. if (ConstrolState is SelectionState)
  123. {
  124. }
  125. }
  126. internal void EditStory(BuildingStory buildingStory)
  127. {
  128. Controller2D.ClearView();
  129. Controller2D.SetStoryPlane(buildingStory.StoryPlane);
  130. Controller2D.Model = Model;
  131. Controller2D.SetUpScene();
  132. }
  133. public override void Add3DView(IView3D mainView3D)
  134. {
  135. base.Add3DView(mainView3D);
  136. }
  137. protected override NCad.Application.Views.Controllers.TreeViewController CreateTreeViewController()
  138. {
  139. return new TreeViewControllerKenak() { Mediator = this };
  140. }
  141. public void CalculateEnergyNeeds()
  142. {
  143. //_CalculationEngine.CaluclateEnergyNeeds(Model.Project.Buildings);
  144. }
  145. public void ValidateThermalElementsMaxU()
  146. {
  147. //_CalculationEngine.CheckMaxU(Model.Project.Buildings);
  148. }
  149. internal void SaveBuildingData()
  150. {
  151. Model.SelectedBuilding.BuildingDataXml = XmlSerializer.Serialize(Model.SelectedBuilding.BuildingModel);
  152. //ProjectView.ViewModel.SaveChanges();
  153. }
  154. // public void Add3DView()
  155. //{
  156. // Controller3D.Model = Model;
  157. // var view = new BalderView { Width = 500, Height = 300 };
  158. // DesignView.MainRegion.Content = view;
  159. // Controller3D.View = view;
  160. // Controller3D.SetUpScene();
  161. //}
  162. protected override IController CreateController3D()
  163. {
  164. // return new Controller3DBabylon() { ActionManager = ActionManager };
  165. return new Controller3DBalder { ActionManager = ActionManager };
  166. }
  167. public void Initialize3DController(IController controller = null)
  168. {
  169. if (controller == null)
  170. {
  171. Controller3D = CreateController3D();
  172. }
  173. else
  174. {
  175. Controller3D = controller;
  176. }
  177. }
  178. protected override LiveGeometryController CreateController2D()
  179. {
  180. return new Controller2DLiveGeometry { ActionManager = ActionManager };
  181. }
  182. internal void OpenNewSectionEditor(object p)
  183. {
  184. //OpenSectionEditorInWindowStrategy(p);
  185. OpenSectionEditorInRegionStrategy(p);
  186. }
  187. private void OpenSectionEditorInRegionStrategy(object p)
  188. {
  189. _ThermalSectionEditor = new ThermalSectionEditor();
  190. DesignView.SetSectionView(_ThermalSectionEditor);
  191. SectionEditorController.Initialize(_ThermalSectionEditor);
  192. SectionEditorController.Create3DController();
  193. if (Model.CurrentSelectedItem is IThermalElement)
  194. {
  195. if ((Model.CurrentSelectedItem as IThermalElement).Section == null)
  196. SectionEditorController.SelectedCompositeSection =
  197. SectionEditorController.TestCompositeThermalSection();
  198. else
  199. SectionEditorController.SelectedCompositeSection =
  200. (Model.CurrentSelectedItem as IThermalElement).Section;
  201. }
  202. if (p is IThermalSection)
  203. {
  204. SectionEditorController.SelectedCompositeSection = ((IThermalSection)p);
  205. }
  206. SectionEditorController.SetUpScene();
  207. }
  208. public void OpenSectionEditorInWindowStrategy(object p)
  209. {
  210. _ThermalSectionEditor = new ThermalSectionEditor();
  211. DesignView.SetSectionView(_ThermalSectionEditor);
  212. SectionEditorController.Initialize(_ThermalSectionEditor);
  213. SectionEditorController.Create3DController();
  214. if (Model.CurrentSelectedItem is IThermalElement)
  215. {
  216. if ((Model.CurrentSelectedItem as IThermalElement).Section == null)
  217. SectionEditorController.SelectedCompositeSection =
  218. SectionEditorController.TestCompositeThermalSection();
  219. else
  220. SectionEditorController.SelectedCompositeSection =
  221. (Model.CurrentSelectedItem as IThermalElement).Section;
  222. }
  223. if (p is IThermalSection)
  224. {
  225. SectionEditorController.SelectedCompositeSection = ((IThermalSection)p);
  226. }
  227. SectionEditorController.SetUpScene();
  228. //_ThermalSectionEditor = new ThermalSectionEditor();
  229. //SectionEditorController.Initialize(_ThermalSectionEditor);
  230. //SectionEditorController.Create3DController(); //_ThermalSectionEditor.SectionDarwingView);
  231. ////SectionEditorController.Create2DController(_ThermalSectionEditor.DrawingView2D);
  232. ////SectionEditorController.SelectedSection = SectionEditorController.TestCompositeThermalSection();
  233. //if (Model.CurrentSelectedItem is IThermalElement)
  234. //{
  235. // if ((Model.CurrentSelectedItem as IThermalElement).Section == null)
  236. // throw new Exception("Structural Element Section Not Set");
  237. // SectionEditorController.SelectedCompositeSection =
  238. // (Model.CurrentSelectedItem as IThermalElement).Section;
  239. //}
  240. //if (p is IThermalSection)
  241. //{
  242. // SectionEditorController.SelectedCompositeSection = ((IThermalSection)p);
  243. //}
  244. //SectionEditorController.SetUpScene();
  245. ////_ThermalSectionEditor.SectionDarwingView.IsPaused = false;
  246. ShowAsChildWindow(_ThermalSectionEditor);
  247. }
  248. private void ShowAsChildWindow(object ContentControl)
  249. {
  250. var SectionWindow = new ChildWindow();
  251. SectionWindow.Height = 500;
  252. SectionWindow.Width = 800;
  253. SectionWindow.Content = ContentControl;
  254. SectionWindow.Visibility = Visibility.Visible;
  255. SectionWindow.Show();
  256. //SectionWindow.Closing += new EventHandler<System.ComponentModel.CancelEventArgs>(SectionWindow_Closing);
  257. }
  258. public static ChildWindow OpenWindow(object ContentControl,double _Width = 700, double _Height = 500)
  259. {
  260. var SectionWindow = new ChildWindow {Width=_Width,Height=_Height};
  261. SectionWindow.Content = ContentControl;
  262. SectionWindow.Visibility = Visibility.Visible;
  263. // SectionWindow.Title = ApplicationStrings.MaterialTitle;
  264. SectionWindow.Show();
  265. return SectionWindow;
  266. }
  267. public static void OpenInRegion(ContentControl region, object contentControl)
  268. {
  269. region.Content = contentControl;
  270. }
  271. internal void OpenNewOpeningsEditor(object p)
  272. {
  273. openingcontroller = new OpeningEditorController();
  274. openingcontroller.View = DesignView.MainView3D;
  275. openingcontroller.AddOpeningToView(p as Opening);
  276. var _OpeningEditor = new OpeningEditor();
  277. //_OpeningEditor.TransparentElement = (p as Opening).ThermalOpening as KoufomaMono;
  278. //var window = OpenWindow(_OpeningEditor);
  279. //window.Closing += new EventHandler<System.ComponentModel.CancelEventArgs>(window_Closing);
  280. OpenInRegion(DesignView.SecondaryRegion, _OpeningEditor);
  281. }
  282. private void window_Closing(object sender, CancelEventArgs e)
  283. {
  284. openingcontroller.ClearOpeningFromView();
  285. }
  286. internal void OpenShadingElementEditor(IStructuralArea iStructuralArea)
  287. {
  288. throw new NotImplementedException();
  289. }
  290. internal void CreateNewDesignModel()
  291. {
  292. Model.NewDesignModel();
  293. }
  294. //private List<IController> Controllers = new List<IController>();
  295. //public void GenerateMenuItems()
  296. //{
  297. // Controllers.ForEach(c=>c.GenerateMenuItems());
  298. //}
  299. public void OpenStandardsOpaqueElement(TranslusentElement selectedTranslusentElement)
  300. {
  301. OpenWindow(new InspectionOpaqueView()
  302. {
  303. ViewModel = new InspectionTranslusentViewModel(selectedTranslusentElement)
  304. });
  305. }
  306. public void OpenLibrariesOpaqueElement(TranslusentElement selectedTranslusentElement)
  307. {
  308. var viewmodel = new ThermalEditorViewModel() { };
  309. OpenWindow(new ThermalSectionEditor()
  310. {
  311. ViewModel = new ThermalEditorViewModel()
  312. });
  313. }
  314. public void OpenDialogAddTRanslusentElementToLibrary(TranslusentElement selectedTranslusentElement)
  315. {
  316. if (selectedTranslusentElement != null)
  317. if (selectedTranslusentElement.U > 0)
  318. {
  319. //new SectionLibrariesView()
  320. // {
  321. // ViewModel = new SectionLibrariesListAddSectionViewModel() { U = selectedTranslusentElement.U }
  322. // }
  323. var sharedViewModel = new SectionLibrariesListAddSectionViewModel() { U = selectedTranslusentElement.U };
  324. var wizard = new WizardControl();
  325. wizard.manager.Add(new WizardStep() { Content = new SectionLibrariesView() { ViewModel = sharedViewModel }, StepIndex = 1, StepHeaderText = "Επιλεξτε Βιβλιοθήκη", StepName = "LibrarySelectionStep" });
  326. wizard.manager.Add(new WizardStep() { Content = new SectionNameView() { DataContext = sharedViewModel }, StepIndex = 2, StepHeaderText = "Επιλεξτε Ονομα Διατομής", StepName = "SectionSelectionStep" });
  327. var window = OpenWindow(wizard);
  328. }
  329. }
  330. public void OpenHelpWindow()
  331. {
  332. OpenWindow(new HelpUserControl(),1000,500);
  333. }
  334. public void SaveProjectAsXml()
  335. {
  336. var TeeExporter = new ProjectTeeXmlConverter();
  337. SaveFileDialog save = new SaveFileDialog();
  338. save.Filter = "*.xml|*.*";
  339. save.FilterIndex = 1;
  340. bool? saveClicked = save.ShowDialog();
  341. if (saveClicked == true)
  342. {
  343. System.IO.Stream stream = save.OpenFile();
  344. // StreamWriter writer = new StreamWriter(stream);
  345. // writer.Write(projectxml);
  346. // var projectxml =
  347. TeeExporter.CreateTeeXml(this.Model.Project, stream);
  348. stream.Close();
  349. }
  350. }
  351. public void LoadProjectFromXml()
  352. {
  353. OpenFileDialog openFileDialog = new OpenFileDialog();
  354. openFileDialog.Filter = "*.xml|*.*";
  355. if (openFileDialog.ShowDialog() == true)
  356. {
  357. System.IO.FileStream fileStream = openFileDialog.File.OpenRead();
  358. // byte[] textBytes = new byte[fileStream.Length];
  359. // fileStream.Read(textBytes, 0, textBytes.Length);
  360. // var text = UTF8Encoding.UTF8.GetString(textBytes, 0, textBytes.Length);
  361. var xDoc = XDocument.Load(fileStream);
  362. var TeeExporter = new ProjectTeeXmlBackConverted();
  363. var newProject = TeeExporter.CreateProject(xDoc);
  364. AddProject(newProject);
  365. }
  366. }
  367. public EventHandler OnNewProjectCreated;
  368. private Action<Exception> _action;
  369. public void CreateNewProjectStudy()
  370. {
  371. var newProject = new Project() { IsProjectEnergyStudy = true};
  372. CreateEmptyBuilding(newProject);
  373. AddProject(newProject);
  374. }
  375. public void CreateNewProject()
  376. {
  377. var newProject = new Project() { IsProjectEnergyStudy = false };
  378. CreateEmptyBuilding(newProject);
  379. AddProject(newProject);
  380. }
  381. private void AddProject(Project newProject)
  382. {
  383. newProject.UserID = (string) WebContext.Current.User.GetIdentity();
  384. newProject.LocalIdCounter = EntitiesIdCounters.GetProjectIdCounterForProject(newProject);
  385. Model.DataAccesLayerService.AddProject(newProject);
  386. Model.DataAccesLayerService.SaveChanges(e =>
  387. {
  388. if (OnNewProjectCreated != null)
  389. OnNewProjectCreated(newProject, new EventArgs());
  390. });
  391. }
  392. private void CreateEmptyBuilding(Project project)
  393. {
  394. // project.Building = new List<Web.Models.Building>();
  395. if (project.Building != null)
  396. if (project.Building.Count == 0)
  397. {
  398. var newBuilding = new Web.Models.Building()
  399. {
  400. BuildingUsageID = project.ProjectUseageId,
  401. BuildingModel = new BuildingModel()
  402. {
  403. BuildingStories = new List<BuildingStory>(),
  404. ThermalZones = new List<ThermalZone>(),
  405. SunAreas = new List<SunArea>(),
  406. NonHeatedArea = new List<NonHeatedArea>(),
  407. }
  408. };
  409. Model.DataAccesLayerService.AddbuildingToProject(project, newBuilding);
  410. Model.DataAccesLayerService.SaveChanges(e =>
  411. {
  412. });
  413. // Model.Project.Building.Add(newBuilding);
  414. }
  415. }
  416. public void RemoveBuildingFromProject(Web.Models.Building building)
  417. {
  418. Model.DataAccesLayerService.RemoveBuildingFromProject(building.Project, building);
  419. _action = e =>
  420. {
  421. if (e == null) StatusBar.Display("Το Κτιριο διαγράφηκε");
  422. };
  423. Model.DataAccesLayerService.SaveChanges(_action);
  424. }
  425. public void RemoveThermalZoneFromBuilding(ThermalZone thermalZone, Web.Models.Building building)
  426. {
  427. if (building.BuildingModel.ThermalZones.Contains(thermalZone))
  428. {
  429. building.BuildingModel.ThermalZones.Remove(thermalZone);
  430. SaveBuildingData();
  431. _action = e =>
  432. {
  433. if (e == null) StatusBar.Display("η Ζώνη διαγράφηκε");
  434. };
  435. Model.DataAccesLayerService.SaveChanges(_action);
  436. }
  437. }
  438. public void RemoveNonHeatedAreaFromBuilding(NonHeatedArea nonHeatedArea, Web.Models.Building building)
  439. {
  440. if (building.BuildingModel.NonHeatedArea.Contains(nonHeatedArea))
  441. {
  442. building.BuildingModel.NonHeatedArea.Remove(nonHeatedArea);
  443. SaveBuildingData();
  444. _action = e =>
  445. {
  446. if (e == null) StatusBar.Display("o χώρος διαγράφηκε");
  447. };
  448. Model.DataAccesLayerService.SaveChanges(_action);
  449. }
  450. }
  451. public void RemoveSunAreaFromBuilding(SunArea sunArea, Web.Models.Building building)
  452. {
  453. if (building.BuildingModel.SunAreas.Contains(sunArea))
  454. {
  455. building.BuildingModel.SunAreas.Remove(sunArea);
  456. SaveBuildingData();
  457. _action = e =>
  458. {
  459. if (e == null) StatusBar.Display("o χώρος διαγράφηκε");
  460. };
  461. Model.DataAccesLayerService.SaveChanges(_action);
  462. }
  463. }
  464. public void RemoveSeparatingSurfuceFromShell(SeparatingSurfuce separatingSurfuce, Shell shell)
  465. {
  466. if (shell.SeparatingSurfuces.Contains(separatingSurfuce))
  467. {
  468. shell.SeparatingSurfuces.Remove(separatingSurfuce);
  469. SaveBuildingData();
  470. _action = e =>
  471. {
  472. if (e == null) StatusBar.Display("o χώρος διαγράφηκε");
  473. };
  474. Model.DataAccesLayerService.SaveChanges(_action);
  475. }
  476. }
  477. public void DeleteProject(Project project)
  478. {
  479. _action = e =>
  480. {
  481. if (e == null) StatusBar.Display("Το Έργο διαγράφηκε");
  482. project.IsProjectHidden = true;
  483. EntitiesIdCounters.ProjectRemoved (project);
  484. };
  485. Model.DataAccesLayerService.SaveChanges(_action);
  486. }
  487. public void RequestSeparatingSurfaceByNumericUdDown(Shell value, int i)
  488. {
  489. if (value.SeparatingSurfuces != null)
  490. {
  491. if (value.SeparatingSurfuces.Count < i)
  492. {
  493. // value.SeparatingSurfuces.Add();
  494. }
  495. }
  496. }
  497. public void HandleException(Exception exception)
  498. {
  499. if (exception != null) Logger.Instance.Log(exception.Message);
  500. }
  501. }
  502. }