Отследить удаление PageItem

  • Автор темы Автор темы vbatushev
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

vbatushev

Топикстартер
20 лет на форуме
Сообщения
2 242
Реакции
1 227
В общем, очередная задача — нужно отследить, когда удаляется PageItem на активном Spread (активном LayoutWindow). Собственно, у Spread нет событий, они есть у LayoutWindow и, в принципе, AFTER_SELECTION_ATTRIBUTE_CHANGED срабатывает, но как ухватить, то, что было выделено и теперь удалено...
 
А если Undo, и если изменилось количество PageItems, то действительно удалили,
а там и найти можно, и удалить.
 
Нет, такая схема не канает.
Мне прежде всего нужно получить ID удаленного объекта, который нужно передать в еще один обработчик, изменяющий специальную структуру.
Пока вырисовался такой прототип, но его надо под мои извращенные задачи еще приспособить:
PHP:
/*
* @Author: vbatushev
* @Date:   2015-11-06 08:23:59
* @Last Modified by:   vbatushev
* @Last Modified time: 2015-11-06 21:20:55
*/

#targetengine "session"

app.scriptPreferences.enableRedraw = false;
app.scriptPreferences.measurementUnit = MeasurementUnits.POINTS;

app.activeWindow.addEventListener(LayoutWindow.AFTER_SELECTION_CHANGED, lwAfterSelectionChanged, false);

var vbatushevSelectedPageItem = "";

function lwAfterSelectionChanged(event) {
    if (vbatushevSelectedPageItem == "") {
        var selectedPageItems = vbatushevSelectedPageItem.split(",");
        var arr = [];
        for (var a = 0; a < app.selection.length; a++) {
            if (isPageItem(app.selection[a])){
                var obj = {
                    item: app.selection[a].toSource(),
                    id: app.selection[a].id,
                    type: app.selection[a].getElements()[0].constructor.name
                }
                arr.push(obj.toSource());
            }
        }
        vbatushevSelectedPageItem = arr.join(";");
    } else {
        var selectedPageItems = vbatushevSelectedPageItem.split(";");
        for (var a = 0; a < selectedPageItems.length; a++) {
            var so = new Object(eval(selectedPageItems[a]));
            if (!evalObject(so.item)) {
                $.writeln("Объект " + so.type + "(" + so.id + ") удален");
            }
        }
        vbatushevSelectedPageItem = "";
    }

    function evalObject(str) {
        try {
            eval(str);
            return true;
        } catch(e) {
            return false;
        }
    }

    function isPageItem(obj) {
        try {
            var id = obj.id;
            return true;
        } catch(e) {
            return false;
        }
    }
}
 
Ну их с их безумной жадностью.
Дело даже не в этом.
Эта штука предполагает наличие установленных плагинов и хоть они в описании клянутся-божатся, что полученный код будет внедряем и переносим, причем, на кучу старых версий, предвижу страшный геморрой. :-(
 
Статус
Закрыто для дальнейших ответов.