source: EcnlProtoTool/trunk/webapp/webmrbc/ClassSelectorView.cs@ 270

Last change on this file since 270 was 270, checked in by coas-nagasima, 7 years ago

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csharp
File size: 4.2 KB
Line 
1using System;
2using System.Collections.Generic;
3using Bridge;
4using Bridge.Html5;
5using Bridge.jQuery2;
6
7namespace WebMrbc
8{
9 public class ClassSelectorView
10 {
11 Collection<IClassWorkspace> m_Collection;
12 jQuery el;
13 string templateText;
14 IClassWorkspace m_ClassWorkspace;
15
16 internal IClassWorkspace Current { get { return m_ClassWorkspace; } }
17
18 internal event EventHandler<EventArgs> Selected;
19 internal event EventHandler<ItemRemovedEventArgs> Removed;
20 internal event EventHandler<EventArgs> MarkClicked;
21
22 internal void SetCollection(Collection<IClassWorkspace> collection)
23 {
24 el = jQuery.Select("#class-selector-tab");
25
26 m_Collection = collection;
27 collection.OnAdd += OnChange;
28 collection.OnRemove += OnChange;
29 collection.OnReset += OnChange;
30 collection.OnChange += OnChange;
31
32 if (collection.Length > 0)
33 m_ClassWorkspace = collection.At(0);
34
35 templateText = jQuery.Select("#class-selector-template").Text();
36 jQuery.Select("#add-celltype-button").Click(null, new Action<jQueryMouseEvent>(OnAddBtnClick));
37 Render();
38 }
39
40 void Render()
41 {
42 var charsEl = jQuery.Select("#class-selector-celltype-set");
43 charsEl.Children().Remove();
44 foreach (var item in m_Collection) {
45 var html = new jQuery(item.Template(templateText));
46 charsEl.Append(html);
47 var selectedMark = html.Find("a.selected-mark");
48 if (m_ClassWorkspace == item)
49 selectedMark.Show();
50 else
51 selectedMark.Hide();
52 selectedMark.Click(item, new Action<jQueryMouseEvent>(OnSelectedMarkClick));
53 html.Find("a.celltype").Click(item, new Action<jQueryMouseEvent>(OnSelectBtnClick));
54 html.Find("a.modify-button").Click(item, new Action<jQueryMouseEvent>(OnModifyBtnClick));
55 var removeButton = html.Find("a.remove-button");
56 removeButton.Click(item, new Action<jQueryMouseEvent>(OnRemoveBtnClick));
57 if (item.IsPreset())
58 removeButton.Hide();
59 var img = html.Find("img");
60 img.On("dragstart", new Action<jQueryMouseEvent>((e) => {
61 e.PreventDefault();
62 }));
63 }
64 }
65
66 private void OnSelectedMarkClick(jQueryMouseEvent obj)
67 {
68 MarkClicked?.Invoke(this, EventArgs.Empty);
69 }
70
71 internal void SelectClassWorkspace(IClassWorkspace model)
72 {
73 jQuery html, selectedMark;
74 var charsEl = jQuery.Select("#class-selector-celltype-set");
75
76 if (m_ClassWorkspace != null) {
77 html = charsEl.Find("#" + m_ClassWorkspace.Identifier);
78 selectedMark = html.Find("a.selected-mark");
79 selectedMark.Hide();
80 m_ClassWorkspace.Inactivate();
81 }
82
83 m_ClassWorkspace = model;
84 if ((m_ClassWorkspace == null) && (m_Collection.Length > 0)) {
85 m_ClassWorkspace = m_Collection.At(0);
86 }
87
88 if (m_ClassWorkspace != null) {
89 m_ClassWorkspace.Activate();
90
91 html = charsEl.Find("#" + m_ClassWorkspace.Identifier);
92 selectedMark = html.Find("a.selected-mark");
93 selectedMark.Show();
94 }
95
96 Selected?.Invoke(this, EventArgs.Empty);
97 }
98
99 void RemoveClassWorkspace(IClassWorkspace item)
100 {
101 if (item.IsPreset())
102 return;
103
104 if (m_ClassWorkspace == item)
105 m_ClassWorkspace = null;
106
107 m_Collection.Remove(item);
108
109 Removed?.Invoke(this, new ItemRemovedEventArgs(item));
110 }
111
112 private void OnSelectBtnClick(jQueryMouseEvent e)
113 {
114 var item = (IClassWorkspace)e.Data;
115 e.PreventDefault();
116 if (m_ClassWorkspace != item) {
117 this.SelectClassWorkspace(item);
118 }
119 }
120
121 private void OnModifyBtnClick(jQueryMouseEvent e)
122 {
123 var item = (IClassWorkspace)e.Data;
124 e.PreventDefault();
125 m_ClassWorkspace = item;
126 m_ClassWorkspace.OpenModifyView((ok) => {
127 Render();
128 });
129 }
130
131 private void OnAddBtnClick(jQueryMouseEvent e)
132 {
133 e.PreventDefault();
134
135 App.NewItem((item) => {
136 item.OpenModifyView((ok) => {
137 if (ok) {
138 m_Collection.Add(item);
139 SelectClassWorkspace(item);
140 }
141 else {
142 App.RemoveItem(item);
143 }
144 });
145 });
146 }
147
148 private void OnRemoveBtnClick(jQueryMouseEvent e)
149 {
150 var item = (IClassWorkspace)e.Data;
151 e.PreventDefault();
152 m_ClassWorkspace = null;
153 RemoveClassWorkspace(item);
154 }
155
156 void OnChange(object sender, EventArgs e)
157 {
158 Render();
159 }
160 }
161
162 class ItemRemovedEventArgs : EventArgs
163 {
164 public IClassWorkspace Item { get; private set; }
165
166 public ItemRemovedEventArgs(IClassWorkspace item)
167 {
168 Item = item;
169 }
170 }
171}
Note: See TracBrowser for help on using the repository browser.