1 // OpenTween - Client of Twitter
2 // Copyright (c) 2014 spx (@5px)
3 // All rights reserved.
5 // This file is part of OpenTween.
7 // This program is free software; you can redistribute it and/or modify it
8 // under the terms of the GNU General Public License as published by the Free
9 // Software Foundation; either version 3 of the License, or (at your option)
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 // You should have received a copy of the GNU General Public License along
18 // with this program. If not, see <http://www.gnu.org/licenses/>, or write to
19 // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
20 // Boston, MA 02110-1301, USA.
23 using System.Windows.Forms;
24 using System.ComponentModel;
28 public class OTSplitContainer : SplitContainer
31 /// Panel1 と Panel2 の中身が入れ替わった状態かどうかを取得または設定する。
32 /// true が設定された場合、Panel に関連するプロパティの処理内容も入れ替わるので注意。
35 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
36 public bool IsPanelInverted
38 get { return _isPanelInverted; }
41 if (_isPanelInverted == value) return;
42 _isPanelInverted = value;
44 // Panel1 と Panel2 の中身を入れ替え
45 using (ControlTransaction.Layout(this, false))
46 using (ControlTransaction.Layout(base.Panel1, false))
47 using (ControlTransaction.Layout(base.Panel2, false))
50 var cont1 = base.Panel1.Controls.Count > 0 ? base.Panel1.Controls[0] : null;
51 var cont2 = base.Panel2.Controls.Count > 0 ? base.Panel2.Controls[0] : null;
52 base.Panel1.Controls.Clear();
53 base.Panel2.Controls.Clear();
56 if (base.FixedPanel != FixedPanel.None)
57 base.FixedPanel = (base.FixedPanel == FixedPanel.Panel1) ? FixedPanel.Panel2 : FixedPanel.Panel1;
59 base.SplitterDistance = SplitterTotalWidth - base.SplitterDistance;
61 var tmpMinSize = base.Panel1MinSize;
62 base.Panel1MinSize = base.Panel2MinSize;
63 base.Panel2MinSize = tmpMinSize;
65 var tmpCollapsed = base.Panel1Collapsed;
66 base.Panel1Collapsed = base.Panel2Collapsed;
67 base.Panel2Collapsed = tmpCollapsed;
69 base.Panel1.Controls.Add(cont2);
70 base.Panel2.Controls.Add(cont1);
74 private bool _isPanelInverted = false;
77 /// SplitContainer.Orientation プロパティの設定に応じて、スプリッタが移動する方向の幅を返す。
79 private int SplitterTotalWidth
81 get { return (base.Orientation == Orientation.Horizontal) ? base.Height : base.Width; }
85 /// IsPanelInverted プロパティの設定に応じて、SplitContainer.Panel1 または SplitContainer.Panel2 を返す。
87 public new SplitterPanel Panel1
89 get { return IsPanelInverted ? base.Panel2 : base.Panel1; }
93 /// IsPanelInverted プロパティの設定に応じて、SplitContainer.Panel1 または SplitContainer.Panel2 を返す。
95 public new SplitterPanel Panel2
97 get { return IsPanelInverted ? base.Panel1 : base.Panel2; }
101 /// IsPanelInverted プロパティの設定に応じて、SplitContainer.FixedPanel を返す。
103 public new FixedPanel FixedPanel
107 if (base.FixedPanel != FixedPanel.None && IsPanelInverted)
108 return (base.FixedPanel == FixedPanel.Panel1) ? FixedPanel.Panel2 : FixedPanel.Panel1;
110 return base.FixedPanel;
114 if (value != FixedPanel.None && IsPanelInverted)
115 base.FixedPanel = (value == FixedPanel.Panel1) ? FixedPanel.Panel2 : FixedPanel.Panel1;
117 base.FixedPanel = value;
122 /// IsPanelInverted プロパティの設定に応じて、SplitContainer.SplitterDistance を返す。
124 public new int SplitterDistance
126 get { return IsPanelInverted ? SplitterTotalWidth - base.SplitterDistance : base.SplitterDistance; }
130 base.SplitterDistance = SplitterTotalWidth - value;
132 base.SplitterDistance = value;
137 /// IsPanelInverted プロパティの設定に応じて、SplitContainer.Panel1MinSize または SplitContainer.Panel2MinSize を返す。
139 public new int Panel1MinSize
141 get { return IsPanelInverted ? base.Panel2MinSize : base.Panel1MinSize; }
145 base.Panel2MinSize = value;
147 base.Panel1MinSize = value;
152 /// IsPanelInverted プロパティの設定に応じて、SplitContainer.Panel1MinSize または SplitContainer.Panel2MinSize を返す。
154 public new int Panel2MinSize
156 get { return IsPanelInverted ? base.Panel1MinSize : base.Panel2MinSize; }
160 base.Panel1MinSize = value;
162 base.Panel2MinSize = value;
167 /// IsPanelInverted プロパティの設定に応じて、SplitContainer.Panel1Collapsed または SplitContainer.Panel2Collapsed を返す。
169 public new bool Panel1Collapsed
171 get { return IsPanelInverted ? base.Panel2Collapsed : base.Panel1Collapsed; }
175 base.Panel2Collapsed = value;
177 base.Panel1Collapsed = value;
182 /// IsPanelInverted プロパティの設定に応じて、SplitContainer.Panel1Collapsed または SplitContainer.Panel2Collapsed を返す。
184 public new bool Panel2Collapsed
186 get { return IsPanelInverted ? base.Panel1Collapsed : base.Panel2Collapsed; }
190 base.Panel1Collapsed = value;
192 base.Panel2Collapsed = value;