T h e    L i b r a r y   Y z o n e TO ENGLISH

Б и б л и о т е к a    Y z o n e


logo

Содержание:

  • Введение
  • 1. OPEN: оконнo-графические и системные примитивы
  • 2. MORE: полезные дополнения и улучшенные GUI функции
  • 3. WIND: оконно-диалоговые элементы управления
  • Заключение


  • Введение

    Yzone - универсальная межплатформенная библиотека для создания графических модульных приложений для различныx платформ UNIX и Microsoft Windows. Yzone - библиотека широкого профиля, однако приоритетным в ней является научный, компонентно-алгоритмический подход. Представляя библиотеку Yzone, необходимо отметить следующие моменты и характерные особенности:

  • Yzone написана на языке C (а не C++ как большинство GUI-библиотек), что дает выигрыш на вычислительных задачах в 1.5-2 раза (при правильной настройке компиляторов) и более эффективное распараллеливание.
  • в Yzone межплатформенность достигается использованием библиотек низкого уровня (Xlib для UNIX и WinAPI для Microsoft Windows) в отличие, например, от известного пакета wxWindows (http://www.wxwindows.org), где используются громоздкие, коммерческие библиотеки (Motif и MFC соответственно).
  • в Yzone используется "естественная" схема построения приложений, основу которой составляют "модули" (в частности графические окна), обменивающиеся с системой и между собой "сообщениями" (именно так первоначально была написана Windows 3.x, хотя последнее время чаще используется схема, где упор делается на "события" и их обработку отдельными "callback"-функциями).
  • на основе описанного выше "естественного" подхода в Yzone в дальнейшем будет построена оригинальная система модульно-компонентного программирования и управления алгоритмами ALGO.
  • в Yzone соединяются простота и универсальность, отсутствие лишних деталей и мощность изобразительных средств, логическая стройность и компактность кода, сочетание научного и популярного подходов к программированию.
  • Все перечисленное выше позволяет надеяться, что библиотека Yzone будет полезна широкому кругу программистов: от начинающих до профессионалов, от желающих написать свою первую графическую программу до разработчиков сложных программных межплатформенных комплексов.



    1. OPEN: оконнo-графические и системные примитивы

    В Yzone разработана оригинальная смешанная оконная система (системные и внутренние окна):

  • системные окна - это реальные окна в терминах системного оконного менеджера, т.е. те, которые можно перетаскивать мышкой по экрану, менять размеры, свертывать в иконки и т.д;
  • внутренние окна - графические оконные модули, описываемые во внутри-библиотечной таблице, в основном все пользовательские элементы управления (кнопки, линейки и т.д.);
  • Такой подход позволяет сделать систему более гибкой и универсальной, уменьшить занимаемые системные ресурсы и ускорить графический визуальный диалоговый отклик.
    В случае простого приложения имеется одно главное системное окно, в котором средствами внутренних окошек реализован пользовательский интерфейс. В дополнение возможны также системные диалоговые окна.

    Каждое окно-модуль описывается единой "callback"-функцией, тело которой представляет собой один большой "switch" оператор. Его метки "case" являются точками входа в оконную процедуру и отвечают за обработку поступающих в модуль различных сообщений.
    В любой программе написанной с помощью библиотеки Yzone должна присутствовать главная "callback" функция MAIN, которая вызывается первой после запуска программы.

    Таким образом, стандартная программа "Hello World" (с дополнительной кнопочкой) будет выглядеть так:

    /*-------------------------------MAIN-----------------------------------*/
    long
    MAIN (PFUNC_VAR)
    {
    
      switch (message) {
      case YCREATE:
        YInitWIND (); 
    
        YBigWindow (NULL, hello_proc, "Main Window", 0,0, 200,150, 0,0,0,0, 
                    YColor("yellow"));     
        break; 
      }
    
      RETURN_TRUE;
    }
    /*------------------------------hello_proc------------------------------*/
    long
    hello_proc (PFUNC_VAR)       
    {        
      static int hPush1;
    
      switch (message) {       
      case YOPEN: 
      case YDRAW:       
        YDrawRectF (0,0, WND->w,WND->h, WND->color);        
        YWnd (&hPush1, PUSH, "Hello World!", 20,20, WND->w-40,WND->h-40, 
              0,0,0,0, YColor("lime"));
        break;        
      case YCLOSE:       
        break; 
      case YPUSH:
        if (mes1 == hPush1)  exit(0); 
      default: ;;
      }       
      
      RETURN_TRUE;
    }
    /*----------------------------------------------------------------------*/
    

    Описание некоторых сообщений

      YOPEN      -  окно открывается; 
      YDRAW      -  окно прорисовывается;
      YCLOSE     -  окно закрывается;
    
      YSETFOCUS  - окно получает 'фокус';  
      YKILLFOCUS - окно теряет 'фокус';
      YDATAMADE  - было изменение в одном из 'дочерних' элементов управления;
      YTIMER     - интервальные сообщения от установленного таймера;
      YKEYBOARD  - нажата клавиатурная клавиша;   
    	
      YLMOUSEDOWN   - нажата левая клавиша мыши;
      YLMOUSEUP     - отпущена левая клавиша мыши;
      YLMOUSEMOVE   - движение мыши при нажатой левой клавише;
      YLMOUSEDOUBLE - двойной 'клик' левой мыши;        
    	
      YRMOUSEDOWN   - нажата правая клавиша мыши;
      YRMOUSEUP     - отпущена правая клавиша мыши;
      YRMOUSEMOVE   - движение мыши при нажатой правой клавише;
    
      YLRMOUSEMOVE  - движение мыши при нажатых левой и правой клавише; 
    
      YKEYWORD0  |
      YKEYWORD1  |
      YKEYWORD2  |  Дополнительные сообщения, зависящие
      YKEYWORD3  |  от контекста их использования;
      YKEYWORD4  |
      YKEYWORD5  |
    


    Описание некоторых функций

      MAIN           - первая (псевдо)оконная функция получающая управление;
    
    1) Группа основных оконных функций:
    
      YWndBig        - создать 'реальное' окно в рамках оконного менеджера;
      YWnd           - создать 'внутренне' окно в рамках OPEN;
      YCloseAll      - закрыть окно, предварительно закрыв все дочерние;
      YSend          - послать сообщение в другое окно или модуль;
      YGoto          - послать сообщение себе (на другую точку входа);
      YPost          - тоже что YSend, но с предварительной постановкой в очередь;
      YSetTimer      - запустить 'таймер' для окна;
      YKillTimer     - остановить 'таймер';
      YSetProcess    - запустить 'процесс' для окна;
      YKillProcess   - остановить 'процесс';
      YGetData       - получить некоторые данные из указанного окна; 
      YGetFocus      - получить идентификатор окна, владеющего 'фокусом';
      YSetFocus      - установить 'фокус' для окна;
      YUpdateWnd     - перерисовать окно с обновленными данными;
      YWndGroupBegin - 'открывающая скобка' для группы окон (обычно CHECK);
      YWndGroupEnd   - 'закрывающая скобка';
      YDlg           - вызвать диалог с указанной оконной процедурой;
      YDlgEnd        - завершить диалог (закрыть);
      YExit          - закончить работу с Y/Open;
            
    2) Основные графические примитивы (функции рисования):
    
      YPaintPixell    - одиночный пиксел; 
      YPaintLine      - обыкновенная линия (отрезок прямой);
      YPaintRectF     - прямоугольник (только граница); 
      YPaintRectB     - прямоугольник (только граница);
      YPaintRectFB    - прямоугольник (закрашенный с границей); 
      YPaintPolyF     - многоугольник закрашенный; 
      YPaintString    - горизонтальная строка; 
      YPaintArcF      - дуга закрашенная;
      YPaintArcB      - дуга (только граница);
           
    3) Другие системные и графические функции:
    
      YDirRead      - получить в виде списка содержимое директории ;
      YDirChange    - сменить текущую директорию;
      YTimeGet      - получить системное время;
      YTimePause    - пауза в миллисекундах;
      YBeep         - звуковой сигнал;
      YRandF        - генерация псевдослучайной величины типа 'float';
    
      YBeginGroup   - открывающая скобка для группы графических функций; 
      YEndGroup     - закрывающая скобка;
      YImageGet     - записать образ прямоугольной области экрана в память;
      YImagePut     - нарисовать сохраненный образ;
      YImageFree    - уничтожить хранимый образ очистив память;
      YSetXorMode   - установить режим рисования XOR;
      YSetCliping   - установить прямоугольную область с режимом отсечения;
      YSetFont      - установить текущий фонт;
      YStringW      - длина строки в пикселах;
      YStringH      - высота строки в пикселах;
      YMouseForm    - изменение графического образа мышиного курсора;
      YPtInRect     - попадает ли точка внутрь прямоугольника;
    
      YColorToScale - найти индекс заданного цвета в палитре Scale;
      YColor        - задать цвет из стандартного набора;
      YScale        - задать цвет из сплошной палитры;
    
    

    Работа с цветом

    При инициализации графической системы в Yzone происходит резервирование и установка двух различных цветовых таблиц:

    стандартный набор - широко известные общепринятые названия (в текущей версии используется 16 цветов, первоначально закрепленные за палитрой Windows VGA);

       "black"    "green"
       "silver"    "lime"
       "gray"    "olive"
       "white"    "yellow"
       "maroon"    "navy"
       "red"    "blue"
       "purple"    "teal"
       "fuchsia"    "aqua"

    сплошная палитра - цветовая "одномерная" палитра, сформированная по некоторому закону (линейному, логарифмическому и т.д.); ее удобно использовать для различных задач визуализации распределенных данных.



    2. MORE: полезные дополнения и улучшенные GUI функции

    В этом разделе описаны некоторые полезные функции. Они расширяют возможности языка "C" и облегчают программисту его нелегкий труд :-) Но основные улучшения касаются графических функций; в них введены следующие дополнения:

  • масштабируемость: перед выводом (рисованием) на экран, все координаты и размеры (в пикселах) изменяются в соответствии с заданным коэффициентом масштаба; это позволяет не зависеть от существенного разного разрешения экрана и всегда иметь графическую картинку нужного размера.
  • сохранение в Meta-формат: можно задать режим, при котором все графические примитивы будут сохраняться в некотором формате; в дальнейшем эти вызовы можно повторить в том же порядке.
  • печать в PostScript: вывести графику в файл PS можно либо непосредственно задав такой режим, либо из уже готового Meta-формата.
  • Описание некоторых функций:

    
    1) Улучшенные графические функции (с масштабированием и сохранением в 
       Meta и PS форматы):
    
      YDrawLogo       - логотип библиотеки Y/Open;
      YDrawLine       - обыкновенная линия (отрезок прямой);
      YDrawRectB      - прямоугольник (только граница);
      YDrawRectF      - прямоугольник (закрашенный без границы);
      YDrawRectFB     - прямоугольник (закрашенный с границей);
      YDrawTriB       - треугольник (только граница);
      YDrawTriF       - треугольник (закрашенный без границы);
      YDrawTriFB      - треугольник (закрашенный с границей);
      YDrawFourB      - четырехугольник (только граница);
      YDrawFourF      - четырехугольник (закрашенный без границы);
      YDrawFourFB     - четырехугольник (закрашенный с границей);
      YDrawPolyF      - многоугольник закрашенный;
      YDrawCircF      - окружность закрашенная (круг);
      YDrawXorLine    - линия в режиме XOR;
      YDrawScale      - палитра цветов SCALE в виде прямоугольника;
      YDrawColmap     - прямоугольная цветовая карта Colmap;
      YDrawColmapB    - тоже, но с отрисованной границей;;
      YDrawSymbol     - специальные графические символы и элементы;
      YDrawHString    - горизонтальная строка;
      YDrawVString    - вертикальная строка;
      YDrawStrings    - многострочный горизонтальный текст;
      YDrawRectText   - текст в центре прямоугольника;
      YDrawHStringImp - улучшенная печать строки;
      YDrawPixel      - одиночный пиксел;
            
    2) Другие функции:
    
      YParInit      - инициализация переменной из символьной строки;
      YStrCopy      - копирование массива строковых переменных;
      YStrCmp       - сравнение двух строк (возвращает булевское значение);
      YError        - сообщение об ошибке и аварийное завершение;
      YWarning      - сообщение об ошибке без аварийного завершения;
      YInt          - приведение к типу 'int' с правильным округлением;
      YPutInCicl    - приведение целого внутрь заданного интервала;
      YCalcRects    - автоматизация размещения прямоугольников в прямоугольнике;
      YVertStringH  - длина горизонтальной строки (т.е. высота объекта);
    
    3) Функции для работы с 'Colmap':
    
      YColmapCreate    - создать;
      YColmapInit      - инициализировать;
      YColmapBeginDraw - задать прямоугольник для вывода в Colmap;
      YColmapDrawPixel - рисовать пиксел (если попадает;
      YColmapEndDraw   - закончить режим рисования в Colmap;
      YColmapGet       - получить пиксел;
      YColmapPut       - положить пиксел;
    
    4) Функции для работы с 'Meta':
    
      YMetaCreate - создать;
      YMetaInit   - инициализировать;
      YMetaBegin  - начать режим;
      YMetaEnd    - закончить режим;
      YMetaDrawTo - послать для отрисовки в окно;
      YMetaToPS   - сохранить в PostScript;
      YMetaToScr  - нарисовать в указанной области экрана;
      YMetaW      - получить ширину;
      YMeta_dlg   - оконная функция диалога 'Save_to_PS';
    
    


    3. WIND: оконно-диалоговые элементы управления

    В Yzone все элементы контроля работают достаточно стандартно, за исключением, быть может,
    поля "DECIMAL", управлять которым можно только "мышкой":
        - нажатие левой клавиши - уменьшает значение поля,
        - а нажатие правой - увеличивает значение поля;
    При этом однократное нажатие меняет значение на единицу, а удержанное нажатие будет производить непрерывное изменение, причем, тем быстрее, чем дальше отодвигается курсор от исходного места!

    Описание некоторых функций:

      YFindFile      - вызвать диалог 'FindFile';
      YMessageBox    - вызвать диалог 'Message';
      YWaitBegin     - стартовать диалог WAIT;
      YWaitEnd       - закончить диалог WAIT;
      YWaitSend      - послать сообщение (сколько сделано) в WAIT;
      YPutWnd        - 'положить' окно на панель LAYOUT;
      
      PUSH     - стандартная кнопка;
      CHECK    - элемент типа 'флажок' (с крестиком);
      LIST     - список выбираемых элементов (строковых констант);
      EDIT     - поле редактирования строковой переменной;
      DECIMAL  - поле для изменения десятичной переменной; 
      FLOATS   - поле редактирования переменной вещественного типа;
      YTEXT    - нередактируемое информативное текстовое поле;
      COLORS   - элемент задания и выбора цвета;
      RAMKA    - универсальное окно с 'полоской' управляющих кнопок;
      SCROLL   - линейка прокрутки (для различных целей);
      DITTO    - пустая 'безсодержательная' оконная процедура (заглушка);
      BOOK     - 'книжка' с закладками;
      ABOUT    - стандартная панель с информацией об авторе и программе;
      PROCESS  - панель с кнопками управления оконным 'процессом';
      LAYOUT   - панель для размещения на ней других окон;
    
    

    Далее дано краткое описание некоторых блоков диалога. Обычно они вызываются как системные окна и являются обязательными для исполнения.



    Диалог 'Choise color'

    сверху - сплошная палитра,
    снизу - стандартный набор,
    отдельно выделены черный и белый цвет;

    Для выбора, просто щелкните левой клавишей мыши на нужном цвете.



    Диалог 'Save_to_PS'

    Печать, а точнее сохранение, 'твердой' копии в формате PostScript.

    Size(mm) -- панель для задания размера картинки EPS;

  • можно задать в миллиметрах;
  • а можно относительно размера стандартного листа бумаги A4;



    Диалог 'FinfFile'

    Осуществляет навигацию по директориям файловой системы и выбор файла для последующей работы с ним. Управление -- с помощью стандартных средств (кнопки, мышь, клавиатура).



    Диалог 'Message'

    Пользователю выдается некоторое сообщение, на которое требуется отреагировать (например нажать кнопку "Yes" или "No").


    Заключение

    Вы коротко познакомились с Yzone - универсальной межплатформенной GUI библиотекой. От множества подобных библиотек Yzone отличает целый набор реализованных оригинальных идей и свойств. Yzone - новая, динамически развивающаяся библиотека и, к сожалению, она еше не свободна от ошибок и неточностей, что в дальнейшем будет исправлено.

    Некоторые элементы управления и блоки диалога также находятся в стадии доработки, но не дожидаясь окончания этого процесса, пользователи имеют возможность "подцепиться" к уже развитой библиотеке FLTK (http://fltk.easysw.com) и воспользоваться ее средствами GUI. Для этого достаточно при сборке библиотеки указать соответствующий флаг в Makefile.

    В дальнейшем, конечно, все недочеты будут устранены, а интерфейс развит в необходимых объемах. Программист, использующий Yzone, забудет о существовании различных платформ и дополнительных библиотек.

    Только Yzone и Вы !!   Удачи !!



  •   Life Software   ( Last modified: Sun Aug 20 16:36:35 YEKST 2000 ) TO ENGLISH