.so исполняемые библиотеки в виде плагинов; способность какао? - PullRequest
0 голосов
/ 11 марта 2011

Я пишу плагин для интерфейса приложения обработки изображений OSX.Он основан на идее, что плагины должны быть максимально простыми, чтобы разработчик мог войти туда и написать эффект за считанные минуты, увидев пример кода.С этой целью примеры не требуют или не используют XCode;просто GCC.Все это работает очень гладко, и мы (вообще говоря) достигли всех целей дизайна.На самом деле мы создаем пользовательский интерфейс для плагинов, чтобы им не приходилось гибко и по-разному обрабатывать и распределять фазы по плагину, управлять его хранением, наличием и расположением в панелях управления и т. Д. - все это действительно крутые вещи.И вы можете написать полностью эффективный плагин примерно в шесть строк кода на языке Си.Так что все хорошо.

Теперь я обращаю внимание на то, что может потребоваться для разработчика, чтобы открыть окно CoCoa, если им нужен более сложный интерфейс, чем мы можем сгенерировать для них.Я нахожу, что не знаю достаточно о внутренней работе CoCoa, и у меня было время найти эту конкретную проблему где угодно, потому что XCode обычно скрывает от вас детали реализации.Итак, вот (наконец, извините) мой вопрос:

Для плагина, который хочет открыть окно CoCoa, что мне нужно передать им?Существует ли корневой дескриптор для услуг и ресурсов CoCoa?Или они могут просто связать с тем, с чем им нужно связаться, и открыть окно?

Прямо сейчас плагин получает только указатели на очень специфические типы данных изображений.Они никак не связаны с ОС.Если возможно, я бы хотел передать им дескриптор (ы), в котором они нуждаются, чтобы открыть окно CoCoa и обработать его OSX обычным способом, каким бы он ни был.Или, если им ничего не нужно, я бы хотел получить окончательный ответ.Ссылка на этот ответ была бы замечательной, поэтому я могу узнать об этом в любом случае.

Спасибо за любые идеи.

1 Ответ

1 голос
/ 11 марта 2011

Тебе ничего не нужно. Им придется связываться с платформой Cocoa и вызывать методы в NSWindow. Система автоматически выполняет тяжелую работу.

Edit:

Как использовать модальное окно:

NSWindow *theWindow; // create this in code, get it from a variable, or load it from a nib
NSInteger result = [[NSApplication sharedApplication] runModalForWindow:theWindow];
if(result == 0) {
    // success, process input from window
} else if(result == NSRunStoppedResponse) {
    // stopped with -stopModal instead of stopModalWithCode:. Possibly success
} else if(result == NSRunAbortedResponse) {
    // stopped with -abortModal, probably an error
}


//This method is the action for a button on the window
- (IBAction)closeModalWindow:(id)sender {
    [[sender window] orderOut:nil];
    [[NSApplication sharedApplication] stopModalWithCode:0]; // The 0 will become the result of the runModalForWindow: method. You can use anything else instead
}
...