Пример #1
0
        public void ApplySplitInfo(string format)
        {
            try {
                //現状を獲得
                IPoderosaView[]     previous_views = GetAllViews();
                IPoderosaDocument[] documents      = new IPoderosaDocument[previous_views.Length]; //分割適用後アクティブになるやつ
                for (int i = 0; i < previous_views.Length; i++)
                {
                    documents[i] = previous_views[i].Document;
                }
                IPoderosaView[] new_views;

                SessionManagerPlugin sm = SessionManagerPlugin.Instance;

                if (format.Length > 0)
                {
                    Form container = _parent.AsForm();
                    container.SuspendLayout();
                    Control old_root = this.RootControl;
                    _paneDivision.ApplySplitInfo(old_root.Parent, old_root, format,
                                                 delegate(string label) {
                        return(CreateNewPane(_defaultViewFactory, DockStyle.Fill));
                    });                          //とりあえずデフォルトファクトリで作成
                    container.ResumeLayout(true);
                    _singlePane = null;          //成功裏に終わったときのみ
                    new_views   = GetAllViews(); //新しいのを取得
                }
                else
                {
                    IContentReplaceableView view;
                    UnifyAll(out view);
                    new_views = new IPoderosaView[] { view };
                }

                //既存ドキュメントに再適用
                foreach (DocumentHost dh in sm.GetAllDocumentHosts())
                {
                    int index = CollectionUtil.ArrayIndexOf(previous_views, dh.LastAttachedView);
                    if (index != -1)
                    {
                        IPoderosaView new_view = index < new_views.Length ? new_views[index] : new_views[0]; //個数が減ったら先頭に
                        dh.AlternateView(new_view);
                    }
                }

                //もともとActiveだったやつを再適用
                for (int i = 0; i < documents.Length; i++)
                {
                    if (documents[i] != null)
                    {
                        sm.AttachDocumentAndView(documents[i], sm.FindDocumentHost(documents[i]).LastAttachedView); //LastAttachedViewはこの上のループで適用済み
                    }
                }
            }
            catch (Exception ex) {
                RuntimeUtil.ReportException(ex);
            }
        }
Пример #2
0
        void Update(IPoderosaMainWindow window)
        {
            IPoderosaDocument odocument;

            if (dict.TryGetValue(window, out odocument))
            {
                window.AsForm().Text = String.Format("{0} - Poderosa", odocument.Caption);
            }
            else
            {
                window.AsForm().Text = "Poderosa";
            }
        }
Пример #3
0
        void odocument_OnCaptionChanged(object sender, EventArgs e)
        {
            IPoderosaMainWindow win = dict2[(IPoderosaDocument)sender];

            if (win.AsForm().InvokeRequired)
            {
                win.AsForm().BeginInvoke((System.Threading.ThreadStart) delegate(){ this.Update(win); });
            }
            else
            {
                this.Update(win);
            }
        }
Пример #4
0
        private void ShowAbnormalTerminationMessage()
        {
            IPoderosaMainWindow window = _session.OwnerWindow;

            if (window != null)
            {
                Debug.Assert(window.AsForm().InvokeRequired);
                ITCPParameter tcp = (ITCPParameter)GetConnection().Destination.GetAdapter(typeof(ITCPParameter));
                if (tcp != null)
                {
                    string msg = String.Format(GEnv.Strings.GetString("Message.AbstractTerminal.TCPDisconnected"), tcp.Destination);

                    switch (GEnv.Options.DisconnectNotification)
                    {
                    case WarningOption.StatusBar:
                        window.StatusBar.SetMainText(msg);
                        break;

                    case WarningOption.MessageBox:
                        window.Warning(msg);     //TODO Disableオプションつきのサポート
                        break;
                    }
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Command execution
        /// </summary>
        public override CommandResult InternalExecute(ICommandTarget target, params IAdaptable[] args)
        {
            PipeTerminalParameter paramInit    = null;
            PipeTerminalSettings  settingsInit = null;

            IExtensionPoint ext = PipePlugin.Instance.PoderosaWorld.PluginManager.FindExtensionPoint("org.poderosa.terminalsessions.loginDialogUISupport");

            if (ext != null && ext.ExtensionInterface == typeof(ILoginDialogUISupport))
            {
                foreach (ILoginDialogUISupport sup in ext.GetExtensions())
                {
                    ITerminalParameter terminalParam;
                    ITerminalSettings  terminalSettings;
                    sup.FillTopDestination(typeof(PipeTerminalParameter), out terminalParam, out terminalSettings);
                    PipeTerminalParameter paramTemp    = terminalParam as PipeTerminalParameter;
                    PipeTerminalSettings  settingsTemp = terminalSettings as PipeTerminalSettings;
                    if (paramInit == null)
                    {
                        paramInit = paramTemp;
                    }
                    if (settingsInit == null)
                    {
                        settingsInit = settingsTemp;
                    }
                }
            }
            if (paramInit == null)
            {
                paramInit = new PipeTerminalParameter();
            }
            if (settingsInit == null)
            {
                settingsInit = new PipeTerminalSettings();
            }

            IPoderosaMainWindow window = (IPoderosaMainWindow)target.GetAdapter(typeof(IPoderosaMainWindow));

            CommandResult commandResult = CommandResult.Failed;

            using (OpenPipeDialog dialog = new OpenPipeDialog()) {
                dialog.OpenPipe =
                    delegate(PipeTerminalParameter param, PipeTerminalSettings settings) {
                    PipeTerminalConnection connection = PipeCreator.CreateNewPipeTerminalConnection(param, settings);
                    commandResult = PipePlugin.Instance.CommandManager.Execute(
                        PipePlugin.Instance.TerminalSessionsService.TerminalSessionStartCommand,
                        window, connection, settings);
                    return(commandResult == CommandResult.Succeeded);
                };

                dialog.ApplyParams(paramInit, settingsInit);

                DialogResult dialogResult = dialog.ShowDialog(window != null ? window.AsForm() : null);
                if (dialogResult == DialogResult.Cancel)
                {
                    commandResult = CommandResult.Cancelled;
                }
            }

            return(commandResult);
        }
            public ITerminalConnection EstablishConnection(IPoderosaMainWindow window, ITerminalParameter destination, ITerminalSettings settings)
            {
                ISSHLoginParameter ssh = (ISSHLoginParameter)destination.GetAdapter(typeof(ISSHLoginParameter));

                if (ssh.LetUserInputPassword && ssh.AuthenticationType != Granados.AuthenticationType.KeyboardInteractive) //ダイアログで入力を促して接続
                {
                    SSHShortcutLoginDialog dlg = new SSHShortcutLoginDialog(window, ssh, settings);
                    if (dlg.ShowDialog(window.AsForm()) == DialogResult.OK)
                    {
                        ITerminalConnection con = dlg.Result;
                        AdjustCaptionAndText(settings, ((ITCPParameter)con.Destination.GetAdapter(typeof(ITCPParameter))).Destination, StartCommandIcon.NewConnection);
                        return(con);
                    }
                    else
                    {
                        return(null);
                    }
                }
                else   //主にReproduceやマクロ。設定済みのパスワードで接続
                {
                    IProtocolService       protocolservice = TerminalSessionsPlugin.Instance.ProtocolService;
                    ISynchronizedConnector conn            = protocolservice.CreateFormBasedSynchronozedConnector(window);
                    IInterruptable         r = protocolservice.AsyncSSHConnect(conn.InterruptableConnectorClient, ssh);
                    AdjustCaptionAndText(settings, ((ITCPParameter)destination.GetAdapter(typeof(ITCPParameter))).Destination, StartCommandIcon.NewConnection);
                    return(conn.WaitConnection(r, TerminalSessionsPlugin.Instance.TerminalSessionOptions.TerminalEstablishTimeout)); //時間?
                }
            }
Пример #7
0
        public override CommandResult InternalExecute(ICommandTarget target, params IAdaptable[] args)
        {
            IPoderosaMainWindow window = CommandTargetUtil.AsWindow(target);
            MacroList           dlg    = new MacroList();

            dlg.ShowDialog(window.AsForm());
            return(CommandResult.Succeeded);
        }
Пример #8
0
        private static CommandResult CmdShellSchemeEditor(ICommandTarget target)
        {
            IPoderosaMainWindow  window  = CommandTargetUtil.AsWindow(target);
            ITerminalControlHost session = TerminalCommandTarget.AsTerminal(target);
            ShellSchemeEditor    dlg     = new ShellSchemeEditor(session == null ? null : session.TerminalSettings.ShellScheme);

            dlg.ShowDialog(window.AsForm());
            return(CommandResult.Succeeded);
        }
Пример #9
0
        private void CharDecodeErrorDialog(IPoderosaMainWindow window, string msg)
        {
            WarningWithDisableOption dlg = new WarningWithDisableOption(msg);

            dlg.ShowDialog(window.AsForm());
            if (dlg.CheckedDisableOption)
            {
                GEnv.Options.CharDecodeErrorBehavior = WarningOption.Ignore;
            }
        }
Пример #10
0
        private static CommandResult CmdGenerateKeyPair(ICommandTarget target)
        {
            IPoderosaMainWindow window = CommandTargetUtil.AsWindow(target);

            Debug.Assert(window != null);

            KeyGenWizard dlg = new KeyGenWizard();
            DialogResult r   = dlg.ShowDialog(window.AsForm());

            return(r == DialogResult.OK ? CommandResult.Succeeded : CommandResult.Cancelled);
        }
Пример #11
0
        private static CommandResult CmdChangePassphrase(ICommandTarget target)
        {
            IPoderosaMainWindow window = CommandTargetUtil.AsWindow(target);

            Debug.Assert(window != null);

            ChangePassphrase dlg = new ChangePassphrase();
            DialogResult     r   = dlg.ShowDialog(window.AsForm());

            return(r == DialogResult.OK ? CommandResult.Succeeded : CommandResult.Cancelled);
        }
Пример #12
0
        private static CommandResult CmdAgentKeyListDialog(ICommandTarget target)
        {
            IPoderosaMainWindow window = CommandTargetUtil.AsWindow(target);

            Debug.Assert(window != null);

            AgentKeyListDialog dlg = new AgentKeyListDialog();
            DialogResult       r   = dlg.ShowDialog(window.AsForm());

            return(r == DialogResult.OK ? CommandResult.Succeeded : CommandResult.Cancelled);
        }
Пример #13
0
        private static CommandResult CmdNewWindow(ICommandTarget target)
        {
            IPoderosaMainWindow window = CommandTargetUtil.AsWindow(target);
            Form      f        = window.AsForm();
            Rectangle location = f.WindowState == FormWindowState.Normal? f.DesktopBounds : f.RestoreBounds;

            location.X += 20; location.Y += 20; //少し右下に表示
            MainWindowArgument arg = new MainWindowArgument(location, FormWindowState.Normal, "", "", 1);

            WindowManagerPlugin.Instance.CreateNewWindow(arg);
            return(CommandResult.Succeeded);
        }
Пример #14
0
        /// <summary>
        /// Gets System.Windows.Forms.Form of the target.
        /// </summary>
        /// <param name="target">Target object which has been passed to the IPoderosaCommand's method.</param>
        /// <returns>Form object if it is available. Otherwise null.</returns>
        protected Form GetForm(ICommandTarget target)
        {
            IPoderosaMainWindow window = (IPoderosaMainWindow)target.GetAdapter(typeof(IPoderosaMainWindow));

            if (window != null)
            {
                return(window.AsForm());
            }
            else
            {
                return(null);
            }
        }
Пример #15
0
        public void EndCommand(List<GLine> command_result) {
            string[] stringarray_result = AsStringArrayResult(command_result);
            Debug.Assert(_window.AsForm().InvokeRequired);
            //この処理中に次のアクションがセットされることもある
            if (_currentAction.ReceiverThreadAction != null)
                _currentAction.ReceiverThreadAction(stringarray_result);
            else {
                _window.AsControl().Invoke(_currentAction.MainThreadAction, stringarray_result);
            }

            if (_actions.Count > 0)
                ProcessNextAction();
        }
Пример #16
0
        /// <summary>
        /// メインウィンドウ表示コマンド
        /// </summary>
        /// <param name="target">CommandTarget</param>
        private static CommandResult MainWindow(ICommandTarget target)
        {
            IPoderosaMainWindow window = CommandTargetUtil.AsWindow(target);

            if (window != null)
            {
                ConnectProfileForm Form = new ConnectProfileForm();
                if (Form.ShowDialog(window.AsForm()) == DialogResult.OK)
                {
                    return(CommandResult.Succeeded);
                }
            }
            return(CommandResult.Cancelled);
        }
Пример #17
0
        private static CommandResult CmdExtensionPointList(ICommandTarget target)
        {
            IPoderosaMainWindow window = CommandTargetUtil.AsWindow(target);

            if (window == null)
            {
                return(CommandResult.Ignored);
            }

            ExtensionPointList dlg = new ExtensionPointList();

            dlg.ShowDialog(window.AsForm());
            return(CommandResult.Succeeded);
        }
Пример #18
0
        //文字系のエラー通知
        protected void CharDecodeError(string msg)
        {
            IPoderosaMainWindow window = _session.OwnerWindow;

            if (window == null)
            {
                return;
            }
            Debug.Assert(window.AsForm().InvokeRequired);

            Monitor.Exit(GetDocument()); //これは忘れるな
            switch (GEnv.Options.CharDecodeErrorBehavior)
            {
            case WarningOption.StatusBar:
                window.StatusBar.SetMainText(msg);
                break;

            case WarningOption.MessageBox:
                window.AsForm().Invoke(new CharDecodeErrorDialogDelegate(CharDecodeErrorDialog), window, msg);
                break;
            }
            Monitor.Enter(GetDocument());
        }
Пример #19
0
        public static CommandResult OpenOptionDialog(ICommandTarget target)
        {
            IPoderosaMainWindow window = CommandTargetUtil.AsWindow(target);
            OptionDialog        dlg    = new OptionDialog();

            if (dlg.ShowDialog(window.AsForm()) == DialogResult.OK)
            {
                return(CommandResult.Succeeded);
            }
            else
            {
                return(CommandResult.Cancelled);
            }
        }
Пример #20
0
        public static CommandResult OpenPreferenceEditor(ICommandTarget target)
        {
            IPoderosaMainWindow window = CommandTargetUtil.AsWindow(target);
            PreferenceEditor    dlg    = new PreferenceEditor(OptionDialogPlugin.Instance.CoreServices.Preferences);

            if (dlg.ShowDialog(window.AsForm()) == DialogResult.OK)
            {
                return(CommandResult.Succeeded);
            }
            else
            {
                return(CommandResult.Cancelled);
            }
        }
Пример #21
0
        //ドキュメントロック中でないと呼んではだめ
        public void IndicateBell()
        {
            IPoderosaMainWindow window = _session.OwnerWindow;

            if (window != null)
            {
                Debug.Assert(window.AsForm().InvokeRequired);
                Monitor.Exit(GetDocument());
                window.StatusBar.SetStatusIcon(Poderosa.TerminalEmulator.Properties.Resources.Bell16x16);
                Monitor.Enter(GetDocument());
            }
            if (GEnv.Options.BeepOnBellChar)
            {
                Win32.MessageBeep(-1);
            }
        }
Пример #22
0
        public override void InitializePlugin(IPoderosaWorld poderosa)
        {
            base.InitializePlugin(poderosa);

#if USING_GENERIC_COMMAND
            //"ダイアログ"コマンドカテゴリを取得
            ICoreServices    cs     = (ICoreServices)poderosa.GetAdapter(typeof(ICoreServices));
            ICommandCategory dialog = cs.CommandManager.CommandCategories.Dialogs;

            //コマンド作成
            GeneralCommandImpl cmd = new GeneralCommandImpl("org.poderosa.helloworld", "Hello World Command", dialog, delegate(ICommandTarget target) {
                //コマンドの実装
                //このコマンドはメインメニューから起動するので、CommandTargetからウィンドウが取得できるはず
                IPoderosaMainWindow window = (IPoderosaMainWindow)target.GetAdapter(typeof(IPoderosaMainWindow));
                Debug.Assert(window != null);
                MessageBox.Show(window.AsForm(), "Hello World", "HelloWorld Plugin");
                return(CommandResult.Succeeded);
            });
            //コマンドマネージャへの登録
            cs.CommandManager.Register(cmd);

            //ヘルプメニューに登録
            IExtensionPoint helpmenu = poderosa.PluginManager.FindExtensionPoint("org.poderosa.menu.help");
            helpmenu.RegisterExtension(new PoderosaMenuGroupImpl(new PoderosaMenuItemImpl("org.poderosa.helloworld", "Hello World")));
#else //単なるIPoderosaCommand版
            //コマンド作成
            PoderosaCommandImpl cmd = new PoderosaCommandImpl(delegate(ICommandTarget target) {
                //コマンドの実装
                //このコマンドはメインメニューから起動するので、CommandTargetからウィンドウが取得できるはず
                IPoderosaMainWindow window = (IPoderosaMainWindow)target.GetAdapter(typeof(IPoderosaMainWindow));
                Debug.Assert(window != null);
                MessageBox.Show(window.AsForm(), "Hello World", "HelloWorld Plugin");
                return(CommandResult.Succeeded);
            });

            //ヘルプメニューに登録
            IExtensionPoint helpmenu = poderosa.PluginManager.FindExtensionPoint("org.poderosa.menu.help");
            helpmenu.RegisterExtension(new PoderosaMenuGroupImpl(new PoderosaMenuItemImpl(cmd, "Hello World")));
#endif
        }
Пример #23
0
        //AboutBox表示のメニューとコマンド
        private static CommandResult CmdAboutBox(ICommandTarget target)
        {
            IPoderosaMainWindow window = CommandTargetUtil.AsWindow(target);

            if (window == null)
            {
                return(CommandResult.Ignored);
            }

            IPoderosaAboutBoxFactory f = AboutBoxUtil.GetCurrentAboutBoxFactory();

            if (f != null)
            {
                AboutBoxUtil.ResetKeyBufferInAboutBox();
                f.CreateAboutBox().ShowDialog(window.AsForm());
                return(CommandResult.Succeeded);
            }
            else
            {
                return(CommandResult.Failed);
            }
        }
Пример #24
0
        private static CommandResult CmdCopyToFile(ICommandTarget target)
        {
            string text = GetSelectedText(target, TextFormatOption.Default);

            if (text == null)
            {
                return(CommandResult.Ignored);
            }

            IPoderosaMainWindow window = TerminalCommandTarget.AsTerminal(target).OwnerWindow;
            SaveFileDialog      dlg    = new SaveFileDialog();

            //dlg.InitialDirectory = GApp.Options.DefaultFileDir;
            dlg.Title  = GEnv.Strings.GetString("Util.DestinationToSave");
            dlg.Filter = "All Files(*.*)|*.*";
            if (dlg.ShowDialog(window.AsForm()) == DialogResult.OK)
            {
                StreamWriter wr = null;
                try {
                    wr = new StreamWriter(new FileStream(dlg.FileName, FileMode.Create), Encoding.Default);
                    wr.Write(text);
                    return(CommandResult.Succeeded);
                }
                catch (Exception ex) {
                    window.Warning(ex.Message);
                    return(CommandResult.Failed);
                }
                finally {
                    if (wr != null)
                    {
                        wr.Close();
                    }
                }
            }
            else
            {
                return(CommandResult.Cancelled);
            }
        }
Пример #25
0
            public override CommandResult InternalExecute(ICommandTarget target, params IAdaptable[] args)
            {
                IPoderosaMainWindow window = (IPoderosaMainWindow)target.GetAdapter(typeof(IPoderosaMainWindow));
                SerialLoginDialog   dlg    = new SerialLoginDialog();

                using (dlg) {
                    SerialTerminalParam    tp = new SerialTerminalParam();
                    SerialTerminalSettings ts = SerialPortUtil.CreateDefaultSerialTerminalSettings(tp.Port);
                    dlg.ApplyParam(tp, ts);

                    if (dlg.ShowDialog(window.AsForm()) == DialogResult.OK)   //TODO 親ウィンドウ指定
                    {
                        ITerminalConnection con = dlg.ResultConnection;
                        if (con != null)
                        {
                            return(_instance.CommandManager.Execute(_instance.TerminalSessionsService.TerminalSessionStartCommand,
                                                                    window, con, dlg.ResultTerminalSettings));
                        }
                    }
                }
                return(CommandResult.Cancelled);
            }
Пример #26
0
            public CommandResult InternalExecute(ICommandTarget target, params IAdaptable[] args)
            {
                IPoderosaMainWindow window = (IPoderosaMainWindow)target.GetAdapter(typeof(IPoderosaMainWindow));

                if (window == null)
                {
                    return(CommandResult.Ignored);
                }
                LocalShellLoginDialog dlg = new LocalShellLoginDialog(window);

                using (dlg) {
                    dlg.ApplyParam();

                    if (dlg.ShowDialog(window.AsForm()) == DialogResult.OK)
                    {
                        ITerminalConnection con = dlg.Result;
                        if (con != null)
                        {
                            ISessionManager sm = (ISessionManager)CygwinPlugin.Instance.PoderosaWorld.PluginManager.FindPlugin("org.poderosa.core.sessions", typeof(ISessionManager));
                            TerminalSession ts = new TerminalSession(con, dlg.TerminalSettings);
                            sm.StartNewSession(ts, dlg.TargetView);
                            sm.ActivateDocument(ts.Terminal.IDocument, ActivateReason.InternalAction);

                            IAutoExecMacroParameter autoExecParam = con.Destination.GetAdapter(typeof(IAutoExecMacroParameter)) as IAutoExecMacroParameter;
                            if (autoExecParam != null && autoExecParam.AutoExecMacroPath != null && CygwinPlugin.Instance.MacroEngine != null)
                            {
                                CygwinPlugin.Instance.MacroEngine.RunMacro(autoExecParam.AutoExecMacroPath, ts);
                            }

                            return(CommandResult.Succeeded);
                        }
                    }
                }

                return(CommandResult.Cancelled);
            }
Пример #27
0
 public ITerminalConnection EstablishConnection(IPoderosaMainWindow window, ITerminalParameter destination, ITerminalSettings settings) {
     ISSHLoginParameter ssh = (ISSHLoginParameter)destination.GetAdapter(typeof(ISSHLoginParameter));
     if (ssh.LetUserInputPassword && ssh.AuthenticationType != Granados.AuthenticationType.KeyboardInteractive) { //ダイアログで入力を促して接続
         SSHShortcutLoginDialog dlg = new SSHShortcutLoginDialog(window, ssh, settings);
         if (dlg.ShowDialog(window.AsForm()) == DialogResult.OK) {
             ITerminalConnection con = dlg.Result;
             AdjustCaptionAndText(settings, ((ITCPParameter)con.Destination.GetAdapter(typeof(ITCPParameter))).Destination, StartCommandIcon.NewConnection);
             return con;
         }
         else
             return null;
     }
     else { //主にReproduceやマクロ。設定済みのパスワードで接続
         IProtocolService protocolservice = TerminalSessionsPlugin.Instance.ProtocolService;
         ISynchronizedConnector conn = protocolservice.CreateFormBasedSynchronozedConnector(window);
         IInterruptable r = protocolservice.AsyncSSHConnect(conn.InterruptableConnectorClient, ssh);
         AdjustCaptionAndText(settings, ((ITCPParameter)destination.GetAdapter(typeof(ITCPParameter))).Destination, StartCommandIcon.NewConnection);
         return conn.WaitConnection(r, TerminalSessionsPlugin.Instance.TerminalSessionOptions.TerminalEstablishTimeout); //時間?
     }
 }
Пример #28
0
 private void CharDecodeErrorDialog(IPoderosaMainWindow window, string msg)
 {
     WarningWithDisableOption dlg = new WarningWithDisableOption(msg);
     dlg.ShowDialog(window.AsForm());
     if (dlg.CheckedDisableOption) {
         GEnv.Options.CharDecodeErrorBehavior = WarningOption.Ignore;
     }
 }
Пример #29
0
 public void OnDocumentActivated(IPoderosaMainWindow window, IPoderosaDocument document)
 {
     window.AsForm().Text = String.Format("{0} - Poderosa", document.Caption);
 }
Пример #30
0
 public void OnDocumentDeactivated(IPoderosaMainWindow window)
 {
     window.AsForm().Text = "Poderosa";
 }
 public void OnDocumentDeactivated(IPoderosaMainWindow window)
 {
     window.AsForm().Text = "Poderosa";
 }
 public void OnDocumentActivated(IPoderosaMainWindow window, IPoderosaDocument document)
 {
     window.AsForm().Text = String.Format("{0} - Poderosa", document.Caption);
 }