using System; using System.Collections.Generic; using Bridge; using Bridge.Html5; using Bridge.jQuery2; namespace WebMrbc { public class ClassSelectorView { Collection m_Collection; jQuery el; string templateText; IClassWorkspace m_ClassWorkspace; internal IClassWorkspace Current { get { return m_ClassWorkspace; } } internal event EventHandler Selected; internal event EventHandler Removed; internal event EventHandler MarkClicked; internal void SetCollection(Collection collection) { el = jQuery.Select("#class-selector-tab"); m_Collection = collection; collection.OnAdd += OnChange; collection.OnRemove += OnChange; collection.OnReset += OnChange; collection.OnChange += OnChange; if (collection.Length > 0) m_ClassWorkspace = collection.At(0); templateText = jQuery.Select("#class-selector-template").Text(); jQuery.Select("#add-celltype-button").Click(null, new Action(OnAddBtnClick)); Render(); } void Render() { var charsEl = jQuery.Select("#class-selector-celltype-set"); charsEl.Children().Remove(); foreach (var item in m_Collection) { var html = new jQuery(item.Template(templateText)); charsEl.Append(html); var selectedMark = html.Find("a.selected-mark"); if (m_ClassWorkspace == item) selectedMark.Show(); else selectedMark.Hide(); selectedMark.Click(item, new Action(OnSelectedMarkClick)); html.Find("a.celltype").Click(item, new Action(OnSelectBtnClick)); html.Find("a.modify-button").Click(item, new Action(OnModifyBtnClick)); var removeButton = html.Find("a.remove-button"); removeButton.Click(item, new Action(OnRemoveBtnClick)); if (item.IsPreset()) removeButton.Hide(); var img = html.Find("img"); img.On("dragstart", new Action((e) => { e.PreventDefault(); })); } } private void OnSelectedMarkClick(jQueryMouseEvent obj) { MarkClicked?.Invoke(this, EventArgs.Empty); } internal void SelectClassWorkspace(IClassWorkspace model) { jQuery html, selectedMark; var charsEl = jQuery.Select("#class-selector-celltype-set"); if (m_ClassWorkspace != null) { html = charsEl.Find("#" + m_ClassWorkspace.Identifier); selectedMark = html.Find("a.selected-mark"); selectedMark.Hide(); m_ClassWorkspace.Inactivate(); } m_ClassWorkspace = model; if ((m_ClassWorkspace == null) && (m_Collection.Length > 0)) { m_ClassWorkspace = m_Collection.At(0); } if (m_ClassWorkspace != null) { m_ClassWorkspace.Activate(); html = charsEl.Find("#" + m_ClassWorkspace.Identifier); selectedMark = html.Find("a.selected-mark"); selectedMark.Show(); } Selected?.Invoke(this, EventArgs.Empty); } void RemoveClassWorkspace(IClassWorkspace item) { if (item.IsPreset()) return; if (m_ClassWorkspace == item) m_ClassWorkspace = null; m_Collection.Remove(item); Removed?.Invoke(this, new ItemRemovedEventArgs(item)); } private void OnSelectBtnClick(jQueryMouseEvent e) { var item = (IClassWorkspace)e.Data; e.PreventDefault(); if (m_ClassWorkspace != item) { this.SelectClassWorkspace(item); } } private void OnModifyBtnClick(jQueryMouseEvent e) { var item = (IClassWorkspace)e.Data; e.PreventDefault(); m_ClassWorkspace = item; m_ClassWorkspace.OpenModifyView((ok) => { Render(); }); } private void OnAddBtnClick(jQueryMouseEvent e) { e.PreventDefault(); App.NewItem((item) => { item.OpenModifyView((ok) => { if (ok) { m_Collection.Add(item); SelectClassWorkspace(item); } else { App.RemoveItem(item); } }); }); } private void OnRemoveBtnClick(jQueryMouseEvent e) { var item = (IClassWorkspace)e.Data; e.PreventDefault(); m_ClassWorkspace = null; RemoveClassWorkspace(item); } void OnChange(object sender, EventArgs e) { Render(); } } class ItemRemovedEventArgs : EventArgs { public IClassWorkspace Item { get; private set; } public ItemRemovedEventArgs(IClassWorkspace item) { Item = item; } } }