Przejdź do treści

Zdarzenia

Wtyczki reagują na aktywność edytora przez IEventBus. Zdarzenia to zwykłe struktury zdefiniowane w PluginEvents.h:

Zdarzenie Ładunek
DocumentOpened DocumentId, std::filesystem::path
DocumentClosed DocumentId
DocumentSaved DocumentId
TextChanged DocumentId, pos, addedBytes, removedBytes
SelectionChanged DocumentId
ActiveDocumentChanged DocumentId
AppAboutToQuit (brak)
CommandShortcutChanged commandId, sequence (nowy przenośny akord; "" = niezwiązane)

CommandShortcutChanged odpala się, gdy zmienia się efektywny skrót polecenia — przemapowanie przez użytkownika w mapperze skrótów, import/reset mapy klawiszy albo włączenie/zdjęcie tłumienia konfliktu. Polecenia powiązane z menu nie potrzebują niczego (host przepina ich akcję); polecenia zarejestrowane ze scope = command_scope::kPluginWindow subskrybują i ponownie stosują sekwencję do własnych widżetów (zobacz Polecenia i menu).

Subskrypcja

subscribe to szablon zwracający Subscription (RAII). Trzymaj subskrypcję przy życiu jako pole składowe tak długo, jak callback ma się odpalać; jej zniszczenie wypisuje z subskrypcji.

m_sub = ctx.events().subscribe<MTE::plugin::DocumentSaved>(
    [this](const MTE::plugin::DocumentSaved& e) {
        // react to e.id ...
    });
class IEventBus {
public:
    template <class Event>
    Subscription subscribe(std::function<void(const Event&)> cb);
    // Forwards to a type-erased subscribeRaw(std::type_index, ...) internally.
};

Tip

Trzymaj każdą Subscription jako pole składowe wtyczki, aby wszystkie callbacki sprzątały się automatycznie w shutdown().