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.


Log in to reply