Coordinate > Issues

Issues

The issue register of this model as a dock panel. Filter, sort and edit issues, go to their saved view, add comments, screenshots and pins, and raise a new issue from the current view.

Tab and panelCoordinate > Issues
KindDock panel

Status

Untested Never executed inside Navisworks. Passed the headless checks only.

The public ask

No public source is on record for this tool.

Events it listens to

None. It runs only when you click it.

Files

Paths are relative to the Playground.extension folder.

  • Coordinate.tab/Issues.panel/Issues.dockpane/bundle.yaml
  • Coordinate.tab/Issues.panel/Issues.dockpane/icon.dark.png
  • Coordinate.tab/Issues.panel/Issues.dockpane/icon.on.dark.png
  • Coordinate.tab/Issues.panel/Issues.dockpane/icon.on.png
  • Coordinate.tab/Issues.panel/Issues.dockpane/icon.png
  • Coordinate.tab/Issues.panel/Issues.dockpane/icon.small.dark.png
  • Coordinate.tab/Issues.panel/Issues.dockpane/icon.small.png
  • Coordinate.tab/Issues.panel/Issues.dockpane/pane.xaml
  • Coordinate.tab/Issues.panel/Issues.dockpane/script.py

Install

  1. Only this tool. In Navisworks, click pyNavis > Playground, search for Issues, tick it and click Install.
  2. The whole extension. Download Playground.extension.zip, unzip it, put the Playground.extension folder in %APPDATA%\pyNavis\extensions\, and click pyNavis > Reload. Issues is on the Coordinate tab, Issues panel.

You need pyNavis 1.3.0 or later.

Tried it? Tell us whether it worked or not. That report is what moves a tool up the status ladder.

Report

Source

The tool's own files, word for word as published in pynavis/Playground. Paths are relative to the Playground.extension folder.

script.py

The script that fills the panel; it receives the panel as __pane__.

Coordinate.tab/Issues.panel/Issues.dockpane/script.py View on GitHub
# -*- coding: utf-8 -*-
"""The Issues register: list, filter, edit and discuss the model's coordination issues.

Runs once when the panel's content is built (and again on every Reload, against fresh
controls). All behaviour is in lib/namo/issueui.py: mount() first detaches the previous
build's subscriptions and timers (kept in a session holder), then themes pane.xaml,
fills the register of the active document and listens for document changes and for
issue changes made by any Playground tool in this session.
"""

from pynavis import script

from namo import issueui

pane = __pane__

issueui.mount(pane, script.bind(), script.get_logger())

pane.xaml

The dock panel's content.

Coordinate.tab/Issues.panel/Issues.dockpane/pane.xaml View on GitHub
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      x:Name="Root">
  <!-- The Issues register. Structure only: script.py (namo.issueui) themes it from the
       pyNavis design system, builds the buttons and fields with namo.ui, and fills the
       list. Colours come from the theme at run time, so nothing is coloured here. -->
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto"/>
    <RowDefinition Height="Auto"/>
    <RowDefinition Height="2*" MinHeight="96"/>
    <RowDefinition Height="Auto"/>
    <RowDefinition Height="3*" MinHeight="120"/>
    <RowDefinition Height="Auto"/>
  </Grid.RowDefinitions>

  <!-- Row 0: New from view (with the issue type) and Go to. -->
  <WrapPanel x:Name="Toolbar" Grid.Row="0" Margin="12,12,12,0" Orientation="Horizontal"/>

  <!-- Row 1: status, trade and assignee choosers, then the filter box. -->
  <Grid x:Name="Filters" Grid.Row="1" Margin="12,8,12,8">
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="*"/>
      <ColumnDefinition Width="8"/>
      <ColumnDefinition Width="*"/>
      <ColumnDefinition Width="8"/>
      <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="8"/>
      <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <ContentControl x:Name="StatusHost" Grid.Row="0" Grid.Column="0" Focusable="False"/>
    <ContentControl x:Name="TradeHost" Grid.Row="0" Grid.Column="2" Focusable="False"/>
    <ContentControl x:Name="AssigneeHost" Grid.Row="0" Grid.Column="4" Focusable="False"/>
    <ContentControl x:Name="SearchHost" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="5" Focusable="False"/>
  </Grid>

  <!-- Row 2: the register. Sorting by header click uses the k_* key columns. -->
  <DataGrid x:Name="List" Grid.Row="2" Margin="12,0,12,0" AutoGenerateColumns="False"
            IsReadOnly="True" SelectionMode="Single" SelectionUnit="FullRow"
            CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False"
            CanUserReorderColumns="False" HorizontalScrollBarVisibility="Auto"
            VerticalScrollBarVisibility="Auto" EnableRowVirtualization="True">
    <DataGrid.Columns>
      <DataGridTextColumn Header="ID" Binding="{Binding id}" SortMemberPath="k_id" Width="88"/>
      <DataGridTextColumn Header="Title" Binding="{Binding title}" SortMemberPath="k_title" Width="*" MinWidth="120"/>
      <DataGridTemplateColumn Header="Status" SortMemberPath="k_status" Width="104">
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <Border CornerRadius="3" Padding="6,1,6,2" Margin="0,0,8,0" HorizontalAlignment="Left"
                    VerticalAlignment="Center" Background="{Binding s_bg}">
              <TextBlock Text="{Binding status}" Foreground="{Binding s_fg}" FontSize="12"/>
            </Border>
          </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
      <DataGridTemplateColumn Header="Priority" SortMemberPath="k_priority" Width="76">
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <TextBlock Text="{Binding priority}" Foreground="{Binding p_fg}" FontWeight="{Binding p_weight}"
                       VerticalAlignment="Center" Margin="0,0,8,0"/>
          </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
      <DataGridTextColumn Header="Trade" Binding="{Binding trade}" SortMemberPath="k_trade" Width="112"/>
      <DataGridTemplateColumn Header="Due" SortMemberPath="k_due" Width="128">
        <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
            <TextBlock Text="{Binding due}" Foreground="{Binding d_fg}" FontWeight="{Binding d_weight}"
                       VerticalAlignment="Center" Margin="0,0,8,0"/>
          </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
    </DataGrid.Columns>
  </DataGrid>

  <!-- Shown instead of the register when there is nothing to list. -->
  <StackPanel x:Name="Empty" Grid.Row="2" Margin="24,16,24,8" Visibility="Collapsed"
              VerticalAlignment="Top">
    <TextBlock x:Name="EmptyTitle" FontSize="15" FontWeight="Medium" TextWrapping="Wrap"/>
    <TextBlock x:Name="EmptyText" FontSize="13" Margin="0,6,0,0" TextWrapping="Wrap"/>
  </StackPanel>

  <GridSplitter x:Name="Splitter" Grid.Row="3" Height="9" HorizontalAlignment="Stretch"
                VerticalAlignment="Center" Background="Transparent" Focusable="False"
                ResizeBehavior="PreviousAndNext" ShowsPreview="False"/>

  <!-- Row 4: the selected issue: fields, location, elements, images, comments. -->
  <ScrollViewer x:Name="DetailScroll" Grid.Row="4" VerticalScrollBarVisibility="Auto"
                HorizontalScrollBarVisibility="Disabled" Focusable="False">
    <StackPanel x:Name="Detail" Margin="12,4,12,16"/>
  </ScrollViewer>

  <!-- Row 5: counts, data mode, the last result, and Refresh. -->
  <Border x:Name="StatusBar" Grid.Row="5" BorderThickness="0,1,0,0" Padding="12,4,8,4">
    <DockPanel LastChildFill="True">
      <ContentControl x:Name="RefreshHost" DockPanel.Dock="Right" Focusable="False"/>
      <TextBlock x:Name="Status" FontSize="12" TextTrimming="CharacterEllipsis"
                 VerticalAlignment="Center"/>
    </DockPanel>
  </Border>
</Grid>

Library modules this tool uses

From the shared namo library, which installs with every tool. Each name opens the module on GitHub.

  • namo.issueuiThe Issues dock pane: the register, the editor, the comments thread.

bundle.yaml

The bundle contract: the keys pyNavis reads for this tool.

Coordinate.tab/Issues.panel/Issues.dockpane/bundle.yaml View on GitHub
title: Issues
tooltip: The issue register of this model as a dock panel. Filter, sort and edit issues, go to their saved view, add comments, screenshots and pins, and raise a new issue from the current view.