PDA

View Full Version : Enable/Disable Next Based On SelectionTree



victorcamp
09-25-2010, 12:11 PM
I have searched and searched for a definitive answer to this question, and finally produced the desired result!

DESIRED RESULT:
Disable Next button on CustomSetup dialog if no features are chosen.
PROBLEM:
1. Next button events can certainly prevent the dialog from moving on
by defining event conditions that require at least one feature be chosen.
The Next button, however, remains enabled.
2. Next button conditions can set enable and disable based on the values
of each feature. However, the button does not process those conditions
until it's clicked. For example, both features are chosen when dialog
opens, so Next is enabled. If both features are then unchecked, Next
button remains enabled until it's actually clicked, then it reevaluates
the conditions and disables. If a feature is then chosen again, the
Next button remains disabled, with no way to force a reevaluation
of its conditions.
SOLUTION:
The SelectionTree can publish a SetProperty event that can be subscribed
to by the Next button, which enables and disables it as features are
chosen or eliminated, dynamically.
METHOD:
Add a New property named CUSTOMCHOICE, which will be treated as a
Boolean value of either 0 or 1.
Property Value
============ =====
CUSTOMCHOICE 0
Add two events to the SelectionTree itself (named: Tree), which will
set the value of CUSTOMCHOICE based on feature status. These SetProperty
events will be published by the SelectionTree, as documented in the
'SelectionTree Control' and 'SetProperty ControlEvent' Help file entries.
In this example, the project's InstallLevel is set at 3.
Event Argument Condition
============= ======= =========
[CUSTOMCHOICE] 1 (&Feature1=3) OR (&Feature2=3)
[CUSTOMCHOICE] 0 (NOT (&Feature1=3)) AND (NOT (&Feature2=3))
The Next button must have entries to both its conditions and subscriptions
to work as desired. As noted in PROBLEM 2, above, conditions alone produce
only static results. With the addition of a subscription, the effect
becomes dynamic. Though not listed in the dropdown list, 'SetProperty' is a
valid entry in the event column of the subscriptions list of the Next button.
Subscriptions:
Event Attribute
========= =========
SetProperty Enabled
Conditions:
Action Condition
===== =========
Disable (CUSTOMCHOICE=0)
Enable (CUSTOMCHOICE=1)
Events:
No change from standard.

With the above method, the Next button (or other control) reacts
dynamically to the choices made on the SelectionTree control.
It will flip on and off as you check and uncheck features.

I hope others can make use of this.

hkjang
11-03-2010, 01:13 PM
Thank you very much, victorcamp!!!
You saved me tons of time!
Thank you again.

mano.n.s75
08-12-2011, 05:51 AM
Hi,

Thank you for the excellent post on Disable/Enable Next button.

I was wondering can you provide some information on how to use this Tree event "SelectionNoItems" ControlEvent and the way to subscribe it in other controls like button?

lostboyz
01-02-2012, 02:41 AM
Thanks Victor

chrismi
09-19-2012, 05:41 PM
Thanks, Viktor, for a great solution. I've implemented your directions and they work great! I'm very happy about that. Your directions are clear, and here are also the contents of the MSI tables when exported as IDT files (using Orca). I've only included the lines that need to be changed to enable this functionality. Of course you must customize the Condition column of the ControlEvent table to list your own top-level MSI Features. But otherwise they can be copied verbatim.

ControlCondition.idt
--------------------
Dialog_ Control_ Action Condition
s72 s50 s50 s255
ControlCondition Dialog_ Control_ Action Condition
CustomSetup Next Disable CUSTOMCHOICE=0
CustomSetup Next Enable CUSTOMCHOICE=1

ControlEvent.idt
----------------
Dialog_ Control_ Event Argument Condition Ordering
s72 s50 s50 s255 S255 I2
ControlEvent Dialog_ Control_ Event Argument Condition
CustomSetup Tree [CUSTOMCHOICE] 0 &Feature1<>3 And &Feature2<>3 2
CustomSetup Tree [CUSTOMCHOICE] 1 &Feature1=3 Or &Feature2=3 1

EventMapping.idt
----------------
Dialog_ Control_ Event Attribute
s72 s50 s50 s50
EventMapping Dialog_ Control_ Event
CustomSetup Next SetProperty Enabled

Property.idt
------------
Property Value ISComments
s72 L0 S255
Property Property
CUSTOMCHOICE 0