Re: NSPathControl (popup) - programatically show Choose dialog
Re: NSPathControl (popup) - programatically show Choose dialog
- Subject: Re: NSPathControl (popup) - programatically show Choose dialog
- From: Jonathan Taylor <email@hidden>
- Date: Tue, 17 Mar 2015 11:00:51 +0000
On 17 Mar 2015, at 10:53, <email@hidden> wrote:
> Also see the sample code.
> It's a lot easier to see how the API is expected to be used.
> The docs are a little thin in their descriptions.
>
> https://developer.apple.com/library/mac/samplecode/ObjectPath/Introduction/Intro.html
Thanks very much for pointing me to that, that's interesting. However, it does rather emphasize my point about consistency between programatically bringing up the Open dialog and doing it through the path control. In that demo code, if you set the control type to 'popup' then:
- Clicking on "set path" brings up an open panel on the window, that has been customized with the word "Choose", etc
- Clicking on the path popup and selecting "Choose" brings up an open dialog that has been customized using a separate chunk of duplicated code.
> Well the sample code illustrates that the delegate method should be the place to configure the open panel.
As I say, there are two separate places in the code where the configuring takes place, to handle these two different ways of setting the path. I just feel it would be nice if "set path" could trigger the same code as going through the path popup. The fact that Apple's own sample code doesn't do this is certainly a good hint that it probably isn't meant to be possible, though!
>> On 2015/03/17, at 19:36, email@hidden wrote:
>>
>> Have you tried just displaying an NSOpenPanel yourself then setting the selected URL returned to the path control's URL property?
>>
>> Sent from my iPhone
>>
>>> On 2015/03/17, at 19:16, Jonathan Taylor <email@hidden> wrote:
>>>
>>> OK, I've got part of the way to a solution, but haven't got it fully working yet. Perhaps the weekday crowd here can advise?
>>>
>>> I've realised that I can get my path control to performClick:
>>>
>>> // When adding a new sequence we immediately prompt the user to select a folder to use for image files
>>> simulatingPathControlClick = true;
>>> [folderSelectPopup performClick:self];
>>> simulatingPathControlClick = false;
>>>
>>> This is a good start, because I see my delegate function being called:
>>>
>>> -(void)pathControl:(NSPathControl*)pathControl willPopUpMenu:(NSMenu*)menu
>>> {
>>> if (simulatingPathControlClick)
>>> {
>>> [menu performActionForItemAtIndex:0];
>>> }
>>> }
>>>
>>> This seems to be the only way of getting access to the menu (folderSelectPopup.menu always seems to return nil...). Now that I have access to the menu I can get it to performActionForItemAtIndex. That is basically what I'm trying to do here. However it doesn't quite work as it should. The code as written here brings up the Open dialog, which works as intended, but I am calling it sooner than I should (in willPopUpMenu; the menu has not yet popped up!). As a result, after the user dismisses the Open dialog, THEN the "choose" menu on the path control pops up, which is annoying and illogical for the user.
>>>
>>> If alternatively I wrap the performClick in a dispatch_async on the main thread (i.e. it should execute after the menu pops up) then something weird happens - the menu appears and then the Open dialog pops up (as I had hoped), but no file system items appear in there. I have a suspicion this has something to do with funny run-loop states when tracking menus, but I don't know what to do about it!
>>>
>>>
>>> I don't know if what I am trying to do is an appropriate way of going about things, but hopefully it gives a clearer idea of what I am trying to achieve here (bring up the Open dialog, just as if the user had selected "Choose..." themselves). And hopefully somebody can suggest how I should tweak what I am doing so it behaves correctly?
>>>
>>> Thanks again
>>> Jonny
>>>
>>>
>>>> On 15 Mar 2015, at 13:18, Jonathan Taylor <email@hidden> wrote:
>>>>
>>>> I have a dialog which allows the user to select a folder containing data to be processed, set various parameters that affect the processing, and displays the result of the analysis. There is an NSPathControl (popup) to select the folder. Inevitably the first thing the user does is choose a folder (and of course they have the option of changing this later). I would like to simplify the workflow by automatically popping up the "open" dialog when the main dialog is first opened, as if the user has clicked on the path popup and selected "choose". However, I can't work out an obvious way of triggering the path control to behave as if the user has manually selected "choose" from the popup.
>>>>
>>>> Is there a way I can do that? I could of course throw up my own "open" dialog and programatically set the URL associated with the path control, but that seems like unnecessary duplication of code when I could just call something like [myPathControl displayChooseDialog] (if such a method existed!).
>>>>
>>>> Can anyone suggest a way of doing what I want here?
>>>>
>>>> Thanks for any suggestions
>>>> Jonny
>>>
>>> _______________________________________________
>>>
>>> Cocoa-dev mailing list (email@hidden)
>>>
>>> Please do not post admin requests or moderator comments to the list.
>>> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>>>
>>> Help/Unsubscribe/Update your Subscription:
>>>
>>> This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden