コード例 #1
0
ファイル: TabLayout.cs プロジェクト: sbambach/ATF
 /// <summary>
 /// Removes given item</summary>
 /// <param name="item">Item to remove</param>
 public void RemoveItem(DockContent item)
 {
     item.PropertyChanged -= Content_PropertyChanged;
     Children.Remove(item);
     ItemsCount = Children.Count;
     item.IsVisible = false;
     item.IsFocused = false;
     UpdateIconAndHeader();
 }
コード例 #2
0
ファイル: SidePopup.cs プロジェクト: GeertVL/ATF
 /// <summary>
 /// Add new content to side tab</summary>
 /// <param name="content">New dock content</param>
 private void AddContent(DockContent content)
 {
     m_children.Add(content);
     content.Settings.DockState = DockState.Collapsed;
     FrameworkElement fe = CreateHeader(content);
     SideBarButton tabItem = new SideBarButton(TabsPlacement)
     {
         Content = fe,
         Tag = content,
     };
     tabItem.MouseEnter += TabItem_MouseEnter;
     tabItem.AllowDrop = true;
     tabItem.DragEnter += TabItem_DragEnter;
     tabItem.Click += TabItem_Click;
     Items.Add(tabItem);
     content.IsVisible = true;
     content.IsFocused = false;
     content.IsFocusedChanged += DockContent_IsFocusedChanged;
 }
コード例 #3
0
ファイル: TabLayout.cs プロジェクト: sbambach/ATF
 /// <summary>Add new content; the new content is single content</summary>
 /// <param name="toItem">Next to this item</param>
 /// <param name="content"></param>
 private void AddOneItem(DockContent toItem, DockContent content)
 {
     if (toItem != null && !Children.Contains(toItem))
     {
         throw new ArgumentOutOfRangeException();
     }
     int index = toItem != null ? Children.IndexOf(toItem) : Children.Count;
     content.PropertyChanged += Content_PropertyChanged;
     Children.Insert(index, content);
     ItemsCount = Children.Count;
     SelectedIndex = Items.Count - 1;
     content.IsVisible = true;
     UpdateIconAndHeader();
 }
コード例 #4
0
ファイル: DockPanel.cs プロジェクト: sbambach/ATF
 /// <summary>
 /// Undock given content and collapse to the side that is closest to it</summary>
 /// <param name="content">Content to collapse</param>
 internal void Collapse(IDockContent content)
 {
     Image image = null;
     Rect rectFrom = Rect.Empty;
     FrameworkElement parent = null;
     if (GridLayout != null && GridLayout.HasDescendant(content))
     {
         FrameworkElement element = (FrameworkElement)content;
         parent = (FrameworkElement)element.Parent;
         if (parent != null)
         {
             rectFrom = new Rect(parent.PointToScreen(new Point(0, 0)), parent.RenderSize);
             // create visual image of the element that is being collapsed
             VisualBrush elementBrush = new VisualBrush(parent);
             DrawingVisual visual = new DrawingVisual();
             DrawingContext dc = visual.RenderOpen();
             dc.DrawRectangle(elementBrush, null, new Rect(0, 0, rectFrom.Width, rectFrom.Height));
             dc.Close();
             RenderTargetBitmap bitmap = new RenderTargetBitmap((int)rectFrom.Width, (int)rectFrom.Height, 96, 96, PixelFormats.Default);
             bitmap.Render(visual);
             image = new Image();
             image.Source = bitmap;
             // undock element
             if (GridLayout != null)
             {
                 GridLayout.Undock(content);
             }
             m_lastFocusedContent = null;
         }
     }
     Rect rectTo;
     DockContent tmp = content is TabLayout ? ((TabLayout)content).Children[0] : ((DockContent)content);
     ContentSettings settings = tmp.Settings;
     // dock to nearest side bar
     if (settings.Location.X > settings.Location.Y)
     {
         if (1.0 - settings.Location.X > settings.Location.Y)
         {
             PART_TopCollapsePanel.Dock(null, content, DockTo.Top);
             rectTo = PART_TopCollapsePanel.RectForContent(tmp);
         }
         else
         {
             PART_RightCollapsePanel.Dock(null, content, DockTo.Right);
             rectTo = PART_RightCollapsePanel.RectForContent(tmp);
         }
     }
     else
     {
         if (1.0 - settings.Location.X > settings.Location.Y)
         {
             PART_LeftCollapsePanel.Dock(null, content, DockTo.Left);
             rectTo = PART_LeftCollapsePanel.RectForContent(tmp);
         }
         else
         {
             PART_BottomCollapsePanel.Dock(null, content, DockTo.Bottom);
             rectTo = PART_BottomCollapsePanel.RectForContent(tmp);
         }
     }
     // animate!
     if (parent != null)
     {
         AnimateCollapse(image, rectFrom, rectTo);
     }
 }
コード例 #5
0
ファイル: SidePopup.cs プロジェクト: GeertVL/ATF
 /// <summary>
 /// Show or expand popup</summary>
 /// <param name="dockContent">Dock content</param>
 internal void ShowPopup(DockContent dockContent)
 {
     if (PART_Popup.IsOpen)
     {
         if (!((DockedWindow)PART_Popup.Content).HasChild(dockContent))
         {
             ClosePopup();
         }
         else
         {
             return;
         }
     }
     ContentSettings settings = dockContent.Settings;
     switch (Orientation)
     {
         case Orientation.Horizontal:
             PART_Popup.MaxWidth = RenderSize.Width;
             PART_Popup.MaxHeight = 0.75 * Math.Min(Root.RenderSize.Height, System.Windows.SystemParameters.PrimaryScreenHeight);
             PART_Popup.Width = RenderSize.Width;
             PART_Popup.Height = Math.Min(settings.Size.Height + 25, PART_Popup.MaxHeight);
             break;
         case Orientation.Vertical:
             PART_Popup.MaxWidth = 0.75 * Math.Min(Root.RenderSize.Width, System.Windows.SystemParameters.PrimaryScreenWidth);
             PART_Popup.MaxHeight = RenderSize.Height;
             PART_Popup.Width = Math.Min(settings.Size.Width + 7, PART_Popup.MaxWidth);
             PART_Popup.Height = RenderSize.Height;
             break;
     }
     DockedWindow window = new DockedWindow(Root, dockContent);
     window.Closing += Window_Closing;
     window.Focused = true;
     window.IsCollapsed = true;
     PART_Popup.Content = window;
     PART_Popup.Tag = dockContent;
     BooleanAnimationUsingKeyFrames booleanAnimation = new BooleanAnimationUsingKeyFrames();
     booleanAnimation.Duration = TimeSpan.FromSeconds(0.1);
     booleanAnimation.KeyFrames.Add(
         new DiscreteBooleanKeyFrame(
             false, // Target value (KeyValue)
             KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.0))) // KeyTime
         );
     booleanAnimation.KeyFrames.Add(
         new DiscreteBooleanKeyFrame(
             true, // Target value (KeyValue)
             KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0.1))) // KeyTime
         );
     PART_Popup.IsOpen = true;
     Root.Focus(dockContent);
     m_timer.Start();
 }
コード例 #6
0
ファイル: DockPanel.cs プロジェクト: sbambach/ATF
 /// <summary>
 /// Unregister dock content</summary>
 /// <param name="ucid">Unique name for content</param>
 public void UnregisterContent(String ucid)
 {
     if (!m_registeredContents.ContainsKey(ucid))
     {
         throw new ArgumentOutOfRangeException("Specified content name is not registered");
     }
     HideContent(ucid);
     m_registeredContents[ucid].IsFocusedChanged -= DockContent_IsFocusedChanged;
     if (m_lastFocusedContent == m_registeredContents[ucid])
     {
         m_lastFocusedContent = null;
     }
     RegisteredContents.Remove(m_registeredContents[ucid]);
     m_registeredContents.Remove(ucid);
 }
コード例 #7
0
ファイル: DockPanel.cs プロジェクト: sbambach/ATF
 void DockContent_IsFocusedChanged(object sender, BooleanArgs e)
 {
     if (e.Value == true)
     {
         if (m_lastFocusedContent != sender)
         {
             if (m_lastFocusedContent != null && m_lastFocusedContent.IsFocused)
             {
                 m_lastFocusedContent.IsFocused = false;
             }
             m_lastFocusedContent = (DockContent)sender;
         }
     }
     else
     {
         if (m_lastFocusedContent == sender)
         {
             m_lastFocusedContent = null;
             this.Focus();
         }
     }
 }
コード例 #8
0
ファイル: DockPanel.cs プロジェクト: sbambach/ATF
 /// <summary>
 /// Register content with docking panel</summary>
 /// <param name="content">Content to register</param>
 /// <param name="ucid">Unique name for content (identifier, won't be visible anywhere in UI)</param>
 /// <param name="dockSide">Default docking place (center, left, right, top, bottom)</param>
 /// <param name="header">Header information to display in the docked tab or title bar</param>
 /// <param name="icon">Icon to display</param>
 /// <returns>New dock content</returns>
 public IDockContent RegisterContent(object content, String ucid, DockTo dockSide, String header, ImageSource icon) //where T : FrameworkElement, IDockContent
 {
     if (m_registeredContents.ContainsKey(ucid))
     {
         throw new ArgumentException("Content with given id already exists, id/name must be unique");
     }
     DockContent dockContent = new DockContent(content, ucid, header, icon) { Settings = new ContentSettings(dockSide) };
     dockContent.IsFocusedChanged += DockContent_IsFocusedChanged;
     m_registeredContents.Add(ucid, dockContent);
     RegisteredContents.Add(dockContent);
     return dockContent;
 }
コード例 #9
0
        /// <summary>
        /// Show or expand popup</summary>
        private void ShowPopup()
        {
            DockContent dockContent = (DockContent)m_lastItemOver.Tag;

            ShowPopup(dockContent);
        }
コード例 #10
0
ファイル: SidePopup.cs プロジェクト: Joxx0r/ATF
 /// <summary>
 /// Add new content to this side tab
 /// </summary>
 /// <param name="content"></param>
 private void AddContent(DockContent content)
 {
     m_children.Add(content);
     content.Settings.DockState = DockState.Collapsed;
     FrameworkElement fe = CreateHeader(content);
     SideBarButton tabItem = new SideBarButton(TabsPlacement)
     {
         Content = fe,
         Tag = content,
     };
     tabItem.MouseEnter += new System.Windows.Input.MouseEventHandler(TabItem_MouseEnter);
     tabItem.AllowDrop = true;
     tabItem.DragEnter += new DragEventHandler(TabItem_DragEnter);
     tabItem.Click += new RoutedEventHandler(TabItem_Click);
     Items.Add(tabItem);
     content.IsVisible = true;
     content.IsFocused = false;
     content.IsFocusedChanged += new EventHandler<BooleanArgs>(DockContent_IsFocusedChanged);
 }