2
// <copyright see="prj:///doc/copyright.txt"/>
3
// <license see="prj:///doc/license.txt"/>
4
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
5
// <version value="$version"/>
10
using System.Drawing.Drawing2D;
11
using System.Collections;
12
using MonoDevelop.Core.Services;
14
namespace MonoDevelop.Gui.Components
16
public enum SideTabStatus {
22
public class AxSideTab
25
bool canDragDrop = true;
26
bool canBeDeleted = true;
27
bool isClipboardRing = false;
28
SideTabItemCollection items = new SideTabItemCollection();
29
SideTabStatus sideTabStatus;
30
AxSideTabItem selectedItem = null;
31
AxSideTabItem choosedItem = null;
33
ImageList largeImageList = null;
34
ImageList smallImageList = null;
36
StringParserService stringParserService = (StringParserService)ServiceManager.Services.GetService(typeof(StringParserService));
38
public bool Hidden = false;
40
public bool IsClipboardRing {
42
return isClipboardRing;
45
isClipboardRing = value;
49
public int ScrollIndex {
58
public ImageList LargeImageList {
60
return largeImageList;
63
largeImageList = value;
67
public ImageList SmallImageList {
69
return smallImageList;
72
smallImageList = value;
76
public SideTabStatus SideTabStatus {
82
sideTabStatus = value;
86
public bool CanBeDeleted {
104
public SideTabItemCollection Items {
110
public bool CanDragDrop {
119
bool canSaved = true;
121
public bool CanSaved {
130
public AxSideTabItem SelectedItem {
135
if (selectedItem != null && selectedItem != choosedItem) {
136
selectedItem.SideTabItemStatus = SideTabItemStatus.Normal;
138
selectedItem = value;
139
if (selectedItem != null && selectedItem != choosedItem) {
140
selectedItem.SideTabItemStatus = SideTabItemStatus.Selected;
145
protected void OnChoosedItemChanged(EventArgs e)
147
if (ChoosedItemChanged != null) {
148
ChoosedItemChanged(this, e);
151
public event EventHandler ChoosedItemChanged;
153
public AxSideTabItem ChoosedItem {
158
if (choosedItem != null) {
159
choosedItem.SideTabItemStatus = SideTabItemStatus.Normal;
162
if (choosedItem != null) {
163
choosedItem.SideTabItemStatus = SideTabItemStatus.Choosed;
165
OnChoosedItemChanged(null);
169
public ISideTabItemFactory SideTabItemFactory {
171
return items.SideTabItemFactory;
174
items.SideTabItemFactory = value;
178
protected AxSideTab()
182
public AxSideTab(ISideTabItemFactory sideTabItemFactory)
184
SideTabItemFactory = sideTabItemFactory;
187
public AxSideTab(AxSideBar sideBar, string name) : this(sideBar.SideTabItemFactory)
192
public AxSideTab(string name)
198
public bool ScrollDownButtonActivated {
200
return scrollIndex > 0;
204
public bool ScrollUpButtonActivated {
210
public void DrawTabHeader(Graphics g, Font font, Point pos, int width)
212
switch (sideTabStatus) {
213
case SideTabStatus.Normal:
214
ControlPaint.DrawBorder3D(g, new Rectangle(0, pos.Y, width - 4, font.Height + 4), Border3DStyle.RaisedInner);
215
g.DrawString(stringParserService.Parse(name), font, SystemBrushes.ControlText, new RectangleF(1, pos.Y + 1, width - 5, font.Height + 1));
218
case SideTabStatus.Selected:
219
ControlPaint.DrawBorder3D(g, new Rectangle(0, pos.Y, width - 4, font.Height + 4), Border3DStyle.Sunken);
220
g.DrawString(stringParserService.Parse(name), font, SystemBrushes.ControlText, new RectangleF(1 + 1, pos.Y + 2, width - 5, font.Height + 2));
222
case SideTabStatus.Dragged:
223
Rectangle r = new Rectangle(0, pos.Y, width - 4, font.Height + 4);
224
ControlPaint.DrawBorder3D(g, r, Border3DStyle.RaisedInner);
230
g.FillRectangle(SystemBrushes.ControlDarkDark, r);
232
g.DrawString(stringParserService.Parse(name), font, SystemBrushes.HighlightText, new RectangleF(1 + 1, pos.Y + 2, width - 5, font.Height + 2));
239
return Items.Count * 20;
243
public Point GetLocation(AxSideTabItem whichItem)
245
for (int i = 0; i < Items.Count; ++i) {
246
AxSideTabItem item = (AxSideTabItem)Items[i];
247
if (item == whichItem) {
248
return new Point(0, i * 20);
251
return new Point(-1, -1);
254
public AxSideTabItem GetItemAt(int x, int y)
256
int index = ScrollIndex + y / 20;
257
return (index >= 0 && index < Items.Count) ? (AxSideTabItem)Items[index] : null;
260
public AxSideTabItem GetItemAt(Point pos)
262
return GetItemAt(pos.X, pos.Y);
265
public void DrawTabContent(Graphics g, Font f, Rectangle rectangle)
269
for (int i = 0; i + ScrollIndex < Items.Count; ++i) {
270
AxSideTabItem item = (AxSideTabItem)Items[ScrollIndex + i];
271
if (rectangle.Height < i * itemHeight) {
274
item.DrawItem(g, f, new Rectangle(rectangle.X,
275
rectangle.Y + i * itemHeight,
281
public class SideTabItemCollection : ICollection, IEnumerable
283
ArrayList list = new ArrayList();
284
ISideTabItemFactory sideTabItemFactory = new DefaultSideTabItemFactory();
286
public ISideTabItemFactory SideTabItemFactory {
288
return sideTabItemFactory;
291
sideTabItemFactory = value;
295
public SideTabItemCollection()
299
public AxSideTabItem this[int index] {
301
return (AxSideTabItem)list[index];
308
public int DraggedIndex {
310
for (int i = 0; i < Count; ++i) {
311
if (this[i].SideTabItemStatus == SideTabItemStatus.Drag)
324
public virtual bool IsSynchronized {
330
public virtual object SyncRoot {
336
public virtual AxSideTabItem Add(AxSideTabItem item)
342
public virtual AxSideTabItem Add(string name, object content)
344
return Add(name, content, -1);
347
public virtual AxSideTabItem Add(string name, object content, int imageIndex)
349
AxSideTabItem item = sideTabItemFactory.CreateSideTabItem(name, imageIndex);
354
public virtual void Clear()
359
public bool Contains(AxSideTabItem item)
361
return list.Contains(item);
364
public IEnumerator GetEnumerator()
366
return list.GetEnumerator();
369
public int IndexOf(AxSideTabItem item)
371
return list.IndexOf(item);
374
public void CopyTo(Array dest, int index)
376
list.CopyTo(dest, index);
379
public virtual AxSideTabItem Insert(int index, AxSideTabItem item)
381
list.Insert(index, item);
385
public virtual AxSideTabItem Insert(int index, string name, object content)
387
return Insert(index, name, content, -1);
390
public virtual AxSideTabItem Insert(int index, string name, object content, int imageIndex)
392
AxSideTabItem item = sideTabItemFactory.CreateSideTabItem(name, imageIndex);
394
return Insert(index, item);
397
public virtual void Remove(AxSideTabItem item)
402
public virtual void RemoveAt(int index)
404
list.RemoveAt(index);