public CommandResult Close() { try { _connection.Disconnect(); _connection.Close(); } catch (Exception ex) { //ここでエラーが発生しても処理は続行してアプリ自体は実行を継続 GUtil.Warning(GEnv.Frame, GEnv.Strings.GetString("Message.ConnectionCommandTarget.CloseError") + ex.Message); } bool active = _connection == GEnv.Connections.ActiveConnection; ConnectionTag ct = GEnv.Connections.FindTag(_connection); //Debug.WriteLine("ct==null? " + (ct==null)); if (ct == null) { return(CommandResult.Ignored); } TerminalPane pane = ct.AttachedPane; ct.IsTerminated = true; GEnv.Frame.RemoveConnection(ct); ConnectionTag next = GEnv.Connections.GetCandidateOfActivation(ct.PositionIndex, ct); GEnv.Connections.Remove(_connection); if (next != null) { if (pane != null) { pane.Attach(next); } if (active) { GEnv.Frame.ActivateConnection(next); //もともとアクティブでない接続が切れたときは変更しない } } else { if (pane != null) { pane.FakeVisible = false; pane.Detach(); } GEnv.Frame.RefreshConnection(null); } if (GEnv.Options.QuitAppWithLastPane && GEnv.Connections.Count == 0) { GEnv.Frame.AsForm().Close(); } return(CommandResult.Success); }
private void MovePane(ConnectionTag ct, int destinationIndex) { //位置の変更 //移動先に表示 //Debug.WriteLine("--------"); //GEnv.Connections.Dump(); int originalPos = ct.PositionIndex; Debug.Assert(originalPos != destinationIndex); ct.PositionIndex = destinationIndex; TerminalPane pane = GetPane(destinationIndex); if (ct.AttachedPane != null) { ct.AttachedPane.Detach(); } if (pane.FakeVisible) { pane.Detach(); } pane.FakeVisible = true; pane.Attach(ct); pane.Focus(); GEnv.Frame.RefreshConnection(ct); //GEnv.Connections.Dump(); //ここでPreservedPositionIndexを設定 ct.PreservedPositionIndex = destinationIndex; //移動元に別の候補がいればそれを表示 ConnectionTag orig = GEnv.Connections.GetCandidateOfActivation(originalPos, ct); if (orig != null) { //orig.PaneType = CalcPaneType(orig); GetPane(originalPos).Attach(orig); GEnv.Frame.RefreshConnection(orig); } else { GetPane(originalPos).FakeVisible = false; } }
// public void ActivateConnection(ConnectionTag ct) { //ct.PaneType = CalcPaneType(ct); TerminalPane pane = GetPane(ct.PositionIndex); //既にコネクションがあればそれのUIをリフレッシュ if (pane.Connection != null) { ConnectionTag k = GEnv.Connections.FindTag(pane.Connection); if (k != null) //ここで既に閉じた接続が得られてしまうことがある。本当は接続を閉じるときに参照を解消すべきだが手抜き { pane.Detach(); GEnv.Frame.RefreshConnection(k); } } pane.FakeVisible = true; pane.Attach(ct); if (!pane.AsControl().Focused) { pane.AsControl().Focus(); } GEnv.Frame.RefreshConnection(ct); }