VisualHint's blog

SelectedObjects ... with a final ‘s’

Since the release of the major version 1.5 with the support of Microsoft UITypeEditor classes is not far away and because many people are asking:

Yes, SelectedObjects allowing to select multiple target instances in the PropertyGrid is the next major feature to be developed. Once done, this should definitely show that Smart PropertyGrid.Net has now an extensive list of features and can be used as a stable base for even more enhancements in the future.


The next major feature

"Smart PropertyGrid.Net will now support Microsoft UITypeEditors (dropdown and modal), the built-in ones provided in the .Net framework as well as the custom ones you have created."

In this post I wanted to announce that I was working on the first of the next major features available in SPG.Net 2.0. But this is a feature that many people requested and therefore I will answer to this wish by creating shortly a version 1.5 that will integrate it, even if officially this is a "2.0" feature.

The reason to add support for "legacy" (hehe, sorry, couldn’t resist) Type Editors is that my customers often take time to migrate their application to the new way SPG is working. In fact every client application using SPG should reasonnably stop using SelectedObject but I understand time and budget constraint matters and to allow easy switching between the Microsoft PropertyGrid and SPG, UITypeEditors must be fully handled.

If you have any questions or specific needs related to Microsoft UITypeEditors, please contact me and we will discuss while this is still in the works.

ShortcutKeys UITypeEditor

Dock UITypeEditor


Incredible month of May

I would like to thank all the companies and individuals who suddenly transformed nice sales into a tremendous success. The month of May has been outstanding in terms of sales. As a consequence, my helpdesk system is also showing more and more messages from all of you. I get some "thank-you" for this unique product alongside the Microsoft PropertyGrid, I get new feature requests and also troubleshooting and problem reports ... all the things that will make Smart PropertyGrid continue to grow and become always more stable. Just to give you an idea, here is a blind graphic of my sales since last November:

Sales of May

As you can see the first day of June just looks very promising... This chart can be read in terms of income or in license count. It doesn't show the full site licenses since they are an infinite number of licenses for a company site.


What is coming next?

So far everything is going well with the release of Smart PropertyGrid.Net. No major bugs were reported and each minor bug is fixed the same day it is received. Version 1.0.2 is on its way to bring you the latest updates. The sales are also promising and the last sale being a full site license with one year support allows me to see the near future with confidence.

Concerning the management of VisualHint, first I have chosen a design company to do the new web site. Production may begin next week. I will also buy a script (still in development) that handles customers, licenses and downloads far better than now. Furthermore it should integrate perfectly with the CMS I’m using. And at last, the addition of an helpdesk software will be a true benefit for me and my customers. Bugs and feature requests will be managed efficiently and it will support documentation books and a knowledge base. As far as documentation is concerned, this is still a weak point. But I am working on a tutorial, kind of quick start guide, that will be available during the first week of April.

This year will be the real expansion of VisualHint and I hope that you will be part of it.


Countdown to the release of Smart PropertyGrid 1.0

You were waiting for this one I’m sure: "Smart PropertyGrid.Net 1.0 will be out some time next week". I have no known bugs in the queue and it makes now several days that nobody is reporting some glitches or whatever that could delay the release. That’s why I wanted to make this pre-announcement so that you can still benefit from the current discount (I remind you that it entitles you to buy any additional licenses and subscription renewals at the same discount during your initial subscription, except for full site licenses). After next week, the price will come back to 159 USD for one single license and the subscription of current customers will start.

Also note that the price plan has been updated and is now final. A 10 licenses pack has been added and definitely clearer discounts applied, giving finally lower prices.


Icons for the combobox

Per user request, I added as a built-in feature the possibility to attach images to the elements of a combobox. Before, it would have been possible to achieve such effect but by deriving from several classes. Now the effort for the developer is minimal and just needs to attach an ImageList to a property Value. Here is an example:

Icons in Smart PropertyGrid



This is the number of registered people who have tried Smart PropertyGrid beta. I am quite impressed by this figure and for sure I was not hoping so much interest, even if I think that if companies want to display a PropertyGrid in their application it should definitely be something more user friendly than the Microsoft grid that has been designed for developers.

Now this is very difficult to say what sales will be. Do people come by curiosity or do they actually intend to purchase such a product ? At least I have exclusively very good feedback and I am quite confident for the future because Google Analytics gives me a comfortable and increasing rate of revisits.


Price plans

Price plans have been defined and are as follows:

Initial subscription (30 days) with sources: 1 license = $159 ($127 for a limited time) 5 pack = $755 (5% discount) 10 pack = $1,429 (10% discount) 20 pack = $2,544 (20% discount) Full site = $5,959 (25% discount) You can mix the packs to obtain the appropriate number of licenses.

Initial subscription (30 days) without sources: 1 license = $99 5 pack = $469 (5% discount) 10 pack = $891 (10% discount) 20 pack = $1,584 (20% discount) Full site = $3,712 (25% discount) You can mix the packs to obtain the appropriate number of licenses.

Yearly renewal for support and updates: The formula is simple: you pay half what you paid for the product, and if you purchase the renewal during a valid subscription, you get an additional 30% discount. For example, a 5 pack renewal purchased in time would cost: (755 / 2) = 377 - 30% = $264

Consulting for the implementation of custom lool/feel/inplace controls classes will be available and will be quoted on request.


The versatility of the Checkbox'ed property

When the user wants to select some values from a definite small number of choices, attaching a checkbox look/feel to the property is a good way to achieve exactly that, instead of using the usual combobox. Instinctively you may think that only an enumeration type can use such a feature. Actually, three types can.

Enumeration: this is the usual case. You may apply a custom attribute to display the enum values differently.

public enum SupportedOSs
    none = 0,
    win95 = 1,
    win98 = 2,
    winxp = 4

private SupportedOSs _oss;

[PropertyValueDisplayedAsAttribute(new string[] { "None", "Windows 95", "Windows 98", "Windows XP" })]
public Checklist SupportedOperatingSystems { get { return _oss; }
      set { _oss = value; } }

propEnum = AppendProperty(rootEnum, _id, "Supported OSs", this, "SupportedOperatingSystems", "");
propEnum.Property.Feel = GetRegisteredFeel(PropertyGrid.FeelCheckbox);
propEnum.Property.Value.Look = new PropertyCheckboxLook();
propEnum.Property.HeightMultiplier = propEnum.Property.Value.GetDisplayedValues().Length;

Boolean: a boolean can be attached to a single line checkbox. This is an extension to the above mechanism to have a convenient way to switch between yes/no, enabled/disabled or such states. This is far more convenient than the traditional combobox. Here again you can customize the displayed strings.

private bool _signalState = false;

[PropertyValueDisplayedAsAttribute(new string[2] { "Signaled", "Not signaled" })]
public bool SignalState
    get { return _signalState ; }
    set { _signalState = value; }

propEnum = AppendProperty(rootEnum, _id, "State", this,
       "SignalState", "");
propEnum.Property.Feel = GetRegisteredFeel(PropertyGrid.
propEnum.Property.Value.Look = new PropertyCheckboxLook();

Collection: why to handle collections? Just because you may not know the set of possible values at compile-time. This gives something very easy to manage, like this:

private ArrayList _supportedOSs = new ArrayList();

public ArrayList SupportedOSs { get { return _supportedOSs ; }
       set { _supportedOSs = value; } }

List stdValues = new List();
stdValues.Add("Windows 95");
stdValues.Add("Windows 98");
stdValues.Add("Windows 2000");
stdValues.Add("Windows XP");
propEnum = AppendProperty(parentEnum, _id, "Supported OSs", this,
       "SupportedOSs", "",
       new PropertyValueDisplayedAsAttribute(stdValues));
propEnum.Property.Feel = GetRegisteredFeel(PropertyGrid.FeelCheckbox);
propEnum.Property.HeightMultiplier = stdValues.Count;
propEnum.Property.Value.Look = new PropertyCheckboxLook();

Properties with hyperlink

You already know the HotLinkProperty. It lets you put a static text in a row and it looks blue and underlined, inviting you to a click to activate the link. I have added in the latest build, on request, an editable link. Basically this is a normal property that you create as usual but you just add something like this:

propEnum.Property.HyperLinkFormat = "mailto:{0}";

Smart PropertyGrid with hyperlinks

When Ctrl+clicked (for HotLinkProperty or such normal properties), you will receive the event HotLinkClickedEvent and get the complete hyperlink, with {0} replaced by the actual property value.