System kopiowania i wklejania składa się z 3 elementów: obiektów ICopyable
, ICopyData
reprezentujących skopiowane obiekty i IPaster
obiektów, które mogą powodować kopiowanie danych z powrotem na obiekty możliwe do skopiowania. Każdy typ obiektu ICopyable
wymaga powiązanego elementu IPaster
, który może wkleić te dane.
Systemy te są wyświetlane użytkownikom za pomocą opcji menu kontekstowego i skrótów klawiszowych.
W nielicznych przypadkach warto zaimplementować niestandardowy mechanizm wklejania, który można skopiować lub zastosować niestandardowy mechanizm wklejania (np. wtyczka z funkcją wielokrotnego wyboru lub wtyczka do wklejania elementów na wielu kartach), ponieważ obiekty, które można skopiować, są renderowane i nie można dodawać nowych renderowanych obiektów do Blockly. Jedyne wyrenderowane obiekty, które mogą istnieć w obszarze roboczym, to bloki, dymki i komentarze do obszaru roboczego.
Implementowanie możliwego do skopiowania
Aby utworzyć możliwy do skopiowania obiekt, musisz zaimplementować interfejs ICopyable
.
Do wyboru
Interfejs ICopyable
rozszerza interfejs ISelectable
, co oznacza, że musisz też wdrożyć te metody i właściwości.
Możliwość zaznaczania jest wymagana, bo skróty klawiszowe analizują wybrany obiekt, by ustalić, co należy skopiować.
class MyCopyable implements ISelectable {
constructor(workspace) {
this.id = Blockly.utils.idGenerator.genUid();
this.workspace = workspace;
}
select() {
// Visually indicate this draggable is selected.
}
unselect() {
// Visually indicate this draggable is not selected.
}
}
Można skopiować
Sam interfejs ICopyable
ma tylko jedną metodę toCopyData
, która zwraca możliwą do serializowania reprezentację stanu obiektu możliwego do skopiowania w formacie JSON, która może zostać użyta do odtworzenia obiektu możliwego do skopiowania.
Kopiowanie musi też zawierać właściwość paster
, która zawiera zarejestrowaną nazwę ciągu znaków powiązaną z elementem wklejającym, który ma wkleić te skopiowane dane. Więcej informacji na temat wklejania znajdziesz w artykule Wdrażanie narzędzia do wklejania.
class MyCopyable implements ICopyable {
constructor(workspace, state) {
this.workspace = workspace;
this.myState = state;
}
toCopyData() {
return {
// This string matches the string used to register the paster.
paster: 'MY_PASTER',
state: this.myState,
};
}
}
Wdrożenie pastera
Aby utworzyć wklejacz, musisz zaimplementować interfejs IPaster
. Ma tylko jedną metodę paste
pobierającą dane skopiowane z obiektu, obszar roboczy, do którego coś ma zostać wklejony, oraz opcjonalną współrzędną, która określa lokalizację wklejenia.
class MyPaster implements IPaster {
paste(copyData, workspace, coordinate) {
return new MyCopyable(workspace, copyData.state);
// Optionally position the copyable at the passed coordinate.
// Optionally select the copyable after it is pasted.
}
}
Rejestracja
Po zaimplementowaniu wklejania musisz go zarejestrować, aby móc znaleźć tę usługę powiązaną z daną kopią danych z jej właściwości paster
.
// This string matches the string assigned to the 'paster' property.
Blockly.clipboard.registry.register('MY_PASTER', new MyPaster());