示例#1
0
        /// <summary>
        /// 执行指令框中的指令
        /// </summary>
        private void ExecuteTextBoxInstrution()
        {
            UpdateMaxWidth(InstructionTextBox.Text);

            // Execute instruction.
            string retnInfo = ExecuteInstruction(InstructionTextBox.Text);

            InitializeGUI(ATheme.GetThemeConfig());
            if (AInstruction.ADD_CONST_INSTRUCTION == retnInfo)
            {
                constInstructionInputMode  = true;
                TestRichTextbox.IsReadOnly = false; InstructionTextBox.IsEnabled = false;
                //AppendRTBLine(TestRichTextbox, "确认编辑: Alt + S / 取消编辑: Alt + Esc", themeConfig.ForegroundOutputWarning, themeConfig.BackgroundOutputWarning);
                AppendRTBLine(TestRichTextbox, "Confirm: Alt + S / Cancel: Alt + Esc", themeConfig.ForegroundOutputWarning, themeConfig.BackgroundOutputWarning);
                TestRichTextbox.BorderThickness = new Thickness(1);

                // Content Start
                TestRichTextbox.CaretPosition                     = TestRichTextbox.Document.ContentEnd;
                constInstructionContentRange.ContentStart         = TestRichTextbox.CaretPosition.Paragraph.ContentStart;
                TestRichTextbox.CaretPosition.Paragraph.IsEnabled = false;

                // If ci already exist
                string constInstruction = AInstruction_Const.GetConstInstructionFromMacroInstruction(InstructionTextBox.Text);
                if (AConstInstruction.Exist(constInstruction))
                {
                    ConstInstruction ci = new ConstInstruction();
                    if (AConstInstruction.GetConstInstructionFrame(constInstruction, ref ci))
                    {
                        OldConstInstructionFileName = AConstInstruction.GetFileNameFromConstInstruction(ci);
                        foreach (string insLine in ci.instructionLines)
                        {
                            AppendRTBLine(TestRichTextbox, insLine, themeConfig.ForegroundOutput, themeConfig.BackgroundOutput);
                            UpdateMaxWidth(insLine);
                        }
                    }
                }

                // Set CaretPosition.
                TestRichTextbox.CaretPosition = TestRichTextbox.Document.ContentEnd;

                //UpdateMaxWidth("确认编辑: Alt + S / 取消编辑: Alt + Esc");
                UpdateMaxWidth("Confirm: Alt + S / Cancel: Alt + Esc");
                Resize(true, constInstructionInputWidthBias);
                TestRichTextbox.Focus(); showOutput = true;
                return;
            }
            else if (AInstruction.UPDATE_INSTRUCTION == retnInfo)
            {
                UpdateMaxWidth(InstructionTextBox.Text);
                AppendRTBLine(TestRichTextbox, InstructionTextBox.Text, themeConfig.ForegroundOutput, themeConfig.BackgroundOutput);
                showOutput = true;
                InstructionTextBox.Text = "";
                Resize();
                AHelper.AppendString appendString = delegate(string content, AInstruction.ReportType type)
                {
                    // InstructionTextBox 被主线程占用,利用 Dispatcher 进行操作
                    TestRichTextbox.Dispatcher.BeginInvoke((Action)(() => {
                        switch (type)
                        {
                        case AInstruction.ReportType.NONE: AppendRTBLine(TestRichTextbox, content, themeConfig.ForegroundOutput, themeConfig.BackgroundOutput); break;

                        case AInstruction.ReportType.WARNING: AppendRTBLine(TestRichTextbox, content, themeConfig.ForegroundOutputWarning, themeConfig.BackgroundOutputWarning); break;

                        case AInstruction.ReportType.OK: AppendRTBLine(TestRichTextbox, content, themeConfig.ForegroundOutputOk, themeConfig.BackgroundOutputOk); break;

                        case AInstruction.ReportType.ERROR: AppendRTBLine(TestRichTextbox, content, themeConfig.ForegroundOutputError, themeConfig.BackgroundOutputError); break;
                        }
                        InstructionTextBox.Text = "";
                        UpdateMaxWidth(content);
                        Resize();
                    }));
                };

                new Thread(AUpdate.UpdateAndRestart).Start(appendString);
                return;
            }

            // Append instruction line.
            AppendRTBLine(TestRichTextbox, InstructionTextBox.Text, themeConfig.ForegroundOutput, themeConfig.BackgroundOutput);

            // Print report.
            foreach (var reportInfo in AInstruction.ReportInfo)
            {
                AppendRTBLine(TestRichTextbox, reportInfo, themeConfig.ForegroundOutputWarning, themeConfig.BackgroundOutputWarning);
                UpdateMaxWidth(reportInfo);
                // If have reportInfo, then show outputBox.
                showOutput = true;
            }

            // Print return information.
            SolidColorBrush bgcolor;
            SolidColorBrush fgcolor;

            switch (AInstruction.reportType)
            {
            case AInstruction.ReportType.OK: bgcolor = themeConfig.BackgroundOutputOk; fgcolor = themeConfig.ForegroundOutputOk; if (AInstruction.ReportInfo.Count == 0)
                {
                    showOutput = false;
                }
                break;

            case AInstruction.ReportType.WARNING: bgcolor = themeConfig.BackgroundOutputWarning; fgcolor = themeConfig.ForegroundOutputWarning; showOutput = true; break;

            case AInstruction.ReportType.ERROR: bgcolor = themeConfig.BackgroundOutputError; fgcolor = themeConfig.ForegroundOutputError; showOutput = true; break;

            default: bgcolor = themeConfig.BackgroundOutputWarning; fgcolor = themeConfig.ForegroundOutputWarning; break;
            }
            if (retnInfo != "")
            {
                AppendRTBLine(TestRichTextbox, retnInfo.Trim(), fgcolor, bgcolor);
            }

            if (AInstruction.GetType(InstructionTextBox.Text) == InstructionType.CMD)
            {
                InstructionTextBox.Text = "> "; showOutput = true;
            }
            else
            {
                InstructionTextBox.Text = "";
                if (AInstruction.ReportType.OK == AInstruction.reportType && 0 == AInstruction.ReportInfo.Count)
                {
                    Visibility = Visibility.Hidden;
                }
            }
            InstructionTextBox.SelectionStart = InstructionTextBox.Text.Length;

            // Update width and resize.
            UpdateMaxWidth(retnInfo);
            Resize();
        }
示例#2
0
        public MainWindow()
        {
            /*
             * TODO: Automatically initialize default startup items for users who first use Alterful.
             * foreach (AHelper.SoftwareInstalled software in AHelper.GetInstalledSoftwareList())
             * {
             *  Console.WriteLine(software.DisplayName + " (" + software.InstallLocation + ")");
             * }
             */

            if (!GotMutex)
            {
                AHelper.ShowANotification("Alterful 已在运行中", "Alterful is already running");
                Environment.Exit(1);//退出程序
            }

            // Global Initialization.
            InitializeComponent();
            AHelper.Initialize(delegate(string content, AInstruction.ReportType type)
            {
                // InstructionTextBox 被主线程占用,利用 Dispatcher 进行操作
                TestRichTextbox.Dispatcher.BeginInvoke((Action)(() => {
                    switch (type)
                    {
                    case AInstruction.ReportType.NONE: AppendRTBLine(TestRichTextbox, content, themeConfig.ForegroundOutput, themeConfig.BackgroundOutput); break;

                    case AInstruction.ReportType.WARNING: AppendRTBLine(TestRichTextbox, content, themeConfig.ForegroundOutputWarning, themeConfig.BackgroundOutputWarning); break;

                    case AInstruction.ReportType.OK: AppendRTBLine(TestRichTextbox, content, themeConfig.ForegroundOutputOk, themeConfig.BackgroundOutputOk); break;

                    case AInstruction.ReportType.ERROR: AppendRTBLine(TestRichTextbox, content, themeConfig.ForegroundOutputError, themeConfig.BackgroundOutputError); break;
                    }
                    InstructionTextBox.Text = "";
                    UpdateMaxWidth(content);
                    Resize();
                }));
            });
            InitializeGUI(ATheme.GetThemeConfig(), !AHelper.IS_FIRST_START && !AHelper.HAS_ANEW);
            InitializePipe();
            CheckCommandLine();
            appendStringDelegate = AppendStringFunction;

            Thread thread = new Thread(new ThreadStart(CheckUpdate));

            thread.Start();

            // If is first startup, give user some tips.
            if (AHelper.IS_FIRST_START)
            {
                string outInfo = "欢迎来到 Alterful,以下是初次上手帮助!\n- 在[指令框输入框]按 Alt 来隐藏/显示回显框;\n- 使用组合键 [Alt+A] 来唤醒/隐藏指令框;\n- 右键任意文件/文件夹来将其添加为启动项;\n- 在指令输入框键入启动项名并回车来启动它;\n- 需要时键入波浪号(~)并回车来结束 Alterful;\n- 前往 help.alterful.com 了解详细功能和使用技巧。";
                TestRichTextbox.Dispatcher.BeginInvoke((Action)(() => {
                    UpdateMaxWidth(outInfo);
                    AppendRTBLine(TestRichTextbox, outInfo, themeConfig.ForegroundOutputWarning, themeConfig.BackgroundOutputWarning);
                    Visibility = Visibility.Visible;
                    showOutput = true;
                    Resize();
                }));
            }

            // Instruction Test.
            // MainTest();
            // Close();
        }