show/hide dialog items does not update

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 10/01/2005 at 10:10, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   8.5 
Platform:   Windows  ;   
Language(s) :     C++  ;

---------
hi,

i have a dropdown item in my dialog.
depending on the selection, different dialog items should be hidden or shown.

it works fine, but the items are only shown/hidden, when i press another button or slider or anything like that.

is there a possibility to update the property dialog ? direct after selecting something out of a dropdownmenue ?

sorry for my bad english, but i hope you understand, what i need to know :-)

best regards

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 10/01/2005 at 10:39, xxxxxxxx wrote:

Hi,

where are you modifying the elements? Is this is a "usual" dialog or are you talking about the Attributes Manager?

In a dialog you need to rebuild the group the elements are in. There´s an example in the SDK if I remember right.

For the AM, all you need to do is overloading GetDDescription and show/hide the elements in there. The AM will automatically update.

Some code snippets would surely help.

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 10/01/2005 at 11:23, xxxxxxxx wrote:

hi samir,
its the attribute manager.
 
here is the part of showing and hiding:

> if (stmode == 3)
>  {
>  BaseContainer* bc = description->GetParameterI(DescLevel(CARRIER_DISTANCE), ar);
>  if (bc)
>  { 
>   bc->SetBool(DESC_HIDE, FALSE);
>  }
>  bc = description->GetParameterI(DescLevel(CARRIER_WIDTH), ar);
>  if (bc)
>  { 
>   bc->SetBool(DESC_HIDE, FALSE);
>  }
>  }
> if (stmode == 2)
>  {
>  BaseContainer* bc = description->GetParameterI(DescLevel(CARRIER_WIDTH), ar);
>  bc = description->GetParameterI(DescLevel(CARRIER_WIDTH), ar);
>  if (bc)
>  { 
>   bc->SetBool(DESC_HIDE, FALSE);
>  }
>  }
> if (stmode == 1)
>  {
>  BaseContainer* bc = description->GetParameterI(DescLevel(BASE_THICKNESS), ar);
>  bc = description->GetParameterI(DescLevel(BASE_THICKNESS), ar);
>  if (bc)
>  { 
>   bc->SetBool(DESC_HIDE, TRUE);
>  }
>  }
> if (stmode == 4)
>  {
>  BaseContainer* bc = description->GetParameterI(DescLevel(BASE_OUTSIDE_WIDTH), ar);
>  bc = description->GetParameterI(DescLevel(BASE_OUTSIDE_WIDTH), ar);
>  if (bc)
>  { 
>   bc->SetBool(DESC_HIDE, FALSE);
>  }
>  bc = description->GetParameterI(DescLevel(BASE_OUTSIDE_HEIGHT), ar);
>  if (bc)
>  { 
>   bc->SetBool(DESC_HIDE, FALSE);
>  }
>  }
>  if (mode == 1)
>  {
>  //Second Level Group einblenden
>  BaseContainer* bc = description->GetParameterI(DescLevel(ID_SECOND_LEVEL_GROUP), ar);
>  bc = description->GetParameterI(DescLevel(ID_SECOND_LEVEL_GROUP), ar);
>  if (bc)
>  { 
>   bc->SetBool(DESC_HIDE, FALSE);
>  }
>  }
> if (mode == 2)
>  {
>  BaseContainer* bc = description->GetParameterI(DescLevel(ID_MULTIPLE_FLOOR_GROUP), ar);
>  bc = description->GetParameterI(DescLevel(ID_MULTIPLE_FLOOR_GROUP), ar);
>  if (bc)
>  { 
>   bc->SetBool(DESC_HIDE, FALSE);
>  }
>  }
>  if (dir == 0)
>  {
>  BaseContainer* bc = description->GetParameterI(DescLevel(SL_SPACE_GAP), ar);
>  bc = description->GetParameterI(DescLevel(SL_SPACE_GAP), ar);
>  if (bc)
>  { 
>   bc->SetBool(DESC_HIDE, TRUE);
>  }
>  
>  }
>  if (advgap)
>  {
>  BaseContainer* bc = description->GetParameterI(DescLevel(ID_MULTIPLE_FLOOR_ADV_GROUP), ar);
>  bc = description->GetParameterI(DescLevel(ID_MULTIPLE_FLOOR_ADV_GROUP), ar);
>  if (bc)
>  { 
>   bc->SetBool(DESC_HIDE, FALSE);
>  }
>  }
>  //---
>  flags |= DESCFLAGS_DESC_LOADED;
>  return ObjectData::GetDDescription(node, description, flags);
> }
as i can remember (i stopped developing 2003 and continue now) the dialog worked fine. now with 8.5 the dialog changes only, when i press a button or another item after i've choosen the type of elements i want to see from the dropdown....
 
i hope, this hels a little bit...
 
ralph

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 10/01/2005 at 11:29, xxxxxxxx wrote:

seems all to be correct.
Where do you get the stmode/mode etc. variables from? Are you getting those values within GetDDescription()?

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 10/01/2005 at 21:08, xxxxxxxx wrote:

these variables are global at the moment, but they get their value in
GetVirtualObjects() via "data->GetLong(QS_STMODE)"
edit:
i now put the "data->Get..." functions into "Message()" is that the right way ? it seems to work...

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 11/01/2005 at 05:09, xxxxxxxx wrote:

global values are no good idea for this as they might be filled at a later point in the pipeline. And most probably GetDDescription is called before GetVirtualObjects (as you seem to have noticed already).

I would fill them directly in GetDDescription if not necessary otherwise (or make them a private member variable if not needed otherwise) but if it works in the message function... (depends on when you´d need it).

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 11/01/2005 at 05:20, xxxxxxxx wrote:

"global values are no good idea for this as they might be filled at a later point in the pipeline"
i know, that this should not be, it is a "artefakt" from the beginning, they were defined only for testing. after that i forget to put them into my class. it is not necessary, thart they are global. i'll fix this.