The Actipro Blog

All the latest UI control development news from Actipro

SyntaxEditor vNext IntelliPrompt Updates

BlogPostBanner-SyntaxEditor-DevNotes

As mentioned in a previous post, we have been working on refactoring the core internal implementation of our SyntaxEditor code editor control on the WPF, UWP, and WinForms platforms.  This effort (codenamed vNext) is being made to bring all three platforms onto the same codebase for easier updating moving forward, and to enhance features wherever possible.

The past three weeks or so, we've been plugging along on refactoring a lot of the internals of SyntaxEditor's IntelliPrompt UI features so that the same codebase can be shared across the WPF, UWP, and WinForms platforms.

While the WPF and UWP version's APIs are pretty much staying the same (with a couple minor tweaks to completion filters), the WinForms version will see some massive new capabilities, especially with completion.

IntelliPrompt Features Summary Video

Let's dig in and see a visual summary of some amazing completion list features that will be available in the all three SyntaxEditor vNext platforms.  This video shows the WPF SyntaxEditor editing a Python document using our advanced Python Language Add-on.

 

2018-12-12_10-46-08

Toggle Button and Tab Completion Filter UI

The completion list allows for toggle button and tab filters to be added.  Toggle button filters allow you to check the kinds of items you wish to see in the completion list.  If nothing is toggled, then all results are displayed.  Tab filters let you select between two or more main options, with one being an "All" option.

While the current WPF and UWP versions already support toggle button and tab filter UI, this is a new feature for the WinForms version.  And in vNext, the toggle buttons work more like they do in Visual Studio 2017.

Filtering Unmatched Items

As you type, the completion list filters out items that don't match.  This is an option already available in the WPF/UWP versions, but is new for the WinForms version.

Matched Text Highlights

When typing text, the letters in each item that match will be highlighted in the list.  This feature makes it clear why an item is matched and is especially useful when not filtering unmatched items, or using some more advanced item matcher algorithms like acronym or shorthand.

This feature is already available in the WPF version, but is new for the UWP and WinForms versions.

Python Language Add-on

As described in this previous post, the Python Language Add-on is new for the WinForms version of SyntaxEditor.

We've also updated the IntelliPrompt completion in the add-on to dynamically show toggle button and tab filter UI based on the items that are present.  For instance, in the animation above when there were no classes available in the list, there was no "Classes" toggle button in the UI.

New Icons

As described in this previous post, the WPF and UWP Metro icons used in IntelliPrompt have been drawn from scratch as vector icons and will render crisp and clear on any high DPI monitor. 

The WinForms version is getting Metro icons as well, whereas they only had Classic icons before.

What's Next

We have IntelliPrompt completion, parameter info, and quick info completed for all three platforms.  Next is to knock out code snippet UI and then all IntelliPrompt features should be about done.

SyntaxEditor vNext Vector and Metro Images

BlogPostBanner-SyntaxEditor-DevNotes

As mentioned in a previous post, we have been working on refactoring the core internal implementation of our SyntaxEditor code editor control on the WPF, UWP, and WinForms platforms.  This effort (codenamed vNext) is being made to bring all three platforms onto the same codebase for easier updating moving forward, and to enhance features wherever possible.

We've been plowing through remaining SyntaxEditor feature areas that need to be ported to our vNext codebase, and there are only a few left.  One that we just completed is updating images used in the product, which appear in IntelliPrompt popups and the NavigableSymbolSelector.

Vector Metro Images (WPF/UWP)

The WPF and UWP versions of SyntaxEditor have had Metro Light and Metro Dark image set options for quite a while now.  But they've always been raster (bitmap) graphics that don't appear crisp on high DPI monitors.  This is something we're addressing in vNext.

For vNext, all of the Metro images will be vector images.  They will look crisp and clear at 16x16 100% DPI, but will look just as good (if not better) when used on high DPI monitors.

Here's the images at 200%:

SyntaxEditorVectorImages

Metro Images for WinForms

The WinForms SyntaxEditor has only had the Classic image set in the past.  The Classic image set is similar to the full color gradient images found in earlier versions of Visual Studio.

In vNext, we're bringing the Metro Light and Metro Dark image sets as options to the WinForms SyntaxEditor, with the Metro Light set as the default.

What's Next

We are continuing to work through remaining feature areas that need porting to the vNext codebase.  The last big one to tackle is IntelliPrompt.  Some of the UI pieces involved in IntelliPrompt need to be updated a bit for compatibility between the three platforms.  Once we get that going, these new vector images will look amazing in the IntelliPrompt UI.

WPF, UWP, and Silverlight v2018.1 Maintenance Releases

BlogPostBanner-2018.1-Maint

Our v2018.1 WPF, Universal Windows, and Silverlight controls have all been updated with new maintenance releases that are now ready for download.  There were a large number of minor enhancements and bug fixes made across various products.

See the announcement posts for the detailed list of enhancements and updates:

TaskDownload TaskBuyNow

SyntaxEditor vNext Performance Tuning and Printing

BlogPostBanner-SyntaxEditor-DevNotes

As mentioned in a previous post, we have been working on refactoring the core internal implementation of our SyntaxEditor code editor control on the WPF, UWP, and WinForms platforms.  This effort (codenamed vNext) is being made to bring all three platforms onto the same codebase for easier updating moving forward, and to enhance features wherever possible.

For the last three weeks or so of SyntaxEditor vNext development, we've been working on performance profiling and printing support.

Performance Profiling

As part of vNext, we are doing our best to speed up the editor even more than before. 

The Universal Windows version of SyntaxEditor is many times faster than the current UWP SyntaxEditor.  A large part of that is due to the newer way we measure and render the control in vNext, which is significantly faster than what we were able to do in the past.  Other tunings also help.  Let's examine some performance results.

Using page-down to scroll through a large document, we're seeing a 3.5x speed increase in the vNext UWP SyntaxEditor!  UWP SyntaxEditor speed increases when dragging the scrollbar thumb are even more evident.  There is a bit of a lag in the current UWP SyntaxEditor, whereas in the vNext UWP SyntaxEditor, the display is instant and tracks with the dragged thumb perfectly.

Running the same page-down scrolling test in WinForms, we're seeing a 20% improvement in speed over the older version.  The WPF version is seeing a slight improvement in scrolling speed over before as well, although it has always scrolled extremely fast.

We are continuing to work on tuning the API to maximize performance when scrolling and editing.

Printing

Printing support has been added back into vNext for the WPF and WinForms versions.  We are currently working on the UWP version's printing support.  These features allow you to easily print out a document to paper, or a PDF file using the "Microsoft Print to PDF" virtual printer found in Windows 10.

What's Next

We are going to wrap up UWP printing support next, and then will move onto a few other areas left to port over to the API.  Large remaining areas include searching and IntelliPrompt feature APIs.

SyntaxEditor vNext Multiple Selection Pasting

BlogPostBanner-SyntaxEditor-DevNotes

As mentioned in a previous post, we have been working on refactoring the core internal implementation of our SyntaxEditor code editor control on the WPF, UWP, and WinForms platforms.  This effort (codenamed vNext) is being made to bring all three platforms onto the same codebase for easier updating moving forward, and to enhance features wherever possible.

As described in recent blog posts, we've been working on adding multiple caret/selection support to SyntaxEditor in vNext.  In this post, I'd like to show off a neat new feature related to copying/pasting text when there are multiple selections.

Pasting Demo

At the start of this animation, I do a line copy, which occurs when there is no selection and you press Ctrl+C.  Then I paste that line in three times.

Next I select the text "Actipro," then Ctrl+select the text "SyntaxEditor," and finally Ctrl+select the text "vNext."  The Ctrl+selections have allowed me to create three selections.  At this point I could type and it would replace each of those selections with what I typed.  Instead, I'm going to press Ctrl+C again to copy the selected text.

2018-08-02_11-15-36

When I copy multiple selections, each selection's text is appended together and delimited by a line terminator.  So if you would paste what I copied into Notepad, it would paste as:

Actipro
SyntaxEditor
vNext

In the animation, the next thing I do is put a caret in each of the three empty strings by Ctrl+clicking in them.  We just added some new vNext logic that will compare the number of selections with the number of lines in the pasted text.  When they are equal, as they are in this demo, each line in the pasted text will get pasted into the related selection.  The end result is you can see how each of the three selections I originally copied end up in a separate target selection.

Summary

Multiple caret/selection support touches many portions of the editor and we are continuing to work through updating all feature areas to support it.

Let us know what you think in the comments.

SyntaxEditor vNext Multiple Caret/Selection Progress

BlogPostBanner-SyntaxEditor-DevNotes

As mentioned in a previous post, we have been working on refactoring the core internal implementation of our SyntaxEditor code editor control on the WPF, UWP, and WinForms platforms.  This effort is being made to bring all three platforms onto the same codebase for easier updating moving forward, and to enhance features wherever possible.

We are continuing development on our SyntaxEditor control, adding many modern features under a unified API design.  One enormous feature area getting added is multiple carets/selections.  We briefly proposed adding this feature several months ago in this blog post to gather feedback.

Now that we've had time to iterate on development of it, I wanted to share a demo so you can see how it works.

Multiple Carets/Selections Demo

In this screen capture animation, we show how SyntaxEditor vNext will support multiple carets/selections.

2018-07-18_11-41-52

I first select a word using my mouse and click/dragging like normal.  Then I select text under it while holding the Ctrl key and click/dragging.  Afterward I notice I accidentally selected too many characters.  I hold Ctrl and click the second selection to collapse it.  Then I hold Ctrl and click/drag to make the correct selection.

Next I hold Ctrl and click in another word to add a third caret.  I remove that same third caret by Ctrl+clicking on it again.  This is a nice feature for when you accidentally add a caret/selection you didn't mean to add.

Finally, edit actions like typing will affect all selections.  You can see in the animation how typing "Foo" affects the two selections.  Pressing Ctrl+Z for undo applies to all the selections.

Summary

Adding multiple caret/selection support is a massive feature area that touches many portions of the product.  While it's taken a while to implement, we're very pleased with the progress thus far and think it will really be exciting for end users.

Let us know what you think of this feature area in the comments.

WPF, UWP, and Silverlight Controls 2018.1 Released

BlogPostBanner-18.1

We're happy to announce that the 2018.1 versions of our WPF, Universal Windows, and Silverlight controls have been released.  These versions include a new WPF Shell product, new features, and a lot of minor updates and bug fixes throughout the control sets.

See all the details on the 2018.1 releases in the various announcement posts:

TaskDownload TaskBuyNow

Introducing Shell Controls (WPF only)

The 2018.1 version of the WPF Controls introduces a beta of a new Shell controls product that we've been developing the past several months.

Actipro Shell controls allow for easy folder and file browsing. While the product comes packed with a pre-built implementation for the Windows shell that mimics Windows Explorer, the controls are fully customizable, allowing you to filter or change the folders/files presented. Or build your own shell service to support other files systems, such the remote side for a FTP client.

ShellControls

The ShellTreeListBox control presents a shell folder hierarchy in a tree structure. It is often paired with a ShellListView control, which shows the contents of a selected folder using column-based property display. Both controls support customizable tool tips, context menus, multiple image sizes that account for high-DPI scenarios, and in-line renaming.

All of the UI found in the Shell controls is native WPF, even the context menus. Unlike competitive products with interop-based user interfaces, the Actipro Shell controls don't have any airspace or focus issues, and every bit of UI can be fully-themed or even customized with XAML data templates.

Although these controls are still in beta, they should be stable for usage in production.  If you would like to submit suggestions for improvement, please post them in our Shell discussion forum or join our Slack workspace.  We've done a lot of planning with beta testers in the Slack #uicontrols channel.

TaskLearnMore TaskWideChatWithUs

March WPF, UWP, and Silverlight v2017.2 Maintenance Releases

BlogPostBanner-2017.2-Maint

Our v2017.2 WPF, Universal Windows, and Silverlight controls have all been updated with new maintenance releases that are now ready for download. 

Let's take a quick look at some of the more notable features that were added.

Charts

Bar Customization

The series style selector's method for picking each bar's style in a bar chart has been updated to be passed bar index and count, allowing for individual bars to be customized.

Docking/MDI

UIA Updates for Better Coded UI Test Support

The docking window container UIA hierarchy has been updated to better support Coded UI Test.  These changes should now allow Coded UI Tests for controls in docking windows to record and play back successfully.

Keeping Auto-Hide Popups Open For Dialogs

There is now a property that can be set temporarily to prevent an auto-hide popup from closing when WPF keyboard focus is lost from it, which can happen if a dialog window is opened from a button on the docking window.  In this scenario in the past, the button could be clicked and the auto-hide popup might slide back.  The new option allows the popup to remain open when the dialog is open.

Improved Dragging Over Nested Linked Dock Sites

Updated docking window logic now shows dock guides by default for linked dock sites at the same nesting level, when there are multiple dock sites nested.  If there are multiple linked dock sites covering the same drag location, the Shift key can be held to switch dock guides to an alternate dock site.

Editors

MaskedTextBox Input Improvements

Logic has been updated to block some input that would trigger a shorter match.

NaN and Infinity Support Added to Multiple Edit Boxes

The CornerRadiusEditBox, PointEditBox, RectEditBox, SizeEditBox, ThicknessEditBox, and VectorEditBox controls now all have properties that can be set to allow NaN and infinity component values.

Gauge

Improved Digital Gauge Segment Rendering

DigitalGauge

The distance between digital gauge segments for the 7-segment (normal) and 14-segment (normal) character sets has been reduced, making the digital gauges easier to read at certain sizes, and more like most real readouts.

SyntaxEditor

Free Sample C#/VB Syntax Language Updates

The free language definition files now support C# 6 and VB 14 enhancements.

XML Start Tag Self-Closing

The XML auto-completion logic in the Web Languages Add-on will self-close start tags if a '/' is typed.

Summary

There were also a large number of smaller improvements made throughout the products.  See the announcement posts for the detailed list of enhancements and updates:

TaskDownload TaskBuyNow

Interest in SyntaxEditor Multiple Caret/Selection Features?

BlogPostBanner-SyntaxEditor-DevNotes

As mentioned in a previous post, we have been working on refactoring the core internal implementation of our SyntaxEditor code editor control on the WPF, UWP, and WinForms platforms.  This effort is being made to bring all three platforms onto the same codebase for easier updating moving forward, and to enhance features wherever possible.

As we continue development of SyntaxEditor vNext, we are getting into porting in the caret/selection feature area.  We've seen a couple newer editors support the concept of multiple carets/selections and would like to get some feedback on if this is a desired feature by our customers.  This is different than the rectangular box selection feature we currently already support.

Rectangular Box Selection

Rectangular box selection is already supported in SyntaxEditor and looks like this:

SyntaxEditorBoxSelection

When this selection is active, you can type and it will enter text at the same column on each line.  You can also copy box-selected text and when it's pasted, it will retain the box layout.  This is a very handy and powerful feature.

Multiple Carets/Selections

Now what happens if you want to make multiple updates but not necessarily in the same column.  Let's take a look at a scenario:

SyntaxEditorMultiScenario

In the screenshot above, the caret is next to a Write method call.  Let's say we want to update all the Write method calls to be WriteLine instead.  We could change it once and copy/paste it to the other locations.  But if we had multiple caret support, you could throw a caret at the end of each of the four Write method calls (in various columns) and simply type Line to update all of them.

One implementation of this I saw used Alt+Click to add carets.  I don't personally like this because Alt is used as a system menu accelerator and causes issues like underlines to appear in menus if you Alt+Click

Another implementation of this used Ctrl+Click to add carets.  That seems better since it won't run into the system menu accelerator issue.  The downside is that Ctrl+Click is currently used in SyntaxEditor (and Visual Studio's code editor) to do quick word selection.  Thus we'd need to rework some of our existing keyboard shortcuts to accommodate new features.

Both these implementations also use Ctrl+U as a way to undo the last selection change, whereas SyntaxEditor and VS currently tie that keyboard shortcut to making selected text lowercase.

Summary

Let's hear from you… is the multiple caret/selection feature something you'd like to see?  How would you prefer to see the keyboard shortcuts adjusted to accommodate new features?

WPF, UWP, and Silverlight v2017.2 Maintenance Releases

BlogPostBanner-2017.2-Maint

Our v2017.2 WPF, Universal Windows, and Silverlight controls have all been updated with new maintenance releases that are now ready for download.  It is highly recommended that you get these new builds since many products received numerous minor enhancements and bug fixes. 

Let's take a quick look at some of the more notable features that were added.

Charts

Display Optimizations

The line charts have had optimizations in them to try and align to pixel values to reduce anti-aliasing.  While this generally improved readability, when rendering a curve like a sine wave, this can result in some jaggedness of the curve.  We added an option that allows these display optimizations to be turned off for those scenarios.

Docking/MDI

Dock Host Changed Event

A new event is raised whenever a docking window's dock host changes, allowing for knowing when a docking window transitions to a floating state and back.

Dragging Enhancements

The dragging experience for a single tab has been improved.  When dragging a docking window over a nested linked dock site, the Shift key can be used to target the outer dock host.

Interop Improvements

Numerous improvements were made to how InteropFocusTracking handles mouse clicks and focus tracking for interop controls in docking windows.

Dock Guides

Dock guides (when in non-hosted node) can now render outside of the bounds of the target dock host when necessary.  This scenario can occur if the containers in the dock host are small.

Editors

MaskedTextBox Data Binding

A new MatchedText property has been added to MaskedTextBox to allow data binding without any prompt text.

Pointer Double-Clicks

Double-clicking an edit box part now selects the entire part's text.

Color Picker Alpha Component

The ColorPicker's alpha component has been changed to be percentage-based, which is more in line with most applications.

Grids

Key Handling

The ability to customize how Enter keys are handled for various property editor types has been added.

SyntaxEditor

Read-Only Regions

Read-only regions have been enhanced with properties that determine if editing is allowed on their first and/or last edges.

Code Outlining

The code outlining logic has been Improved to better handle mismatched outlining nodes.

JSON Parser

The JSON parser in the Web Languages Add-on has been enhanced with better error handling.

Theme Browser

We've updated the Theme Browser utility in the Sample Browser with a new textbox that allows filtering of resources.

Summary

There were also a large number of smaller improvements made throughout the products.  See the announcement posts for the detailed list of enhancements and updates:

TaskDownload TaskBuyNow