protected override void OnWindow(int id) { // persistent filter for displaying kerbals if (filter == null || filter.GetScene() != HighLogic.LoadedScene) { this.filter = FinalFrontier.configuration.GetDisplayFilterForSzene(HighLogic.LoadedScene); } // // persistent sorter for displaying kerbals if (sorter == null || sorter.GetScene() != HighLogic.LoadedScene) { // sorter has changed this.sorter = FinalFrontier.configuration.GetHallOfFameSorterForScene(HighLogic.LoadedScene); HallOfFame.Instance().SetSorter(this.sorter); } // color of info switch (sorter.GetMode()) { case HallOfFameSorter.SORT_MODE.STATISTIC: STYLE_KERBAL_INFO.normal.textColor = HighLogic.Skin.label.normal.textColor; break; case HallOfFameSorter.SORT_MODE.SKILL: STYLE_KERBAL_INFO.normal.textColor = Color.cyan; break; } // GUILayout.BeginHorizontal(); scrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width(490), GUILayout.Height(STYLE_SCROLLVIEW_HEIGHT)); GUILayout.BeginVertical(); int index = 0; bool expandDetected = false; bool autoexpandEnabled = FinalFrontier.configuration.IsAutoExpandEnabled(); foreach (HallOfFameEntry entry in HallOfFame.Instance()) { // autoexpand this entry on mouse hover? bool expandedEntry = autoexpandEnabled && (expandedRibbonAreaIndex == index) && (entry.GetRibbons().Count > Constants.MAX_RIBBONS_PER_AREA); // ProtoCrewMember kerbal = entry.GetKerbal(); String info = GetInfo(entry); String missionTimeInDays = Utils.GameTimeInDaysAsString(entry.TotalMissionTime) + (GameUtils.IsKerbinTimeEnabled() ? " kerbin" : ""); if (kerbal != null && filter.Accept(entry) && !entry.GetKerbal().IsTourist()) { String buttonTooltip = kerbal.name + ": " + entry.MissionsFlown + " missions, " + missionTimeInDays + " days mission time"; GUILayout.BeginHorizontal(STYLE_KERBAL_AREA_EXPANDED); //expandedEntry ? STYLE_KERBAL_AREA_EXPANDED : STYLE_KERBAL_AREA); GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); // butto to open decoration board if (GUILayout.Button(new GUIContent(entry.GetName(), buttonTooltip), STYLE_KERBAL_BUTTON)) { Log.Detail("opening decoration board for kerbal " + entry.GetName()); display.SetEntry(entry); display.SetVisible(true); } DrawStatus(kerbal); GUILayout.EndHorizontal(); GUILayout.Label(info, STYLE_KERBAL_INFO); GUILayout.EndVertical(); DrawRibbons(entry, expandedEntry ? Constants.MAX_RIBBONS_PER_EXPANDED_AREA : Constants.MAX_RIBBONS_PER_AREA); GUILayout.EndHorizontal(); // if (Event.current.type == EventType.Repaint) { if (MouseOver(0.0f, scrollPosition.y)) { expandedRibbonAreaIndex = index; expandDetected = true; } } } index++; } GUILayout.EndVertical(); GUILayout.EndScrollView(); GUILayout.BeginVertical(); if (GUILayout.Button("Close", FFStyles.STYLE_BUTTON)) { SetVisible(false); ribbonBrowser.SetVisible(false); display.SetVisible(false); } GUILayout.Label("", FFStyles.STYLE_LABEL); if (GUILayout.Button("Ribbons", FFStyles.STYLE_BUTTON)) { if (!ribbonBrowser.IsVisible()) { OpenRibbonBrowser(); } else { ribbonBrowser.SetVisible(false); } } GUILayout.Label("", FFStyles.STYLE_LABEL); GUILayout.Label("Filter:", FFStyles.STYLE_LABEL); if (GUILayout.Toggle(filter.showDead, "dead", FFStyles.STYLE_TOGGLE)) { filter.showDead = true; } else { filter.showDead = false; } if (GUILayout.Toggle(filter.showAssigned, "active", FFStyles.STYLE_TOGGLE)) { filter.showAssigned = true; } else { filter.showAssigned = false; } if (GUILayout.Toggle(filter.showAvailable, "available", FFStyles.STYLE_TOGGLE)) { filter.showAvailable = true; } else { filter.showAvailable = false; } if (GUILayout.Toggle(filter.showUndecorated, "undecorated", FFStyles.STYLE_TOGGLE)) { filter.showUndecorated = true; } else { filter.showUndecorated = false; } if (HighLogic.LoadedScene == GameScenes.FLIGHT) { if (GUILayout.Toggle(filter.showFlightOnly, "flight only", FFStyles.STYLE_TOGGLE)) { filter.showFlightOnly = true; } else { filter.showFlightOnly = false; } } GUILayout.Label("", FFStyles.STYLE_LABEL); // fixed space // sorter GUILayout.FlexibleSpace(); GUILayout.Label("Sort by:", FFStyles.STYLE_LABEL); DrawSorterButtons(); GUILayout.Label("", FFStyles.STYLE_LABEL); // fixed space GUILayout.FlexibleSpace(); if (GUILayout.Button("Config", FFStyles.STYLE_BUTTON)) { if (!configWindow.IsVisible()) { MoveWindowAside(configWindow); } configWindow.SetVisible(!configWindow.IsVisible()); } if (GUILayout.Button("About", FFStyles.STYLE_BUTTON)) { about.SetVisible(!about.IsVisible()); } GUILayout.EndVertical(); GUILayout.EndHorizontal(); if (Event.current.type == EventType.Repaint && !expandDetected) { expandedRibbonAreaIndex = -1; } DragWindow(); }