# Основи роботи з &kommander;

## Принципи

&kommander; від початку було розроблено на основі новітньої концепції, яка відрізняє цю програму від інших інструменті з візуальної розробки компонування вікон програм. Зазвичай, за допомогою таких інструментів ви можете створювати діалогові вікна і, можливо, інтерфейс головного вікна. Звичайно ж, у інтерфейсі головного вікна типово має бути передбачено меню, панелі інструментів, смужку стану і робочу область програми. Діалогові вікна є дочірніми вікнами, у яких, типово, меню не передбачено і які мають таку назву через своє основне призначення: створити діалог або обмін інформацією між вами і головною програмою. Елементи діалогового вікна називаються віджетами, робота вашої програми базується на цих віджетах. Структуру &kommander; відрізняє те, що вам не потрібно нічого запрограмовувати. У &kommander; використано концепцію пов’язування тексту з віджетами діалогового вікна. Спочатку цей текст називався Пов’язаним текстом, але теперішньою його назвою є Текст &kommander;. Віджети у діалогових вікнах &kommander; можуть включати вміст інших віджетів за посиланням, а кожен віджет може посилатися на власний вміст за допомогою спеціальних функцій, які виглядають як @widgetText. У &kommander; спеціальні функції — це команди з особливим призначенням. Отже, якщо ви створили діалогове вікно з двома віджетами LineEdit і назвали перший FirstName, а другий — LastName, ви можете створити кнопку і вказати для її тексту &kommander; значення Мене звати @FirstName @LastName. Вам потрібно буде вказати @widgetText у віджетах імені (FirstName) і прізвища (LastName). Запам’ятали? Нам потрібно повідомити &kommander; про те, що слід послатися на вказаний текст. Ви зможете запустити Konsole, яка виведе відповідний рядок. Отже, посилання на ім’я буде знайдено за такою схемою: @FirstName -> отримати з віджета з назвою FirstName(@FirstName) -> @widgetText -> отримати вміст віджета LineEdit. Отже у нашому випадку @FirstName поверне Eric: @FirstName -> @widgetText -> Eric.

Ми описали просту схему основних дій &kommander;. Набагато цікавіше те, що з усім цим можна зробити. По-перше, слід зауважити, що, порівняно зі звичайним підходом заснованих на певній мові програмування інструментів, у &kommander; не потрібно використовувати команди мови програмування для визначення дій. Таким чином за допомогою &kommander; можна пришвидшити розробку. Для кінцевого користувача такий підхід є набагато простішим за вивчення конструкцій мови. Загалом кажучи, це означає, що ви можете зосередитися на вашому завданні замість постійного зазирання до підручника з відповідної мови. Першим питанням, яке задають люди після того, як дізнаються про інструмент на зразок &kommander;, є А де можна скористатися цим інструментом? Виявляється керування за допомогою рядків зустрічається повсюдно.

Отже, що може робити &kommander;? Нижче наведено список основних можливих дій. &kommander; може:

1. Передає рядки викликаній програмі через stdout.

2. Викликати виконувані файли програм.

3. Використовувати &DCOP; для взаємодії з програмами &kde;

Якщо ви не є програмістом, ви мабуть хочете дізнатися, що означають всі ці терміни, пов’язані з побудовою програм. Щодо першого пункту: якщо ви запустили &kommander; з консолі, консоль є програмою, яка викликає іншу програму. Тут ми маємо справу зі зв’язком батьківська програма - дочірня програма. Надсилання повідомлення до консолі виконується за допомогою стандартного виводу (stdout) дочірньої програми, цей вивід названо так через те, що існує ще вивід помилок. Це цікаво, тому що деякі програми, на зразок &quantaplus;, використовують stdout для отримання інформації від програм, які вони запускають. Отже діалогові вікна &kommander; можуть виводити текстові рядки безпосередньо до редактора &quantaplus;, якщо ці вікна викликано з &quantaplus;. Це означає, що діалогові вікна &kommander; можуть бути корисними додатками до програм.

У другому пункті згадано про виклик виконуваного файла програми. Всі програми, які запускаються у вашій системі має бути представлено виконуваними файлами. Навіть скриптова програма, яка запускається за допомогою інтерпретатора скриптів, з технічної точки зору є виконуваним файлом. &kommander; може виконувати команди так само, як виконує ці команди консоль, навіть якщо ви запускаєте ці команди за допомогою меню. Отже, якщо ви, наприклад, бажаєте відкрити вікно &GIMP;, вам потрібна кнопка, яка породжує рядок gimp і передає його спеціальній функції так: @exec(gimp). Ви можете переконатися: буде відкрито саме вікно &GIMP;. Ви так само можете запустити ls -l, але вивід цієї команди вам вдасться побачити, лише якщо ви відкривали діалогове вікно з консолі.

Третій пункт є насправді дуже цікавим. &DCOP; є скороченням від &kde; Desktop COmmunication Protocol (стільничний протокол обміну інформацією). Запустіть програму kdcop і познайомтеся з можливостями цього протоколу. Ви швидко зможете переконатися, що будь-якою програмою &kde;, яку було створено згідно стандартів, можна керувати за допомогою &DCOP;, а належно розробленою програмою можна повністю керувати за допомогою цього протоколу. За допомогою &DCOP; ви можете надсилати програмі запити щодо будь-яких відомостей, встановлювати значення віджетів тощо. У цьому підручнику є окремий розділ, присвячений &DCOP;. &kommander; може надсилати команди &DCOP; будь-якій програмі &kde;, а також сам керуватися за допомогою &DCOP;. Фактично, ви можете надсилати команди &DCOP; з командного рядка будь-якій програмі &kde;. Ну то й що? А те, що, якщо ви спробуєте виконати довільну кількість команд, ви побачите, що &DCOP; командного рядка добре працює лише для коротких команд, і створює затримки, наприклад, якщо виклики надходять з циклу, який виконується декілька сотень разів. Ось чому у &kommander; передбачено спеціальну функцію @dcop, яка працює приблизно у 1000 разів швидше. Оскільки &kommander; може надсилати і отримувати команди &DCOP;, &DCOP; можна використовувати для написання скриптів &kommander;. Ось чому у програмі передбачено локальну спеціальну функцію &DCOP;, @ldcop, за допомогою якої можна значно скоротити довжину локальних команд.

Оце і всі загальні концепції &kommander;? Ні, але те, про що ми говорили вище, допоможе вам зрозуміти спосіб, у який працює програма, вам стане зрозумілішим подальший виклад матеріалу цього підручника. Ось іще декілька речей. За допомогою сигналів і слотів &kommander; працює з подіями. Слово «подія» у програмі, зазвичай, означає, що щось сталося, наприклад було створено віджет або було змінено текст віджета. Кожна з таких змін призводить до надсилання сигналу, ви можете з’єднати ці сигнали зі слотом, який їх отримуватиме, а потім виконуватиме певні дії у разі настання події. Одним з застосувань цієї схеми у &kommander; є близнюк тексту &kommander;, текст заповнення. Текстом заповнення буде заповнено віджет, коли вікно викличе цей текст. Так само, як і у тексті &kommander;, у тексті заповнення можуть міститися текстові рядки або скрипти.

Ну ось ви і познайомилися з базовими елементами, тепер можна починати користуватися &kommander;. Автори намагалися не збільшувати без потреби кількість спеціальних функцій і широко використовувати &DCOP;. Ідея полягала у тому, щоб &kommander; залишався потужним і водночас узгодженим і спрямованим на мету. Ви можете вбудовувати до &kommander; будь-яку скриптову мову, якщо це потрібно, навіть можете використовувати декілька скриптових мов у діалоговому вікні. Решту відомостей цього документа викладено у сподіванні, що ви добре ознайомилися з елементами та термінами, описаними у цьому розділі. За допомогою прикладів та інструкцій вам буде легше зрозуміти можливості &kommander;.

&editor;

## Виконавець

Виконавець, програма з назвою kmdr-executor, виконує скрипти &kommander;. Вона завантажує файли `.kmdr` і у динамічному режимі створює повноцінне діалогове вікно.

### Виконавець для програмістів

Розробники програм, які пишуть мовою C++, можуть з легкістю скористатися класом KmdrDialogInstance у своїх програмах C++, і таким чином вбудувати до програми функціональні можливості виконання скриптів, без запуску зовнішньої програми-виконавця. Виграш часу на створенні стандартного діалогового вікна буде мінімальним, але створення середовища програми &kde; може затримати виконання скрипту приблизно на секунду.

## Створення діалогового вікна