Панелі перегляду для даних, виведеного та інших результатів

Попередній перегляд результатів (HTML)

Примітка

У цьому розділі ви знайдете обговорення додавання функціональної можливості попереднього перегляду до додатків для створення тексту або HTML для друку. Рекомендуємо вам перед прочитанням цього розділу, ознайомитися із розділом щодо попереднього перегляду креслень.

Створення попереднього перегляду виведення у форматі HTML дуже подібне до створення попереднього перегляду креслення. У цьому випадку просто переконайтеся, що preview() створює відповідні команди rk.print()/rk.results(). Втім, загалом, варто пропустити інструкції заголовка у попередньому перегляді. Ось спрощений приклад:

<!-- У файлі XML додатка -->>
        <dialog label="Import CSV data" >
                <browser id="file" type="file" label="File name"/>
                <!-- [...] -->>
                <preview id="preview" mode="output"/>
        </dialog>
>
                

Зауважте специфікацію mode="output" у елементі <preview>.

// У файлі JS додатка
        function preview () {
                // створює код, використаний для попереднього перегляду
                printout (true);
        }

        function printout (is_preview) {
                // створює заголовок, лише якщо is_preview==false
                if (!is_preview) {
                        new Header ("Це надпис").print ();
                }
                echo ('rk.print (result)');
        }
                

Попередній перегляд (імпортованих) даних

Примітка

У цьому розділі ви знайдете обговорення додавання функціональної можливості попереднього перегляду до додатків для створення (імпортування) даних. Рекомендуємо вам перед прочитанням цього розділу, ознайомитися із розділом щодо попереднього перегляду креслень.

Створення попереднього перегляду імпортованих даних (будь-яких даних, які може обробляти rk.edit()) дуже подібне до створення попереднього перегляду креслення. У наведеному нижче спрощеному прикладі створюється попередній перегляд даних:

<!-- У файлі XML додатка -->>
        <dialog label="Import CSV data" >
                <browser id="file" type="file" label="File name"/>
                <!-- [...] -->>
                <preview id="preview" active="true" mode="data"/>
        </dialog>
>
                

Зауважте, що цього разу елемент <preview> визначає mode="data". active="true" просто робить попередній перегляд типово активним.

// У файлі JS додатка
        function preview () {
                // створює код, що використовується для попереднього перегляду
                calculate (true);
        }

        function calculate (is_preview) {
                echo ('imported <- read.csv (file="' + getString ("file") /* [+ options] */);
                if (is_preview) {
                        echo ('preview_data <- imported\n');
                } else {
                        echo ('.GlobalEnv$' + getString ("name") + ' >- imported\n');
                }
        }

        function printout () {
                // [...]
        }
                

Знову ж, функція preview() створює майже той самий код, що і функція calculate(), отже ми створимо допоміжну функцію doCalcuate(), яка міститиме спільні частини цих функцій. Найважливішим є те, що вам слід пов’язати імпортовані дані з об’єктом із назвою preview_data (у межах поточного середовища, local). Решту дій буде виконано автоматично (грубо кажучи, RKWard викличе rk.edit(preview_data), що містить виклик .rk.with.window.hints()).

Примітка

Хоча панелі попереднього перегляду є чудовою можливістю програми, вони споживають системні ресурси. У випадку попереднього перегляду даних можливі ситуації, коли попередній перегляд призводитиме до серйозних проблем із швидкодією. Таке трапляється, якщо імпортують величезні набори даних (які надто великі, щоб їх можна було відкрити для редагування у вікні RKWard), хоча і «звичайні» набори даних може бути імпортовано з помилками, коли створюється величезна кількість рядків або стовпчиків. Наполегливо рекомендуємо вам обмежити preview_data до розмірності, за якої попередній перегляд буде корисним без небезпеки створення значних проблем із швидкодією (наприклад, матриці з 50 рядками і 50 стовпчиками має бути більш ніж достатньо у більшості випадків).

Нетипові панелі попереднього перегляду

Елементом <preview> можна скористатися для створення панелей попереднього перегляду для будь-яких типів вікон «документів», які можна долучити до робочого простору RKWard. Окрім креслень та вікон даних, можна створювати попередні перегляди файлів HTML, скриптів R та вікна резюме об’єктів. Для останніх вам слід скористатися елементом <preview mode="custom">.

Якщо ви прочитали розділи із описом створення попереднього перегляду креслень та даних, вам вже знайомі загальні кроки цієї процедури, але для створення «нетипових» попередніх переглядів доведеться виконати трохи більше ручної роботи. Найважливішою функцією у цьому випадку буде функція R rk.assign.preview.data(). У наведеному нижче короткому фрагменті коду показано, як має виглядати створений вами код R для додатка створення текстового файла:

## Буде створено у розділі коду preview() додатка
        pdata <- rk.get.preview.data("SOMEID")
        if (is.null (pdata)) {
                outfile <- rk.get.tempfile.name(prefix="preview", extension=".txt")
                pdata <- list(filename=outfile, on.delete=function (id) {
                        unlink(rk.get.preview.data(id)$filename)
                })
                rk.assign.preview.data("SOMEID", pdata)
        }
        try ({
                cat ("This is a test", pdata$filename)
                rk.edit.files(file=pdata$filename)
        })
                

Тут ми маємо отримати значення SOMEID з властивості id елемента <preview>. Тобто, використовуємо getString ("preview.id") у файлі .js додатка.