public double Duration() { if (this.startTime == null) { return(0); } if (this.endTime == null) { return(this.startTime.DurationSince().TotalMilliseconds); } switch (this.status) { case Status.PENDING: return(0); case Status.IN_PROGRESS: return(this.startTime.DurationSince().TotalMilliseconds); case Status.DONE: return(TimeStamp.Duration(this.startTime, this.endTime).TotalMilliseconds); default: return(0); } }
private void WorkerStatusGUI() { EditorGUILayout.BeginVertical(); zoomFactor = EditorGUILayout.Slider("Zoom", zoomFactor, 0.000001f, 0.25f); autoScroll = EditorGUILayout.ToggleLeft("AutoScroll", autoScroll); #region StatusBar // Count number of Job-Todos int todoCount = 0; foreach (StatusUpdateMessage item in SimpleClient.jobStatus.Values) { foreach (TodoItem cildItem in item.childDict.Values) { foreach (TodoItem childTodo in cildItem.childDict.Values) { todoCount++; } todoCount++; } todoCount++; } // Calculate %-Step float step; if (SimpleClient.jobStatus.Values.Count > 0) { step = 1f / todoCount; } else { step = 0; } // Determine how many Job-Todos have been done float complete = 0; foreach (StatusUpdateMessage item in SimpleClient.jobStatus.Values) { foreach (TodoItem cildItem in item.childDict.Values) { foreach (TodoItem childTodo in cildItem.childDict.Values) { if (childTodo.status == Status.DONE) { complete += step; } } if (cildItem.status == Status.DONE) { complete += step; } } if (item.status == Status.DONE) { complete += step; } } EditorGUILayout.LabelField("", GUILayout.Height(20)); EditorGUI.ProgressBar(new Rect(0, 90, this.position.width - 200, 20), complete, (int)(complete * 100) + " % "); #endregion // Statusbar #region Timer string timer; if (stopTime == null) { timer = startTime != null?startTime.Duration() : "00:00:00.000"; } else { timer = TimeStamp.Duration(TimeStamp.Duration(startTime, stopTime)); } if (timerFontStyle == null) { timerFontStyle.font = (Font)Resources.Load("digitalmono"); timerFontStyle.fontSize = 34; } EditorGUI.LabelField(new Rect(this.position.width - 190, 85, 180, 20), timer, timerFontStyle); #endregion // Timer EditorGUILayout.EndVertical(); GUILayout.Space(10f); //Rect lastRect = GUILayoutUtility.GetLastRect(); //Debug.Log(lastRect); float panelOffset = 120; float autoScrollPosition = this.position.width - GoldenRatio.LongSideOf(this.position.width); float panelWidth = this.position.width - border; if (startTime != null) { panelWidth = Mathf.Max((float)TimeStamp.DurationInMillis(startTime, TimeStamp.Now()) * zoomFactor + autoScrollPosition, this.position.width - border); } if (stopTime != null) { panelWidth = Mathf.Min((float)TimeStamp.DurationInMillis(startTime, stopTime) * zoomFactor + autoScrollPosition, panelWidth); } int jobCount = SimpleClient.jobStatus.Values.Count; float panelHeight = jobCount * (4 * height + 4 * separator + 2 * padding) + yOffset; using (EditorGUILayout.ScrollViewScope scrollView = new EditorGUILayout.ScrollViewScope(scrollPos, false, false, GUILayout.Width(this.position.width), GUILayout.Height(this.position.height - panelOffset))) { scrollPos = scrollView.scrollPosition; EditorGUILayout.LabelField("", darkgrey, GUILayout.Width(panelWidth), GUILayout.Height(panelHeight)); if (autoScroll) { scrollPos.x = Mathf.Infinity; } float now = xOffset; if (startTime != null) { now = (float)TimeStamp.DurationInMillis(startTime, TimeStamp.Now()) * zoomFactor + xOffset; } if (generateLocal) { float y = 0f; y += yOffset; foreach (StatusUpdateMessage item in SimpleClient.jobStatus.Values) { y += separator; TodoItem worker = item.Get(Job.Worker); DrawJobItemBar(item, y); y += padding; y += height + separator; DrawTodoItemBar(worker, y); foreach (string todo in worker.childTodos) { DrawTodoItemBar(worker.childDict[todo], y); } y += height; y += padding; y += separator; } } else { float y = 0f; y += yOffset; foreach (StatusUpdateMessage item in SimpleClient.jobStatus.Values) { y += separator; TodoItem master = item.Get(Job.Master); TodoItem transfer = item.Get(Job.Transfer); TodoItem worker = item.Get(Job.Worker); DrawJobItemBar(item, y); y += padding; DrawTodoItemBar(master, y); foreach (string todo in master.childTodos) { DrawTodoItemBar(master.childDict[todo], y); } y += height + separator; foreach (string todo in transfer.childTodos) { DrawTodoItemBar(transfer.childDict[todo], y); } y += height + separator; DrawTodoItemBar(worker, y); foreach (string todo in worker.childTodos) { DrawTodoItemBar(worker.childDict[todo], y); } y += height; y += padding; y += separator; } } if (stopTime == null) { CustomGUIUtils.DrawBox(new Rect(now, 0, 1, panelHeight), Color.black); } #region Draw Time indicators if (1000 * zoomFactor > 20) { for (float x = 0; x < panelWidth; x += (1000 * zoomFactor)) { CustomGUIUtils.DrawBox(new Rect(x, 0, 1, panelHeight), Color.grey); } } if (15000 * zoomFactor > 20) { for (float x = 0; x < panelWidth; x += (15000 * zoomFactor)) { CustomGUIUtils.DrawBox(new Rect(x, 0, 1, panelHeight), XKCDColors.LightRed); } } for (float x = 0; x < panelWidth; x += (60000 * zoomFactor)) { CustomGUIUtils.DrawBox(new Rect(x, 0, 1, panelHeight), Color.red); } #endregion // Draw time indicators } Repaint(); }
/// <summary> /// GUI of the FlatEarthCreator /// </summary> public void OnGUI() { clients = FindObjectsOfType <SimpleClient>(); if (clients == null) { GUILayout.Label("No Clients available...", lightRed); Debug.Log("No Clients available..."); return; } if (clients.Length == 0) { GUILayout.Label("No Clients available...", lightRed); Debug.Log("No Clients available.."); return; } foreach (SimpleClient item in clients) { if (item.ServerMode) { client = item; break; } } if (client == null) { return; } CheckDone(); GUILayout.BeginArea(new Rect(0, 0, position.width, 39), CustomGUIUtils.GetColorBackgroundStyle(XKCDColors.Bluegrey)); CustomGUIUtils.BeginGroup(5); GUILayout.BeginHorizontal(); Color normalColor = GUI.backgroundColor; GUI.backgroundColor = selectedMenu == 0 ? XKCDColors.LightGrey : Color.grey; if (GUILayout.Button("Client Settings", GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight)) || selectedMenu == 0) { selectedMenu = 0; } GUI.backgroundColor = selectedMenu == 1 ? XKCDColors.LightGrey : Color.grey; if (GUILayout.Button("FlatEarth Creation", GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight)) || selectedMenu == 1) { selectedMenu = 1; } GUI.backgroundColor = selectedMenu == 2 ? XKCDColors.LightGrey : Color.grey; if (GUILayout.Button("Worker Status", GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight)) || selectedMenu == 2) { selectedMenu = 2; } GUI.backgroundColor = normalColor; if (GUILayout.Button("Reset Everything", GUILayout.Width(buttonWidth), GUILayout.Height(buttonHeight))) { client.ResetMaster(); startTime = null; stopTime = null; } #region Timer string timer; if (stopTime == null) { timer = startTime != null?startTime.Duration() : "00:00:00.000"; } else { timer = TimeStamp.Duration(TimeStamp.Duration(startTime, stopTime)); } if (timerFontStyle == null) { timerFontStyle.font = (Font)Resources.Load("digitalmono"); timerFontStyle.fontSize = 34; } EditorGUI.LabelField(new Rect(this.position.width - 190, 0, 180, 20), timer, timerFontStyle); #endregion // Timer GUI.backgroundColor = normalColor; GUILayout.EndHorizontal(); CustomGUIUtils.EndGroup(); GUILayout.EndArea(); GUILayout.Space(buttonHeight + 20); switch (selectedMenu) { case 0: // Client Settings ClientSettingsGUI(); break; case 1: // FlatEarth Creation JobCreationGUI(); break; case 2: // Worker Status WorkerStatusGUI(); break; default: break; } }