Calendar - календарь.

Данный виджет позволяет удобно вводить дату.

Создание виджета. Возращает ссылку на созданный виджет или NULL, если создать не удалось. В остальных функциях в качестве calendar нужно передавать ссылку на созданный виджет.
CDKCALENDAR *newCDKCalendar (CDKSCREEN * cdkscreen, int xpos, int ypos, char *title, int day, int month, int year, chtype dayAttrib, chtype monthAttrib, chtype yearAttrib, chtype highlight, boolean box, boolean shadow);

cdkscreen - ранее созданный CDKSCREEN
xpos, ypos - координаты левого верхнего угла
title - Заголовок. Находится над полем ввода. Может содержать несколько строк. Для перехода на новую строку используется \n.
day, month, year - начальные день,месяц и год
dayAttrib, monthAttrib, yearAttrib - атрибуты дня недели, месяца и года
highlight - атрибуты выделенного дня.
box - рамка (TRUE / FALSE) если TRUE будет выведена рамка
shadow - тень (TRUE / FALSE) если TRUE будет выведена тень

Уничтожение виджета.
void eraseCDKCalendar (CDKCALENDAR *calendar);

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

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

Прорисовка виджета.
void drawCDKCalendar (CDKCALENDAR * calendar , boolean box);

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

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

Получение атрибутов для дня недели, месяца и года.
chtype getCDKCalendarDayAttribute (CDKCALENDAR *calendar);
chtype getCDKCalendarMonthAttribute (CDKCALENDAR *calendar);
chtype getCDKCalendarYearAttribute (CDKCALENDAR *calendar);

Установка атрибутов для дня недели, месяца и года.
void setCDKCalendarDayAttribute (CDKCALENDAR *calendar, chtype attribute);
void setCDKCalendarMonthAttribute (CDKCALENDAR *calendar, chtype attribute);
void setCDKCalendarYearAttribute (CDKCALENDAR *calendar, chtype attribute);

Установка строки с днями недели.
void setCDKCalendarDaysNames (CDKCALENDAR *calendar, char *days);

days - строка с днями недели. По умолчанию "Su Mo Tu We Th Fr Sa".

Установка массива с названиями месяцев.
void setCDKCalendarMonthsNames (CDKCALENDAR *calendar, char **months);

Получение атрибутов дня на котором стит курсор.
chtype getCDKCalendarHighlight (CDKCALENDAR *calendar);

Установка атрибутов дня на котором стит курсор.
void setCDKCalendarHighlight (CDKCALENDAR *calendar, chtype attribute);

Установка маркера для даты.
void setCDKCalendarMarker (CDKCALENDAR *calendar, int day, int month, int year, chtype marker);

Получение маркера для даты.
chtype getCDKCalendarMarker (CDKCALENDAR *calendar, int day, int month, int year);

Удаление маркера для даты.
void removeCDKCalendarMarker (CDKCALENDAR *calendar, int day, int month, int year);

Установка состояния виджета.
void setCDKCalendar (CDKCALENDAR *calendar, int day, int month, int year, chtype dayAttrib, chtype monthAttrib, chtype yearAttrib, chtype highlight, boolean box);

day, month, year - начальные день,месяц и год
dayAttrib, monthAttrib, yearAttrib - атрибуты дня недели, месяца и года
highlight - атрибуты выделенного дня.
box - рамка (TRUE / FALSE) если TRUE будет выведена рамка

Получение дня на котором стит курсор.
void getCDKCalendarDate (CDKCALENDAR * calendar , int *day, int *month, int *year);

Установка дня на котором стит курсор.
void setCDKCalendarDate (CDKCALENDAR *calendar, int day, int month, int year);

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

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

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

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

Есть ли рамка у виджета.
boolean getCDKCalendarBox (CDKCALENDAR *calendar);

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

Установка атрибутов attribute для рамки.
setCDKCalendarBoxAttribute (CDKCALENDAR *calendar, chtype ch);

Установка символа character выводимого по горизонтали рамки.
void setCDKCalendarHorizontalChar (CDKCALENDAR *calendar, chtype ch);

Установка символа character выводимого по вертикали рамки.
setCDKCalendarVerticalChar (CDKCALENDAR *calendar, chtype ch);

Установка символа character выводимого в левом нижнем углу рамки.
void setCDKCalendarLLChar (CDKCALENDAR *calendar, chtype ch);

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

Установка символа character выводимого в левом верхнем углу рамки.
setCDKCalendarULChar (CDKCALENDAR *calendar, chtype ch);

Установка символа character выводимого в правом верхнем углу рамки.
setCDKCalendarURChar (CDKCALENDAR *calendar, chtype ch);

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

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

#include <cdk.h>

int main(int argc, char *argv[])
{
    CDKSCREEN *cdkscreen;
    CDKCALENDAR *calendar;
    WINDOW   *screen;
    time_t date;
    char *month[13];
    char  temp[256], *mesg[4];

    // инициализация    
    screen = initscr();
    cdkscreen = initCDKScreen(screen);
    initCDKColor();
    
    //создаём виджет
    calendar = newCDKCalendar(cdkscreen, CENTER, CENTER, "День рождения:", 
	1, 1, 2001,
	COLOR_PAIR(16)|A_BOLD, COLOR_PAIR(16)|A_BOLD, COLOR_PAIR(16)|A_BOLD,
	A_REVERSE, TRUE, FALSE);

    //русифицируем
    month[1] = "Январь";
    month[2] = "Февраль";
    month[3] = "Март";
    month[4] = "Апрель";
    month[5] = "Май";
    month[6] = "Июнь";
    month[7] = "Июль";
    month[8] = "Август";
    month[9] = "Сентябрь";
    month[10] = "Октябрь";
    month[11] = "Ноябрь";
    month[12] = "Декабрь";
    setCDKCalendarDaysNames(calendar, "Вс Пн Вт Ср Чт Пт Сб");
    setCDKCalendarMonthsNames(calendar, month);
    
    //прорисовываем её
    drawCDKCalendar(calendar, TRUE);
    
    //ждём ввода
    date = activateCDKCalendar(calendar, 0);

    // выводим введённые данные
    if (calendar->exitType == vNORMAL)
    {
        sprintf (temp, "Выбранная дата:%02d/%02d/%d", 
		calendar->day, calendar->month, calendar->year);
	mesg[0] = temp;
        popupLabel (cdkscreen, mesg, 1);
    }

    
    //освобождаем ресурсы
    destroyCDKCalendar(calendar);
    destroyCDKScreen(cdkscreen);
    endCDK();
    
    return 0;
}


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