Hi Hosam
Does it need to be a dropdown?
If it does need to be a dropdown with only the specified page type, you'll need to create a custom form component. A good example of this is actually on the Kentico documentation too, it's doing pretty much what you're wanting to do, see here:
https://docs.kentico.com/k12sp/developing-websites/form-builder-development/developing-form-components/using-a-dynamic-data-source-with-selector-components
If you're not fussed about it being a dropdown, a good alternative is to just use Kentico 12 Service Pack's Page Selector. Only issue with using this is that I don't think there's an easy way to filter down to just the one page type. Example code from the documentation:
// Assigns a selector component to the Pages property
[EditingComponent(PageSelector.IDENTIFIER)]
// Limits the selection of pages to a subtree rooted at the 'Products' page
[EditingComponentProperty(nameof(PageSelectorProperties.RootPath), "/Products")]
// Returns a list of page selector items (node GUIDs)
public IList<PageSelectorItem> Pages { get; set; }
The above initialises a page selector form component which bring up a modal to select a page using the tree. If you use the RootPath attribute then you can filter the tree to just be that part of the site's tree, so what you could do if you're placing all of your CallToAction pages in the same folder (e.g. "Call To Actions"), then you could set a RootPath like this:
[EditingComponentProperty(nameof(PageSelectorProperties.RootPath), "/Call-To-Actions")]
With this form component returning an IList<PageSelectorItem>
rather than just the NodeGuid you're looking to store, in your widget controller to you'll need to access it like this:
// Retrieves the node GUID of the selected page from the 'Pages' property
Guid? selectedPageGuid = GetProperties().Pages?.FirstOrDefault()?.NodeGuid;
The widget controller can then use this NodeGuid and the Kentico generated class/provider to get the correct document for use within the widget.