Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/19/18 13:37:32 (6 years ago)
Author:
jzenisek
Message:

#2839: adapted illustration of project and resource ancestry in HiveAdministrator and HiveJobAdministrator

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2839_HiveProjectManagement/HeuristicLab.Clients.Hive.Administrator/3.3/Views/ProjectResourcesView.cs

    r15978 r15995  
    5555    private readonly Color addedIncludeColor = Color.FromArgb(25, 169, 221, 221); // #a9dddd
    5656    private readonly Color removedIncludeColor = Color.FromArgb(25, 249, 210, 145); // #f9d291
     57    private readonly Color selectedBackColor = Color.DodgerBlue;
     58    private readonly Color selectedForeColor = Color.White;
     59    private readonly Color grayTextColor = SystemColors.GrayText;
    5760
    5861    private HashSet<Resource> projectExclusiveResources = new HashSet<Resource>();
     
    8386        UpdateAssignedResources();
    8487        UpdateIncludedResources();
    85         var top = BuildResourceTree(HiveAdminClient.Instance.Resources);
     88        var top = BuildResourceTree();
    8689        detailsViewHost.Content = top;
    8790        detailsViewHost.Locked = true;
     
    108111      UpdateAssignedResources();
    109112      UpdateIncludedResources();
    110       var top = BuildResourceTree(HiveAdminClient.Instance.Resources);
     113      var top = BuildResourceTree();
    111114      detailsViewHost.Content = top;
    112115    }
     
    130133    }
    131134
     135    private void treeView_BeforeSelect(object sender, TreeViewCancelEventArgs e) {
     136      if (e.Node == null || e.Node == ungroupedGroupNode)
     137        e.Cancel = true;
     138
     139      var selectedResource = (Resource)e.Node.Tag;
     140      if(HiveAdminClient.Instance.DisabledParentResources.Contains(selectedResource))
     141        e.Cancel = true;
     142    }
     143
    132144    private void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
    133145      var selectedResource = (Resource)e.Node.Tag;
     
    136148
    137149    private void treeView_BeforeCheck(object sender, TreeViewCancelEventArgs e) {
     150      if (e.Node == null || e.Node == ungroupedGroupNode) {
     151        e.Cancel = true;
     152        return;
     153      }
     154       
    138155      var checkedResource = (Resource)e.Node.Tag;
    139       if (newIncludedResources.Contains(checkedResource) || checkedResource.Id == Guid.Empty || e.Node == ungroupedGroupNode) {
     156      if (checkedResource == null
     157        || checkedResource.Id == Guid.Empty
     158        || HiveAdminClient.Instance.DisabledParentResources.Contains(checkedResource)
     159        || newIncludedResources.Contains(checkedResource)) {
    140160        e.Cancel = true;
    141161      } else if (!HiveRoles.CheckAdminUserPermissions()) {
     
    164184      UpdateIncludedResources();
    165185
    166       var top = BuildResourceTree(HiveAdminClient.Instance.Resources);
     186      var top = BuildResourceTree();
    167187      detailsViewHost.Content = top;
    168188    }
     
    171191      UpdateNewAssignedResources();
    172192      UpdateNewIncludedResources();
    173       var top = BuildResourceTree(HiveAdminClient.Instance.Resources);
     193      var top = BuildResourceTree();
    174194      detailsViewHost.Content = top;
    175195    }
     
    191211      // look up for assignments of ancestor projects
    192212      var projectIds = new HashSet<Guid>();
    193       HiveClient.Instance.GetAvailableProjectAncestors(projectId).ToList().ForEach(x => projectIds.Add(x.Id));
     213      HiveAdminClient.Instance.GetAvailableProjectAncestors(projectId).ToList().ForEach(x => projectIds.Add(x.Id));
    194214
    195215      var ancestorProjectResources = resources.Where(x =>
     
    278298    }
    279299
    280     private Resource BuildResourceTree(IEnumerable<Resource> resources) {
     300    private Resource BuildResourceTree() {
    281301      treeView.Nodes.Clear();
    282       if (!resources.Any()) return null;
    283302
    284303      treeView.BeforeCheck -= treeView_BeforeCheck;
    285304      treeView.AfterCheck -= treeView_AfterCheck;
    286305
    287       resources = GetAvailableResourcesForProjectAdministration(Content.Id);
    288 
     306      var resources = GetAvailableResourcesForProjectAdministration(Content.Id);
     307
     308      var disabledParentResources = HiveAdminClient.Instance.DisabledParentResources;
    289309      var mainResources = new HashSet<Resource>(resources.OfType<SlaveGroup>().Where(x => x.ParentResourceId == null));
    290       var parentedMainResources = new HashSet<Resource>(resources.OfType<SlaveGroup>()
    291         .Where(x => x.ParentResourceId.HasValue && !resources.Select(y => y.Id).Contains(x.ParentResourceId.Value)));
    292       mainResources.UnionWith(parentedMainResources);
    293       var subResources = new HashSet<Resource>(resources.Except(mainResources));
     310      //var parentedMainResources = new HashSet<Resource>(resources.OfType<SlaveGroup>()
     311      //  .Where(x => x.ParentResourceId.HasValue && !resources.Select(y => y.Id).Contains(x.ParentResourceId.Value)));
     312      //mainResources.UnionWith(parentedMainResources);
     313      var mainDisabledParentResources = new HashSet<Resource>(disabledParentResources.Where(x => x.ParentResourceId == null || x.ParentResourceId == Guid.Empty));
     314      mainResources.UnionWith(mainDisabledParentResources);
     315      var subResources = new HashSet<Resource>(resources.Union(disabledParentResources).Except(mainResources).OrderByDescending(x => x.Name));
    294316
    295317      var stack = new Stack<Resource>(mainResources.OrderByDescending(x => x.Name));
     318     
    296319      Resource top = null;
     320      //bool nodeSelected = false;
     321      if (detailsViewHost != null && detailsViewHost.Content != null && detailsViewHost.Content is Resource) {
     322        var resourceId = ((Resource)detailsViewHost.Content).Id;
     323        top = resources.Where(x => x.Id == resourceId).FirstOrDefault();
     324      }
     325     
    297326
    298327      TreeNode currentNode = null;
     
    305334
    306335      while (stack.Any()) {
    307         if(top == null)  top = stack.Peek();
    308336        var newResource = stack.Pop();
    309337        var newNode = new TreeNode(newResource.Name) { Tag = newResource };
     338
     339        if(top == null && !disabledParentResources.Contains(newResource)) {
     340          top = newResource;
     341        }
     342
     343        //if(!nodeSelected && top != null && newResource.Id == top.Id) {
     344        //  newNode.BackColor = selectedBackColor;
     345        //  newNode.ForeColor = selectedForeColor;
     346        //  nodeSelected = true;
     347        //}
    310348
    311349        // search for parent node of newNode and save in currentNode
     
    323361        }
    324362
    325         if (newAssignedResources.Contains(newResource)) {
     363        if (disabledParentResources.Contains(newResource)) {
     364          newNode.Checked = false;
     365          newNode.ForeColor = grayTextColor;
     366        } else if (newAssignedResources.Contains(newResource)) {
    326367          newNode.Checked = true;
    327368          if(!HiveRoles.CheckAdminUserPermissions()) {
     
    398439      treeView.BeforeCheck += treeView_BeforeCheck;
    399440      treeView.AfterCheck += treeView_AfterCheck;
    400       treeView.ExpandAll();
     441     
     442      ExpandResourceNodesOfInterest(treeView.Nodes);
    401443
    402444      return top;
     445    }
     446
     447    private void ExpandResourceNodesOfInterest(TreeNodeCollection nodes) {
     448      foreach (TreeNode n in nodes) {
     449        Resource r = (Resource)n.Tag;
     450        if (n.Nodes.Count > 0) {
     451          if (HiveAdminClient.Instance.GetAvailableResourceDescendants(r.Id).OfType<SlaveGroup>().Any()) {
     452            n.Expand();
     453            ExpandResourceNodesOfInterest(n.Nodes);
     454          } else {
     455            n.Collapse();
     456          }
     457        } else {
     458          n.Collapse();
     459        }
     460      }
    403461    }
    404462
Note: See TracChangeset for help on using the changeset viewer.