Class LISTITEM

Name

LISTITEM  --  Класс предназначен для управления данными, организованными в список. Например, это может быть список файлов.

Synopsis

 ListItemNew(<nLrow>,<nLcol>,<nRrow>,<nRcol>[,<nColumns>[,<sDelimiter>[,<sColor>]]]) --> ListItem object

Description

Класс предназначен для управления данными, организованными в список. Например, это может быть список файлов.

Attributes

<ClassName> LISTITEM
<Item> Array, массив элементов.
<nTop> Numeric, координаты области редактирования LISTITEM
<nLeft> Numeric, координаты области редактирования LISTITEM
<nBottom> Numeric, координаты области редактирования LISTITEM
<nRight> Numeric, координаты области редактирования LISTITEM
<ColorSpec> String, цветовая спецификация.
  
  "clr1, clr2, clr3, clr4, clr5, clr6, clr7"
  clr1 - основной цвет и цвет обрамления
  clr2 - цвет текущего элемента, если объект в фокусе
  clr3 - цвет текущего элемента, если объект не в фокусе
  clr4 - цвет заголовков
  clr5 - цвет выделенных элементов
  clr6 - цвет текущего выделенного элемента
  clr7 - цвет выделенных операцией поиска символов
  
<ItemCount> Numeric, количество элементов в <::Item>
<Buffer> Numeric, номер текущего элемента
<First> Numeric, номер первого элемента в области просмотра
<ItemWin> Numeric, количество элементов в области просмотра
<Line> Numeric, текущая координата курсора - строка
<Col> Numeric, текущая координата курсора - колонка
<Pos> Numeric, номер текщей колонки
<ColWin> Numeric, количество колонок в области просмотра
<RowWin> Numeric, количество строк в области просмотра
<LenCol> Array, массив, содержащий ширину колонок
<Title> Array, массив заголовков колонок
<Delim> String, разделитель колонок
<HasFocus> Logical, если TRUE объект находится в фокусе
<FindBuffer> String, буфер поиска
  

Methods

ADDITEM Добавить новый элемент в список.
CLEAR Удалить все элементы из списка.
CLEARFINDBUFFER Очистить буфер поиска.
DELITEM Удалить элемент из списка.
DOWN Перемещение на следующий элемент.
DRAWTITLE Нарисовать заголовки колонок.
END Перемещение на последний элемент массива <::Item>
FIND Поиск подстроки.
GETITEM Получить текущий элемент.
GETSELECTED Возвращает номера выделенных элементов.
HANDLEKEY Обработчик кодов.
HOME Перемещение на первый элемент массива <::Item>
INSITEM Вставить новый элемент в список.
KILLFOCUS Снять фокус.
LEFT Перемещение налево.
LISTITEMNEW Конструктор объекта LISTITEM.
PAGEDOWN Перемещение на следующую страницу массива <::Item>
PAGEUP Перемещение на предыдущую страницу массива <::Item>
REFRESH Перерисовать область просмотра..
RIGHT Перемещение направо.
SELECT Выделить элемент.
SETCOLUMNS Задать количество колонок.
SETFOCUS Установить фокус.
SETITEM Установить текущий элемент.
SETKEY Установить блок кода, связанный с кодом клавиши.
SETTITLE Задать заголовки колонкам.
SETWIDTHCOL Задать ширину колонок.
UP Перемещение на предыдущий элемент.

Method LISTITEM:ADDITEM()

 AddItem(<vData>[, <sColor>][, <sSelColor>]) 	--> 0 || 1

AddItem() добавляет новый элемент в конец списка <::Item>.

Method LISTITEM:CLEAR()

 Clear() 	--> NIL

Crear() удаляет из списка все элементы и устанавливает счетчики в нулевое положение.

Method LISTITEM:CLEARFINDBUFFER()

 ClearFindBuffer() 	--> NIL

CrearFindBuffer() очищает буфер поиска. <::FindBuffer> присваивается пустая строка.

Method LISTITEM:DELITEM()

 DelItem(<nPos>) 	--> 0 || 1

DelItem() удаляет элемент с номером <nPos> из списка <::Item>. Содержимое элемента будет потеряно и все элементы начиная с <nPos>+1 будут сдвинуты вверх на 1 позицию. Последний элемент списка будет уничтожен.

Method LISTITEM:DOWN()

 Down() 	--> NIL

Down() перемещает курсор на следующий элемент массива <::Item>.

Method LISTITEM:DRAWTITLE()

 DrawTitle() 	--> TRUE

DrawTitle() прорисовывает заголовки списка.

Method LISTITEM:END()

 End() 	--> NIL

End() перемещает курсор на последний элемент списка <::Item>. Новый текущий элемент будет len(<::Item>).

Method LISTITEM:FIND()

 Find(<sStr>) 	--> TRUE || FALSE

Find() добавляет <sStr> в конец буфера поиска <::FindBuffer> и ищет <::FindBuffer> в списке <::Item>. Если буфер<::FindBuffer> пуст, поиск начинается с первого элемента <::Item>, иначе, поиск начинается с текущей позиции <::Buffer>.

Строка <::FindBuffer> сравнивается с самыми левыми символами элементов массива <::Item>. Поиск продолжается пока <::FindBuffer> не будет найден или до конца массива. Если строка <::FindBuffer> найдена, поиск останавливается, <::Buffer> принимает значение соответствующее позиции найденного элемента в массиве <::Item> и Find() возвращает TRUE. Если поиск не удачен, <::Buffer> не изменяется, подстрока <sStr> удаляется из строки <::FIndBuffer> и Find() возвращает FALSE.

Method LISTITEM:GETITEM()

 GetItem() 	--> <vData>

GetItem() возвращает текущий элемент <::Buffer> списка <::Item>. Если массив <::Item> пуст, метод возвращает NIL.

Method LISTITEM:GETSELECTED()

 GetSelected() 	--> <aSelectedItems>

GetSelected() возвращает массив номеров выделенных элементов.

Method LISTITEM:HANDLEKEY()

 HandleKey(<nKey>) 	--> .T. || .F.

HandleKey() выполняет блок кода, ассоциированный с кодом клавиши <nKey>. Список кодов клавиш и связанных с ними блоков кода создается методом SetKey(). По умолчанию в этом списке находятся коды клавиш управления курсором, связанные с соответствующими методами класса LISTITEM.

Method LISTITEM:HOME()

 Home() 	--> NIL

Home() перемещает курсор на первый элемент списка <::Item>. Новый текущий элемент будет 1.

Method LISTITEM:INSITEM()

 InsItem(<vData>, <nPos>[, <sColor>][, <sSelColor>][, <lSelected>]) 	--> 0 || 1

InsItem() вставляет новый элемент <vData> в список <::Item>. Новый элемент будет иметь <nPos> номер в списке. Перед вставлением, размер <::Item> увеличивается на 1 и все элементы начиная с <nPos> сдвигаются вниз.

Method LISTITEM:KILLFOCUS()

 KillFocus() 	--> NIL

KillFocus() снимает фокус для объекта класса LISTITEM. Атрибут <::HasFocus> приобретает значение FALSE.

Method LISTITEM:LEFT()

 Left() 	--> NIL

Left() перемещает курсор в левую от текущей колонку. Новый текущий элемент будет <::Buffer> - <::RowWin>.

Method LISTITEM:LISTITEMNEW()

 ListItemNew(<nLrow>,<nLcol>,<nRrow>,<nRcol>[,<nColumns>[,<sDelimiter>[,<sColor>]]]) --> ListItem object

ListItemNew() создает и возвращает объект LISTITEM. Объект этого класса может быть использован для просмотра, редактирования, управления данными, организованными в список.

Method LISTITEM:PAGEDOWN()

 PageDown() 	--> NIL

PageDown() перемещает курсор на страницу вниз списка <::Item>. Размер страницы - <::ItemWin>. Текущий элемент будет <::Buffer>+<::ItemWin>.

Method LISTITEM:PAGEUP()

 PageUp() 	--> NIL

PageUp() перемещает курсор на страницу вверх списка <::Item>. Размер страницы - <::ItemWin>. Текущий элемент будет <::Buffer>-<::ItemWin>.

Method LISTITEM:REFRESH()

 Refresh() 	--> NIL

Refresh() перерисовывает обоасть просмотра. Вызывается из методов класса LISTITEM автоматически и не требует прямого вызова.

Method LISTITEM:RIGHT()

 Right() 	--> NIL

Right() перемещает курсор в правую от текущей колонку. Новый текущий элемент будет <::Buffer> + <::RowWin>.

Method LISTITEM:SELECT()

 Select([<vItem>]) 	--> TRUE

Select() выделяет цветом один или несколько элементов списка <::Item>

Method LISTITEM:SETCOLUMNS()

 SetColumns(<nCol>) 	--> TRUE || FALSE

SetColumns() устанавливает количество колонок в списке и задает новую сбалансированную ширину колонок.

Method LISTITEM:SETFOCUS()

 SetFocus() 	--> NIL

SetFocus() устанавливает фокус для объекта класса LISTITEM. Атрибут <::HasFocus> приобретает значение TRUE.

Method LISTITEM:SETITEM()

 SetItem(<nPos>) 	--> 0 || 1

SetItem() устанавливает новый текущий элемент с номером <nPos>. Если <nPos> больше, чем элементов в списке, мето возвращает NIL, номер текущего элемента не меняется.

Method LISTITEM:SETKEY()

 SetKey(<nKey>[, <bData>]) 	--> bPreviouse

SetKey() устанавливает новый кодовый блок, ассоциированный с кодом <nKey>. Когда при этом замещается существующий блок кода, метод возвращает этот существующий блок, иначе возвращает вновь установленный. Коды клавиш и связанные с ними кодовые блоки обрабатываются методом HandleKey().

Если <bData> NIL, SetKey() возвращает старый кодовый блок и удаляет код клавиши с ассоциированым с ним кодовым блоком.

По умолчанию с клавишами перемещения курсора(K_UP, K_DOWN, K_LEFT, K_RIGHT, K_PGUP, K_PGDN, K_HOME, K_END ....) ассоциированы соответствующие методы Left(), Right(), Up(), Down() и тд.

Блок кода, ассоциированный пользователем с кодом клавиши, получает два параметра: сам объект LISTITEM и код клавиши; и должен вернуть одно из следующих значений:

-1 Пользовательский запрос к LISTITEM потерять фокус

0 Кодовый блок, ассоциированный с кодом <nKey>, был выполнен

1 Неопределенный в словаре код <nKey>, код не был обработан

Method LISTITEM:SETTITLE()

 SetTitle(<aTitle>) 	--> TRUE || FALSE

SetTitle() устанавливает заголоки для колонок списка. Заголовки устанавливаются для первых len(<aTitle>) колонок, остальные колонки будут иметь пустые заголовки.

Method LISTITEM:SETWIDTHCOL()

 SetWidthCol(<aWidth>) 	--> TRUE || FALSE

SetWidthCol() устанавливает ширину колонок в списке. Если <aWidth[i]>==0, то для колонки с номером <i> ширина устанавливается автоматически.

Method LISTITEM:UP()

 Up() 	--> NIL

Up() перемещает курсор на предыдущий элемент массива <::Item>.

Example:

  #include <inkey.ch>
 #define FA_NORMAL	0
 #define FA_READONLY	1
 #define FA_HIDDEN	2
 #define FA_SYSTEM	4
 #define FA_VOLUME	8
 #define FA_DIRECTORY	16
 #define FA_ARCHIVE	32
 
 clear screen
 wopen(5, 5, 20, 30)
 li := ListItemNew(0, 0, maxrow(), maxcol()) //  create new ListItem object
 wbox()
 fname = fileseek("./", FA_ARCHIVE+FA_VOLUME+FA_SYSTEM+FA_HIDDEN+FA_READONLY)
 do while !empty(fname)
 li:AddItem(fname, "R/N, N/W")	// --> 1
 fname = fileseek()
 enddo
 li:SetKey(K_ENTER, {|oLI, nKey| alert(toString(oLI:Buffer)+ " " + oLi:GetItem())})
 li:SetFocus()
 do while .t.
 nKey := inkey(0)
 ret := li:HandleKey(nKey)
 if ret == -1
 exit
 endif
 enddo
 wclose()
 
 
 

Platforms

No dependies of platform.