PageRenderTime 45ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/settings/FilteringPanel.cs

https://github.com/moscrif/ide
C# | 374 lines | 267 code | 102 blank | 5 comment | 63 complexity | e388c8804ca8d133b8ffc39d8521cfd3 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using Gtk;
  4. using System.Linq;
  5. using Moscrif.IDE.Controls;
  6. using Moscrif.IDE.Workspace;
  7. using Moscrif.IDE.Devices;
  8. using MessageDialogs = Moscrif.IDE.Controls.MessageDialog;
  9. using Moscrif.IDE.Iface.Entities;
  10. namespace Moscrif.IDE.Option
  11. {
  12. internal class FilteringPanel : OptionsPanel
  13. {
  14. FilteringWidget widget;
  15. public override Widget CreatePanelWidget ()
  16. {
  17. return widget = new FilteringWidget (ParentDialog);
  18. }
  19. public override void ShowPanel()
  20. {
  21. }
  22. public override void ApplyChanges ()
  23. {
  24. widget.Store ();
  25. }
  26. public override bool ValidateChanges ()
  27. {
  28. return true;
  29. }
  30. public override void Initialize (PreferencesDialog dialog, object dataObject)
  31. {
  32. base.Initialize (dialog, dataObject);
  33. }
  34. public override string Label {
  35. get { return MainClass.Languages.Translate("filtering"); }
  36. }
  37. public override string Icon {
  38. get { return "filter.png"; }
  39. }
  40. }
  41. public partial class FilteringWidget : Gtk.Bin
  42. {
  43. private List<LogicalSystem> conditions;
  44. Gtk.ListStore filterStore = new Gtk.ListStore( typeof(string),typeof(LogicalSystem));
  45. Gtk.ListStore maskStore = new Gtk.ListStore(typeof(string));
  46. Gtk.Window parentWindow;
  47. public FilteringWidget(Gtk.Window parent)
  48. {
  49. parentWindow = parent;
  50. this.Build();
  51. tvFilter.AppendColumn(MainClass.Languages.Translate("name"), new Gtk.CellRendererText(), "text", 0);
  52. tvMask.AppendColumn(MainClass.Languages.Translate("name"), new Gtk.CellRendererText(), "text", 0);
  53. tvFilter.Model = filterStore;
  54. tvMask.Model = maskStore;
  55. if ( MainClass.Settings == null) return;
  56. if(MainClass.Settings == null || MainClass.Settings.LogicalSort.Count<1)
  57. MainClass.Settings.LogicalSort = LogicalSystem.GetDefaultLogicalSystem();
  58. this.conditions = new List<LogicalSystem>();
  59. conditions =MainClass.Tools.Clone(MainClass.Settings.LogicalSort);
  60. TreeIter ti = new TreeIter();
  61. foreach (LogicalSystem cd in conditions){
  62. ti = filterStore.AppendValues(cd.Display,cd);
  63. }
  64. tvFilter.Selection.Changed += delegate(object sender, EventArgs e)
  65. {
  66. maskStore.Clear();
  67. LogicalSystem cd =GetSelected();
  68. if (cd == null ) return;
  69. if(cd.Mask == null) cd.Mask = new List<string>();
  70. foreach (string rl in cd.Mask){
  71. maskStore.AppendValues(rl);
  72. }
  73. };
  74. if (conditions.Count>0)
  75. tvFilter.Selection.SelectIter(ti);
  76. }
  77. private LogicalSystem GetSelected()
  78. {
  79. TreeSelection ts = tvFilter.Selection;
  80. TreeIter ti = new TreeIter();
  81. ts.GetSelected(out ti);
  82. TreePath[] tp = ts.GetSelectedRows();
  83. if (tp.Length < 1)
  84. return null;
  85. return (LogicalSystem)tvFilter.Model.GetValue(ti, 1);
  86. }
  87. public void Store()
  88. {
  89. if(MainClass.Settings!= null)
  90. MainClass.Settings.LogicalSort.Clear();
  91. MainClass.Settings.LogicalSort = new List<LogicalSystem>(conditions.ToArray());
  92. }
  93. protected virtual void OnBtnAddFilterClicked (object sender, System.EventArgs e)
  94. {
  95. EntryDialog ed = new EntryDialog("",MainClass.Languages.Translate("new_filter"),parentWindow);
  96. int result = ed.Run();
  97. if (result == (int)ResponseType.Ok){
  98. string newStr = ed.TextEntry;
  99. if (!String.IsNullOrEmpty(newStr) ){
  100. LogicalSystem cdFind = conditions.Find(x=>x.Display.ToUpper() ==newStr.ToUpper());
  101. if (cdFind != null){
  102. MessageDialogs md = new MessageDialogs(MessageDialogs.DialogButtonType.Ok, MainClass.Languages.Translate("filter_is_exist", cdFind.Display), "", Gtk.MessageType.Error,parentWindow);
  103. md.ShowDialog();
  104. ed.Destroy();
  105. return;
  106. }
  107. LogicalSystem cd= new LogicalSystem();
  108. cd.Display =newStr;
  109. filterStore.AppendValues(cd.Display,cd);
  110. conditions.Add(cd);
  111. }
  112. }
  113. ed.Destroy(); }
  114. protected virtual void OnBtnDeleteFilterClicked (object sender, System.EventArgs e)
  115. {
  116. TreeSelection ts = tvFilter.Selection;
  117. TreeIter ti = new TreeIter();
  118. ts.GetSelected(out ti);
  119. TreePath[] tp = ts.GetSelectedRows();
  120. if (tp.Length < 1)
  121. return ;
  122. LogicalSystem cd = (LogicalSystem)tvFilter.Model.GetValue(ti, 1);
  123. if (cd == null) return;
  124. MessageDialogs md = new MessageDialogs(MessageDialogs.DialogButtonType.YesNo, MainClass.Languages.Translate("delete_filter", cd.Display), "", Gtk.MessageType.Question,parentWindow);
  125. int result = md.ShowDialog();
  126. if (result != (int)Gtk.ResponseType.Yes)
  127. return;
  128. conditions.Remove(cd);
  129. maskStore.Clear();
  130. filterStore.Remove(ref ti);
  131. }
  132. protected virtual void OnBtnEditFilterClicked (object sender, System.EventArgs e)
  133. {
  134. TreeSelection ts = tvFilter.Selection;
  135. TreeIter ti = new TreeIter();
  136. ts.GetSelected(out ti);
  137. TreePath[] tp = ts.GetSelectedRows();
  138. if (tp.Length < 1)
  139. return ;
  140. LogicalSystem cd = (LogicalSystem)tvFilter.Model.GetValue(ti, 1);
  141. if (cd == null) return;
  142. EntryDialog ed = new EntryDialog(cd.Display,MainClass.Languages.Translate("new_filter"),parentWindow);
  143. int result = ed.Run();
  144. if (result == (int)ResponseType.Ok){
  145. string newStr = ed.TextEntry;
  146. if (!String.IsNullOrEmpty(newStr) ){
  147. if (newStr == cd.Display) return;
  148. LogicalSystem cdFind = conditions.Find(x=>x.Display.ToUpper() ==newStr.ToUpper());
  149. if (cdFind != null){
  150. MessageDialogs md = new MessageDialogs(MessageDialogs.DialogButtonType.Ok, MainClass.Languages.Translate("filter_is_exist", cdFind.Display), "", Gtk.MessageType.Error,parentWindow);
  151. md.ShowDialog();
  152. ed.Destroy();
  153. return;
  154. }
  155. LogicalSystem cdEdited = conditions.Find(x => x.Display.ToUpper() == cd.Display.ToUpper());
  156. if (cdEdited == null){
  157. MessageDialogs md = new MessageDialogs(MessageDialogs.DialogButtonType.Ok, MainClass.Languages.Translate("unspecified_error"), "", Gtk.MessageType.Error,parentWindow);
  158. md.ShowDialog();
  159. ed.Destroy();
  160. return;
  161. }
  162. cdEdited.Display=newStr;
  163. filterStore.SetValues(ti,cdEdited.Display,cdEdited);
  164. //conditions.Find(cd).Name =ed.TextEntry;
  165. }
  166. }
  167. ed.Destroy(); }
  168. protected virtual void OnBtnAddMaskClicked (object sender, System.EventArgs e)
  169. {
  170. TreeSelection ts = tvFilter.Selection;
  171. TreeIter ti = new TreeIter();
  172. ts.GetSelected(out ti);
  173. TreePath[] tp = ts.GetSelectedRows();
  174. if (tp.Length < 1)
  175. return ;
  176. LogicalSystem cd = (LogicalSystem)tvFilter.Model.GetValue(ti, 1);
  177. if (cd == null) return;
  178. EntryDialog ed = new EntryDialog("",MainClass.Languages.Translate("new_mask"),parentWindow);
  179. int result = ed.Run();
  180. if (result == (int)ResponseType.Ok){
  181. string newStr = ed.TextEntry;
  182. if (!String.IsNullOrEmpty(newStr) ){
  183. //int maxCountRule = 0;
  184. /*foreach (string rlf in cd.Mask){
  185. if (maxCountRule < rlf.Id) maxCountRule = rlf.Id;
  186. }*/
  187. string rlFind = cd.Mask.Find(x=>x.ToUpper() ==newStr.ToUpper());
  188. if (rlFind != null){
  189. MessageDialogs md = new MessageDialogs(MessageDialogs.DialogButtonType.Ok, MainClass.Languages.Translate("mask_is_exist", rlFind), "", Gtk.MessageType.Error,parentWindow);
  190. md.ShowDialog();
  191. ed.Destroy();
  192. return;
  193. }
  194. maskStore.AppendValues(newStr);
  195. LogicalSystem cd2 = conditions.Find(x => x.Display.ToUpper() == cd.Display.ToUpper());
  196. cd2.Mask.Add(newStr);
  197. filterStore.SetValues(ti,cd2.Display,cd2);
  198. }
  199. }
  200. ed.Destroy();
  201. }
  202. protected virtual void OnBtnDeleteMaskClicked (object sender, System.EventArgs e)
  203. {
  204. TreeSelection ts = tvFilter.Selection;
  205. TreeIter ti = new TreeIter();
  206. ts.GetSelected(out ti);
  207. TreePath[] tp = ts.GetSelectedRows();
  208. if (tp.Length < 1)
  209. return ;
  210. LogicalSystem cd = (LogicalSystem)tvFilter.Model.GetValue(ti, 1);
  211. if (cd == null) return;
  212. TreeSelection tsR = tvMask.Selection;
  213. TreeIter tiR = new TreeIter();
  214. tsR.GetSelected(out tiR);
  215. TreePath[] tpR = tsR.GetSelectedRows();
  216. if (tpR.Length < 1)
  217. return ;
  218. string rl = (string)tvMask.Model.GetValue(tiR, 0);
  219. if (String.IsNullOrEmpty(rl)) return;
  220. MessageDialogs md = new MessageDialogs(MessageDialogs.DialogButtonType.YesNo, MainClass.Languages.Translate("delete_mask", rl), "", Gtk.MessageType.Question,parentWindow);
  221. int result = md.ShowDialog();
  222. if (result != (int)Gtk.ResponseType.Yes)
  223. return;
  224. maskStore.Remove(ref tiR);
  225. LogicalSystem cd2 = conditions.Find(x => x.Display.ToUpper() == cd.Display.ToUpper());
  226. cd2.Mask.Remove(rl);
  227. filterStore.SetValues(ti,cd2.Display,cd2);
  228. }
  229. protected virtual void OnBtnEditMaskClicked (object sender, System.EventArgs e)
  230. {
  231. TreeSelection ts = tvFilter.Selection;
  232. TreeIter ti = new TreeIter();
  233. ts.GetSelected(out ti);
  234. TreePath[] tp = ts.GetSelectedRows();
  235. if (tp.Length < 1)
  236. return ;
  237. LogicalSystem cd = (LogicalSystem)tvFilter.Model.GetValue(ti, 1);
  238. if (cd == null) return;
  239. TreeSelection tsR = tvMask.Selection;
  240. TreeIter tiR = new TreeIter();
  241. tsR.GetSelected(out tiR);
  242. TreePath[] tpR = tsR.GetSelectedRows();
  243. if (tpR.Length < 1)
  244. return ;
  245. string rl = (string)tvMask.Model.GetValue(tiR, 0);
  246. EntryDialog ed = new EntryDialog(rl,MainClass.Languages.Translate("new_name"),parentWindow);
  247. int result = ed.Run();
  248. if (result == (int)ResponseType.Ok){
  249. string newStr = ed.TextEntry;
  250. if (!String.IsNullOrEmpty(newStr) ){
  251. if(rl.ToUpper() == newStr.ToUpper()){
  252. ed.Destroy();
  253. return;
  254. }
  255. string rlFind = cd.Mask.Find(x=>x.ToUpper() ==newStr.ToUpper());
  256. if (!String.IsNullOrEmpty(rlFind)){
  257. MessageDialogs md = new MessageDialogs(MessageDialogs.DialogButtonType.Ok, MainClass.Languages.Translate("mask_is_exist", rlFind), "", Gtk.MessageType.Error,parentWindow);
  258. md.ShowDialog();
  259. ed.Destroy();
  260. return;
  261. }
  262. LogicalSystem cd2 = conditions.Find(x => x.Display.ToUpper() == cd.Display.ToUpper());
  263. cd2.Mask.Remove(rlFind);
  264. maskStore.SetValues(tiR,0,newStr,newStr);
  265. cd2.Mask.Add(newStr);
  266. filterStore.SetValues(ti,cd2.Display,cd2);
  267. }
  268. }
  269. ed.Destroy();
  270. }
  271. }
  272. }