On Aug 20, 2004, at 1:34 PM, Sherm Pendley wrote:

On Aug 20, 2004, at 3:31 PM, Alan Olsen wrote:

I am opening it as a modal dialog box. What I am trying to do is get it to act like "OpenPanel" or the alert dialog. Those return to the calling process when they are done and not before.

That *is* how a modal session acts. For example, let's assume a panel that's connected to the outlet named MyPanel. In that panel you have a table view named TableView. In some action method, you open the panel like this:


my $row = NSApplication->sharedApplication()->runModalForWindow($self- >myPanel());

How do you set the datasource for tableview. I usually call it right after displaying the window. I am not certain what procedure to put it in since there is not a constructor for the window that I am aware of.

The call to runModalForWindow: won't return until the modal session is stopped with stopModal, stopModalWithCode:, or abortModal. Let's assume you want it to return the selected row in TableView. In the action handler for the OK button, you'd have something like this:


sub okClicked : Selector(okClicked:) ArgTypes(@) ReturnType(v) {
        my ($self, $sender) = @_;
        my $rowSel = $self->tableView()->selectedRow();
        NSApplication->sharedApplication()->stopModalWithCode($rowSel);
}

This does not want to kill the window. I am looking for the description in the api docs. It looks like it is missing a reference to what window needs to be destroyed.


It does act as it should, however.


If you need to do something more complex, like return a string or object, just store it in an instance variable and use stopModal instead of returning it directly with stopModalWithCode.


I have tried waiting in a loop until a message comes back, but that gives me the technicolor pizza.

Like I said, that's by design. If you're spinning in a tight loop, you're not responding to events, and that means pizza.

Mmmm... Pizza....



Reply via email to