Как реализовать Основанный на какао плагин Adobe Photoshop

Если Вы хотите переопределить метод базового класса, он должен быть объявлен как virtual. Метод переопределения в производном классе должен быть явно объявлен как override. Это должно работать:

public class BaseObject
{
    protected virtual String getMood()
    {
        return "Base mood";
    }

    //...
}

public class DerivedObject: BaseObject
{
    protected override String getMood()
    {
        return "Derived mood";
    }
    //...
}

Редактирование: я просто попробовал его в c# консольном приложении, и это компилирует. Таким образом, исходный код, который Вы используете, должен отличаться по некоторой крошечной, но важной части от того, что Вы отправили здесь.

Мой program.cs - это:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {    
            // leaving out your implementation to save space...    
        }
    }    

    public class SadObject : MoodyObject
    {
        protected override String getMood()
        {
            return "sad";
        }

        //specialization
        public void cry()
        {
            Console.WriteLine("wah...boohoo");
        }
    }

    public class HappyObject : MoodyObject
    {
        protected override String getMood()
        {
            return "happy";
        }

        public void laugh()
        {
            Console.WriteLine("hehehehehehe.");
        }
    }
}
8
задан 14 revs, 2 users 100% 13 July 2009 в 16:09
поделиться

2 ответа

Вы должны создать новую цель Loadable Bundle , которая содержит ваши перья и ваш код Какао. Добавьте пакетный продукт на этап Копирование ресурсов пакета вашего подключаемого модуля. Тогда код для подключаемого модуля фильтра, который загружает окно Какао с некоторыми элементами управления, будет выглядеть следующим образом:

Boolean DoUI (void) {

    // Create the CF Cocoa bundle
    CFBundleRef pluginBundle;
    CFURLRef cocoaBundleURL;
    pluginBundle = CFBundleGetBundleWithIdentifier(CFSTR("com.example.plugin"));
    cocoaBundleURL = CFBundleCopyResourceURL(pluginBundle, 
                                             CFSTR("Cocoa_bundle"), 
                                             CFSTR("bundle"), 
                                             NULL);
    CFBundleRef cocoaBundleRef;
    cocoaBundleRef = CFBundleCreate(kCFAllocatorDefault, cocoaBundleURL);
    CFRelease(cocoaBundleURL);

    // start Cocoa (for CS3)
    NSApplicationLoad(); 

    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    // load the cocoa bundle by identifier
    NSBundle* cocoaBundle;
    cocoaBundle = [NSBundle bundleWithIdentifier:@"com.example.plugin.cocoa"];

    // load the window controller from the bundle
    Class testControllerClass;
    testControllerClass = [cocoaBundle classNamed:@"MyWindowController"];

    MyWindowController* winController = [[testControllerClass alloc] init];
    [NSApp runModalForWindow:[winController window]];
    [[winController window] performClose:nil];
    [winController release];

    // release the bundle
    CFRelease(cocoaBundleRef);

    [pool release];

    return 1;
}

Это основано на трюке с пакетом Craig Hockenberry . Я все еще тестирую его, но он должен работать как на CS3, так и на CS4.

1
ответ дан 6 December 2019 в 02:26
поделиться

Я только начал работать над написанием плагина на основе Какао для CS4. На самом деле, информации по этой теме почти нет, и я выяснял это по ходу дела.

  • Начните с этого примера Apple и убедитесь, что вы скачали весь проект, потому что есть несколько мелких деталей отсутствует в тексте:

Carbon / Cocoa

  • Выберите один из примеров Photoshop SDK (я использовал ColorMunger) и не усложняйте его запуск, поэтому просто попробуйте заменить диалоговое окно «О программе», используя пример Apple в качестве вашего шаблона. Как только у вас будет эта работа без проблем с памятью, вы должны быть в пути.

Я был программистом на Java и Ruby в течение 10 лет, поэтому мой файл C / C ++ заржавел, и я только изучаю Objective C как я иду. На всякий случай я наткнулся на две "ловушки" ....

  • НЕ создавайте объект контроллера в вашем файле NIB / XIB. Потому что, основываясь на этом примере Apple, контроллер открывает файл NIB в своем методе инициализации, и вы получаете действительно интересный рекурсивный цикл
  • . Пример Apple встраивает материал Cocoa в приложение C на основе Carbon. Все примеры Adobe написаны на C ++. Не забывайте свой extern "C" {} в заголовочном файле.
0
ответ дан 6 December 2019 в 02:26
поделиться