private void Buttons(Library.Program selectedProgram) { KPU.Library.Library library = KPUCore.Instance.library; GUILayout.BeginHorizontal(); try { bool canLoad = (mCW != null) && (selectedProgram != null); if (GUILayout.Button("Load", canLoad ? mBtnStyle : mGreyBtnStyle) && canLoad) { mCW.instructions = new List<KPU.Processor.Instruction>(selectedProgram.code); mCW.mLoaded = false; mCW.decompile(); } if (GUILayout.Button("Rename", selectedProgram != null ? mBtnStyle : mGreyBtnStyle) && selectedProgram != null) { UI.LibraryRenameWindow lrw = new UI.LibraryRenameWindow(selectedProgram.name); lrw.Show(); } if (GUILayout.Button("Delete", selectedProgram != null ? mBtnStyle : mGreyBtnStyle) && selectedProgram != null) { library.deleteProgram(selectedProgram.name); } } finally { GUILayout.EndHorizontal(); } }
public override void Window(int id) { KPU.Library.Library library = KPUCore.Instance.library; KPU.Library.Program selectedProgram = null; GUILayout.BeginHorizontal(GUILayout.Height(310)); GUILayout.BeginVertical(GUILayout.Width(250)); { // name list pane mScrollNames = GUILayout.BeginScrollView(mScrollNames, GUILayout.Width(240), GUILayout.Height(280)); if (library == null) { GUILayout.Label("I have no Library!?", mHeadingStyle); } else if (library.isEmpty()) { GUILayout.Label("There are no saved programs", mHeadingStyle); } else { foreach (string name in library.programNames()) { GUIStyle style = HighLogic.Skin.label; if (name.Equals(mSelected)) { style = mSelectionStyle; } if (GUILayout.Button(name, style, GUILayout.Width(216))) { mSelected = name; } } } if (mSelected != null) { selectedProgram = library.getProgram(mSelected); } GUILayout.EndScrollView(); GUILayout.BeginHorizontal(); bool canLoad = (mCW != null) && (selectedProgram != null); if (GUILayout.Button("Load", canLoad ? mBtnStyle : mGreyBtnStyle) && canLoad) { mCW.instructions = new List <KPU.Processor.Instruction>(selectedProgram.code); mCW.mLoaded = false; mCW.decompile(); } if (GUILayout.Button("Rename", selectedProgram != null ? mBtnStyle : mGreyBtnStyle) && selectedProgram != null) { UI.LibraryRenameWindow lrw = new UI.LibraryRenameWindow(selectedProgram.name); lrw.Show(); } if (GUILayout.Button("Delete", selectedProgram != null ? mBtnStyle : mGreyBtnStyle) && selectedProgram != null) { library.deleteProgram(selectedProgram.name); } GUILayout.EndHorizontal(); } GUILayout.EndVertical(); GUILayout.BeginVertical(GUILayout.Width(300)); { // program details pane if (selectedProgram == null) { GUILayout.Label("Select a program from the list", mHeadingStyle, GUILayout.Width(280)); } else { GUILayout.Label(selectedProgram.name, mHeadingStyle, GUILayout.Width(280)); mScrollDesc = GUILayout.BeginScrollView(mScrollDesc, GUILayout.Height(64)); GUI.SetNextControlName("kpu_dt"); selectedProgram.description = GUILayout.TextArea(selectedProgram.description, GUILayout.Width(270)); GUILayout.EndScrollView(); GUILayout.Label("Requirements", mHeadingStyle, GUILayout.Width(280)); KPU.Processor.Processor proc = mCW == null ? null : mCW.mProcessor; require("Level Trigger", selectedProgram.requiresLevelTrigger, proc == null ? false : proc.hasLevelTrigger); require("Logic Ops", selectedProgram.requiresLogicOps, proc == null ? false : proc.hasLogicOps); require("Arithmetic Ops", selectedProgram.requiresArithOps, proc == null ? false : proc.hasArithOps); bool enough = proc == null ? false : selectedProgram.imemWords <= proc.maxImemWords; GUILayout.Label(String.Format("Requires {0} words of IMEM", selectedProgram.imemWords), enough ? mGoodNewsStyle : mBadNewsStyle); GUILayout.Label("Inputs Used", mHeadingStyle, GUILayout.Width(280)); mScrollInputs = GUILayout.BeginScrollView(mScrollInputs, GUILayout.Height(64)); List <string> usedInputs = new List <string>(selectedProgram.usedInputs); usedInputs.Sort(); foreach (string input in usedInputs) { if (proc == null) { GUILayout.Label(input, HighLogic.Skin.label, GUILayout.Width(270)); } else { bool have = proc.inputValues.ContainsKey(input); GUILayout.Label(input, have ? mGoodNewsStyle : mBadNewsStyle, GUILayout.Width(270)); } } GUILayout.EndScrollView(); } } GUILayout.EndVertical(); GUILayout.EndHorizontal(); base.Window(id); }