partial void OnFinish(MonoMac.Foundation.NSObject sender) { Loader.Cancel(); RemoveEvent(); Ignores = NodeModelUtils.GetIgnoredFolder(Repo); Controller.SaveFolder(); Controller.CloseWindow(); }
partial void OnFinish(MonoMac.Foundation.NSObject sender) { lock (loginLock) { isClosed = true; } Loader.Cancel(); RemoveEvent(); Ignores = NodeModelUtils.GetIgnoredFolder(Repo); Credentials.Password = PasswordText.StringValue; Controller.SaveFolder(); Controller.CloseWindow(); }
partial void OnContinue(MonoMac.Foundation.NSObject sender) { RootFolder root = Repositories.Find(x => (x.Selected != false)); if (root != null) { RemoveEvent(); foreach (AsyncNodeLoader task in Loader.Values) { task.Cancel(); } Controller.saved_repository = root.Id; List <string> ignored = NodeModelUtils.GetIgnoredFolder(root); List <string> selected = NodeModelUtils.GetSelectedFolder(root); Controller.Add2PageCompleted(root.Id, root.Path, ignored.ToArray(), selected.ToArray()); } }
private void LoadAddSelectRepoWPF() { // UI elements. Header = Properties_Resources.Which; // A tree allowing the user to browse CMIS repositories/folders. System.Uri resourceTreeLocater = new System.Uri("/DataSpaceSync;component/FolderTreeMVC/TreeView.xaml", System.UriKind.Relative); System.Windows.Controls.TreeView treeView = System.Windows.Application.LoadComponent(resourceTreeLocater) as TreeView; ObservableCollection <RootFolder> repos = new ObservableCollection <RootFolder>(); loader = new Dictionary <string, AsyncNodeLoader>(); // Some CMIS servers hold several repositories (ex:Nuxeo). Show one root per repository. bool firstRepo = true; foreach (var repository in Controller.repositories) { RootFolder repo = new RootFolder() { Name = repository.Name, Id = repository.Id, Address = Controller.saved_address.ToString() }; repos.Add(repo); if (firstRepo) { repo.Selected = true; firstRepo = false; } else { repo.Selected = false; } CmisRepoCredentials cred = new CmisRepoCredentials() { UserName = Controller.saved_user, Password = Controller.saved_password, Address = Controller.saved_address, Binding = Controller.saved_binding, RepoId = repository.Id }; AsyncNodeLoader asyncLoader = new AsyncNodeLoader(repo, cred, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate); // GUI workaround to remove ignore folder {{ //asyncLoader.Load(repo); //loader.Add(repo.Id, asyncLoader); repo.Status = LoadingStatus.DONE; // GUI workaround to remove ignore folder }} } treeView.DataContext = repos; treeView.AddHandler(TreeViewItem.ExpandedEvent, new RoutedEventHandler(delegate(object sender, RoutedEventArgs e) { TreeViewItem expandedItem = e.OriginalSource as TreeViewItem; Node expandedNode = expandedItem.Header as Folder; if (expandedNode != null) { Node parent = expandedNode.Parent; while (parent is Folder) { parent = parent.Parent; } if (parent is RootFolder) { AsyncNodeLoader l; RootFolder r = parent as RootFolder; if (loader.TryGetValue(r.Id, out l)) { l.Load(expandedNode); } } } })); ContentCanvas.Children.Add(treeView); Canvas.SetTop(treeView, 70); Canvas.SetLeft(treeView, 185); System.Uri resourceLocater = new System.Uri("/DataSpaceSync;component/SetupAddSelectRepoWPF.xaml", System.UriKind.Relative); UserControl LoadXAML = Application.LoadComponent(resourceLocater) as UserControl; back_button = LoadXAML.FindName("back_button") as Button; continue_button = LoadXAML.FindName("continue_button") as Button; cancel_button = LoadXAML.FindName("cancel_button") as Button; continue_button.IsEnabled = !firstRepo; ContentCanvas.Children.Add(LoadXAML); // Actions cancel_button.Click += delegate { SelectRepoCancelAction(); Controller.PageCancelled(); }; continue_button.Click += delegate { List <string> ignored = new List <string>(); List <string> selectedFolder = new List <string>(); ItemCollection items = treeView.Items; RootFolder selectedRepo = null; foreach (var item in items) { RootFolder repo = item as RootFolder; if (repo != null) { if (repo.Selected != false) { selectedRepo = repo; break; } } } if (selectedRepo != null) { ignored.AddRange(NodeModelUtils.GetIgnoredFolder(selectedRepo)); selectedFolder.AddRange(NodeModelUtils.GetSelectedFolder(selectedRepo)); Controller.saved_repository = selectedRepo.Id; Controller.saved_remote_path = selectedRepo.Path; SelectRepoCancelAction(); Controller.Add2PageCompleted( Controller.saved_repository, Controller.saved_remote_path, ignored.ToArray(), selectedFolder.ToArray()); } else { return; } }; back_button.Click += delegate { SelectRepoCancelAction(); Controller.BackToPage1(); }; }
private void ShowAdd2Page() { CmisTreeStore cmisStore = new CmisTreeStore(); Gtk.TreeView treeView = new Gtk.TreeView(cmisStore); bool firstRepo = true; List <RootFolder> repositories = new List <RootFolder>(); Dictionary <string, AsyncNodeLoader> loader = new Dictionary <string, AsyncNodeLoader>(); foreach (var repository in this.controller.repositories) { RootFolder root = new RootFolder() { Name = repository.Name, Id = repository.Id, Address = this.controller.saved_address.ToString() }; if (firstRepo) { root.Selected = true; firstRepo = false; } else { root.Selected = false; } repositories.Add(root); CmisRepoCredentials cred = new CmisRepoCredentials() { UserName = this.controller.saved_user, Password = this.controller.saved_password, Address = this.controller.saved_address, RepoId = repository.Id }; AsyncNodeLoader asyncLoader = new AsyncNodeLoader(root, cred, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate); asyncLoader.UpdateNodeEvent += delegate { cmisStore.UpdateCmisTree(root); }; cmisStore.UpdateCmisTree(root); } this.Header = Properties_Resources.Which; VBox layout_vertical = new VBox(false, 12); Button cancel_button = new Button(this.cancelText); cancel_button.Clicked += delegate { foreach (AsyncNodeLoader task in loader.Values) { task.Cancel(); } this.controller.PageCancelled(); }; Button continue_button = new Button(this.continueText) { Sensitive = repositories.Count > 0 }; continue_button.Clicked += delegate { RootFolder root = repositories.Find(x => (x.Selected != false)); if (root != null) { foreach (AsyncNodeLoader task in loader.Values) { task.Cancel(); } this.controller.saved_repository = root.Id; List <string> ignored = NodeModelUtils.GetIgnoredFolder(root); List <string> selected = NodeModelUtils.GetSelectedFolder(root); this.controller.Add2PageCompleted(root.Id, root.Path, ignored.ToArray(), selected.ToArray()); } }; Button back_button = new Button(this.backText) { Sensitive = true }; back_button.Clicked += delegate { foreach (AsyncNodeLoader task in loader.Values) { task.Cancel(); } this.controller.BackToPage1(); }; treeView.HeadersVisible = false; treeView.Selection.Mode = SelectionMode.Single; TreeViewColumn column = new TreeViewColumn(); column.Title = "Name"; CellRendererToggle renderToggle = new CellRendererToggle(); column.PackStart(renderToggle, false); renderToggle.Activatable = true; column.AddAttribute(renderToggle, "active", (int)CmisTreeStore.Column.ColumnSelected); column.AddAttribute(renderToggle, "inconsistent", (int)CmisTreeStore.Column.ColumnSelectedThreeState); column.AddAttribute(renderToggle, "radio", (int)CmisTreeStore.Column.ColumnRoot); renderToggle.Toggled += delegate(object render, ToggledArgs args) { TreeIter iterToggled; if (!cmisStore.GetIterFromString(out iterToggled, args.Path)) { Console.WriteLine("Toggled GetIter Error " + args.Path); return; } Node node = cmisStore.GetValue(iterToggled, (int)CmisTreeStore.Column.ColumnNode) as Node; if (node == null) { Console.WriteLine("Toggled GetValue Error " + args.Path); return; } RootFolder selectedRoot = repositories.Find(x => (x.Selected != false)); Node parent = node; while (parent.Parent != null) { parent = parent.Parent; } RootFolder root = parent as RootFolder; if (root != selectedRoot) { selectedRoot.Selected = false; cmisStore.UpdateCmisTree(selectedRoot); } if (node.Parent == null) { node.Selected = true; } else { node.Selected = !node.Selected; } cmisStore.UpdateCmisTree(root); }; CellRendererText renderText = new CellRendererText(); column.PackStart(renderText, false); column.SetAttributes(renderText, "text", (int)CmisTreeStore.Column.ColumnName); column.Expand = true; treeView.AppendColumn(column); treeView.RowExpanded += delegate(object o, RowExpandedArgs args) { Node node = cmisStore.GetValue(args.Iter, (int)CmisTreeStore.Column.ColumnNode) as Node; Node parent = node; while (parent.Parent != null) { parent = parent.Parent; } RootFolder root = parent as RootFolder; loader[root.Id].Load(node); }; ScrolledWindow sw = new ScrolledWindow() { ShadowType = Gtk.ShadowType.In }; sw.Add(treeView); layout_vertical.PackStart(new Label(string.Empty), false, false, 0); layout_vertical.PackStart(sw, true, true, 0); this.Add(layout_vertical); this.AddButton(back_button); this.AddButton(cancel_button); this.AddButton(continue_button); if (repositories.Count > 0) { continue_button.GrabDefault(); continue_button.GrabFocus(); } else { back_button.GrabDefault(); back_button.GrabFocus(); } }
void ShowFolderSeletionPage() { Header = Properties_Resources.Which; Description = ""; bool firstRepo = true; Repositories = new List <RootFolder>(); Loader = new Dictionary <string, AsyncNodeLoader> (); foreach (KeyValuePair <String, String> repository in Controller.repositories) { RootFolder repo = new RootFolder() { Name = repository.Value, Id = repository.Key, Address = Controller.saved_address.ToString() }; Repositories.Add(repo); if (firstRepo) { repo.Selected = true; firstRepo = false; } else { repo.Selected = false; } CmisRepoCredentials cred = new CmisRepoCredentials() { UserName = Controller.saved_user, Password = Controller.saved_password, Address = Controller.saved_address, RepoId = repository.Key }; AsyncNodeLoader asyncLoader = new AsyncNodeLoader(repo, cred, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate); asyncLoader.UpdateNodeEvent += delegate { InvokeOnMainThread(delegate { DataSource.UpdateCmisTree(repo); NSOutlineView view = OutlineController.OutlineView(); for (int i = 0; i < view.RowCount; ++i) { view.ReloadItem(view.ItemAtRow(i)); } }); }; asyncLoader.Load(repo); Loader.Add(repo.Id, asyncLoader); } DataSource = new CmisTree.CmisTreeDataSource(Repositories); DataSource.SelectedEvent += delegate(NSCmisTree cmis, int selected) { InvokeOnMainThread(delegate { RootFolder selectedRoot = null; foreach (RootFolder root in Repositories) { Node node = cmis.GetNode(root); if (node != null) { if (node.Parent == null && node.Selected == false) { selectedRoot = root; } node.Selected = (selected != 0); DataSource.UpdateCmisTree(root); } } NSOutlineView view = OutlineController.OutlineView(); if (selectedRoot != null) { foreach (RootFolder root in Repositories) { if (root != selectedRoot) { root.Selected = false; DataSource.UpdateCmisTree(root); } } view.ReloadData(); } else { for (int i = 0; i < view.RowCount; ++i) { view.ReloadItem(view.ItemAtRow(i)); } } }); }; DataDelegate = new OutlineViewDelegate(); OutlineController = new CmisOutlineController(DataSource, DataDelegate); ContinueButton = new NSButton() { Title = Properties_Resources.Continue, Enabled = (Repositories.Count > 0) }; CancelButton = new NSButton() { Title = Properties_Resources.Cancel }; NSButton BackButton = new NSButton() { Title = Properties_Resources.Back }; // DataDelegate.SelectionChanged += delegate // { // InvokeOnMainThread(delegate { // NSOutlineView view = OutlineController.OutlineView(); // if (view.SelectedRow >= 0) { // ContinueButton.Enabled = true; // } else { // ContinueButton.Enabled = false; // } // }); // }; DataDelegate.ItemExpanded += delegate(NSNotification notification) { InvokeOnMainThread(delegate { NSCmisTree cmis = notification.UserInfo["NSObject"] as NSCmisTree; if (cmis == null) { Console.WriteLine("ItemExpanded Error"); return; } NSCmisTree cmisRoot = cmis; while (cmisRoot.Parent != null) { cmisRoot = cmisRoot.Parent; } RootFolder root = Repositories.Find(x => x.Name.Equals(cmisRoot.Name)); if (root == null) { Console.WriteLine("ItemExpanded find root Error"); return; } Node node = cmis.GetNode(root); if (node == null) { Console.WriteLine("ItemExpanded find node Error"); return; } Loader[root.Id].Load(node); }); }; ContinueButton.Activated += delegate { InvokeOnMainThread(delegate { NSOutlineView view = OutlineController.OutlineView(); // NSCmisTree cmis = (NSCmisTree)(view.ItemAtRow(view.SelectedRow)); // while (cmis.Parent != null) // cmis = cmis.Parent; // RootFolder root = Repositories.Find(x=>x.Name.Equals(cmis.Name)); RootFolder root = Repositories.Find(x => (x.Selected != false)); if (root != null) { foreach (AsyncNodeLoader task in Loader.Values) { task.Cancel(); } Controller.saved_repository = root.Id; List <string> ignored = NodeModelUtils.GetIgnoredFolder(root); List <string> selected = NodeModelUtils.GetSelectedFolder(root); Controller.Add2PageCompleted(root.Id, root.Path, ignored.ToArray(), selected.ToArray()); } }); }; CancelButton.Activated += delegate { InvokeOnMainThread(delegate { foreach (AsyncNodeLoader task in Loader.Values) { task.Cancel(); } Controller.PageCancelled(); }); }; BackButton.Activated += delegate { InvokeOnMainThread(delegate { foreach (AsyncNodeLoader task in Loader.Values) { task.Cancel(); } Controller.BackToPage1(); }); }; OutlineController.View.Frame = new RectangleF(190, 60, 400, 240); ContentView.AddSubview(OutlineController.View); Buttons.Add(ContinueButton); Buttons.Add(BackButton); Buttons.Add(CancelButton); }
/// <summary> /// Create the UI /// </summary> private void CreateEdit() { CmisTreeStore cmisStore = new CmisTreeStore(); Gtk.TreeView treeView = new Gtk.TreeView(cmisStore.CmisStore); RootFolder root = new RootFolder() { Name = this.Name, Id = credentials.RepoId, Address = credentials.Address.ToString() }; IgnoredFolderLoader.AddIgnoredFolderToRootNode(root, Ignores); LocalFolderLoader.AddLocalFolderToRootNode(root, localPath); AsyncNodeLoader asyncLoader = new AsyncNodeLoader(root, credentials, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate); asyncLoader.UpdateNodeEvent += delegate { cmisStore.UpdateCmisTree(root); }; cmisStore.UpdateCmisTree(root); asyncLoader.Load(root); Header = CmisSync.Properties_Resources.EditTitle; VBox layout_vertical = new VBox(false, 12); Controller.CloseWindowEvent += delegate { asyncLoader.Cancel(); }; Button cancel_button = new Button(CmisSync.Properties_Resources.Cancel); cancel_button.Clicked += delegate { Close(); }; Button finish_button = new Button(CmisSync.Properties_Resources.SaveChanges); finish_button.Clicked += delegate { Ignores = NodeModelUtils.GetIgnoredFolder(root); Controller.SaveFolder(); Close(); }; Gtk.TreeIter iter; treeView.HeadersVisible = false; treeView.Selection.Mode = SelectionMode.Single; TreeViewColumn column = new TreeViewColumn(); column.Title = "Name"; CellRendererToggle renderToggle = new CellRendererToggle(); column.PackStart(renderToggle, false); renderToggle.Activatable = true; column.AddAttribute(renderToggle, "active", (int)CmisTreeStore.Column.ColumnSelected); column.AddAttribute(renderToggle, "inconsistent", (int)CmisTreeStore.Column.ColumnSelectedThreeState); column.AddAttribute(renderToggle, "radio", (int)CmisTreeStore.Column.ColumnRoot); renderToggle.Toggled += delegate(object render, ToggledArgs args) { TreeIter iterToggled; if (!cmisStore.CmisStore.GetIterFromString(out iterToggled, args.Path)) { Console.WriteLine("Toggled GetIter Error " + args.Path); return; } Node node = cmisStore.CmisStore.GetValue(iterToggled, (int)CmisTreeStore.Column.ColumnNode) as Node; if (node == null) { Console.WriteLine("Toggled GetValue Error " + args.Path); return; } if (node.Parent == null) { node.Selected = true; } else { if (node.Selected == false) { node.Selected = true; } else { node.Selected = false; } } cmisStore.UpdateCmisTree(root); }; CellRendererText renderText = new CellRendererText(); column.PackStart(renderText, false); column.SetAttributes(renderText, "text", (int)CmisTreeStore.Column.ColumnName); column.Expand = true; treeView.AppendColumn(column); treeView.AppendColumn("Status", new StatusCellRenderer(), "text", (int)CmisTreeStore.Column.ColumnStatus); treeView.RowExpanded += delegate(object o, RowExpandedArgs args) { Node node = cmisStore.CmisStore.GetValue(args.Iter, (int)CmisTreeStore.Column.ColumnNode) as Node; asyncLoader.Load(node); }; ScrolledWindow sw = new ScrolledWindow() { ShadowType = Gtk.ShadowType.In }; sw.Add(treeView); layout_vertical.PackStart(new Label(""), false, false, 0); layout_vertical.PackStart(sw, true, true, 0); Add(layout_vertical); AddButton(cancel_button); AddButton(finish_button); finish_button.GrabDefault(); this.ShowAll(); }
protected override void UpdateProfileItem(ProfileTypeDefinitionModel profileItem, IDALContext dalContext) { profileItem.TypeId = (int)ProfileItemTypeEnum.CustomDataType; base.UpdateProfileItem(profileItem, dalContext); if (profileItem.TypeId != (int)ProfileItemTypeEnum.CustomDataType) { throw new Exception(); } var attributeNamespace = NodeModelUtils.GetNamespaceFromNodeId(_model.NodeId); if (_model.StructureFields?.Any() == true || _model.HasBaseType("nsu=http://opcfoundation.org/UA/;i=22")) { profileItem.TypeId = (int)ProfileItemTypeEnum.Structure; if (profileItem.Attributes == null) { profileItem.Attributes = new List <ProfileAttributeModel>(); } foreach (var field in _model.StructureFields ?? new List <DataTypeModel.StructureField>()) { var fieldDataType = field.DataType; if (fieldDataType == null) { throw new Exception($"Unable to resolve data type {field.DataType?.DisplayName}"); } var attributeDataType = fieldDataType.GetAttributeDataType(profileItem, dalContext); if (attributeDataType == null) { throw new Exception($"{fieldDataType} not resolved"); } var attribute = new ProfileAttributeModel { IsActive = true, Name = field.Name, BrowseName = $"{attributeNamespace};{field.Name}", //No SymbolicName for structure fields Namespace = attributeNamespace, IsRequired = !field.IsOptional, Description = field.Description?.FirstOrDefault()?.Text, AttributeType = new LookupItemModel { ID = (int)AttributeTypeIdEnum.StructureField }, DataType = attributeDataType, OpcNodeId = NodeModelUtils.GetNodeIdIdentifier(_model.NodeId), }; profileItem.Attributes.Add(attribute); } } if (_model.EnumFields?.Any() == true) { profileItem.TypeId = (int)ProfileItemTypeEnum.Enumeration; if (profileItem.Attributes == null) { profileItem.Attributes = new List <ProfileAttributeModel>(); } foreach (var field in _model.EnumFields) { var int64DataType = dalContext.GetDataType("Int64"); if (int64DataType == null /* || int64DataType.ID == 0*/) { throw new Exception($"Unable to resolve Int64 data type."); } var attribute = new ProfileAttributeModel { IsActive = true, Name = field.Name, BrowseName = $"{attributeNamespace};{field.Name}", // No SymbolicName for enum fields DisplayName = field.DisplayName?.FirstOrDefault()?.Text, Description = field.Description?.FirstOrDefault()?.Text, AttributeType = new LookupItemModel { ID = (int)AttributeTypeIdEnum.EnumField }, DataType = int64DataType, EnumValue = field.Value, Namespace = attributeNamespace, }; profileItem.Attributes.Add(attribute); } } }
public void AddVariableToProfileModel(ProfileTypeDefinitionModel profileItem, IDALContext dalContext) { string description = _model.Description?.FirstOrDefault()?.Text; var typeDefinitionModel = _model.TypeDefinition?.ImportProfileItem(dalContext); // TODO Capture the DataVariable TypeDefinition somewhere in the ProfileItem var attributeDataType = _model.DataType.GetAttributeDataType(profileItem, dalContext); if (attributeDataType != null) { int attributeTypeId = 0; if (this._model is PropertyModel) { attributeTypeId = (int)AttributeTypeIdEnum.Property; } else if (this._model is DataVariableModel) { attributeTypeId = (int)AttributeTypeIdEnum.DataVariable; } else { throw new Exception($"Unexpected child item {_model?.DisplayName} of type {this.GetType().Name} on item {profileItem.Name} ({profileItem.ID})"); } string dataVariableNodeIds = null; if (_model.DataVariables?.Any() == true && _model?.TypeDefinition?.DataVariables?.Any() == true) { var map = GetDataVariableNodeIds(_model.DataVariables, _model.TypeDefinition.DataVariables); dataVariableNodeIds = DataVariableNodeIdMap.GetMapAsString(map); } var attribute = new ProfileAttributeModel { IsActive = true, Name = _model.DisplayName?.FirstOrDefault()?.Text, SymbolicName = _model.SymbolicName, BrowseName = _model.BrowseName, Namespace = NodeModelUtils.GetNamespaceFromNodeId(_model.NodeId), IsRequired = ObjectModelImportProfile.GetModelingRuleForProfile(_model.ModelingRule), ModelingRule = _model.ModelingRule, IsArray = (_model.ValueRank ?? -1) != -1, ValueRank = _model.ValueRank, ArrayDimensions = _model.ArrayDimensions, Description = description, AttributeType = new LookupItemModel { ID = attributeTypeId }, DataType = attributeDataType, DataVariableNodeIds = dataVariableNodeIds, TypeDefinitionId = profileItem.ID, TypeDefinition = profileItem, VariableTypeDefinitionId = typeDefinitionModel?.ID, VariableTypeDefinition = typeDefinitionModel, OpcNodeId = NodeModelUtils.GetNodeIdIdentifier(_model.NodeId), AdditionalData = _model.Value, AccessLevel = _model.AccessLevel, UserAccessLevel = _model.UserAccessLevel, AccessRestrictions = _model.AccessRestrictions, WriteMask = _model.WriteMask, UserWriteMask = _model.UserWriteMask, }; var euInfo = NodeModelOpcExtensions.GetEUInformation(_model.EngineeringUnit); if (euInfo != null) { var engUnit = new EngineeringUnitModel { DisplayName = euInfo.DisplayName.Text, Description = euInfo.Description.Text, UnitId = euInfo.UnitId, NamespaceUri = euInfo.NamespaceUri, }; engUnit = dalContext.GetOrCreateEngineeringUnitAsync(engUnit); attribute.EngUnit = engUnit; } attribute.EngUnitOpcNodeId = _model.EngUnitNodeId; attribute.MinValue = (decimal?)_model.MinValue; attribute.MaxValue = (decimal?)_model.MaxValue; attribute.InstrumentMinValue = (decimal?)_model.InstrumentMinValue; attribute.InstrumentMaxValue = (decimal?)_model.InstrumentMaxValue; if (profileItem.Attributes == null) { profileItem.Attributes = new List <ProfileAttributeModel>(); } profileItem.Attributes.Add(attribute); } else { throw new Exception($"Data type {_model.DataType} not resolved."); } }
/// <summary> /// Create the UI /// </summary> private void CreateEdit() { RootFolder repo = new RootFolder() { Name = FolderName, Id = credentials.RepoId, Address = credentials.Address.ToString() }; repo.Selected = true; IgnoredFolderLoader.AddIgnoredFolderToRootNode(repo, Ignores); LocalFolderLoader.AddLocalFolderToRootNode(repo, localPath); List <RootFolder> repos = new List <RootFolder>(); repos.Add(repo); OutlineViewDelegate DataDelegate = new OutlineViewDelegate(); CmisTree.CmisTreeDataSource DataSource = new CmisTree.CmisTreeDataSource(repos); CmisOutlineController OutlineController = new CmisOutlineController(DataSource, DataDelegate); AsyncNodeLoader asyncLoader = new AsyncNodeLoader(repo, credentials, PredefinedNodeLoader.LoadSubFolderDelegate, PredefinedNodeLoader.CheckSubFolderDelegate); asyncLoader.UpdateNodeEvent += delegate { InvokeOnMainThread(delegate { DataSource.UpdateCmisTree(repo); NSOutlineView view = OutlineController.OutlineView(); for (int i = 0; i < view.RowCount; ++i) { view.ReloadItem(view.ItemAtRow(i)); } }); }; asyncLoader.Load(repo); DataDelegate.ItemExpanded += delegate(NSNotification notification) { InvokeOnMainThread(delegate { NSCmisTree cmis = notification.UserInfo["NSObject"] as NSCmisTree; if (cmis == null) { Console.WriteLine("ItemExpanded Error"); return; } NSCmisTree cmisRoot = cmis; while (cmisRoot.Parent != null) { cmisRoot = cmisRoot.Parent; } if (repo.Name != cmisRoot.Name) { Console.WriteLine("ItemExpanded find root Error"); return; } Node node = cmis.GetNode(repo); if (node == null) { Console.WriteLine("ItemExpanded find node Error"); return; } asyncLoader.Load(node); }); }; DataSource.SelectedEvent += delegate(NSCmisTree cmis, int selected) { InvokeOnMainThread(delegate { Node node = cmis.GetNode(repo); if (node == null) { Console.WriteLine("SelectedEvent find node Error"); } node.Selected = (selected != 0); DataSource.UpdateCmisTree(repo); NSOutlineView view = OutlineController.OutlineView(); for (int i = 0; i < view.RowCount; ++i) { try{ view.ReloadItem(view.ItemAtRow(i)); }catch (Exception e) { Console.WriteLine(e); } } }); }; OutlineController.View.Frame = new RectangleF(190, 60, 400, 240); ContentView.AddSubview(OutlineController.View); Controller.CloseWindowEvent += delegate { asyncLoader.Cancel(); }; Controller.OpenWindowEvent += delegate { InvokeOnMainThread(delegate { OrderFrontRegardless(); }); }; NSButton finish_button = new NSButton() { Title = Properties_Resources.SaveChanges, }; NSButton cancel_button = new NSButton() { Title = Properties_Resources.DiscardChanges }; Buttons.Add(finish_button); Buttons.Add(cancel_button); finish_button.Activated += delegate { Ignores = NodeModelUtils.GetIgnoredFolder(repo); Controller.SaveFolder(); InvokeOnMainThread(delegate { PerformClose(this); }); }; cancel_button.Activated += delegate { InvokeOnMainThread(delegate { PerformClose(this); }); }; this.Header = Properties_Resources.EditTitle; this.Description = ""; this.ShowAll(); }
/// <summary> /// Constructor /// </summary> public Edit(EditType type, CmisRepoCredentials credentials, string name, string remotePath, List <string> ignores, string localPath) { FolderName = name; this.Credentials = credentials; this.remotePath = remotePath; this.Ignores = new List <string>(ignores); this.localPath = localPath; this.type = type; this.backgroundWorker.WorkerSupportsCancellation = true; this.backgroundWorker.DoWork += CheckPassword; this.backgroundWorker.RunWorkerCompleted += PasswordChecked; CreateTreeView(); LoadEdit(); switch (type) { case EditType.EditFolder: // GUI workaround to remove ignore folder {{ //tab.SelectedItem = tabItemSelection; //break; // GUI workaround to remove ignore folder }} case EditType.EditCredentials: tab.SelectedItem = tabItemCredentials; break; default: break; } this.Title = Properties_Resources.EditTitle; this.Description = ""; this.ShowAll(); // Defines how to show the setup window. Controller.OpenWindowEvent += delegate { Dispatcher.BeginInvoke((Action) delegate { Show(); Activate(); BringIntoView(); }); }; Controller.CloseWindowEvent += delegate { Close(); }; finishButton.Click += delegate { Ignores = NodeModelUtils.GetIgnoredFolder(repo); Credentials.Password = passwordBox.Password; Controller.SaveFolder(); Controller.CloseWindow(); }; cancelButton.Click += delegate { Controller.CloseWindow(); }; Closed += delegate { Controller.CleanWindow(); }; }