[SOLVED] Dynamic Dropdown List
-
On 09/07/2018 at 21:02, xxxxxxxx wrote:
User Information:
Cinema 4D Version: R18
Platform: Windows ;
Language(s) : C++ ;---------
Hi all,I want to have a drop down list that I can change on the fly with user data. The list is a list of image extensions and I would like to allow users to put in there own custom extensions and then add this to this list.
The user clicks on custom, enters a custom extension and this is saved to a user configuration file (I have everything up to this point working fine). Where I'm stuck is how I can populate this list with the saved data so that the user can see their custom extensions each time they open a file.
You can see the code if that makes anything clearer on my GitHub page for the project, the files of interest here are SMDLoader.cpp/.h and fsmdloader.res
https://github.com/xNWP/Cinema-4D-Source-Tools
Thank you in advanced to anyone who can help point me in the right direction !!
-
On 09/07/2018 at 22:33, xxxxxxxx wrote:
Here's what I did to fill a dropdown box with filenames and a custom entry
Bool DisplayMode::GetDDescription(GeListNode* node, Description* description, DESCFLAGS_DESC& flags) { if (!description->LoadDescription(DISPLAYMODE_DESC_PLUGIN_ID)) return false; // === CHECKER === // fill the dropdown with all available checker types const DescID *singleid = description->GetSingleDescID(); DescID cid = DescLevel(CHECKER_TYPE, DTYPE_LONG, 0); if (!singleid || cid.IsPartOf(*singleid, nullptr)) // important to check for speedup c4d! { SortedStringArray checkerFilenames; // read the available checker bitmap filenames { ... } // add a fixed "Custom Checker" entry in the list, // separated from the file entries // (leave out separator when no file entries) BaseContainer listBC; listBC.SetString(CUSTOM_CHECKER_ID, "Custom Checker"); if (checkerFilenames.GetCount() > 0) listBC.SetString(-1, ""); // separator for (SortedStringArray::ConstIterator it = checkerFilenames.Begin(); it != checkerFilenames.End(); ++it) listBC.SetString(Int32(it - checkerFilenames.Begin()), *it); // add the items to the dropdown gadget BaseContainer comboBC = GetCustomDataTypeDefault(DTYPE_LONG); // re-use the original label from the description { BaseContainer* bc = description->GetParameterI(cid, nullptr); comboBC.SetString(DESC_SHORT_NAME, bc->GetString(DESC_SHORT_NAME)); } comboBC.SetInt32(DESC_ANIMATE, DESC_ANIMATE_OFF); comboBC.SetContainer(DESC_CYCLE, listBC); // store the data into the description if (!description->SetParameter(cid, comboBC, DescLevel(0))) return FALSE;
-
On 10/07/2018 at 01:32, xxxxxxxx wrote:
Hello,
as C4DS showed, you can edit the parameter description of a NodeData based element by implementing GetDDescription(). There are multiple manuals and example available:
An example of editing a drop down list is found in sculptdeformer.cpp.
best wishes,
Sebastian -
On 10/07/2018 at 15:52, xxxxxxxx wrote:
Thank-You both!
This has absolutely done the trick and is working flawlessly