//... static LayoutGroupControl GetParent(this ILayoutControl input, LayoutGroupControl parent = null) { if (parent == null) { if (ReferenceEquals(input.Root.Child, input)) { return(null); } if (input.Root.Child is LayoutGroupControl i) { return(input.GetParent(i)); } } foreach (var i in parent.Children) { if (ReferenceEquals(i, input)) { return(parent); } if (i is LayoutGroupControl j) { var result = input.GetParent(j); if (result != null) { return(result); } } } return(null); }
//... static void EachControl <T>(ILayoutControl i, Action <T> action) where T : LayoutContentGroupControl { if (i == null) { return; } if (typeof(T).Equals(typeof(LayoutDocumentGroupControl))) { if (i is LayoutDocumentGroupControl a) { action(a as T); } } if (typeof(T).Equals(typeof(LayoutPanelGroupControl))) { if (i is LayoutPanelGroupControl b) { action(b as T); } } if (i is LayoutGroupControl c) { EachControl(i, action, c); } }
protected override void Form_Closing(object sender, FormClosingEventArgs e) { ILayoutControl lc = this.GetCustomProperty(SearchPanelName, false) as ILayoutControl; if (lc != null) { lc.SaveLayout(); } base.Form_Closing(sender, e); }
//... static void Unsubscribe(ILayoutControl i) { if (i is LayoutDocumentGroupControl a) { a.DockView.Unsubscribe(a); a.DockView.DocumentGroups.Remove(a); } if (i is LayoutPanelGroupControl b) { b.DockView.Unsubscribe(b); b.DockView.PanelGroups.Remove(b); } }
public static void EachControl <T>(this ILayoutControl input, Action <T> action, LayoutGroupControl parent = null) where T : LayoutContentGroupControl { if (parent == null) { EachControl(input, action); return; } foreach (var i in parent.Children) { EachControl(i as ILayoutControl, action); } }
private static void EnumerateControls(Control parent, Action <ILayoutControl> action) { ILayoutControl lc = parent as ILayoutControl; if (lc != null) { action(lc); } foreach (Control c in parent.Controls) { EnumerateControls(c, action); } }
/// <summary> /// /// </summary> /// <param name="grid"></param> private static void LoadDefaultLayout(this IGrid grid) { grid.LoadGroupLayout(); if (!grid.GridHelper.m_firstLoad) { ILayoutControl layout = grid as ILayoutControl; if (layout != null) { if (!layout.LoadLayout()) { // maybe too slow grid.AutoAdjustColumnWidth(); } else { grid.GridHelper.m_firstLoad = true; } } } }
//... public static Point GetPosition(this ILayoutControl input) { var x = input.ActualWidth / 2; var y = input.ActualHeight / 2; UIElement last = input as UIElement; while (true) { var parent = last.FindParent <LayoutGroupControl>(); if (parent != null) { foreach (FrameworkElement i in parent.Children) { if (i.Equals(last)) { break; } if (parent.Orientation == Orientation.Horizontal) { x += i.ActualWidth; } if (parent.Orientation == Orientation.Vertical) { y += i.ActualHeight; } } last = parent; } else { break; } } return(new Point(x, y)); }
static List <T> GetAll <T>(ILayoutControl i) where T : Content { var result = new List <T>(); if (i == null) { return(result); } if (typeof(T).Equals(typeof(Document))) { if (i is LayoutDocumentGroupControl a) { foreach (T j in a.Source) { result.Add(j); } } } if (typeof(T).Equals(typeof(Models.Panel))) { if (i is LayoutPanelGroupControl b) { foreach (T j in b.Source) { result.Add(j); } } } if (i is LayoutGroupControl c) { foreach (var j in GetAll <T>(i, c)) { result.Add(j); } } return(result); }
public static List <T> GetAll <T>(this ILayoutControl input, LayoutGroupControl parent = null) where T : Content { var result = new List <T>(); if (parent == null) { foreach (var i in GetAll <T>(input)) { result.Add(i); } return(result); } foreach (var i in parent.Children) { foreach (var j in GetAll <T>(i as ILayoutControl)) { result.Add(j); } } return(result); }
private void UpdateChildren() { ILayoutControl[] array = base.Children.OfType <ILayoutControl>().ToArray <ILayoutControl>(); this.DetachOldSplitters(); this.DetachPropertChangeHandler(); base.Children.Clear(); base.ColumnDefinitions.Clear(); base.RowDefinitions.Clear(); if (this._model == null || this._model.Root == null) { return; } DockingManager manager = this._model.Root.Manager; if (manager == null) { return; } foreach (T child in this._model.Children) { ILayoutElement layoutElement = child; ILayoutControl layoutControl = array.FirstOrDefault <ILayoutControl>((ILayoutControl chVM) => chVM.Model == layoutElement); if (layoutControl == null) { base.Children.Add(manager.CreateUIElementForModel(layoutElement)); } else { base.Children.Add(layoutControl as UIElement); } } this.CreateSplitters(); this.UpdateRowColDefinitions(); this.AttachNewSplitters(); this.AttachPropertyChangeHandler(); }
public MyFocusHelper(ILayoutControl control) : base(control) { }
public MyLayoutControlController(ILayoutControl control) : base(control) { }
//... public static void Delete(this ILayoutControl input) { var parent = input.GetParent(); if (parent == null) { Unsubscribe(input); input.Root.Child = null; return; } var index = input.GetIndex(); if (index == -1) { throw new IndexOutOfRangeException(); } Unsubscribe(input); parent.Children.RemoveAt(index); //Remove the column or row definition if (parent.Orientation == Orientation.Horizontal) { parent.ColumnDefinitions.RemoveAt(index); } if (parent.Orientation == Orientation.Vertical) { parent.RowDefinitions.RemoveAt(index); } if (parent.Children.Count > 0) { if (index >= parent.Children.Count) { index = parent.Children.Count - 1; } //Remove the grid splitter if (index < parent.Children.Count) { if (parent.Children[index] is GridSplitter) { parent.Children.RemoveAt(index); //Remove the column or row definition again if (parent.Orientation == Orientation.Horizontal) { parent.ColumnDefinitions.RemoveAt(index); } if (parent.Orientation == Orientation.Vertical) { parent.RowDefinitions.RemoveAt(index); } } } } //Reassign all column or row values for (var i = 0; i < parent.Children.Count; i++) { if (parent.Orientation == Orientation.Horizontal) { Grid.SetColumn(parent.Children[i], i); } if (parent.Orientation == Orientation.Vertical) { Grid.SetRow(parent.Children[i], i); } } //Remove the parent from it's own parent to avoid empty LayoutGroupControls if (parent.Children.Count == 0) { parent.Delete(); } }
public ControlLayoutMethod(ILayoutControl layoutControl) { this.LayoutControl = layoutControl; }
//... public static int GetIndex(this ILayoutControl input) => input.GetParent()?.Children.IndexOf(input as UIElement) ?? -1;
public static LayoutGroupControl GetParent(this ILayoutControl input) => input.GetParent(null);
public static ArrayList GetItemsInVisibleOrder(ILayoutControl control) { return(new MyFocusHelper(control).GetItemsInVisibleOrder()); }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { // One element should be selected and will be the active element Document document = commandData.Application.ActiveUIDocument.Document; if (commandData.Application.ActiveUIDocument.Selection.GetElementIds().Count != 1) { TaskDialog.Show("Error", "One element should be selected"); return(Result.Cancelled); } // Check if five rebars are inside the project ElementId elementId = (new FilteredElementCollector(document).OfClass(typeof(RebarBarType)).ToElementIds() as List <ElementId>)[4] as ElementId; if (elementId == null) { TaskDialog.Show("Error", "At least five rebars should on this project"); return(Result.Cancelled); } Element activeElement = null; ElementId activeElementId = null; foreach (ElementId eId in commandData.Application.ActiveUIDocument.Selection.GetElementIds()) { activeElementId = eId; } //Create all schema instances associated to tabs instances with default constructor var instanceTabTextBox = new TabTextBoxSchema(); var instanceTabGrid = new TabGridSchema(); var instanceTabKey = new TabKeySchema(); var instanceTabNumericUpDown = new TabNumericUpDownSchema(); var instanceTabComboBox = new TabComboBoxSchema(); var instanceTabListTextBox = new TabListTextBoxSchema(document); var instanceTabEnum = new TabEnumSchema(); var instanceTabList = new TabListSchema(); var instanceTabCategory = new TabCategorySchema(); var instanceTabMiscellanious = new TabMiscellaniousSchema(); // Data preparation // initialization of element from the Revit project instanceTabComboBox.ComboBoxElementId = elementId; instanceTabTextBox.TextBoxElementId = activeElementId; activeElement = commandData.Application.ActiveUIDocument.Document.GetElement(activeElementId); rebarList = new FilteredElementCollector(document).OfClass(typeof(RebarBarType)).ToElements().Cast <RebarBarType>().ToList(); // Check if we are in reading mode by quering active element isTabTextBoxSchemaExistsOnElement = instanceTabTextBox.Exists(activeElement); isTabGridSchemaExistsOnElement = instanceTabGrid.Exists(activeElement); isTabKeySchemaExistsOnElement = instanceTabKey.Exists(activeElement); isTabNumericUpDownSchemaExistsOnElement = instanceTabNumericUpDown.Exists(activeElement); isTabComboBoxSchemaExistsOnElement = instanceTabComboBox.Exists(activeElement); isTabListTextBoxSchemaExistsOnElement = instanceTabListTextBox.Exists(activeElement); isTabEnumSchemaExistsOnElement = instanceTabEnum.Exists(activeElement); isTabListSchemaExistsOnElement = instanceTabList.Exists(activeElement); isTabCategorySchemaExistsOnElement = instanceTabCategory.Exists(activeElement); isTabMiscellaniousSchemaExistsOnElement = instanceTabMiscellanious.Exists(activeElement); //Load data instanceTabTextBox.Load(activeElement); instanceTabGrid.Load(activeElement); instanceTabKey.Load(activeElement); instanceTabNumericUpDown.Load(activeElement); instanceTabComboBox.Load(activeElement); instanceTabListTextBox.Load(activeElement); instanceTabEnum.Load(activeElement); instanceTabList.Load(activeElement); instanceTabCategory.Load(activeElement); instanceTabMiscellanious.Load(activeElement); //Create all layouts on schema Layout layoutTabTextBox = Layout.Build(typeof(TabTextBoxSchema), this); Layout layoutTabGrid = Layout.Build(typeof(TabGridSchema), this); Layout layoutTabKey = Layout.Build(typeof(TabKeySchema), this); Layout layoutTabNumericUpDown = Layout.Build(typeof(TabNumericUpDownSchema), this); Layout layoutTabComboBox = Layout.Build(typeof(TabComboBoxSchema), this); Layout layoutTabListTextBox = Layout.Build(typeof(TabListTextBoxSchema), this); Layout layoutTabEnum = Layout.Build(typeof(TabEnumSchema), this); Layout layoutTabList = Layout.Build(typeof(TabListSchema), this); Layout layoutTabCategory = Layout.Build(typeof(TabCategorySchema), this); Layout layoutTabMiscellanious = Layout.Build(typeof(TabMiscellaniousSchema), this); // add an image in line on the last tab var image = new Image { Source = new Uri(@"pack://application:,,,/ExtensibleStorageUI;component/Images/bigImage1.png"), Index = 1, Key = "image1" }; layoutTabMiscellanious.Controls.Insert(0, image); // add a free text inline var textBlock = new TextBlock { Text = "This a test of the textblock usage", Index = 2, Key = "text" }; layoutTabMiscellanious.Controls.Insert(1, textBlock); // build all layout objects ILayoutControl layoutCtrTabTextBox = Layout.BuildControl(this, document, layoutTabTextBox, instanceTabTextBox.GetEntity()); ILayoutControl layoutCtrTabGrid = Layout.BuildControl(this, document, layoutTabGrid, instanceTabGrid.GetEntity()); ILayoutControl layoutCtrTabKey = Layout.BuildControl(this, document, layoutTabKey, instanceTabKey.GetEntity()); ILayoutControl layoutCtrTabNumericUpDown = Layout.BuildControl(this, document, layoutTabNumericUpDown, instanceTabNumericUpDown.GetEntity()); ILayoutControl layoutCtrTabComboBox = Layout.BuildControl(this, document, layoutTabComboBox, instanceTabComboBox.GetEntity()); ILayoutControl layoutCtrTabListTextBox = Layout.BuildControl(this, document, layoutTabListTextBox, instanceTabListTextBox.GetEntity()); ILayoutControl layoutCtrTabEnum = Layout.BuildControl(this, document, layoutTabEnum, instanceTabEnum.GetEntity()); ILayoutControl layoutCtrTabList = Layout.BuildControl(this, document, layoutTabList, instanceTabList.GetEntity()); ILayoutControl layoutCtrTabCategory = Layout.BuildControl(this, document, layoutTabCategory, instanceTabCategory.GetEntity()); ILayoutControl layoutCtrTabMiscellanious = Layout.BuildControl(this, document, layoutTabMiscellanious, instanceTabMiscellanious); //create main window and add all object var window = new MainWindows { Name = "ExtensibleStorageUIOverview", Title = "Extensible Storage UI Overview" }; var layout = new MainLayout { tabTextBox = { Content = layoutCtrTabTextBox }, tabGrid = { Content = layoutCtrTabGrid }, tabKey = { Content = layoutCtrTabKey }, tabNumericUpDown = { Content = layoutCtrTabNumericUpDown }, tabComboBox = { Content = layoutCtrTabComboBox }, tabListTextBox = { Content = layoutCtrTabListTextBox }, tabEnum = { Content = layoutCtrTabEnum }, tabList = { Content = layoutCtrTabList }, tabCategory = { Content = layoutCtrTabCategory }, tabMiscellanious = { Content = layoutCtrTabMiscellanious } }; window.layout.Children.Add(layout); window.ShowAndAssignParent(); //Getting data from UI instanceTabTextBox = new TabTextBoxSchema(layoutCtrTabTextBox.GetEntity(), document); instanceTabGrid = new TabGridSchema(layoutCtrTabGrid.GetEntity(), document); instanceTabKey = new TabKeySchema(layoutCtrTabKey.GetEntity(), document); instanceTabNumericUpDown = new TabNumericUpDownSchema(layoutCtrTabNumericUpDown.GetEntity(), document); instanceTabComboBox = new TabComboBoxSchema(layoutCtrTabComboBox.GetEntity(), document); instanceTabListTextBox = new TabListTextBoxSchema(layoutCtrTabListTextBox.GetEntity(), document); instanceTabEnum = new TabEnumSchema(layoutCtrTabEnum.GetEntity(), document); instanceTabList = new TabListSchema(layoutCtrTabList.GetEntity(), document); instanceTabCategory = new TabCategorySchema(layoutCtrTabCategory.GetEntity(), document); instanceTabMiscellanious = new TabMiscellaniousSchema(instanceTabMiscellanious.GetEntity(), document); //Saving Data into selected element if (window.storeSchema) { var t = new Transaction(document, "Save schemas"); t.Start(); instanceTabTextBox.Save(activeElement); instanceTabGrid.Save(activeElement); instanceTabKey.Save(activeElement); instanceTabNumericUpDown.Save(activeElement); instanceTabComboBox.Save(activeElement); instanceTabListTextBox.Save(activeElement); instanceTabEnum.Save(activeElement); instanceTabList.Save(activeElement); instanceTabCategory.Save(activeElement); instanceTabMiscellanious.Save(activeElement); t.Commit(); } return(Result.Succeeded); }