RenderablesList.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. using System;
  2. using System.Collections.Generic;
  3. using Gtk;
  4. namespace UnitEditor
  5. {
  6. [System.ComponentModel.ToolboxItem (true)]
  7. public partial class RenderablesList : Gtk.EventBox
  8. {
  9. private UnitFile m_unit_file;
  10. private ListStore m_renderables_store;
  11. private List<string> m_renderables_names;
  12. private List<Renderable> m_renderables;
  13. public RenderablesList (string file_name)
  14. {
  15. m_unit_file = new UnitFile (file_name);
  16. m_renderables_names = new List<string> (m_unit_file.renderables_names());
  17. m_renderables = new List<Renderable> (m_unit_file.renderables());
  18. Console.Write (m_renderables_names[0]);
  19. m_renderables_store = new ListStore (typeof (string), typeof (string), typeof (string), typeof(string), typeof(bool));
  20. TreeView tree = new TreeView ();
  21. this.Add (tree);
  22. TreeViewColumn nameColumn = new TreeViewColumn ();
  23. nameColumn.Title = "Name";
  24. nameColumn.Alignment = 0.5f;
  25. TreeViewColumn nodeColumn = new TreeViewColumn ();
  26. nodeColumn.Title = "Node";
  27. nodeColumn.Alignment = 0.5f;
  28. TreeViewColumn typeColumn = new TreeViewColumn ();
  29. typeColumn.Title = "Type";
  30. typeColumn.Alignment = 0.5f;
  31. TreeViewColumn resourceColumn = new TreeViewColumn ();
  32. resourceColumn.Title = "Resource";
  33. resourceColumn.Alignment = 0.5f;
  34. TreeViewColumn visibleColumn = new TreeViewColumn ();
  35. visibleColumn.Title = "Visible";
  36. visibleColumn.Alignment = 0.5f;
  37. // Assign the model to the TreeView
  38. tree.Model = m_renderables_store;
  39. CellRendererText nameCell = new CellRendererText ();
  40. nameCell.Editable = true;
  41. nameCell.Edited += delegate (object o, EditedArgs e) {
  42. TreePath path = new TreePath (e.Path);
  43. TreeIter iter;
  44. m_renderables_store.GetIter (out iter, path);
  45. int i = path.Indices[0];
  46. string r = e.NewText;
  47. m_renderables_names[i] = r;
  48. m_renderables_store.SetValue (iter, 0, r);
  49. };
  50. nameColumn.PackStart (nameCell, true);
  51. CellRendererText nodeCell = new CellRendererText ();
  52. nodeCell.Editable = true;
  53. nodeCell.Edited += delegate (object o, EditedArgs e) {
  54. TreePath path = new TreePath (e.Path);
  55. TreeIter iter;
  56. m_renderables_store.GetIter (out iter, path);
  57. int i = path.Indices[0];
  58. Renderable r = m_renderables[i];
  59. r.node = e.NewText;
  60. m_renderables_store.SetValue (iter, 1, r.node);
  61. };
  62. nodeColumn.PackStart (nodeCell, true);
  63. CellRendererText typeCell = new CellRendererText ();
  64. typeCell.Editable = true;
  65. typeCell.Edited += delegate (object o, EditedArgs e) {
  66. TreePath path = new TreePath (e.Path);
  67. TreeIter iter;
  68. m_renderables_store.GetIter (out iter, path);
  69. int i = path.Indices[0];
  70. Renderable r = m_renderables[i];
  71. r.type = e.NewText;
  72. m_renderables_store.SetValue (iter, 2, r.type);
  73. };
  74. typeColumn.PackStart (typeCell, true);
  75. CellRendererText resourceCell = new CellRendererText ();
  76. resourceCell.Editable = true;
  77. resourceCell.Edited += delegate (object o, EditedArgs e) {
  78. TreePath path = new TreePath (e.Path);
  79. TreeIter iter;
  80. m_renderables_store.GetIter (out iter, path);
  81. int i = path.Indices[0];
  82. Renderable r = m_renderables[i];
  83. r.resource = e.NewText;
  84. m_renderables_store.SetValue (iter, 3, r.resource);
  85. };
  86. resourceColumn.PackStart (resourceCell, true);
  87. CellRendererToggle visibleCell = new CellRendererToggle ();
  88. visibleCell.Activatable = true;
  89. visibleCell.Toggled += delegate (object o, ToggledArgs e) {
  90. TreePath path = new TreePath (e.Path);
  91. TreeIter iter;
  92. m_renderables_store.GetIter (out iter, path);
  93. int i = path.Indices[0];
  94. Renderable r = m_renderables[i];
  95. bool old = (bool) m_renderables_store.GetValue(iter, 4);
  96. r.visible = !old;
  97. m_renderables_store.SetValue(iter, 4, !old);
  98. };
  99. visibleColumn.PackStart (visibleCell, true);
  100. // Add the columns to the TreeView
  101. nameColumn.AddAttribute (nameCell, "text", 0);
  102. nodeColumn.AddAttribute (nodeCell, "text", 1);
  103. typeColumn.AddAttribute (typeCell, "text", 2);
  104. resourceColumn.AddAttribute (resourceCell, "text", 3);
  105. visibleColumn.AddAttribute (visibleCell, "active", 4);
  106. tree.AppendColumn (nameColumn);
  107. tree.AppendColumn (nodeColumn);
  108. tree.AppendColumn (typeColumn);
  109. tree.AppendColumn (resourceColumn);
  110. tree.AppendColumn (visibleColumn);
  111. create_model ();
  112. // Show the window and everything on it
  113. ShowAll ();
  114. }
  115. void create_model()
  116. {
  117. for (int i = 0; i < m_renderables.Count; i++)
  118. {
  119. m_renderables_store.AppendValues (
  120. m_renderables_names[i],
  121. m_renderables[i].node,
  122. m_renderables[i].type,
  123. m_renderables[i].resource,
  124. m_renderables[i].visible);
  125. }
  126. }
  127. static void delete_event (object obj, DeleteEventArgs args)
  128. {
  129. Application.Quit();
  130. }
  131. static void exitbutton_event (object obj, ButtonPressEventArgs args)
  132. {
  133. Application.Quit();
  134. }
  135. }
  136. }