Translate

понедельник, 28 ноября 2016 г.

#2 ModernListView - режим мультивыделения

Доброго времени суток!

Продолжаю знакомить Вас с TListView и возможностями надстройки ModernListView.
Сегодня я расскажу как можно сделать MultiSelect для списка.


Этот пост я хотел сделать позже, но сегодня поступил Issue на GitHub с вопросом о MultiSelect, поэтому расскажу сейчас, раз код уже написан...

Поведение ориентировано на мобильные платформы - по какому то действию (долгий тап или кнопка выделения) меняется режим на MultiSelect.

В коде я использую методы из ModernListView
  • метод SetCustomColorForItem - заливает кастомным цветом конкретный элемент
  • метод SetDefaultColorForItem - обнуляет кастомный цвет и присваивает цвет по умолчанию, например из стиля
  • метод IsCustomColorUsed - помогает узнать применен ли к элементу кастомный цвет
Опишу некоторые моменты из проекта
Заводим глобальную переменную которая отвечает за переключение режимов
var
  FMultiSelectMode: boolean = false;
Также заведем константу, это будет имя поля в Data[] для каждого элемента
const
  sign_IsSelected = 'IsSelected';
Для удобной работы с MultiSelect в TListView написал помощника, комментарии к методам прилагаются
type
  TmyLVConfig = record
    // заполняется выбранный TListView данными
    class procedure makeList(const aLV: TListView); static;
    // выделение всего списка
    class procedure SelectAll(const aLV: TListView); static;
    // снятие выделения со всего списка
    class procedure UnSelectAll(const aLV: TListView); static;
    // выделяем конкретный элемент
    class procedure SelectItem(const aLV: TListView; const aIndex: integer); static;
    // снимаем выделение с конкретного элемента
    class procedure UnSelectItem(const aLV: TListView; const aIndex: integer); static;

    // получаем количество выделенных элементов
    class function getSelectedCount(const aLV: TListView): integer; static;
    // проверяем на выделение конкретный элемент
    class function IsSelectedItem(const aLV: TListView; const aIndex: integer): boolean; static;

    // возвращает цвет для выделения
    class function SelectedColor: TAlphaColor; static;
  end;

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