OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 02:54

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Текст как интерфейс
СообщениеДобавлено: Четверг, 24 Сентябрь, 2009 22:13 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Кнопка как коммандер - для конечного приложения

Коммандеры - это хорошо, все мы это знаем.

Это хорошо даже и для обычных пользователей, хотя обычные пользователи не всегда об этом знают :)

Только вот "совсем конечного..." пользователя... не всегда хочется пугать видом команды после коммандера. Хочется, чтоб была просто клюкабельная пимпочка, а после - текст для обработки.

Вуаля. Делаем где-нибудь процедуру:

Код:
   PROCEDURE GetButtonPar*;
      VAR txt: TextModels.Model;
            beg, end: INTEGER;
            rd: TextModels.Reader;
            v: Views.View;
   BEGIN
      IF (Controls.par # NIL) & (Controls.par.context # NIL) & (Controls.par.context IS TextModels.Context) THEN
         txt := Controls.par.context(TextModels.Context).ThisModel();
         beg := Controls.par.context(TextModels.Context).Pos() + 1;
         rd := txt.NewReader(NIL);
         rd.SetPos(beg);
         rd.ReadView(v);
         WHILE (v # NIL) & ~ ( Services.SameType(v, Controls.par) ) DO
            rd.ReadView(v)
         END;
         IF v # NIL THEN
            end := v.context(TextModels.Context).Pos()
         ELSE
            end := txt.Length()            
         END;
         IF beg < end THEN
            NEW(DC.par);
            DC.par.text := txt;
            DC.par.beg := beg;
            DC.par.end := end
         END
      END
   END GetButtonPar;


Далее мы можем вставлять вместо коммандера кнопку, в Link которой перед основным действием вписываем GetButtonPar.
Закрываем командную строчку пустой кнопкой (ну или другой командной, всё как у обычных коммандеров).

(Конечно, для компиляции никто кнопку использовать не будет; это так, сляпано для примера...)


Вложения:
1.PNG
1.PNG [ 2.09 КБ | Просмотров: 27790 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 24 Сентябрь, 2009 22:19 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Командную строчку, кстати, можно разбавлять пояснениями с помощью обычного Caption, т.к. при разборе строчки сканер (и всякие модули In) будет эти вьюшки игнорировать.


Вложения:
2.PNG
2.PNG [ 2.62 КБ | Просмотров: 27798 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 25 Сентябрь, 2009 11:09 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
А чем ссылкоподобные команды не нравятся?
<WorkReportCfg.Do;StdCmds.OpenToolDialog('Work\Rsrc\ReportCfg','ReportCfg')>Конфигурация отчётов в БД<>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 25 Сентябрь, 2009 11:54 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Наконец-то хорошая тема. "Текст как интерфейс".
Valery Solovey писал(а):
А чем ссылкоподобные команды не нравятся?
<WorkReportCfg.Do;StdCmds.OpenToolDialog('Work\Rsrc\ReportCfg','ReportCfg')>Конфигурация отчётов в БД<>
А как тут доступ к текущему тексту с вводимыми данными?
Штука в том, что "активный" текст гораздо удобней обычной формы ввода в плане гибкости организации данных.
---
Кстати, заодно пример бы как в текст вставить слот для ввода числа, например.

Всю эту тему ("Текст как интерфейс") хорошо бы тут проработать.
(И, возможно, ветку переименовать соответственно?)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 25 Сентябрь, 2009 12:03 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Info21 писал(а):
Valery Solovey писал(а):
А чем ссылкоподобные команды не нравятся?
<WorkReportCfg.Do;StdCmds.OpenToolDialog('Work\Rsrc\ReportCfg','ReportCfg')>Конфигурация отчётов в БД<>
А как тут доступ к текущему тексту с вводимыми данными?
Аналогично, через StdLinks.par, но
- нужно искать закрывающий "линк"
- придумать чем ограничивать параметры после него. В примере выше ограничивается таким же контролом.
Info21 писал(а):
Всю эту тему ("Текст как интерфейс") хорошо бы тут проработать. (И, возможно, ветку переименовать соответственно?)
Поддерживаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 22 Октябрь, 2009 10:58 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Долго думал, и додумался:

В модуль типа In
(сам In я предпочитаю не трогать по той же причине, по какой его не трогали авторы ББ; у меня для этих целей есть стандартная замена i21sysIn)
добавить средство типа "открыть входной поток"
и оно делает потоком ввода выделенный фрагмент текста в окне с фокусом (точнее, его копию).

А потом программа (которая вызывается из меню или командиром в другом документе) не открывает поток, а только, если надо, читает с начала (Restart).
Все старые рутины (т.е. уже налаженные программы с командирами и данными, организованными по старой схеме) сохраняются и работают.

Плюс явно экспортирован сканер, чтобы полноценно сканить поток ввода.

Код:
DEFINITION i21sysIn;

   IMPORT TextModels, TextMappers;

   VAR
      Done-: BOOLEAN;
      done-: BOOLEAN;
      scanner: TextMappers.Scanner;

   PROCEDURE Char (OUT ch: CHAR);
   PROCEDURE Int (OUT i: INTEGER);
   PROCEDURE LongInt (OUT l: LONGINT);
   PROCEDURE Name (OUT name: ARRAY OF CHAR);
   PROCEDURE Open;
   PROCEDURE OpenText (text: TextModels.Model; beg, end: INTEGER);
   PROCEDURE Real (OUT x: REAL);
   PROCEDURE Restart;
   PROCEDURE String (OUT str: ARRAY OF CHAR);

END i21sysIn.


Прилагаю текущий вариант i21sysIn (он во всех комплектах на предполагаемом диске, их я попозже отдельно выложу на сайте, пусть бета-тестеры трапы поищут, чтобы сразу исправить).


Вложения:
i21sysIn.txt [4.47 КБ]
Скачиваний: 986


Последний раз редактировалось Info21 Четверг, 22 Октябрь, 2009 11:03, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 22 Октябрь, 2009 11:01 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
А для вывода пришел пока к ... выводу, что пускай в Лог печатает. Взять оттуда не проблема, а потенциальная путаница в противном случае может быть большая (если не видно, куда идет выдача, то легко запортить че-нить).


Последний раз редактировалось Info21 Четверг, 22 Октябрь, 2009 19:11, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 22 Октябрь, 2009 11:18 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Info21 писал(а):
Код:
DEFINITION i21sysIn;

   IMPORT TextModels, TextMappers;

   VAR
      Done-: BOOLEAN;
      done-: BOOLEAN;
....
Про это тоже долго думал -- если сразу с маленькой буквы, то не надо потом объяснять, почему важно соглашений придерживаться. Это Done торчит всюду.

Совсем убрать Done -- примеры в книжке Виталия Валерьевича не будут работать :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 22 Октябрь, 2009 11:37 

Зарегистрирован: Пятница, 16 Октябрь, 2009 20:04
Сообщения: 68
О каком диске идет речь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 22 Октябрь, 2009 11:53 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Доровских Александр писал(а):
О каком диске идет речь?

Приложение к книге:

viewtopic.php?f=4&t=1970


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 22 Октябрь, 2009 13:56 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Info21 писал(а):
Долго думал, и додумался:
сам In я предпочитаю не трогать по той же причине, по какой его не трогали авторы ББ;

Где можно об этом почитать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 22 Октябрь, 2009 14:49 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Валерий Лаптев писал(а):
Где можно об этом почитать?
В вывешенном исходнике.

In -- не является частью Блэкбокса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 22 Октябрь, 2009 15:23 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Это я знаю, что не является. Мне интересно почитать, по каким-таким причинам разработчики косо на него смотрели.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 22 Октябрь, 2009 17:29 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Почему косо? Наверное, чтобы проще было примеры Вирта на Обероне запустить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 22 Октябрь, 2009 19:09 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
В исходнике есть комментарий.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 22 Октябрь, 2009 19:32 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Info21 писал(а):
программа (которая вызывается из меню или командиром в другом документе) не открывает поток, а только, если надо, читает с начала (Restart).
... тут нюансы, все сразу не помню, но один вот:

Когда две разные команды должны брать данные из входного потока -- то плохо, когда они обе пытаются его открывать.
Но если каждая сделана так, что просто его читает "с текущей позиции", то данные для этих двух последовательных команд тоже просто две сконкатенированные последовательности.
Удобней именно так (это вывод из "долго думал", причем с реальным примером из жизни).

В любом случае так сделанную команду можно обеспечить данными, приставив впереди Open:

(!)"i21sysIn.Open;Модуль.Команда(параметры)" поток ввода ~

В общем, такое параллельное складывание команд и их потоков данных.

Открытая опция (ее, как представляется, нужно будет реализовать) -- добавить возможность делать интерактивную конкатенацию потоков данных, т.е. наряду с Open добавить Append, когда выделенный фрагмент текста прицепляется к уже "туда" зааттаченному.
Но это добавление к модулю чисто аддитивное, всё уже существующее не будет затронуто.

И последний сейчас пунктик: Restart, строго оговоря, избыточен: раз виден сканер, -- а именно он работает, когда вызываются команды чтения Int, Real и т.д., -- то можно запомнить его позицию и, когда надо, туда его снова поставить.
Но на практике (особенно в учебном контексте) это достаточно громоздко, чтобы оправдать спецфасадик.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 10 Март, 2011 10:32 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Для заметки: в книге Рейзера "Система Оберон..." (http://oberoncore.ru/library/reiser_the ... ers_manual), раздел 1.2 The Oberon user interface, стр. 4 и стр. 7 --- картинки, где сравниваются одномерная ком. строка MS-DOS и текст как ком. строка в системе Оберон.

Должно быть полезно в образовательных целях.

P.S. Тему приклеил, чтобы опять не искать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 19 Январь, 2012 15:04 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 358
Откуда: Россия, Стерлитамак
У Раскина в "Интерфейс ..." есть моменты, касательно текста как интерфейса. Причем они почти в таком же виде как описываются у него, реализованы в ББ (например, редактируемое меню, коммандер)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 19 Январь, 2012 17:47 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
adva писал(а):
У Раскина в "Интерфейс ..." есть моменты, касательно текста как интерфейса. Причем они почти в таком же виде как описываются у него, реализованы в ББ (например, редактируемое меню, коммандер)
Спасибо.

"Content as interface".

Вот для полноты сводка правил (где-то, наверное, есть и по-русски):

http://nitpicker.pbworks.com/w/page/124 ... 0Interface


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Текст как интерфейс
СообщениеДобавлено: Четверг, 19 Январь, 2012 18:55 

Зарегистрирован: Четверг, 23 Апрель, 2009 18:01
Сообщения: 219
Мне видится разумным следующий вариант. Пользователь пишет текст команды, выделяет его, щёлкает с какой-нибудь зажатой функциональной клавишей и текст превращается в нажимаемую ссылку-текст. Её редактирование - это уже редактирование названия html-подобной ссылки. В любой момент можно снова превратить ссылку в текст. Из выгод: сохранение приличного вида (Открыть, Закрыть, Сохранить как, Показать результат) на языке целевого назначения, но при этом сохраняется возможность менять содержимое команд и создавать новые в любом месте.

SomeModule.Open => Открыть базу данных


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB