Office
 

Microsoft Visio 2010 : Displaying the rule for a selected issue

1/14/2012 11:28:59 AM
The built-in Issues window, which is opened from the Diagram Validation group on the Process tab, provides an existing method for a user to select an issue. Therefore we can synchronize the selected rule in the Rules Explorer whenever an issue is selected. This enables the rules developer to analyze the expressions used.

Actually, the Issues window does not cause any events at all, but it does select the target shape or page whenever an issue is selected in the window.

Thus, we can use the Application.Window_SelectionChanged() event to test if the Issues window is open. If it is, then the selected issue ID is sent into the veApplication.SetSelectedIssue() method.

private void Window_SelectionChanged(Visio.Window Window)
{
//Check the selected Issue
Visio.Window winIssues = Window.Windows.get_ItemFromID( (short)Visio.VisWinTypes.visWinIDValidationIssues);
if (winIssues.Visible == false)
{
selectedIssueID = -1;
veApplication.SetSelectedIssue(Window.Document.ID, null);
}
else
{
if (winIssues.SelectedValidationIssue != null)
{
selectedIssueID = winIssues.SelectedValidationIssue.ID;
veApplication.SetSelectedIssue(Window.Document.ID,
selectedIssueID);
}
else
{
selectedIssueID = -1;
veApplication.SetSelectedIssue(Window.Document.ID, null);
}
}
}



The VEApplication.SetSelectedIssue() method then gets the correct VEDocument object, and passes the issue ID through to it via the selectedVEDocument.SetSelectedIssue(issue) method.

public void SetSelectedIssue(int? docid, int? issue)
{
if (docid.HasValue && this.VEDocuments.Count() > 0)
{
selectedVEDocument = this.VEDocuments.Single(doc => doc.ID == docid);
selectedVEDocument.SetSelectedIssue(issue);
}
else
{
selectedVEDocument = null;
}
}

Finally, the VEDocument object sets the SelectedVEIssue property by selecting it from the VEIssues collection. This sets the IsSelected property of all VERuleSet and VERule objects before setting the IsSelected property of VERuleSet and VERule of the selected issue to true.

public void SetSelectedIssue(int? iss)
{
if (iss.HasValue)
{
this.SelectedVEIssue = this.VEIssues.Single( issu => issu.ID == iss);
selectedVEIssue.IsSelected = true;
var results = from rls in this.VERuleSets select rls;
foreach (VERuleSet rls in results)
{
rls.IsSelected = false;
rls.UnSelect();
}
this.SelectedVERuleSet = this.VERuleSets.Single( rs => rs.ID == selectedVEIssue.Rule.RuleSet.ID);
selectedVERuleSet.IsSelected = true;
this.SelectedVERule = selectedVERuleSet.VERules.Single( rl => rl.ID == selectedVEIssue.Rule.ID);
selectedVERule.IsSelected = true;
}
else
{
this.SelectedVEIssue = null;
this.SelectedVERuleSet = null;
this.SelectedVERule = null;
}
}



Now, because the IsSelected property of the tree view items are bound to the IsSelected property of the underlying objects, the UI instantly reacts and displays the details of the rule for the selected issue in the Issues window.

For example, the UserControlExplorer.xaml file contains the HierarchicalDataTemplate for the rule. This definition does not contain any binding for the TreeViewItem because it merely describes the UI elements for the item. In order to set the binding for the item, and to vary the colors when it is selected, you can define a Style with the TargetType="{x:Type TreeViewItem}" attribute. This style will automatically be applied to each TreeViewItem as follows:

<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="Black" />
<Setter Property="IsExpanded" Value="{Binding Path=IsExpanded}" />
<Setter Property="IsSelected" Value="{Binding Path=IsSelected}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="True">
<Setter Property="Background" Value="Black" />
<Setter Property="Foreground" Value="White" />
</DataTrigger>
</Style.Triggers>
</Style>
<HierarchicalDataTemplate x:Key="RuleTemplate"
DataType="{x:Type localVM:VERule}" >
<StackPanel Orientation="Horizontal"
ToolTip="{StaticResource ResourceKey=RuleToolTip}">
<Image Source="..\Images\IssueTracking_32x32.png"
Style="{StaticResource ResourceKey=ImageStyle}" />
<TextBlock Text="{Binding Path=DisplayName}"
Style="{StaticResource ResourceKey=TreeItemStyle}" />
</StackPanel>
</HierarchicalDataTemplate>
 
Others
 
- Accessing PowerPoint on the Web and Mobile Devices (part 2) - Setting SkyDrive Permissions
- Accessing PowerPoint on the Web and Mobile Devices (part 1) - Setting Up SkyDrive
- Microsoft PowerPoint 2010 : Managing Themes
- Microsoft Excel 2010 : Printing in Excel - Adjusting Page Margins & Inserting Page Breaks
- Microsoft Excel 2010 : Setting the Print Area
- Microsoft Outlook 2010 : Setting Up Mobile Alerts for Important Messages
- Microsoft Outlook 2010 : Setting Up Calendar Alerts
- Microsoft OneNote 2010 : Searching for Stray Notes (part 2)
- Microsoft OneNote 2010 : Searching for Stray Notes (part 1)
- Microsoft PowerPoint 2010 : Managing Slide Masters
- Microsoft PowerPoint 2010 : Customizing and Creating Layouts
- Microsoft Access 2010 : Introducing Query Types & Creating a Query Using the Query Wizard
- Microsoft Word 2010 : Creating Different Headers or Footers for Odd and Even Pages
- Microsoft Word 2010 : Editing a Header or Footer
- Microsoft PowerPoint 2010 : Working with Placeholders
- Microsoft PowerPoint 2010 : Changing the Background
- Microsoft Excel 2010 : Using Print Preview
- Microsoft Excel 2010 : Using Excel with the Normal Distribution - The Central Limit Theorem
- Microsoft Outlook 2010 : Configuring Mobile Alert Settings for Exchange Server Accounts
- Microsoft Outlook 2010 : Configuring the Exchange Server Client - Configuring Security Properties & Configuring Connection Properties
 
 
Most View
 
- Sharepoint 2013 : Welcome to the Central Administration Web Site (part 2) - System Settings, Monitoring
- Windows Small Business Server 2011 : Managing Group Policies (part 1)
- Windows 7 : BitLocker (part 1) - How to Use BitLocker with TPM Hardware
- Microsoft Project 2010 : Maintaining Baselines (part 1) - Clearing a Baseline
- Windows Server 2012 : A complete virtualization platform (part 1) - Hyper-V extensible switch - Configuring virtual switches
- Windows Small Business Server 2011 : Using Group Policy - Creating a Group Policy Object
- Windows 8 : Getting Around the Windows Desktop - Terminology for Things You Do
- Windows 8 : Using the Control Panel Items (part 11) - Speech Recognition
- Setting Up Windows 8 Family Safety (part 4) - Controlling Windows Store and game play
- Sharepoint 2013 : Customizing a SharePoint Site - Modify the Top or Left Navigation Bar (part 2) - Modify the Top or Left Navigation Bar in a Publishing Site
 
 
Top 10
 
- Microsoft Access 2010 : Sharing Data with Other Applications - Linking to Tables in Another Access Database
- Microsoft Access 2010 : Sharing Data with Other Applications - Importing ASCII Data
- Microsoft Access 2010 : Sharing Data with Other Applications - Importing Spreadsheet Data
- Microsoft Access 2010 : Sharing Data with Other Applications - Importing from Another Access Database
- Microsoft Access 2010 : Sharing Data with Other Applications - Exporting to ASCII
- Microsoft Access 2010 : Sharing Data with Other Applications - Exporting to an Excel Spreadsheet
- Microsoft Access 2010 : Sharing Data with Other Applications - Exporting to Another Access Database
- Microsoft Access 2010 : Sharing Data with Other Applications - Importing, Linking, and Opening Files
- Windows 8 Apps and the Windows Store : Installing Apps from the Windows Store, Sharing Windows 8 App Data
- The Windows 8 Apps (part 7) - Travel, Video