Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
 public override void Window(int id)
 {
     GUILayout.BeginVertical();
     {
         mScrollPosition = GUILayout.BeginScrollView(mScrollPosition, GUILayout.Width(495), GUILayout.Height(240));
         if (mProcessor == null)
         {
             GUILayout.Label("I have no Processor!?", mHeadingStyle);
         }
         else
         {
             GUI.SetNextControlName("kpu_ct");
             string newText = GUILayout.TextArea(mText, GUILayout.Width(480));
             if (newText != mText)
             {
                 mCompiled = false;
                 mLoaded   = false;
                 mText     = newText;
             }
         }
         GUILayout.EndScrollView();
         GUILayout.BeginHorizontal();
         {
             if (GUILayout.Button("Compile!", mCompiled ? mGreyBtnStyle : mBtnStyle, GUILayout.ExpandWidth(false)))
             {
                 mCompiled = compile();
                 if (!mCompiled)
                 {
                     Logging.Message("Compilation failed");
                 }
                 else // normalise the code
                 {
                     decompile();
                 }
             }
             if (GUILayout.Button("Undo", mCompiled ? mGreyBtnStyle : mBtnStyle, GUILayout.ExpandWidth(false)))
             {
                 decompile();
             }
             if (GUILayout.Button("Revert", mLoaded ? mGreyBtnStyle : mBtnStyle, GUILayout.ExpandWidth(false)))
             {
                 revert();
             }
             if (GUILayout.Button("Save", mCompiled ? mBtnStyle : mGreyBtnStyle, GUILayout.ExpandWidth(false)) && mCompiled)
             {
                 string name = KPUCore.Instance.library.chooseName();
                 if (name != null)
                 {
                     KPU.Library.Program prog = new KPU.Library.Program();
                     prog.name        = name;
                     prog.description = String.Format("Saved from {0}", FlightGlobals.ActiveVessel.vesselName);
                     prog.addCode(instructions);
                     KPUCore.Instance.library.putProgram(prog);
                     Logging.Message(String.Format("Saved as {0}", name));
                     UI.LibraryNameWindow lnw = new UI.LibraryNameWindow(name);
                     lnw.Show();
                 }
             }
             if (GUILayout.Button("Load", mBtnStyle, GUILayout.ExpandWidth(false)))
             {
                 KPUCore.Instance.openLibraryWindow(this);
             }
         }
         GUILayout.EndHorizontal();
     }
     GUILayout.EndVertical();
     base.Window(id);
 }