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.
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.yamlCoordinate.tab/Issues.panel/Issues.dockpane/icon.dark.pngCoordinate.tab/Issues.panel/Issues.dockpane/icon.on.dark.pngCoordinate.tab/Issues.panel/Issues.dockpane/icon.on.pngCoordinate.tab/Issues.panel/Issues.dockpane/icon.pngCoordinate.tab/Issues.panel/Issues.dockpane/icon.small.dark.pngCoordinate.tab/Issues.panel/Issues.dockpane/icon.small.pngCoordinate.tab/Issues.panel/Issues.dockpane/pane.xamlCoordinate.tab/Issues.panel/Issues.dockpane/script.py
Install
- Only this tool. In Navisworks, click pyNavis > Playground, search for Issues, tick it and click Install.
- The whole extension. Download
Playground.extension.zip, unzip it, put thePlayground.extensionfolder 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.
ReportSource
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 GitHubtitle: 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.