public ScheduleController(Action<td, DateTime> ApplyStyle, DateTime date) { this.date = date; this.ApplyStyle = ApplyStyle; TotalPersentageStates = new[] { new ToggleButtonState { Percentage = 2 }, new ToggleButtonState { Percentage = 2.5 }, new ToggleButtonState { Percentage = 3 }, new ToggleButtonState { Percentage = 3.5 }, new ToggleButtonState { Percentage = 4 }, new ToggleButtonState { Percentage = 0 }, new ToggleButtonState { Percentage = 1 }, new ToggleButtonState { Percentage = 1.5 }, }; WorkerStates = new[] { new ToggleButtonState { Text = "·", Hours = 11.5, Percentage = 1 }, new ToggleButtonState { Text = "P", Hours = 0, Percentage = 0 }, new ToggleButtonState { Text = "17", Hours = 17 - 9.5, Percentage = 0.5 }, new ToggleButtonState { Text = "13", Hours = 21 - 13, Percentage = 0.5 }, }; days = date.DaysInMonth(); this.ScheduleTable.style.border = "1px solid gray"; this.ScheduleTable.border = 0; this.ScheduleTable.cellSpacing = 0; this.ScheduleTable.cellPadding = 0; this.Body = this.ScheduleTable.AddBody(); this.RowOfDateNumbers = this.Body.AddRow(); this.RowOfDayNames = this.Body.AddRow(); //Console.WriteLine(DateTime.Now + " step 2"); BuildTop(); //Console.WriteLine(DateTime.Now + " step 3"); BuildBottom(); //Console.WriteLine(DateTime.Now + " step 4"); Control.style.padding = "2em"; Header = new IHTMLElement(IHTMLElement.HTMLElementEnum.h2); Header.innerText = "work schedule".Localize(); var h4 = new IHTMLElement(IHTMLElement.HTMLElementEnum.h4); h4.style.Float = IStyle.FloatEnum.right; h4.innerText = date.Year + " / " + date.Month; var br = new IHTMLBreak(); br.style.clear = "both"; var close = new IHTMLAnchor("close!".Localize()); close.className = "noprint"; close.onclick += ev => { ev.PreventDefault(); this.Control.Dispose(); }; close.style.Float = IStyle.FloatEnum.right; var c = new IHTMLElement(IHTMLElement.HTMLElementEnum.center, close, Header, h4, br, this.ScheduleTable); c.AttachTo(this.Control); }
public void Initialize(IHTMLElement Menu, Func<IHTMLImage, string, Type, Action<Type>, IHTMLElement> ConvertImageToControl) { var List = new IHTMLElement(IHTMLElement.HTMLElementEnum.ol).AttachTo(Menu); var ApplicationsWithLoadingImagesQuery = from t in Applications let assembly = t.Assembly.GetName().Name let preview = "assets/" + assembly + "/Preview.png" let image = new IHTMLImage(preview) orderby t.Name select new { t, assembly, preview, image }; var ApplicationsWithLoadingImages = ApplicationsWithLoadingImagesQuery.ToArray(); var LoadingMessage = new IHTMLDiv().AttachTo(Menu); var DoneLoading = 500.Until( t => { var count = ApplicationsWithLoadingImages.Count(i => !i.image.complete); LoadingMessage.innerText = count + " images are still loading..."; return (count == 0 || t.Counter == 6); } ); Func<Point> GetCenter = () => new Point(Native.Window.Width / 2, Native.Window.Height / 2); Action<Type> TypeClicked = t => { }; DoneLoading += delegate { var query = from i in ApplicationsWithLoadingImages let hasimage = i.image.complete && i.image.width > 0 select new { i.image, i.t, i.assembly, hasimage, i.preview }; ; var WithImages = from i in query where i.hasimage select i; var WithoutImages = from i in query where !i.hasimage select i; #region WithImages DoneLoading = WithImages.ForEachAtInterval(50, v => { LoadingMessage.innerText = v.t.Name; var href = v.t.Name + ".htm"; var r = ConvertImageToControl(v.image, href, v.t, TypeClicked); r.AttachTo(Menu); } ); #endregion DoneLoading += delegate { LoadingMessage.Dispose(); var clr = new IHTMLBreak(); clr.style.clear = "both"; clr.AttachTo(Menu); foreach (var v in WithoutImages) { new IHTMLDiv("image not found: " + v.preview).AttachTo(Menu); } "script".DisposeElementsByTagName(); "noscript".DisposeElementsByTagName(); }; }; TypeClicked += t => { Menu.Dispose(); try { Activator.CreateInstance(t); } catch (Exception exc) { Native.Window.alert("Error: " + exc.Message); Menu.AttachToDocument(); } }; }