[sisyphus] I: Пишем модули для alterator [services r/?]

Michael Shigorin =?iso-8859-1?q?mike_=CE=C1_osdn=2Eorg=2Eua?=
Вт Апр 18 23:27:28 MSD 2006


update: при помощи lioka допетрил, как бы на свои две кнопочки 
чего повесить -- примерно так:

; это заведомо неправильно, т.к. одинаковые списки... потом
(hbox
   (document:id enabled (listbox rows (woo-list-names '/services)))
   (document:id disabled (listbox rows (woo-list-names '/services))))

(hbox
   (button "Disable"
      (on-click (woo-write '/services 'command 'disable 'param (enabled text))))
   (button "Enable"
      (on-click (woo-write '/services 'command 'enable 'param (disabled text)))))

Соответственно разница относительно

   (button "Write"
      (on-click (woo-write '/services 'param (lb text))))

-- в том, что передаётся дополнительный параметр (чего ж меня 
и плющило -- 'param есть синтаксис, библиотека или изменяемое?),
и этот 'command при помощи backend3.sh в шелл-бэкенде можно
забрать как $in_command:

	write)  
		echo "param=$in_param" > ~/tmp/backend-out
		echo "command=$in_command" >> ~/tmp/backend-out

Получаем в ~/tmp/backend-out что-нить вроде

param=cups
command=enable

Порой для простоты старта разработки достаточно не упростить,
а доходчиво объяснить на пальцах :)

On Tue, Apr 18, 2006 at 05:56:39PM +0400, Stanislav Ievlev wrote:
> > > > Как хотя бы примотать кнопки "enable"/"disable"
> > > Давай по порядку.  1. Расскажи какие кнопки и куда
> > "Для начала" -- две кнопки.  У тебя в примерах фигурирует
> > одна кнопка с woo-write по одному адресу, а как эти сущности
> > размножаются (ведь нет woo-write2, под которую можно
> > подсунуть обработчик "write2" в backend3?) -- непонятно.
> Ну как кнопки размножаются я думаю понятно - повторением
> конструкции (button ...) А какие действия размножить хочется?

Enable и Disable.  Любое из них сейчас сделать могу, чуточку
перекрасив Write, а вот два -- не пойму, что синтаксис или
библиотека, а что -- переменная.

> > Наверное, просто недочитал или недопонял прочитанное, но там
> > же рядом ссылка на "читать про сложнее" была бы в тему.
> > > 2. Что такое списки с <</>> ? И зачем они нужны?
> > Ну, "переносилки", как у тебя в Psi в настраивалке тулбаров:
> >  on       off
> > +---+    +---+
> > | a |    | b |
> > | c | << | e |
> > | d | >> |   |
> > |   |    |   |
> > +---+    +---+
> Ну можно посмотреть как это сделано в standalone или alterator-xkb
> Есть операции для удаления и добавления элементов с список.

Даже так...

> Первая зовётся как (<имя listbox> remove <номер строки>)

Т.е. надо где-то держать массив, причём всегда и точно
соответствующий тому, что передано, и самому про нему искать?
(не особо страшно, но напрашивается на хотя бы remove text
в тех случаях, когда элементы гарантированно уникальны -- 
e.g. это пакеты или сервисы)

> Вторая (<имя listbox> append-row <текст или текст с картинкой>)

Спасибо.

-- 
 ---- WBR, Michael Shigorin <mike на altlinux.ru>
  ------ Linux.Kiev http://www.linux.kiev.ua/
----------- следующая часть -----------
(document:surround "/std/frame")

(label "Services")

(vbox(
		(label "Enabled")
		(document:id enabled (listbox rows (woo-list-names '/services)))))
(vbox(
		(label "Disabled")
		(document:id disabled (listbox rows (woo-list-names '/services)))))

(hbox
  (button "Disable"
			 (on-click (woo-write '/services 'command 'disable 'param (enabled text))))
  (button "Enable"
			 (on-click (woo-write '/services 'command 'enable 'param (disabled text)))))

(vbox (label "test"))

(groupbox "group" (layout-policy 100 100)
		   (vbox
		     (groupbox "group1" (layout-policy -1 50 left))
		     (groupbox "group2" (layout-policy -1 20))
		     (groupbox "group3" (layout-policy -1 30 right))))

(frame:buttons-view
  (button "Quit" (on-click (document:end))))
----------- следующая часть -----------
#!/bin/sh

CHKCONFIG=/sbin/chkconfig
INITDIR=/etc/rc.d/init.d

. /usr/share/alterator/build/backend3.sh

on_message()
{
        case "$in_action" in
                list)
			shift; service="$1"
			[ "$service" != "/" ] || service="*"
                        echo '( '
			#find -L "$INITDIR" -mindepth 1 -maxdepth 1 -type f -perm +0111 -name "$service" -printf '("%f") ' | sort -r
			find -L "$INITDIR" -mindepth 1 -maxdepth 1 -type f -perm +0111 ! -name '*.rpm*' ! -name '*~' -printf '("%f") ' | sort -r
                        echo ')'
                        ;;
                write)
                        echo "param=$in_param" > ~/tmp/backend-out
                        echo "command=$in_command" >> ~/tmp/backend-out
                        echo "()"
                        ;;
        esac
} 
                         
message_loop


Подробная информация о списке рассылки Sisyphus