Как реализовать ListView Control?
От: LMS  
Дата: 21.03.08 13:47
Оценка:
Необходимо сделать список строк, повторив функциональность ListView Control. При клике на выделеном элементе необходимо его подменять на editbox. После редактирования строки (окончание по Enter, Esc или смена фокуса элемента), необходимо проверить отсутствие дублирования строк, если строки совпадают, необходимо сигнализировать об этом, либо вернуть исходное значение. При смене выделения элемента списка необходимо обновлять содержимое других контролов.
Как лучше реализовать эту функциональность?
Re: Как реализовать ListView Control?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 21.03.08 15:45
Оценка:
Здравствуйте, LMS, Вы писали:

Ну вот насчёт того чтобы в выделенной строке появлялся edit, можно так

http://www.terrainformatica.com/?p=83
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Как реализовать ListView Control?
От: c-smile Канада http://terrainformatica.com
Дата: 21.03.08 16:23
Оценка:
Здравствуйте, LMS, Вы писали:

LMS>Необходимо сделать список строк, повторив функциональность ListView Control. При клике на выделеном элементе необходимо его подменять на editbox. После редактирования строки (окончание по Enter, Esc или смена фокуса элемента), необходимо проверить отсутствие дублирования строк, если строки совпадают, необходимо сигнализировать об этом, либо вернуть исходное значение. При смене выделения элемента списка необходимо обновлять содержимое других контролов.

LMS> Как лучше реализовать эту функциональность?


Посмотри /html_samples/behaviors/editable-select.htm — это так называкмый редактирумый pick-list (то что ты описал иногда так называют).
Обрати внимание на гиперлинк внизу списка.

Редактируемость option достигается простым объявлением (и см. ссылку в посте Adontz):

#editable-select[editable] option
{
    behavior:edit;
}


Ну и behavior_editable_select.cpp модифицируем если надо — как минимум там не проверяется уникальность caption.
Re[2]: Как реализовать ListView Control?
От: LMS  
Дата: 25.03.08 07:15
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Посмотри /html_samples/behaviors/editable-select.htm — это так называкмый редактирумый pick-list (то что ты описал иногда так называют).

CS>Обрати внимание на гиперлинк внизу списка.

CS>Редактируемость option достигается простым объявлением (и см. ссылку в посте Adontz):


CS>
CS>#editable-select[editable] option
CS>{
CS>    behavior:edit;
CS>}
CS>


CS>Ну и behavior_editable_select.cpp модифицируем если надо — как минимум там не проверяется уникальность caption.


Спасибо за совет. Воспользовался. Я для pick-list при инициализации выставляю атрибут editable и в функции handle_focus обрабатываю FOCUS_LOST и FOCUS_GOT. Все нормально работает, но при первом выделении элемента в editable-select в FOCUS_GOT приходит уведомление только для div, хотя фокус находится в option.


   if(params.cmd == (HANDLED | FOCUS_GOT))
   {
      htmlayout::dom::element el = params.target;
      if(!el.is_valid())
         return on_focus( he, params.target, params.cmd ); 

      std::string str = el.get_element_type(); // отладочная инф. 

      htmlayout::dom::element par = el.find_nearest_parent("[name='styles_name']"); // имя widget

      if(!par.is_valid())
         return on_focus( he, params.target, params.cmd ); 

      int curstr = el.get_attribute_int("value", NONE);     // номер option

      // обновить контролы для стиля
      if(curstr >= 0)
      {
         OnStyleChange(par);
      }
      return TRUE;

   }


Как его отловить?
Re[3]: Как реализовать ListView Control?
От: LMS  
Дата: 31.03.08 12:55
Оценка:
Сорри, давно не updateился . В 3.2.2.14 всё работает нормально.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.