Esempio n. 1
0
        /// <summary>
        /// Makes a hotkey helper. Stores the pane sizes for drawing panes.
        /// </summary>
        /// <param name="Sizes"></param>
        public PaneHotKeys(PaneSizeValues Sizes)
        {
            // Store sizes and make the main pane key.
            PaneSizes   = Sizes;
            HotKeysList = new List <ConsoleKey>();
            MainPaneKey = CharToKey(ConfigurationManager.AppSettings.Get("MainPaneKey"));
            if (MainPaneKey == null)
            {
                throw new Exception("MAIN PANE KEY IS INVALID! PLEASE FIX THIS AND TRY AGAIN");
            }

            // Get all hotkeys now.
            HotKeysList.Add(MainPaneKey);
            StoreHotKeys();
        }
        public static void Main(string[] args)
        {
            // Set console size.
            Console.SetWindowSize(60, 60);

            // Setup Pane Sizes and Hotkeys here.
            PaneSizes      = new PaneSizeValues();
            HotKeys        = new PaneHotKeys(PaneSizes);
            Sender         = new KeySender(HotKeys);
            ConsoleResizer = new ConsoleResizeChecker(PaneSizes, Sender);

            // Get DelayTime
            if (!int.TryParse(ConfigurationManager.AppSettings.Get("DelayTime"), out DelayTime))
            {
                DelayTime = 1000;
            }

            // Run switcher here.
            while (true)
            {
                RunSwitcher();
            }
        }
        /// <summary>
        /// Kicks off the pane switching loop.
        /// </summary>
        private static void RunSwitcher()
        {
            // Start the console resizer
            ConsoleResizer.ResizeWanted = true;
            ConsoleResizer.CheckForResize();

            // Write config info.
            WriteConfigInfo(PaneSizes, Sender);

            // Wait for user to hit enter to begin.
            // Check for next input key here.
            while (true)
            {
                // If no new key wait.
                if (!Console.KeyAvailable)
                {
                    continue;
                }
                var NextKey = Console.ReadKey(true);

                if (NextKey.Key == ConsoleKey.Enter)
                {
                    break;
                }
                if (NextKey.Key == ConsoleKey.R)
                {
                    // Check for R again to confirm.
                    var ResetKey = Console.ReadKey(true);
                    if (ResetKey.Key != ConsoleKey.R)
                    {
                        continue;
                    }

                    // Reset the pane keys if wanted.
                    PaneSizes = new PaneSizeValues(true);
                    WriteConfigInfo(PaneSizes, Sender);
                }
                if (NextKey.Key == ConsoleKey.P)
                {
                    // Draw new boxes and update the UI
                    HotKeys.ProcessPaneKey();
                    PaneSizes = new PaneSizeValues();
                    WriteConfigInfo(PaneSizes, Sender);
                }
            }

            // Clear the console.
            Console.Clear();

            // Store last move so we dont repeat
            int LastMoveIndex = -1;

            // Loop only while we have not key pressed and we can read a key.
            while (!(Console.KeyAvailable && (Console.ReadKey(true).Key == ConsoleKey.Escape)))
            {
                // Wait the delay time and get mouse location
                Thread.Sleep(DelayTime);
                var XAndYPos = new MouseCords();

                // Check invalid Y pos value.
                if (XAndYPos.PosY < 0)
                {
                    // Make sure we wanna do this.
                    if (ConfigurationManager.AppSettings.Get("ForcePositiveY") != "TRUE")
                    {
                        continue;
                    }

                    // Change the view if needed.
                    if (LastMoveIndex != -1)
                    {
                        PrintCurrentPane(-1, null);
                        Sender.SwitchView(-1);
                    }

                    // Move on the loop.
                    continue;
                }

                // Find the X Pane item range.
                if (PaneSizes.PaneSizesList.Count == 0)
                {
                    throw new Exception("FAILED TO FIND ANY PANE SETTINGS ITEMS WHEN CHANGING VIEWS!");
                }
                for (int PaneIndex = 0; PaneIndex < PaneSizes.PaneSizesList.Count; PaneIndex++)
                {
                    // Get the top and bottom range items.
                    int MinRange = PaneSizes.PaneSizesList[PaneIndex].Item1;
                    int MaxRange = PaneSizes.PaneSizesList[PaneIndex].Item2;

                    // Check if we're in range and need to move.
                    // RANGE IS SETUP AS MIN AND COUNT. NOT MIN AND MAX!!
                    if (!Enumerable.Range(MinRange, MaxRange - MinRange).Contains(XAndYPos.PosX))
                    {
                        continue;
                    }
                    if (PaneIndex == LastMoveIndex)
                    {
                        break;
                    }

                    // Store the index of the pane we are on and print that info out.
                    Sender.SwitchView(PaneIndex + 1);
                    PrintCurrentPane(PaneIndex, XAndYPos);
                    LastMoveIndex = PaneIndex;

                    // Move on
                    break;
                }
            }

            // Stop resizer, move back to home and clear out.
            ConsoleResizer.ResizeWanted = false;
            Sender.SwitchView(-1);
            PrintCurrentPane(-1, null);
            Console.Clear();
        }
        /// <summary>
        /// Write out the current config for the application.
        /// </summary>
        /// <param name="PaneSize">Sizes object</param>
        /// <param name="Sender">Key sender</param>
        public static void WriteConfigInfo(PaneSizeValues PaneSize, KeySender Sender)
        {
            // Store a temp file.
            string TempFile = Path.GetTempFileName();

            using (var ConsoleWriter = new StreamWriter(TempFile))
            {
                // Set Console Output here.
                Console.Clear();
                Console.SetOut(ConsoleWriter);

                // Title info here.
                Console.Clear();
                Console.WriteLine("+---------------------------------------------+");
                Console.WriteLine("|                                             |");
                Console.WriteLine("|          OBS Switcher Version 1.4.3         |");
                Console.WriteLine("|~Created And Maintained By Zack Walsh - 2021~|");
                Console.WriteLine("|                                             |");
                Console.WriteLine("|---------------------------------------------|");
                Console.WriteLine("|    =Configuration Info For This Session=    |");
                Console.WriteLine("|---------------------------------------------|");

                // Print out hotkey info.
                Console.WriteLine("| {0,0} {1,33}", "OBS HotKeys", "|");

                int KeyCounter = 0;
                foreach (var HotKeyItem in HotKeys.HotKeysList)
                {
                    // TESTING FORMAT
                    // | \__ Full Output:    CTL + ALT + SHIFT + A   |
                    // | \__ Pane 1 HotKey:  CTL + ALT + SHIFT + B   |

                    // Store name and format key.
                    string KeyName      = "Pane " + KeyCounter + " HotKey";
                    string FormatString = "{0,0} {1,0} {2,0} {3,3}";
                    string ValueString  = Sender.ModStringExpanded + " + " + HotKeyItem;
                    if (KeyCounter == 0)
                    {
                        KeyName      = "Full Output";
                        FormatString = "{0,0} {1,0} {2,23} {3,3}";
                    }

                    // Write out the formatted string.
                    Console.WriteLine(FormatString, "|", $"\\__ {KeyName}: ", ValueString, "|");

                    // Tick key count.
                    KeyCounter++;
                }

                // Print splitter.
                Console.WriteLine("|---------------------------------------------|");

                // Print out pane size info.
                Console.WriteLine("| {0,0} {1,34}", "Pane Sizes", "|");
                int PaneCounter = 0;
                foreach (var PaneSizeItem in PaneSize.PaneSizesList)
                {
                    // TESTING FORMAT
                    // | \__ Pane 1 Size:       Left Edge - 1150px   |
                    // | \__ Pane 2 Size:  1151px - 2230px          |

                    // Store pane name and info.
                    string PaneName     = "Pane " + (PaneCounter + 1) + " Size";
                    string FormatString = "{0,0} {1,0} {2,17} {3,9}";

                    // String format and write out.
                    string FormatPxEdge = PaneSizeItem.Item1 + "px";

                    // Check for 0px callout.
                    if (FormatPxEdge == "0px")
                    {
                        FormatPxEdge = "Left Edge";
                    }
                    if (PaneCounter == 0 || FormatPxEdge.Contains("Edge"))
                    {
                        FormatString = "{0,0} {1,5} {2,20} {3,6}";
                    }

                    // Store value here.
                    string ValueString = $"{FormatPxEdge} - {PaneSizeItem.Item2}px";

                    // Write out the line here.
                    Console.WriteLine(FormatString, "|", $"\\__ {PaneName}: ", ValueString, "|");

                    // Tick Pane count.
                    PaneCounter++;
                }

                // Command info here.
                Console.WriteLine("|---------------------------------------------|");
                Console.WriteLine("|    =OBS Pane Configuration Setup Helpers=   |");
                Console.WriteLine("|---------------------------------------------|");
                Console.WriteLine("|  Press 'P' and a number to toggle a pane's  |");
                Console.WriteLine("|  outline. Press 'P' twice to see all panes. |");
                Console.WriteLine("|  Or press 'P' and a number for a set pane.  |");
                Console.WriteLine("|                                             |");
                Console.WriteLine("|     These rectangles help visualize the     |");
                Console.WriteLine("|   sizes of panes OBS needs to be setup to   |");
                Console.WriteLine("|  switch between based on your cursor spot.  |");
                Console.WriteLine("|                                             |");
                Console.WriteLine("|  Other Pane Commands                        |");
                Console.WriteLine("|  - Press 'P' then 'C' to clear outlines     |");
                Console.WriteLine("|  - Press 'R' twice to reset pane sizes      |");
                Console.WriteLine("|---------------------------------------------|");
                Console.WriteLine("|          =Main Control Information=         |");
                Console.WriteLine("|---------------------------------------------|");
                Console.WriteLine("|      Press ESCAPE at any time to pause      |");
                Console.WriteLine("|          Press ENTER to continue            |");
                Console.WriteLine("+---------------------------------------------+");
            };

            // Write temp file to console here.
            var StandardConsoleOutput = new StreamWriter(Console.OpenStandardOutput());

            StandardConsoleOutput.AutoFlush = true;
            Console.SetOut(StandardConsoleOutput);

            // Store temp file contents and split into list.
            string[] AllFileLines = File.ReadAllLines(TempFile);
            int      EnterCount   = (Console.WindowHeight - AllFileLines.Length) / 2;

            for (int Counter = 0; Counter < EnterCount - 5; Counter++)
            {
                Console.WriteLine();
            }
            foreach (var LineItem in AllFileLines)
            {
                CenterConsolePrint(LineItem);
            }

            // Delete Temp File.
            try { File.Delete(TempFile); }
            catch { }
        }
Esempio n. 5
0
 public ConsoleResizeChecker(PaneSizeValues Sizes, KeySender KeySender)
 {
     // Store key and sizes
     SizeValues = Sizes;
     KeySend    = KeySender;
 }
 /// <summary>
 /// CTOR which takes a sizes item to create forms on the spot for all three bounding sizes.
 /// </summary>
 /// <param name="Sizes"></param>
 public BoundingBoxBroker(PaneSizeValues Sizes)
 {
     // Make a list for us to hold box items in.
     BoundingBoxList = new List <BoundingBoxDisplayHelper>();
     this.Sizes      = Sizes;
 }