The Actipro Blog

All the latest UI control development news from Actipro

First Look at SyntaxEditor for WinRT/XAML

BlogPostBanner

One thing we always wanted to do was write a small free application that used SyntaxEditor (our syntax-highlighting code editor control) and could be used as a notepad replacement.  While we have many nice demos for the control product, we've never made an app that is real-world and usable by the masses.  That is, until now.

UPDATE:  Code Writer is now live on the Windows Store.  Download it for free!

Today I'd like to share a picture of an exciting Windows 8 app running on my Surface RT:

Surface

We've created a text and code editing application for Windows 8 that uses a port of our WPF and Silverlight SyntaxEditor as its primary interface for editing documents.  And I must say, it's beautiful.

Yes, it works on any Windows 8 platform, including ARM devices such as seen in the picture above.  And best of all, our upcoming app will be free to use! 

This gives us an opportunity to show off SyntaxEditor's capabilities and heavily test the WinRT/XAML port of SyntaxEditor.  Once SyntaxEditor for WinRT/XAML is released, you will be able to add text/code editing features into your own Windows 8 apps.

We currently are putting the finishing touches on the app for a first release and hope to have it out soon.  We've worked up a very nice way for interacting with documents, and will dive into it all with some screens once the app is submitted for certification.

If you are a customer and are interested in beta testing SyntaxEditor for WinRT/XAML, please contact our sales team.  A beta may not be ready for a while, but we'd like to start collecting info on interested customers now.

WPF Controls 2012.2 Build 571 Released

BlogPostBanner

WPF Studio 2012.2 build 571 has been released and is now available for download. This maintenance release contains some massive new features and updates for the WPF controls.

This build has the following major new features:

  • Docking: Updated the standard switcher to use current theme assets and updated dock guide appearances for the Metro themes.
  • Docking: Updated dock guides, previews, rafting windows, and the switcher to support LayoutTransform detection.
  • Editors: Updated EnumPart to implement ISpinnable and allow up/down arrow keys to change its value.
  • PropertyGrid: Added a new Custom Factory QuickStart that shows how to build a custom data factory.
  • Ribbon: Completely rearchitected RibbonWindow to use the powerful new WindowChrome class for providing its custom chrome.
  • Ribbon: Improved RibbonWindow's Metro themes to support outer glows.
  • Ribbon: Improved RibbonWindow to fully support Aero snap and dock.
  • Ribbon: Updated Backstage to have a more Office 2013-like appearance when in a Metro theme.
  • Ribbon: Updated Backstage so that it covers the RibbonWindow.StatusBar if present.
  • SyntaxEditor: Added a NavigableSymbolSelector.AreRootSymbolsSupported property, that can be set to false to only show the member drop-down.
  • SyntaxEditor: Added new SyntaxEditor.HorizontalScrollBarVisibilty and VerticalScrollBarVisibility properties that can be set to Hidden to hide scrollbars.
  • SyntaxEditor LL(*) Parser Framework: Added a new Grammar.AstLeftAssociativity tree constructor method that can provide left associativity on binary operator expressions.
  • SyntaxEditor .NET Languages Add-on: Improved the parser and resolver.
  • Themes: Added a new Metro White theme, that is similar to the Office 2013 appearance.
  • Themes: Updated WindowChrome to support the rendering of custom chrome for any current theme, not just the Metro themes.
  • Themes: Updated WindowChrome to support Aero glass via its new IsGlassEnabled and GlassThickness properties.
  • Themes: Added the WindowChrome.TitleBarContentTemplate property that allows for injecting custom content next to window title bar caption buttons.

See the announcement post for the detailed list of enhancements and updates.

TaskDownload TaskLiveDemo TaskBuyNow

Filed under: Actipro, New features, WPF

Silverlight Controls 2012.2 Build 141 Released

BlogPostBanner

Silverlight Studio 2012.2 build 141 has been released and is now available for download.  Several very nice new controls and enhancements are part of this build.

This build has the following major new features:

  • SyntaxEditor: Added a NavigableSymbolSelector.AreRootSymbolsSupported property, that can be set to false to only show the member drop-down.
  • SyntaxEditor: Added new SyntaxEditor.HorizontalScrollBarVisibilty and VerticalScrollBarVisibility properties that can be set to Hidden to hide scrollbars.
  • SyntaxEditor LL(*) Parser Framework: Added a new Grammar.AstLeftAssociativity tree constructor method that can provide left associativity on binary operator expressions.
  • SyntaxEditor .NET Languages Add-on: Improved the parser and resolver.

See the announcement post for the detailed list of enhancements and updates.

TaskDownload TaskLiveDemo TaskBuyNow

WinForms Controls 2012.1 Build 303 Released

BlogPostBanner

WinForms Controls 2012.1 build 303 has been released and is now available for download. Several enhancements and bug fixes are part of this build.  SyntaxEditor updates include an improved regex engine that allows for Unicode categories, and improved CharClass design.  .NET Languages Add-on updates include improvements to the VB parser, resolver, and auto-indent.

See the announcement post for the detailed list of enhancements and updates.

TaskDownload TaskBuyNow

WPF Controls 2012.2 Released

WPFBlogPostBanner

WPF Controls 2012.2 has been released and is now available for download!  This version adds a number of new controls, some great new SyntaxEditor functionality, a new Metro light theme, and other theme updates.

Major new features are described below.  See the announcement post for the detailed list of enhancements and updates.

ProductHeadingWPFMicroCharts

Bullet Graph

A bullet graph is a special kind of bar chart used to display a single value and make comparisons to one or more related values, such as last year's mark, a goal or target, or a projected future value. 

BulletGraph

Examples could include annual income or expenses data, sales data, and performance ratings data.

Box Plot

A box plot is a chart used to visualize major statistical values, such as the mean, median, and quartile values, of a data set. The mean and median can be shown as bars perpendicular to the chart. The upper and lower quartile values form the edges of a box that contains the middle half of the data.

BoxPlot

The spacing between the different parts of the box plot help indicate the degree of spread in the data. Box Plots are particularly useful for displaying distributions of a group in a compact way. This is good for creating charts that compare a group of data such as the performance of salespeople, heights of a group of people, temperatures along a latitude, and more.

Candlestick Chart

Candlestick charts are used to visualize price movements over time, such as changing stock or currency values.  The edges of the box define the opening and closing values, with the wicks extending to the highest and lowest values reached. 

CandlestickChart

The box is shaded differently depending on if the close was higher than the open.

ProductHeadingWPFSyntaxEditor

IntelliPrompt Code Snippet Selection Session

In the 2011.2 version, we added code snippet template session functionality where snippets of code can be inserted into the editor.  The snippets may contain editable fields that the end user can tab between and modify.

CodeSnippetTemplateSession

In 2012.2, we've added a new code snippet selection session that allows an end user to display a popup containing all the available code snippets. 

CodeSnippetSelectionSession

They can type in what they are looking for or can use the completion list as appropriate to locate a snippet.  Once a snippet is selected, a template session begins for it.

Structure Matchers

Structure matchers are a new language service added that allows a language to locate matching delimiter sets.  This is a feature that is harnessed by other SyntaxEditor editing functionality such as move/select to matching bracket and delimiter highlighting.  A built-in implementation is included that makes it easy to match common bracket pairs for a language.

Move/Select to Matching Bracket

SelectToMatchingBracket

When the caret is next to a delimiter that is part of a delimiter set (as identified by a structure matcher), the end user can choose to move or select the caret to the matching bracket via built-in edit actions.

Delimiter Highlighting

Delimiter highlighting checks the text next to the caret to see if it is part of a delimiter set (as identified by a structure matcher).  In cases where a delimiter is found, it and its related delimiters can be highlighted so that the end user can easily identify the code block.

DelimiterHighlighting

This highlighting commonly includes brackets (parentheses, curly braces, etc.) but can also include more advanced highlights such as #if…#else…#endif blocks.

.NET Languages Add-on Support for C# 5.0 / VB 11.0 Syntax

The latest official C# 5.0 and Visual Basic 11.0 language specifications have added some new keywords and functionality to the languages.  Both languages add asynchronous procedure support (via async/await) and VB adds iterators. 

Await

The latest .NET Languages Add-on parser is set up to properly parse the new syntax, and the resolver is able to work with async results for supporting automated IntelliPrompt.

.NET Languages Add-on Resolver Improvements for Anonymous Function Results

The .NET Languages Add-on's resolver can now examine anonymous functions to try and derive the Type of their result.

AnonymousFunctions

This helps further improve the resolver's ability to provide accurate automated IntelliPrompt when working with LINQ and other scenarios.

ProductHeadingWPFThemes

New Metro Light Theme

A complete new theme for the Metro style appearance, inspired by the latest Visual Studio and Office versions, is included in 2012.2.  It is optional and is shipped in its own assembly, similar to our Office themes.

MetroTheme

As with our other themes, you can activate native control theming so that all the controls in your app, whether they are the built-in Microsoft controls or Actipro controls, will render consistently and with a great new Metro-like appearance.

WindowChrome Class

We have a new chrome class that can be used to alter the appearance of any normal WPF window.  At the moment it's designed for use only when the new Metro Light theme is active, and has these features:

  • Ability to convert any Window to use a custom chrome like above when the Metro theme is active.
  • Window border color (when active) that matches the StatusBar color.
  • Semi-transparent outer glow effect for window border.
  • Window resizing via the outer glow effect area.
  • StatusBar background, window border, and glow effect colors can all be changed based on app state.
  • Full Aero snap support.
  • Ability to render interop (WinForms, etc.) controls properly, even though transparency is used.

We plan on expanding the chrome class with more features in the future too.

Assets Added for Making Rounded Editors

EditCorners

We've added several new resource assets and updated all our themes so that it's possible to achieve rounded corners on any edit-related control, such as TextBox, SyntaxEditor, DateTimeEditBox, etc.

TaskDownload TaskLiveDemo TaskBuyNow

Filed under: Actipro, New features, WPF

Silverlight Controls 2012.2 Released

SilverlightBlogPostBanner

Silverlight Studio 2012.2 has been released and is now available for download. This version adds a number of new controls and some great new SyntaxEditor functionality.

Major new features are described below.  See the announcement post for the detailed list of enhancements and updates.

ProductHeadingSilverlightMicroCharts

Bullet Graph

A bullet graph is a special kind of bar chart used to display a single value and make comparisons to one or more related values, such as last year's mark, a goal or target, or a projected future value. 

BulletGraph_thumb

Examples could include annual income or expenses data, sales data, and performance ratings data.

Box Plot

A box plot is a chart used to visualize major statistical values, such as the mean, median, and quartile values, of a data set. The mean and median can be shown as bars perpendicular to the chart. The upper and lower quartile values form the edges of a box that contains the middle half of the data.

BoxPlot_thumb

The spacing between the different parts of the box plot help indicate the degree of spread in the data. Box Plots are particularly useful for displaying distributions of a group in a compact way. This is good for creating charts that compare a group of data such as the performance of salespeople, heights of a group of people, temperatures along a latitude, and more.

Candlestick Chart

Candlestick charts are used to visualize price movements over time, such as changing stock or currency values.  The edges of the box define the opening and closing values, with the wicks extending to the highest and lowest values reached. 

CandlestickChart_thumb

The box is shaded differently depending on if the close was higher than the open.

ProductHeadingSilverlightSyntaxEditor

IntelliPrompt Code Snippet Selection Session

In the 2011.2 version, we added code snippet template session functionality where snippets of code can be inserted into the editor.  The snippets may contain editable fields that the end user can tab between and modify.

CodeSnippetTemplateSession_thumb

In 2012.2, we've added a new code snippet selection session that allows an end user to display a popup containing all the available code snippets. 

CodeSnippetSelectionSession_thumb

They can type in what they are looking for or can use the completion list as appropriate to locate a snippet.  Once a snippet is selected, a template session begins for it.

Structure Matchers

Structure matchers are a new language service added that allows a language to locate matching delimiter sets.  This is a feature that is harnessed by other SyntaxEditor editing functionality such as move/select to matching bracket and delimiter highlighting.  A built-in implementation is included that makes it easy to match common bracket pairs for a language.

Move/Select to Matching Bracket

SelectToMatchingBracket_thumb

When the caret is next to a delimiter that is part of a delimiter set (as identified by a structure matcher), the end user can choose to move or select the caret to the matching bracket via built-in edit actions.

Delimiter Highlighting

Delimiter highlighting checks the text next to the caret to see if it is part of a delimiter set (as identified by a structure matcher).  In cases where a delimiter is found, it and its related delimiters can be highlighted so that the end user can easily identify the code block.

DelimiterHighlighting_thumb

This highlighting commonly includes brackets (parentheses, curly braces, etc.) but can also include more advanced highlights such as #if…#else…#endif blocks.

.NET Languages Add-on Support for C# 5.0 / VB 11.0 Syntax

The latest official C# 5.0 and Visual Basic 11.0 language specifications have added some new keywords and functionality to the languages.  Both languages add asynchronous procedure support (via async/await) and VB adds iterators. 

Await_thumb

The latest .NET Languages Add-on parser is set up to properly parse the new syntax, and the resolver is able to work with async results for supporting automated IntelliPrompt.

.NET Languages Add-on Resolver Improvements for Anonymous Function Results

The .NET Languages Add-on's resolver can now examine anonymous functions to try and derive the Type of their result.

AnonymousFunctions_thumb

This helps further improve the resolver's ability to provide accurate automated IntelliPrompt when working with LINQ and other scenarios.

TaskDownload TaskLiveDemo TaskBuyNow

SyntaxEditor - Move/Select to Matching Bracket

BlogPostBanner

As seen in yesterday's post, delimiter (bracket) highlighting is coming to the WPF and Silverlight SyntaxEditor controls in the 2012.2 version (due very soon). 

A new language service that was described yesterday was a structure matcher service.  This allows delimiter sets to be located.  When one of these is registered on a language, SyntaxEditor automatically gains a new feature:  move/select to matching bracket.

UPDATE:  Version 2012.2 is live and available for download now.

Select to Matching Bracket Example

Let's take a look at how this all works.  Say we have this scenario in SyntaxEditor where the caret is next to a parenthesis. 

SelectToBracket1

Notice that the bracket highlight is not visible because the caret is on the inside of the parenthesis and the highlights for this language are told to only show when the caret is on the outside of a parenthesis.

Now we press Ctrl+Shift+] and voila, the structure matcher returns the nearby delimiters to SyntaxEditor, and the full delimiter range is selected.

SelectToBracket2

So you may be asking, how did that work, when delimiter highlighting didn't register the parenthesis as a valid delimiter?  We designed the structure matcher so that an option can be passed asking it to be more liberal in its matching algorithms.  So while the delimiter highlighting matching logic for a language may have very specific locations a match can occur, other features like move/select to matching bracket can find matches that are anywhere next to the caret.

On a side note, the hotkeys for moving (Ctrl+]) and selecting (Ctrl+Shift+]) to the matching bracket only work in WPF since Silverlight doesn't allow us to watch for that key sequence being pressed.  However you can still provide this functionality to customers via a menu item in Silverlight.

Summary

Move and select to matching bracket is some handy functionality when editing code blocks.  We're excited to offer it in the 2012.2 version.

TaskDownload TaskLiveDemo TaskBuyNow

SyntaxEditor - Delimiter Highlighting

BlogPostBanner

We're currently working on wrapping up the 2012.2 versions of our WPF and Silverlight controls and hope to have these out in the next several weeks.  Today I'd like to announce another new feature coming to SyntaxEditor in the 2012.2 version:  delimiter highlighting!

UPDATE:  Version 2012.2 is live and available for download now.

What is Delimiter Highlighting?

Delimiter highlighting, also called bracket highlighting, is a feature where highlights appear next to sets of delimiters when the caret is next to them.

DelimiterHighlighting

In the screenshot above, we have the current line highlighting feature active along with delimiter highlighting.  The caret is next to a { character which the C# language implementation recognizes as a bracket that should receive highlighting.  Thus its background is highlighted, along with the matching } bracket's background.

Language-Specific Delimiters

Each syntax language has complete control over which delimiter sets are supported.  The language simply creates a new IStructureMatcher service that is able to locate matching delimiters.

Plus we include a built-in implementation of that service that makes it easy to provide matching for curly brace, square brace, angle brace, and parenthesis pairs.

Multiple Delimiter Support

One feature request we had for the WinForms version (which already has bracket highlighting features) was a good way to support more than two delimiters in a matched set.  This is useful in scenarios where perhaps you want to highlight #if#else#endif.  I'm pleased to say that our delimiter matching feature fully supports and will highlight any number of matches in a delimiter set!

Performance Optimizations

One issue with delimiter highlighting in general is that it updates very frequently, basically with every text or selection change.  In large documents, it can take time to scan forward/backward to find a matching delimiter. 

What we did was to design this feature in such a way that the scanning work is completely offloaded into a worker thread.  It actually piggybacks onto our multi-threaded parsing framework to accomplish this.  Thus in the end, the highlights still show up fast and even when the match scanning takes a relatively long time, there is no detriment to typing or scrolling performance.

Summary

Delimiter highlighting is a visually subtle, yet extremely useful feature when editing code.  It's been highly requested and we're very happy to deliver it in 2012.2.  We think you're really going to like what we've come up with.

In our next post, we'll talk about the related move/select to matching bracket functionality, also coming in 2012.2.

TaskDownload TaskLiveDemo TaskBuyNow

SyntaxEditor .NET Languages Add-on - Async/Await and Iterators

BlogPostBanner

The latest official C# 5.0 and Visual Basic 11.0 language specifications have added some new keywords and functionality to the languages.  Both languages add asynchronous procedure support (via async/await) and VB adds iterators.

Our upcoming 2012.2 versions of the SyntaxEditor .NET Languages Add-on (WPF and Silverlight versions) have been updated to fully parse the syntax changes and support automated IntelliPrompt on await expression results.

UPDATE:  Version 2012.2 is live and available for download now.

Automated IntelliPrompt for Await

Let's take a look at a sample of async/await in action.  In this sample code snippet, we have a method that will print the row count of a table that is asynchronously returned.

Async

Note how all variables are implicitly declared with the var keyword.  First we declare a dataTask variable that is a Task<DataTable>.  Then we declare a table variable that is the result of an await of the task.

A lot of complicated code is going on behind the scenes here.  First, in order to determine task's type, the resolver has to search the awaited object (dataTask) for a GetAwaiter method (either explicitly declared or declared via an extension method).  If found, it examines that object for a GetResult method and the return value of that is task's type.

Finally you can see from the screenshot that it properly determined that table is of type DataTable since we are able to access the Rows collection on it.

Summary

Our .NET Languages Add-on continues to support the latest syntax innovations and has very impressive automated IntelliPrompt capabilities that can be added to your own applications.  The enhancements mentioned above will be included in the upcoming 2012.2 version.

TaskDownload TaskLiveDemo TaskBuyNow

WPF Controls 2012.1 Build 562 Released

BlogPostBanner

WPF Studio 2012.1 build 562 has been released and is now available for download. Several very nice new controls and enhancements are part of this build.

This build has the following major new features:

  • Micro Charts: Added new MicroHeatMapPresenter control that facilitates the creation of heat maps where each cell renders color and/or size differences to reflect data values.
  • SyntaxEditor: Added a new NavigableSymbolSelector control, which can be used to provide type/member drop-down support for a language.
  • SyntaxEditor: Added a INavigableSymbolProvider language service, related types and samples.
  • SyntaxEditor .NET Languages Add-on: Implemented an INavigableSymbolProvider service on both the C# and VB languages, allowing for NavigableSymbolSelector support.
  • All: Improved designer support compatibility with VS 2012.

See the announcement post for the detailed list of enhancements and updates.

TaskDownload TaskLiveDemo TaskBuyNow

Filed under: Actipro, New features, WPF