aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/SideChains/WpfExtendedToolKit/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.AvalonDock/Controls/DocumentPaneTabPanel.cs
blob: 24ceb46595c6e2c4f2360032e1367c599c72de54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/*************************************************************************************

   Extended WPF Toolkit

   Copyright (C) 2007-2013 Xceed Software Inc.

   This program is provided to you under the terms of the Microsoft Public
   License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license 

   For more features, controls, and fast professional support,
   pick up the Plus Edition at http://xceed.com/wpf_toolkit

   Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids

  ***********************************************************************************/

using System;
using System.Linq;
using System.Windows.Controls;
using System.Windows;
using Xceed.Wpf.AvalonDock.Layout;

namespace Xceed.Wpf.AvalonDock.Controls
{
  public class DocumentPaneTabPanel : Panel
  {
    #region Constructors

    public DocumentPaneTabPanel()
    {
      this.FlowDirection = System.Windows.FlowDirection.LeftToRight;
    }

    #endregion

    #region Overrides

    protected override Size MeasureOverride( Size availableSize )
    {
      var visibleChildren = Children.Cast<UIElement>().Where( ch => ch.Visibility != System.Windows.Visibility.Collapsed );

      Size desideredSize = new Size();
      foreach( FrameworkElement child in Children )
      {
        child.Measure( new Size( double.PositiveInfinity, double.PositiveInfinity ) );
        desideredSize.Width += child.DesiredSize.Width;

        desideredSize.Height = Math.Max( desideredSize.Height, child.DesiredSize.Height );
      }

      return new Size( Math.Min( desideredSize.Width, availableSize.Width ), desideredSize.Height );
    }

    protected override Size ArrangeOverride( Size finalSize )
    {
      var visibleChildren = Children.Cast<UIElement>().Where( ch => ch.Visibility != System.Windows.Visibility.Collapsed );
      var offset = 0.0;
      var skipAllOthers = false;
      foreach( TabItem doc in visibleChildren )
      {
        var layoutContent = doc.Content as LayoutContent;
        if( skipAllOthers || offset + doc.DesiredSize.Width > finalSize.Width )
        {
          if( layoutContent.IsSelected && !doc.IsVisible )
          {
            var parentContainer = layoutContent.Parent as ILayoutContainer;
            var parentSelector = layoutContent.Parent as ILayoutContentSelector;
            var parentPane = layoutContent.Parent as ILayoutPane;
            int contentIndex = parentSelector.IndexOf( layoutContent );
            if( contentIndex > 0 &&
                parentContainer.ChildrenCount > 1 )
            {
              parentPane.MoveChild( contentIndex, 0 );
              parentSelector.SelectedContentIndex = 0;
              return ArrangeOverride( finalSize );
            }
          }
          doc.Visibility = System.Windows.Visibility.Hidden;
          skipAllOthers = true;
        }
        else
        {
          doc.Visibility = System.Windows.Visibility.Visible;
          doc.Arrange( new Rect( offset, 0.0, doc.DesiredSize.Width, finalSize.Height ) );
          offset += doc.ActualWidth + doc.Margin.Left + doc.Margin.Right;
        }
      }
      return finalSize;

    }

    protected override void OnMouseLeave( System.Windows.Input.MouseEventArgs e )
    {
      //if (e.LeftButton == System.Windows.Input.MouseButtonState.Pressed &&
      //    LayoutDocumentTabItem.IsDraggingItem())
      //{
      //    var contentModel = LayoutDocumentTabItem.GetDraggingItem().Model;
      //    var manager = contentModel.Root.Manager;
      //    LayoutDocumentTabItem.ResetDraggingItem();
      //    System.Diagnostics.Trace.WriteLine("OnMouseLeave()");


      //    manager.StartDraggingFloatingWindowForContent(contentModel);
      //}

      base.OnMouseLeave( e );
    }

    #endregion
  }
}