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

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

ファイルヘッダーコメントを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csharp
File size: 6.6 KB
Line 
1/*
2 * TOPPERS/ECNL Prototyping tool
3 *
4 * Copyright (C) 2017 Cores Co., Ltd. Japan
5 *
6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
7 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
8 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
9 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
10 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
11 * スコード中に含まれていること.
12 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
13 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
14 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
15 * の無保証規定を掲載すること.
16 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
17 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
18 * と.
19 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
20 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
21 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
22 * 報告すること.
23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
25 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
26 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
27 * 免責すること.
28 *
29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
31 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
33 * の責任を負わない.
34 *
35 * @(#) $Id: ClassSelectorView.cs 287 2017-05-05 14:22:23Z coas-nagasima $
36 */
37using System;
38using System.Collections.Generic;
39using Bridge;
40using Bridge.Html5;
41using Bridge.jQuery2;
42
43namespace WebMrbc
44{
45 public class ClassSelectorView
46 {
47 Collection<IClassWorkspace> m_Collection;
48 jQuery el;
49 string templateText;
50 IClassWorkspace m_ClassWorkspace;
51
52 internal IClassWorkspace Current { get { return m_ClassWorkspace; } }
53
54 internal event EventHandler<EventArgs> Selected;
55 internal event EventHandler<ItemRemovedEventArgs> Removed;
56 internal event EventHandler<EventArgs> MarkClicked;
57
58 internal void SetCollection(Collection<IClassWorkspace> collection)
59 {
60 el = jQuery.Select("#class-selector-tab");
61
62 m_Collection = collection;
63 collection.OnAdd += OnChange;
64 collection.OnRemove += OnChange;
65 collection.OnReset += OnChange;
66 collection.OnChange += OnChange;
67
68 if (collection.Length > 0)
69 m_ClassWorkspace = collection.At(0);
70
71 templateText = jQuery.Select("#class-selector-template").Text();
72 jQuery.Select("#add-celltype-button").Click(null, new Action<jQueryMouseEvent>(OnAddBtnClick));
73 Render();
74 }
75
76 void Render()
77 {
78 var charsEl = jQuery.Select("#class-selector-celltype-set");
79 charsEl.Children().Remove();
80 foreach (var item in m_Collection) {
81 var html = new jQuery(item.Template(templateText));
82 charsEl.Append(html);
83 var selectedMark = html.Find("a.selected-mark");
84 if (m_ClassWorkspace == item)
85 selectedMark.Show();
86 else
87 selectedMark.Hide();
88 selectedMark.Click(item, new Action<jQueryMouseEvent>(OnSelectedMarkClick));
89 html.Find("a.celltype").Click(item, new Action<jQueryMouseEvent>(OnSelectBtnClick));
90 html.Find("a.modify-button").Click(item, new Action<jQueryMouseEvent>(OnModifyBtnClick));
91 var removeButton = html.Find("a.remove-button");
92 removeButton.Click(item, new Action<jQueryMouseEvent>(OnRemoveBtnClick));
93 if (item.IsPreset())
94 removeButton.Hide();
95 var img = html.Find("img");
96 img.On("dragstart", new Action<jQueryMouseEvent>((e) => {
97 e.PreventDefault();
98 }));
99 }
100 }
101
102 private void OnSelectedMarkClick(jQueryMouseEvent obj)
103 {
104 MarkClicked?.Invoke(this, EventArgs.Empty);
105 }
106
107 internal void SelectClassWorkspace(IClassWorkspace model)
108 {
109 jQuery html, selectedMark;
110 var charsEl = jQuery.Select("#class-selector-celltype-set");
111
112 if (m_ClassWorkspace != null) {
113 html = charsEl.Find("#" + m_ClassWorkspace.Identifier);
114 selectedMark = html.Find("a.selected-mark");
115 selectedMark.Hide();
116 m_ClassWorkspace.Inactivate();
117 }
118
119 m_ClassWorkspace = model;
120 if ((m_ClassWorkspace == null) && (m_Collection.Length > 0)) {
121 m_ClassWorkspace = m_Collection.At(0);
122 }
123
124 if (m_ClassWorkspace != null) {
125 m_ClassWorkspace.Activate();
126
127 html = charsEl.Find("#" + m_ClassWorkspace.Identifier);
128 selectedMark = html.Find("a.selected-mark");
129 selectedMark.Show();
130 }
131
132 Selected?.Invoke(this, EventArgs.Empty);
133 }
134
135 void RemoveClassWorkspace(IClassWorkspace item)
136 {
137 if (item.IsPreset())
138 return;
139
140 if (m_ClassWorkspace == item)
141 m_ClassWorkspace = null;
142
143 m_Collection.Remove(item);
144
145 Removed?.Invoke(this, new ItemRemovedEventArgs(item));
146 }
147
148 private void OnSelectBtnClick(jQueryMouseEvent e)
149 {
150 var item = (IClassWorkspace)e.Data;
151 e.PreventDefault();
152 if (m_ClassWorkspace != item) {
153 this.SelectClassWorkspace(item);
154 }
155 }
156
157 private void OnModifyBtnClick(jQueryMouseEvent e)
158 {
159 var item = (IClassWorkspace)e.Data;
160 e.PreventDefault();
161 m_ClassWorkspace = item;
162 m_ClassWorkspace.OpenModifyView((ok) => {
163 Render();
164 });
165 }
166
167 private void OnAddBtnClick(jQueryMouseEvent e)
168 {
169 e.PreventDefault();
170
171 App.NewItem((item) => {
172 item.OpenModifyView((ok) => {
173 if (ok) {
174 m_Collection.Add(item);
175 SelectClassWorkspace(item);
176 }
177 else {
178 App.RemoveItem(item);
179 }
180 });
181 });
182 }
183
184 private void OnRemoveBtnClick(jQueryMouseEvent e)
185 {
186 var item = (IClassWorkspace)e.Data;
187 e.PreventDefault();
188 m_ClassWorkspace = null;
189 RemoveClassWorkspace(item);
190 }
191
192 void OnChange(object sender, EventArgs e)
193 {
194 Render();
195 }
196 }
197
198 class ItemRemovedEventArgs : EventArgs
199 {
200 public IClassWorkspace Item { get; private set; }
201
202 public ItemRemovedEventArgs(IClassWorkspace item)
203 {
204 Item = item;
205 }
206 }
207}
Note: See TracBrowser for help on using the repository browser.