Selection List - список c возможностью установить состояние каждого элемента.

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

Создание виджета. Возращает ссылку на созданный виджет или NULL, если создать не удалось. В остальных функциях в качестве selection нужно передавать ссылку на созданный виджет.
CDKSELECTION *newCDKSelection (CDKSCREEN *cdkscreen, int xpos, int ypos, int spos, int height, int width, char *title, char **selectionList, int selectionListLength, char **choiceList, int choiceListLength, chtype highlight, boolean box, boolean shadow);

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

Уничтожение виджета.
void destroyCDKSelection (CDKSELECTION *selection);

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

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

Прорисовка виджета.
void drawCDKSelection (CDKSELECTION *selection, boolean box);

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

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

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

Установка текущего элемента списка.
void setCDKSelectionCurrent (CDKSELECTION *selection, int index);

Получение состояния элемента списка index.
int getCDKSelectionChoice (CDKSELECTION *selection, int index);

Установка состояния элемента списка index в состояние choice.
void setCDKSelectionChoice (CDKSELECTION *selection, int index, int choice);

Получение массива состояний элементов.
int *getCDKSelectionChoices (CDKSELECTION *selection);

Установка состояний элементов.
void setCDKSelectionChoices (CDKSELECTION *selection,int *choices);

choices - Массив с состояниями каждого из элементов списка.

Получение режима доступа к элементу списка index (0 -чтение и запись 1 - только чтение).
int getCDKSelectionMode (CDKSELECTION *selection, int index);

Установка состояния элемента списка index в состояние choice.
void setCDKSelectionMode (CDKSELECTION *selection, int index, int mode);

index - индекс элемента для которого устанавливается режим.
mode - режим доступа. (0 -чтение и запись 1 - только чтение)

Получение массива режимов доступа для каждого элемента списка (0 -чтение и запись 1 - только чтение).
int *getCDKSelectionModes (CDKSELECTION *selection);

Установка режима доступа всех элементов списка.
void setCDKSelectionModes (CDKSELECTION *selection, int *modes);

modes - массив с режимами доступа для каждого элемента списка. (0 -чтение и запись 1 - только чтение)

Получение элементов списка.
int getCDKSelectionItems (CDKSELECTION *selection, char **list);

Установка элементов списка.
void setCDKSelectionItems (CDKSELECTION *selection, char **list, int listSize);

Получение атрибутов выделенного элемента списка.
chtype getCDKSelectionHighlight (CDKSELECTION *selection);

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

Установка состояния виджета.
void setCDKSelection (CDKSELECTION *selection, chtype highlight, int *defChoices, boolean box);

highlight - атрибуты выделенного элемента списка.(Например: A_REVERSE)
defChoices - Список строк для индикации выбора.
box - рамка (TRUE / FALSE) если TRUE будет выведена рамка

Получение заголовка.
char *getCDKSelectionTitle (CDKSELECTION *selection);

Установка заголовка.
void setCDKSelectionTitle (CDKSELECTION *selection, char *title);

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

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

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

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

Есть ли рамка у виджета.
boolean getCDKSelectionBox (CDKSELECTION *selection);

Изменить наличие рамки в виджете.
void setCDKSelectionBox (CDKSELECTION *selection, boolean boxWidget);

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

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

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

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

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

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

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

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

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

#include <cdk.h>

static char *types[4];

int main(int argc, char *argv[])
{
    CDKSCREEN *cdkscreen;
    CDKSELECTION *CDKSList;
    WINDOW *screen;
    char *choices[] = {"[ ]", "[+]", "[-]"};
    int mode;
    int i,j;
    char temp[256], *mesg[200];
    
    // инициализация    
    screen = initscr();
    cdkscreen = initCDKScreen(screen);
    initCDKColor();

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

    //создаём виджет
    CDKSList = newCDKSelection(cdkscreen, 
		CENTER, CENTER, RIGHT,
		8, 20,
		"Носители:", 
		types, 4,
		choices, 3,
		A_REVERSE,
		TRUE, FALSE);
		
    //ждём ввода
    activateCDKSelection(CDKSList, 0);
    
    // собираем и выводим информацию о удалённых и добавленных елементах
    if (CDKSList->exitType == vNORMAL)
    {
      mesg[0] = "Добавлены:";
      i = 1;
      for (j=0; j < 4; j++)
      {
	 if (getCDKSelectionChoice(CDKSList, j) == 1)
	 {
	    sprintf(temp, "%.*s", (int)(sizeof(temp) - 20), types[j]);
	    mesg[i++] = copyChar (temp);
	 }
      }
      mesg[i++] = "Удалены:";
      for (j=0; j < 4; j++)
      {
	 if (getCDKSelectionChoice(CDKSList, j) == 2)
	 {
	    sprintf(temp, "%.*s", (int)(sizeof(temp) - 20), types[j]);
	    mesg[i++] = copyChar (temp);
	 }
      }
      popupLabel (cdkscreen, mesg, i);
    }   

    //освобождаем ресурсы
    for (j=1; j < i; j++)
	freeChar (mesg[j]);
    
    destroyCDKScroll(CDKSList);
    destroyCDKScreen(cdkscreen);
    endCDK();

    return 0;
}


(C) Copyright 2006 Бердников Александр
Hosted by uCoz