Данный виджет может служить для выбора нескольких значений из предложенных. Есть возможность запретить изменять состояние каждого элемента в отдельности.
Создание виджета. Возращает ссылку на созданный виджет или 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);
Уничтожение виджета.
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);
Получение режима доступа к элементу списка index (0 -чтение и запись 1 - только чтение).
int getCDKSelectionMode (CDKSELECTION *selection, int index);
Установка состояния элемента списка index в состояние choice.
void setCDKSelectionMode (CDKSELECTION *selection, int index, int mode);
Получение массива режимов доступа для каждого элемента списка (0 -чтение и запись 1 - только чтение).
int *getCDKSelectionModes (CDKSELECTION *selection);
Установка режима доступа всех элементов списка.
void setCDKSelectionModes (CDKSELECTION *selection, int *modes);
Получение элементов списка.
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);
Получение заголовка.
char *getCDKSelectionTitle (CDKSELECTION *selection);
Установка заголовка.
void setCDKSelectionTitle (CDKSELECTION *selection, char *title);
Перемещение виджета.
void moveCDKSelection (CDKSELECTION *selection, int xpos, int ypos, boolean relative, boolean refresh);
Управление положением виджета клавишами курсора.
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, "3>%.*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, "2>%.*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;
}