External/Aga.Controls/Tree/TreeViewAdv.Properties.cs
author moel.mich
Sun, 23 Sep 2012 18:37:43 +0000
changeset 380 573f1fff48b2
parent 345 0c551e8818e0
permissions -rw-r--r--
Fixed Issue 387. The new implementation does not try to start a ring 0 driver that already exists, but could not be opened. It tries to delete the driver and install it new. The driver is now stored temporarily in the application folder. The driver is not correctly removed on system shutdown.
moel@345
     1
using System;
moel@345
     2
using System.Collections.Generic;
moel@345
     3
using System.Collections.ObjectModel;
moel@345
     4
using System.ComponentModel;
moel@345
     5
using System.Drawing;
moel@345
     6
using System.Drawing.Design;
moel@345
     7
using System.Windows.Forms;
moel@345
     8
moel@345
     9
using Aga.Controls.Tree.NodeControls;
moel@345
    10
moel@345
    11
namespace Aga.Controls.Tree
moel@345
    12
{
moel@345
    13
	public partial class TreeViewAdv
moel@345
    14
	{
moel@345
    15
		private Cursor _innerCursor = null;
moel@345
    16
moel@345
    17
		public override Cursor Cursor
moel@345
    18
		{
moel@345
    19
			get
moel@345
    20
			{
moel@345
    21
                if (_innerCursor != null)
moel@345
    22
                    return _innerCursor;
moel@345
    23
                else
moel@345
    24
					return base.Cursor;
moel@345
    25
			}
moel@345
    26
			set
moel@345
    27
			{
moel@345
    28
				base.Cursor = value;
moel@345
    29
			}
moel@345
    30
		}
moel@345
    31
moel@345
    32
		#region Internal Properties
moel@345
    33
moel@345
    34
		private IRowLayout _rowLayout;
moel@345
    35
moel@345
    36
		private bool _dragMode;
moel@345
    37
		private bool DragMode
moel@345
    38
		{
moel@345
    39
			get { return _dragMode; }
moel@345
    40
			set
moel@345
    41
			{
moel@345
    42
				_dragMode = value;
moel@345
    43
				if (!value)
moel@345
    44
				{
moel@345
    45
					StopDragTimer();
moel@345
    46
					if (_dragBitmap != null)
moel@345
    47
						_dragBitmap.Dispose();
moel@345
    48
					_dragBitmap = null;
moel@345
    49
				}
moel@345
    50
				else
moel@345
    51
					StartDragTimer();
moel@345
    52
			}
moel@345
    53
		}
moel@345
    54
moel@345
    55
		internal int ColumnHeaderHeight
moel@345
    56
		{
moel@345
    57
			get
moel@345
    58
			{
moel@345
    59
				if (UseColumns)
moel@345
    60
					return _columnHeaderHeight;
moel@345
    61
				else
moel@345
    62
					return 0;
moel@345
    63
			}
moel@345
    64
		}
moel@345
    65
moel@345
    66
		/// <summary>
moel@345
    67
		/// returns all nodes, which parent is expanded
moel@345
    68
		/// </summary>
moel@345
    69
		private IEnumerable<TreeNodeAdv> VisibleNodes
moel@345
    70
		{
moel@345
    71
			get
moel@345
    72
			{
moel@345
    73
				TreeNodeAdv node = Root;
moel@345
    74
				while (node != null)
moel@345
    75
				{
moel@345
    76
					node = node.NextVisibleNode;
moel@345
    77
					if (node != null)
moel@345
    78
						yield return node;
moel@345
    79
				}
moel@345
    80
			}
moel@345
    81
		}
moel@345
    82
moel@345
    83
		private bool _suspendSelectionEvent;
moel@345
    84
		internal bool SuspendSelectionEvent
moel@345
    85
		{
moel@345
    86
			get { return _suspendSelectionEvent; }
moel@345
    87
			set
moel@345
    88
			{
moel@345
    89
				if (value != _suspendSelectionEvent)
moel@345
    90
				{
moel@345
    91
					_suspendSelectionEvent = value;
moel@345
    92
					if (!_suspendSelectionEvent && _fireSelectionEvent)
moel@345
    93
						OnSelectionChanged();
moel@345
    94
				}
moel@345
    95
			}
moel@345
    96
		}
moel@345
    97
moel@345
    98
		private List<TreeNodeAdv> _rowMap;
moel@345
    99
		internal List<TreeNodeAdv> RowMap
moel@345
   100
		{
moel@345
   101
			get { return _rowMap; }
moel@345
   102
		}
moel@345
   103
moel@345
   104
		private TreeNodeAdv _selectionStart;
moel@345
   105
		internal TreeNodeAdv SelectionStart
moel@345
   106
		{
moel@345
   107
			get { return _selectionStart; }
moel@345
   108
			set { _selectionStart = value; }
moel@345
   109
		}
moel@345
   110
moel@345
   111
		private InputState _input;
moel@345
   112
		internal InputState Input
moel@345
   113
		{
moel@345
   114
			get { return _input; }
moel@345
   115
			set
moel@345
   116
			{
moel@345
   117
				_input = value;
moel@345
   118
			}
moel@345
   119
		}
moel@345
   120
moel@345
   121
		private bool _itemDragMode;
moel@345
   122
		internal bool ItemDragMode
moel@345
   123
		{
moel@345
   124
			get { return _itemDragMode; }
moel@345
   125
			set { _itemDragMode = value; }
moel@345
   126
		}
moel@345
   127
moel@345
   128
		private Point _itemDragStart;
moel@345
   129
		internal Point ItemDragStart
moel@345
   130
		{
moel@345
   131
			get { return _itemDragStart; }
moel@345
   132
			set { _itemDragStart = value; }
moel@345
   133
		}
moel@345
   134
moel@345
   135
moel@345
   136
		/// <summary>
moel@345
   137
		/// Number of rows fits to the current page
moel@345
   138
		/// </summary>
moel@345
   139
		internal int CurrentPageSize
moel@345
   140
		{
moel@345
   141
			get
moel@345
   142
			{
moel@345
   143
				return _rowLayout.CurrentPageSize;
moel@345
   144
			}
moel@345
   145
		}
moel@345
   146
moel@345
   147
		/// <summary>
moel@345
   148
		/// Number of all visible nodes (which parent is expanded)
moel@345
   149
		/// </summary>
moel@345
   150
		internal int RowCount
moel@345
   151
		{
moel@345
   152
			get
moel@345
   153
			{
moel@345
   154
				return RowMap.Count;
moel@345
   155
			}
moel@345
   156
		}
moel@345
   157
moel@345
   158
		private int _contentWidth = 0;
moel@345
   159
		private int ContentWidth
moel@345
   160
		{
moel@345
   161
			get
moel@345
   162
			{
moel@345
   163
				return _contentWidth;
moel@345
   164
			}
moel@345
   165
		}
moel@345
   166
moel@345
   167
		private int _firstVisibleRow;
moel@345
   168
		internal int FirstVisibleRow
moel@345
   169
		{
moel@345
   170
			get { return _firstVisibleRow; }
moel@345
   171
			set
moel@345
   172
			{
moel@345
   173
				HideEditor();
moel@345
   174
				_firstVisibleRow = value;
moel@345
   175
				UpdateView();
moel@345
   176
			}
moel@345
   177
		}
moel@345
   178
moel@345
   179
		private int _offsetX;
moel@345
   180
		public int OffsetX
moel@345
   181
		{
moel@345
   182
			get { return _offsetX; }
moel@345
   183
			private set
moel@345
   184
			{
moel@345
   185
				HideEditor();
moel@345
   186
				_offsetX = value;
moel@345
   187
				UpdateView();
moel@345
   188
			}
moel@345
   189
		}
moel@345
   190
moel@345
   191
		public override Rectangle DisplayRectangle
moel@345
   192
		{
moel@345
   193
			get
moel@345
   194
			{
moel@345
   195
				Rectangle r = ClientRectangle;
moel@345
   196
				//r.Y += ColumnHeaderHeight;
moel@345
   197
				//r.Height -= ColumnHeaderHeight;
moel@345
   198
				int w = _vScrollBar.Visible ? _vScrollBar.Width : 0;
moel@345
   199
				int h = _hScrollBar.Visible ? _hScrollBar.Height : 0;
moel@345
   200
				return new Rectangle(r.X, r.Y, r.Width - w, r.Height - h);
moel@345
   201
			}
moel@345
   202
		}
moel@345
   203
moel@345
   204
		private List<TreeNodeAdv> _selection;
moel@345
   205
		internal List<TreeNodeAdv> Selection
moel@345
   206
		{
moel@345
   207
			get { return _selection; }
moel@345
   208
		}
moel@345
   209
moel@345
   210
		#endregion
moel@345
   211
moel@345
   212
		#region Public Properties
moel@345
   213
moel@345
   214
		#region DesignTime
moel@345
   215
moel@345
   216
		private bool _shiftFirstNode;
moel@345
   217
		[DefaultValue(false), Category("Behavior")]
moel@345
   218
		public bool ShiftFirstNode
moel@345
   219
		{
moel@345
   220
			get { return _shiftFirstNode; }
moel@345
   221
			set { _shiftFirstNode = value; }
moel@345
   222
		}
moel@345
   223
moel@345
   224
		private bool _displayDraggingNodes;
moel@345
   225
		[DefaultValue(false), Category("Behavior")]
moel@345
   226
		public bool DisplayDraggingNodes
moel@345
   227
		{
moel@345
   228
			get { return _displayDraggingNodes; }
moel@345
   229
			set { _displayDraggingNodes = value; }
moel@345
   230
		}
moel@345
   231
moel@345
   232
		private bool _fullRowSelect;
moel@345
   233
		[DefaultValue(false), Category("Behavior")]
moel@345
   234
		public bool FullRowSelect
moel@345
   235
		{
moel@345
   236
			get { return _fullRowSelect; }
moel@345
   237
			set
moel@345
   238
			{
moel@345
   239
				_fullRowSelect = value;
moel@345
   240
				UpdateView();
moel@345
   241
			}
moel@345
   242
		}
moel@345
   243
moel@345
   244
		private bool _useColumns;
moel@345
   245
		[DefaultValue(false), Category("Behavior")]
moel@345
   246
		public bool UseColumns
moel@345
   247
		{
moel@345
   248
			get { return _useColumns; }
moel@345
   249
			set
moel@345
   250
			{
moel@345
   251
				_useColumns = value;
moel@345
   252
				FullUpdate();
moel@345
   253
			}
moel@345
   254
		}
moel@345
   255
moel@345
   256
		private bool _allowColumnReorder;
moel@345
   257
		[DefaultValue(false), Category("Behavior")]
moel@345
   258
		public bool AllowColumnReorder
moel@345
   259
		{
moel@345
   260
			get { return _allowColumnReorder; }
moel@345
   261
			set { _allowColumnReorder = value; }
moel@345
   262
		}
moel@345
   263
moel@345
   264
		private bool _showLines = true;
moel@345
   265
		[DefaultValue(true), Category("Behavior")]
moel@345
   266
		public bool ShowLines
moel@345
   267
		{
moel@345
   268
			get { return _showLines; }
moel@345
   269
			set
moel@345
   270
			{
moel@345
   271
				_showLines = value;
moel@345
   272
				UpdateView();
moel@345
   273
			}
moel@345
   274
		}
moel@345
   275
moel@345
   276
		private bool _showPlusMinus = true;
moel@345
   277
		[DefaultValue(true), Category("Behavior")]
moel@345
   278
		public bool ShowPlusMinus
moel@345
   279
		{
moel@345
   280
			get { return _showPlusMinus; }
moel@345
   281
			set
moel@345
   282
			{
moel@345
   283
				_showPlusMinus = value;
moel@345
   284
				FullUpdate();
moel@345
   285
			}
moel@345
   286
		}
moel@345
   287
moel@345
   288
		private bool _showNodeToolTips = false;
moel@345
   289
		[DefaultValue(false), Category("Behavior")]
moel@345
   290
		public bool ShowNodeToolTips
moel@345
   291
		{
moel@345
   292
			get { return _showNodeToolTips; }
moel@345
   293
			set { _showNodeToolTips = value; }
moel@345
   294
		}
moel@345
   295
moel@345
   296
		[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "value"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic"), DefaultValue(true), Category("Behavior"), Obsolete("No longer used")]
moel@345
   297
		public bool KeepNodesExpanded
moel@345
   298
		{
moel@345
   299
			get { return true; }
moel@345
   300
			set {}
moel@345
   301
		}
moel@345
   302
moel@345
   303
		private ITreeModel _model;
moel@345
   304
        /// <Summary>
moel@345
   305
        /// The model associated with this <see cref="TreeViewAdv"/>.
moel@345
   306
        /// </Summary>
moel@345
   307
        /// <seealso cref="ITreeModel"/>
moel@345
   308
        /// <seealso cref="TreeModel"/>
moel@345
   309
        [Browsable(false)]
moel@345
   310
		public ITreeModel Model
moel@345
   311
		{
moel@345
   312
			get { return _model; }
moel@345
   313
			set
moel@345
   314
			{
moel@345
   315
				if (_model != value)
moel@345
   316
				{
moel@345
   317
					AbortBackgroundExpandingThreads();
moel@345
   318
					if (_model != null)
moel@345
   319
						UnbindModelEvents();
moel@345
   320
					_model = value;
moel@345
   321
					CreateNodes();
moel@345
   322
					FullUpdate();
moel@345
   323
					if (_model != null)
moel@345
   324
						BindModelEvents();
moel@345
   325
				}
moel@345
   326
			}
moel@345
   327
		}
moel@345
   328
moel@346
   329
        private static Font _font = SystemFonts.MessageBoxFont; 
moel@345
   330
        /// <summary>
moel@345
   331
        /// The font to render <see cref="TreeViewAdv"/> content in.
moel@345
   332
        /// </summary>
moel@345
   333
        [Category("Appearance"), Description("The font to render TreeViewAdv content in.")]
moel@345
   334
        public override Font Font
moel@345
   335
        {
moel@345
   336
            get
moel@345
   337
            {
moel@345
   338
                return (base.Font);
moel@345
   339
            }
moel@345
   340
            set
moel@345
   341
            {
moel@345
   342
                if (value == null)
moel@345
   343
                    base.Font = _font;
moel@345
   344
                else
moel@345
   345
                {
moel@345
   346
                    if (value == DefaultFont)
moel@345
   347
                        base.Font = _font;
moel@345
   348
                    else
moel@345
   349
                        base.Font = value;
moel@345
   350
                }
moel@345
   351
            }
moel@345
   352
        }
moel@345
   353
        public override void ResetFont()
moel@345
   354
        {
moel@345
   355
            Font = null;
moel@345
   356
        }
moel@345
   357
        private bool ShouldSerializeFont()
moel@345
   358
        {
moel@345
   359
            return (!Font.Equals(_font));
moel@345
   360
        }
moel@345
   361
        // End font property
moel@345
   362
moel@345
   363
		private BorderStyle _borderStyle = BorderStyle.Fixed3D;
moel@345
   364
		[DefaultValue(BorderStyle.Fixed3D), Category("Appearance")]
moel@345
   365
		public BorderStyle BorderStyle
moel@345
   366
		{
moel@345
   367
			get
moel@345
   368
			{
moel@345
   369
				return this._borderStyle;
moel@345
   370
			}
moel@345
   371
			set
moel@345
   372
			{
moel@345
   373
				if (_borderStyle != value)
moel@345
   374
				{
moel@345
   375
					_borderStyle = value;
moel@345
   376
					base.UpdateStyles();
moel@345
   377
				}
moel@345
   378
			}
moel@345
   379
		}
moel@345
   380
moel@345
   381
		private bool _autoRowHeight = false;
moel@345
   382
		/// <summary>
moel@345
   383
		/// Set to true to expand each row's height to fit the text of it's largest column.
moel@345
   384
		/// </summary>
moel@345
   385
		[DefaultValue(false), Category("Appearance"), Description("Expand each row's height to fit the text of it's largest column.")]
moel@345
   386
		public bool AutoRowHeight
moel@345
   387
		{
moel@345
   388
			get
moel@345
   389
			{
moel@345
   390
				return _autoRowHeight;
moel@345
   391
			}
moel@345
   392
			set
moel@345
   393
			{
moel@345
   394
				_autoRowHeight = value;
moel@345
   395
				if (value)
moel@345
   396
					_rowLayout = new AutoRowHeightLayout(this, RowHeight);
moel@345
   397
				else
moel@345
   398
					_rowLayout = new FixedRowHeightLayout(this, RowHeight);
moel@345
   399
				FullUpdate();
moel@345
   400
			}
moel@345
   401
		}
moel@345
   402
moel@345
   403
        private GridLineStyle _gridLineStyle = GridLineStyle.None;
moel@345
   404
        [DefaultValue(GridLineStyle.None), Category("Appearance")]
moel@345
   405
        public GridLineStyle GridLineStyle
moel@345
   406
        {
moel@345
   407
            get
moel@345
   408
            {
moel@345
   409
                return _gridLineStyle;
moel@345
   410
            }
moel@345
   411
            set
moel@345
   412
            {
moel@345
   413
				if (value != _gridLineStyle)
moel@345
   414
				{
moel@345
   415
					_gridLineStyle = value;
moel@345
   416
					UpdateView();
moel@345
   417
					OnGridLineStyleChanged();
moel@345
   418
				}
moel@345
   419
            }
moel@345
   420
        }
moel@345
   421
moel@345
   422
		private int _rowHeight = 16;
moel@345
   423
		[DefaultValue(16), Category("Appearance")]
moel@345
   424
		public int RowHeight
moel@345
   425
		{
moel@345
   426
			get
moel@345
   427
			{
moel@345
   428
				return _rowHeight;
moel@345
   429
			}
moel@345
   430
			set
moel@345
   431
			{
moel@345
   432
				if (value <= 0)
moel@345
   433
					throw new ArgumentOutOfRangeException("value");
moel@345
   434
moel@345
   435
				_rowHeight = value;
moel@345
   436
				_rowLayout.PreferredRowHeight = value;
moel@345
   437
				FullUpdate();
moel@345
   438
			}
moel@345
   439
		}
moel@345
   440
moel@345
   441
		private TreeSelectionMode _selectionMode = TreeSelectionMode.Single;
moel@345
   442
		[DefaultValue(TreeSelectionMode.Single), Category("Behavior")]
moel@345
   443
		public TreeSelectionMode SelectionMode
moel@345
   444
		{
moel@345
   445
			get { return _selectionMode; }
moel@345
   446
			set { _selectionMode = value; }
moel@345
   447
		}
moel@345
   448
moel@345
   449
		private bool _hideSelection;
moel@345
   450
		[DefaultValue(false), Category("Behavior")]
moel@345
   451
		public bool HideSelection
moel@345
   452
		{
moel@345
   453
			get { return _hideSelection; }
moel@345
   454
			set
moel@345
   455
			{
moel@345
   456
				_hideSelection = value;
moel@345
   457
				UpdateView();
moel@345
   458
			}
moel@345
   459
		}
moel@345
   460
moel@345
   461
		private float _topEdgeSensivity = 0.3f;
moel@345
   462
		[DefaultValue(0.3f), Category("Behavior")]
moel@345
   463
		public float TopEdgeSensivity
moel@345
   464
		{
moel@345
   465
			get { return _topEdgeSensivity; }
moel@345
   466
			set
moel@345
   467
			{
moel@345
   468
				if (value < 0 || value > 1)
moel@345
   469
					throw new ArgumentOutOfRangeException();
moel@345
   470
				_topEdgeSensivity = value;
moel@345
   471
			}
moel@345
   472
		}
moel@345
   473
moel@345
   474
		private float _bottomEdgeSensivity = 0.3f;
moel@345
   475
		[DefaultValue(0.3f), Category("Behavior")]
moel@345
   476
		public float BottomEdgeSensivity
moel@345
   477
		{
moel@345
   478
			get { return _bottomEdgeSensivity; }
moel@345
   479
			set
moel@345
   480
			{
moel@345
   481
				if (value < 0 || value > 1)
moel@345
   482
					throw new ArgumentOutOfRangeException("value should be from 0 to 1");
moel@345
   483
				_bottomEdgeSensivity = value;
moel@345
   484
			}
moel@345
   485
		}
moel@345
   486
moel@345
   487
		private bool _loadOnDemand;
moel@345
   488
		[DefaultValue(false), Category("Behavior")]
moel@345
   489
		public bool LoadOnDemand
moel@345
   490
		{
moel@345
   491
			get { return _loadOnDemand; }
moel@345
   492
			set { _loadOnDemand = value; }
moel@345
   493
		}
moel@345
   494
moel@345
   495
		private bool _unloadCollapsedOnReload = false;
moel@345
   496
		[DefaultValue(false), Category("Behavior")]
moel@345
   497
		public bool UnloadCollapsedOnReload
moel@345
   498
		{
moel@345
   499
			get { return _unloadCollapsedOnReload; }
moel@345
   500
			set { _unloadCollapsedOnReload = value; }
moel@345
   501
		}
moel@345
   502
moel@345
   503
		private int _indent = 19;
moel@345
   504
		[DefaultValue(19), Category("Behavior")]
moel@345
   505
		public int Indent
moel@345
   506
		{
moel@345
   507
			get { return _indent; }
moel@345
   508
			set
moel@345
   509
			{
moel@345
   510
				_indent = value;
moel@345
   511
				UpdateView();
moel@345
   512
			}
moel@345
   513
		}
moel@345
   514
moel@345
   515
		private Color _lineColor = SystemColors.ControlDark;
moel@345
   516
		[Category("Behavior")]
moel@345
   517
		public Color LineColor
moel@345
   518
		{
moel@345
   519
			get { return _lineColor; }
moel@345
   520
			set
moel@345
   521
			{
moel@345
   522
				_lineColor = value;
moel@345
   523
				CreateLinePen();
moel@345
   524
				UpdateView();
moel@345
   525
			}
moel@345
   526
		}
moel@345
   527
moel@345
   528
		private Color _dragDropMarkColor = Color.Black;
moel@345
   529
		[Category("Behavior")]
moel@345
   530
		public Color DragDropMarkColor
moel@345
   531
		{
moel@345
   532
			get { return _dragDropMarkColor; }
moel@345
   533
			set
moel@345
   534
			{
moel@345
   535
				_dragDropMarkColor = value;
moel@345
   536
				CreateMarkPen();
moel@345
   537
			}
moel@345
   538
		}
moel@345
   539
moel@345
   540
		private float _dragDropMarkWidth = 3.0f;
moel@345
   541
		[DefaultValue(3.0f), Category("Behavior")]
moel@345
   542
		public float DragDropMarkWidth
moel@345
   543
		{
moel@345
   544
			get { return _dragDropMarkWidth; }
moel@345
   545
			set
moel@345
   546
			{
moel@345
   547
				_dragDropMarkWidth = value;
moel@345
   548
				CreateMarkPen();
moel@345
   549
			}
moel@345
   550
		}
moel@345
   551
moel@345
   552
		private bool _highlightDropPosition = true;
moel@345
   553
		[DefaultValue(true), Category("Behavior")]
moel@345
   554
		public bool HighlightDropPosition
moel@345
   555
		{
moel@345
   556
			get { return _highlightDropPosition; }
moel@345
   557
			set { _highlightDropPosition = value; }
moel@345
   558
		}
moel@345
   559
moel@345
   560
		private TreeColumnCollection _columns;
moel@345
   561
		[Category("Behavior"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
moel@345
   562
		public Collection<TreeColumn> Columns
moel@345
   563
		{
moel@345
   564
			get { return _columns; }
moel@345
   565
		}
moel@345
   566
moel@345
   567
		private NodeControlsCollection _controls;
moel@345
   568
		[Category("Behavior"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
moel@345
   569
		[Editor(typeof(NodeControlCollectionEditor), typeof(UITypeEditor))]
moel@345
   570
		public Collection<NodeControl> NodeControls
moel@345
   571
		{
moel@345
   572
			get
moel@345
   573
			{
moel@345
   574
				return _controls;
moel@345
   575
			}
moel@345
   576
		}
moel@345
   577
moel@345
   578
		private bool _asyncExpanding;
moel@345
   579
		/// <summary>
moel@345
   580
		/// When set to true, node contents will be read in background thread.
moel@345
   581
		/// </summary>
moel@345
   582
		[Category("Behavior"), DefaultValue(false), Description("Read children in a background thread when expanding.")]
moel@345
   583
		public bool AsyncExpanding
moel@345
   584
		{
moel@345
   585
			get { return _asyncExpanding; }
moel@345
   586
			set { _asyncExpanding = value; }
moel@345
   587
		}
moel@345
   588
moel@345
   589
		#endregion
moel@345
   590
moel@345
   591
		#region RunTime
moel@345
   592
moel@345
   593
		private IToolTipProvider _defaultToolTipProvider = null;
moel@345
   594
		[Browsable(false)]
moel@345
   595
		public IToolTipProvider DefaultToolTipProvider
moel@345
   596
		{
moel@345
   597
			get { return _defaultToolTipProvider; }
moel@345
   598
			set { _defaultToolTipProvider = value; }
moel@345
   599
		}
moel@345
   600
moel@345
   601
		[Browsable(false)]
moel@345
   602
		public IEnumerable<TreeNodeAdv> AllNodes
moel@345
   603
		{
moel@345
   604
			get
moel@345
   605
			{
moel@345
   606
				if (_root.Nodes.Count > 0)
moel@345
   607
				{
moel@345
   608
					TreeNodeAdv node = _root.Nodes[0];
moel@345
   609
					while (node != null)
moel@345
   610
					{
moel@345
   611
						yield return node;
moel@345
   612
						if (node.Nodes.Count > 0)
moel@345
   613
							node = node.Nodes[0];
moel@345
   614
						else if (node.NextNode != null)
moel@345
   615
							node = node.NextNode;
moel@345
   616
						else
moel@345
   617
							node = node.BottomNode;
moel@345
   618
					}
moel@345
   619
				}
moel@345
   620
			}
moel@345
   621
		}
moel@345
   622
moel@345
   623
		private DropPosition _dropPosition;
moel@345
   624
		[Browsable(false)]
moel@345
   625
		public DropPosition DropPosition
moel@345
   626
		{
moel@345
   627
			get { return _dropPosition; }
moel@345
   628
			set { _dropPosition = value; }
moel@345
   629
		}
moel@345
   630
moel@345
   631
		private TreeNodeAdv _root;
moel@345
   632
		[Browsable(false)]
moel@345
   633
		public TreeNodeAdv Root
moel@345
   634
		{
moel@345
   635
			get { return _root; }
moel@345
   636
		}
moel@345
   637
moel@345
   638
		private ReadOnlyCollection<TreeNodeAdv> _readonlySelection;
moel@345
   639
		[Browsable(false)]
moel@345
   640
		public ReadOnlyCollection<TreeNodeAdv> SelectedNodes
moel@345
   641
		{
moel@345
   642
			get
moel@345
   643
			{
moel@345
   644
				return _readonlySelection;
moel@345
   645
			}
moel@345
   646
		}
moel@345
   647
moel@345
   648
		[Browsable(false)]
moel@345
   649
		public TreeNodeAdv SelectedNode
moel@345
   650
		{
moel@345
   651
			get
moel@345
   652
			{
moel@345
   653
				if (Selection.Count > 0)
moel@345
   654
				{
moel@345
   655
					if (CurrentNode != null && CurrentNode.IsSelected)
moel@345
   656
						return CurrentNode;
moel@345
   657
					else
moel@345
   658
						return Selection[0];
moel@345
   659
				}
moel@345
   660
				else
moel@345
   661
					return null;
moel@345
   662
			}
moel@345
   663
			set
moel@345
   664
			{
moel@345
   665
				if (SelectedNode == value)
moel@345
   666
					return;
moel@345
   667
moel@345
   668
				BeginUpdate();
moel@345
   669
				try
moel@345
   670
				{
moel@345
   671
					if (value == null)
moel@345
   672
					{
moel@345
   673
						ClearSelectionInternal();
moel@345
   674
					}
moel@345
   675
					else
moel@345
   676
					{
moel@345
   677
						if (!IsMyNode(value))
moel@345
   678
							throw new ArgumentException();
moel@345
   679
moel@345
   680
						ClearSelectionInternal();
moel@345
   681
						value.IsSelected = true;
moel@345
   682
						CurrentNode = value;
moel@345
   683
						EnsureVisible(value);
moel@345
   684
					}
moel@345
   685
				}
moel@345
   686
				finally
moel@345
   687
				{
moel@345
   688
					EndUpdate();
moel@345
   689
				}
moel@345
   690
			}
moel@345
   691
		}
moel@345
   692
moel@345
   693
		private TreeNodeAdv _currentNode;
moel@345
   694
		[Browsable(false)]
moel@345
   695
		public TreeNodeAdv CurrentNode
moel@345
   696
		{
moel@345
   697
			get { return _currentNode; }
moel@345
   698
			internal set { _currentNode = value; }
moel@345
   699
		}
moel@345
   700
moel@345
   701
        [Browsable(false)]
moel@345
   702
        public int ItemCount
moel@345
   703
        {
moel@345
   704
            get { return RowMap.Count; }
moel@345
   705
        }
moel@345
   706
moel@345
   707
		/// <summary>
moel@345
   708
		/// Indicates the distance the content is scrolled to the left
moel@345
   709
		/// </summary>
moel@345
   710
		[Browsable(false)]
moel@345
   711
		public int HorizontalScrollPosition
moel@345
   712
		{
moel@345
   713
			get
moel@345
   714
			{
moel@345
   715
				if (_hScrollBar.Visible)
moel@345
   716
					return _hScrollBar.Value;
moel@345
   717
				else
moel@345
   718
					return 0;
moel@345
   719
			}
moel@345
   720
		}
moel@345
   721
moel@345
   722
		#endregion
moel@345
   723
moel@345
   724
		#endregion
moel@345
   725
moel@345
   726
	}
moel@345
   727
}