Scrolling List - список.

Данный виджет служит для выбора строки из списка. Есть возможность нумеровать список, добавлять и удалять элементы, устанавливать текущее положение.

Создание виджета. Возращает ссылку на созданный виджет или NULL, если создать не удалось. В остальных функциях в качестве scroll нужно передавать ссылку на созданный виджет.
CDKSCROLL *newCDKScroll (CDKSCREEN *cdkscreen,int xpos,int ypos, int spos, int height, int width, char *title, char **itemList, int items, boolean numbers, chtype highlight, boolean box, boolean shadow);

cdkscreen - ранее созданный CDKSCREEN
xpos, ypos - координаты левого верхнего угла
spos - Положение прокрутки. (LEFT - слева, RIGHT- справа, NONE - без области прокрутки)
height, width - Размеры виджета.
title - Заголовок. Находится над полем ввода. Может содержать несколько строк. Для перехода на новую строку используется \n.
itemList - Массив строк.
items - Количество элементов в списке.
numbers - Нумеровать ли список.
highlight - атрибуты выделенного элемента списка.(Например: A_REVERSE)
box - рамка (TRUE / FALSE) если TRUE будет выведена рамка
shadow - тень (TRUE / FALSE) если TRUE будет выведена тень

Уничтожение виджета.
void destroyCDKScroll (CDKSCROLL *scroll);

Удаление виджета с экрана. (Сам виджет не удаляется.)
void eraseCDKScroll (CDKSCROLL *scroll);

Установика атрибутов фона виджета attribute.
void setCDKScrollBackgroundAttrib (CDKSCROLL *scroll, chtype attribute);

Прорисовка виджета.
void drawCDKScroll (CDKSCROLL *scroll, boolean box);

Активация виджета. Возвращаемое значение содержит индекс выбранной строки. Если scroll->exitType равно vNORMAL при выборе подпункта меню то выход осуществлён клавишами Enter или Tab и vESCAPE_HIT при нажатии Esc В качестве actions можно передать 0.
int activateCDKScroll (CDKSCROLL *scroll, chtype * actions);

Функции получения и изменения состояния.

Получение номера текущего элемента списка.
int getCDKScrollCurrent(CDKSCROLL *scroll);

Установка текущего элемента списка.
void setCDKScrollCurrent(CDKSCROLL *scroll, int item); void setCDKScrollPosition (CDKSCROLL *scroll, int item);

Добавление строки item в конец списка.
void addCDKScrollItem (CDKSCROLL *scroll, char *item);

Вставка строки item в текущую позицию списка.
void insertCDKScrollItem (CDKSCROLL *scroll, char *item);

Удаление элемента, находящегося в позиции position, из списка.
void deleteCDKScrollItem (CDKSCROLL *scroll, int position);

Получение списка.
int getCDKScrollItems (CDKSCROLL *scroll, char **itemList);

Получение атрибутов выделенного элемента списка.
chtype getCDKScrollHighlight (CDKSCROLL *scroll, chtype highlight);

Установка атрибутов выделенного элемента списка.
void setCDKScrollHighlight (CDKSCROLL *scroll, chtype highlight);

Установка списка.
void setCDKScrollItems (CDKSCROLL *scroll, char **itemList, int listSize, boolean numbers);

Установка состояния виджета.
void setCDKScroll (CDKSCROLL *scroll, char **itemList, int items, boolean numbers, chtype highlight, boolean box);

itemList - Массив строк.
items - Количество элементов в списке.
numbers - Нумеровать ли список.
highlight - атрибуты выделенного элемента списка.(Например: A_REVERSE)
box - рамка (TRUE / FALSE) если TRUE будет выведена рамка

Перемещение виджета.
void moveCDKScroll (CDKSCROLL *scroll, int xpos, int ypos, boolean relative, boolean refresh);

xpos, ypos - координаты левого верхнего угла новой позиции
relative - (TRUE / FALSE) если TRUE новые координаты высчитываются от текущего положения виджета, иначе от верхнего левого угла экрана
refresh - обновить после перемещения (TRUE / FALSE)

Управление положением виджета клавишами курсора.
void positionCDKScroll (CDKSCROLL *scroll);

Функции управления рамкой.

Есть ли рамка у виджета.
boolean getCDKScrollBox (CDKSCROLL *scroll);

Изменить наличие рамки в виджете.
void setCDKScrollBox (CDKSCROLL *scroll, boolean box);

Установка атрибутов attribute для рамки.
void setCDKScrollBoxAttribute (CDKSCROLL *scroll, chtype character);

Установка символа character выводимого по горизонтали рамки.
void setCDKScrollHorizontalChar (CDKSCROLL *scroll, chtype character);

Установка символа character выводимого по вертикали рамки.
void setCDKScrollVerticalChar (CDKSCROLL *scroll, chtype character);

Установка символа character выводимого в левом нижнем углу рамки.
void setCDKScrollLLChar (CDKSCROLL *scroll, chtype character);

Установка символа character выводимого в правом нижнем углу рамки.
void setCDKScrollLRChar (CDKSCROLL *scroll, chtype character);

Установка символа character выводимого в левом верхнем углу рамки.
void setCDKScrollULChar (CDKSCROLL *scroll, chtype character);

Установка символа character выводимого в правом верхнем углу рамки.
void setCDKScrollURChar (CDKSCROLL *scroll, chtype character);

Пример использования.

/*
    w_scroll.c - пример простой программы демонстрирующей
		возможности виджета Scroll библиотеки CDK.
		
    (C) Copyright 2006 Бердников Александр alexber220@yandex.ru
    Данная программа распростаняется по лицензии BSD.
*/

#include <cdk.h>

static char *types[4];


int main(int argc, char *argv[])
{
    CDKSCREEN *cdkscreen;
    CDKSCROLL *CDKScroll;
    WINDOW *screen;
    int id_type;
    char temp[256], *mesg[10];
    
    // инициализация    
    screen = initscr();
    cdkscreen = initCDKScreen(screen);
    initCDKColor();


    // заполняем список
    types[0] = "CD";
    types[1] = "DVD";
    types[2] = "Floppy";
    types[3] = "ZIP";

    //создаём виджет
    CDKScroll = newCDKScroll(cdkscreen, 
		CENTER, CENTER, RIGHT,
		8, 20,
		"Носитель:", types, 4,
		TRUE, A_REVERSE,
		TRUE, FALSE);
		
    setCDKScrollPosition(CDKScroll, 2);
    insertCDKScrollItem(CDKScroll, "Flash");
    

    //ждём ввода
    id_type = activateCDKScroll(CDKScroll, 0);
    

    // выводим выбранный элемент
    if (CDKScroll->exitType == vNORMAL)
    {
        sprintf (temp, "(%s)", chtype2Char(CDKScroll->item[id_type]));
	mesg[0] = temp;
        popupLabel (cdkscreen, mesg, 1);
    }


    //освобождаем ресурсы
    destroyCDKScroll(CDKScroll);
    destroyCDKScreen(cdkscreen);
    endCDK();
    
    return 0;
}
Hosted by uCoz