behavior:input-button — описывает поведение. этот (как и любой другой) behavior может быть назначен любому элементу. В данном случае назаначение behavior — послать нотификацию button_click хосту.
background-image:url(theme:button-normal); — этот чудный url означает что рендеринг делегируется операционной системе — на WinXP это например uxtheme.dll. Полный список включает практически полный набор из tmschema.h
Т.к. все элементы контроля и их содержимое есть элементы DOM то становится возможным стилировать их по всякому вплоть до конкретного суб элемента контрола.
Например вот как выглядит <select> (list box) теперь:
Концепт декларативного описания стиля состояний оказался очень сильным и гибким.
API позволяет писать свои собcтвенные behaviors в коде host applications — в том числе и рисовать.
HTMLayout как UI платформа предлагает использовать унифицированный HELEMENT вместо HWND, HLVITEM и иже с ними.
Так как такой UI это HTML то в любом месте работает контекстная команда copy — т.е. можно например скопировать tree view item в клипбоард и "выгрузить" его в MS Word.
CS>Нахожусь в процессе доводки новой версии HTMLayout. CS>Кратко о новой версии: основная фича — набор встроенных input behaviors —
а как узнать когда она перейдет в релиз? версия новая эта
Здравствуйте, IPv6, Вы писали:
IP>Здравствуйте, c-smile, Вы писали:
CS>>Нахожусь в процессе доводки новой версии HTMLayout. CS>>Кратко о новой версии: основная фича — набор встроенных input behaviors — IP>а как узнать когда она перейдет в релиз? версия новая эта
Там у меня RSS линк есть. Он в том числе сообщает обо все новых
билдах и версиях на сайте. Реально я хочу в черне закончить эту версию
к поненедельнику. Но это будет еще бета.
Мучаюсь вопросом:
В принципе несложно нарисовать нечто типа grid/list view
— scrollable table with headers. Но надо ли?
Честно говоря с точки зрения usability мне grid не нравится.
Гораздо симпатичнее что-ли выглядит список в "Add or Remove Programs"
(кстати тоже windowless Direct UI).
Но такую конструкцию уже можно и сейчас достаточно легко
воспроизвести в HTML.
Здравствуйте, Mamut, Вы писали:
CS>>Что скажет народ по поводу grid? Нужен ли он?
M>Нууу, табличную инормацию иногда выводить все же приходится... Наверное, все же нужен, ИМХО
Для того чтобы выводить достаточно <table>.
И еще: посмотри на add/remove programs. Это в принципе <table>.
Единственное отличие от grid — нет horizontal scrollbar — что
я считаю есть неоспоримое достоинство.
Если представить некий броузер "лохматых" записей в таблице БД то
гораздо удобнее для пользователя видеть запись в multiline виде
всю сразу чем прокручивать горизонтально столбцы забывая при том
а что же было в первом? Я так думаю.
А для упорядочивания (как правило это единсвенная полезная функция list view header)
гораздо лучше поставить где-то рядом группу option box'ов — вельми как хорошо-то будет.
Здравствуйте, pongo, Вы писали:
P>Здорово! Жду бету. А оно будет работать на c#, да?
Есть некий Eriq в Германии который делает HTMLayout.NET.
Я его не знаю. Исходников не видел но судя по составу вопросов должно получится
нечто серьезное.
CS>А для упорядочивания (как правило это единсвенная полезная функция list view header) CS>гораздо лучше поставить где-то рядом группу option box'ов — вельми как хорошо-то будет.
Хммм.. Не знаю, не знаю. List view header — хорошая штука. Правда, я думаю, енто дело можно будет эмулировать. Перерисовка/перестройка части документа ведь возможна, так?
Кстати, еще у меня возник вопрос. Насколько я понял, все контролы сейчас переписываются на custom windowless controls. Насколько их функциональность будет соответствовать дефолтной виндовой?
Здравствуйте, Mamut, Вы писали:
CS>>А для упорядочивания (как правило это единсвенная полезная функция list view header) CS>>гораздо лучше поставить где-то рядом группу option box'ов — вельми как хорошо-то будет.
M>Хммм.. Не знаю, не знаю. List view header — хорошая штука. Правда, я думаю, енто дело можно будет эмулировать.
А например? Из набора стандартных программ Windows, где тебе нужны headers?
Ну или нестандартных. Мне действительно интересно.
M>Перерисовка/перестройка части документа ведь возможна, так?
Да конечно. Как черз DOM так и загрузкой HTML в отдельные элементы.
M>Кстати, еще у меня возник вопрос. Насколько я понял, все контролы сейчас переписываются на custom windowless controls. Насколько их функциональность будет соответствовать дефолтной виндовой?
Во всяком случае стандартный behavior стандартных контролов IE один в один.
Tree view — тоже — очень близко — те нюансы что я знаю — имплементирую.
А там дальше жизнь покажет. Намерение — имплементировать все разумное и доброе.
Здравствуйте, c-smile, Вы писали:
CS>Во всяком случае стандартный behavior стандартных контролов IE один в один. CS>Tree view — тоже — очень близко — те нюансы что я знаю — имплементирую.
Не забудь сделать клавиатурные шорткаты.
Для тривью важна звездочка — expand all below selection Кстати, сама по себе эта звездочка должна как-то разумно рулиться.
Иногда она зело удобна. Но во многих случаях ее применение — это выстрел себе в голову. Например, встав в RegEdit на рут-ноду и нажав *, можно надооолго отправить машинку в даун. Хотелось бы "smart *" — т.е. распахнуть всех детей до определенного уровня, либо иметь возможность нажать esc в процессе и прекратить безобразие (это даже лучше).
Для листвью (если он вообще жизнеспособен) shift-ctrl-grey+ — autoadjust all columns
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, c-smile, Вы писали: CS>В стандартном combobox в выпадающем списке скроллбары не подсвечиваются по mouse over. CS>Интересно это так задумано или просто не доделали?
Наверное, не доделали. CS>Как вам вот такой combobox?
Мега!
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
CS>>>А для упорядочивания (как правило это единсвенная полезная функция list view header) CS>>>гораздо лучше поставить где-то рядом группу option box'ов — вельми как хорошо-то будет.
M>>Хммм.. Не знаю, не знаю. List view header — хорошая штука. Правда, я думаю, енто дело можно будет эмулировать. CS>А например? Из набора стандартных программ Windows, где тебе нужны headers? CS>Ну или нестандартных. Мне действительно интересно.
Ну, например Outlook — сортировка по From или дате. У нас тут народ активно пользуется. Или есть тут написанная задней ногой (моей ) програмка для составления резерваций отелям. Список резерваций сортируется по дате, статусу (pending, confirmed, cancelled) или оплаченности.
Хотя, опять же. Это можно и эмулировать при условии, что манипуляция через DOM достаточно быстрая (все равно списки зачастую виртуальны с подгрузкой данных из внешних источников)
M>>Перерисовка/перестройка части документа ведь возможна, так? CS>Да конечно. Как черз DOM так и загрузкой HTML в отдельные элементы.
Ну, DOMа мы не боимся
M>>Кстати, еще у меня возник вопрос. Насколько я понял, все контролы сейчас переписываются на custom windowless controls. Насколько их функциональность будет соответствовать дефолтной виндовой?
CS>Во всяком случае стандартный behavior стандартных контролов IE один в один. CS>Tree view — тоже — очень близко — те нюансы что я знаю — имплементирую. CS>А там дальше жизнь покажет. Намерение — имплементировать все разумное и доброе.
Этого более, чем достаточно (тем более, что и tab order уже починен ). Эхх, надо постепенно начинать руководство подгатавливать к расходам на лицензию Потому что слюнки текут давно и обильно.
CS>Вопрос имею:
CS>В стандартном combobox в выпадающем списке скроллбары не подсвечиваются по mouse over. CS>Интересно это так задумано или просто не доделали?
Скорее, не доделали.
CS>Как вам вот такой combobox?
*drools*
Краткое выражение чувств (4 буквы): хоцю
Пояснение: Нестандартные комбобоксы (combo box with complex layout в Вашей терминологии) — это тема отдельных, зачастую весьма развернутых туториалов и каждый раз разных для разных фреймворков. Реализация редко тривиальна, но иногда позарез нужна. Например, DateTimePicker — это частный случай такого комбобокса, но при этом всегда выделяется в отдельный, да еще и немодифицируемый, компонент (или, например, вот) А иногда ведь хочется чего-нибудь такого, странного
Здравствуйте, Mamut, Вы писали:
M>Пояснение: Нестандартные комбобоксы (combo box with complex layout в Вашей терминологии) — это тема отдельных, зачастую весьма развернутых туториалов и каждый раз разных для разных фреймворков. Реализация редко тривиальна, но иногда позарез нужна. Например, DateTimePicker — это частный случай такого комбобокса, но при этом всегда выделяется в отдельный, да еще и немодифицируемый, компонент (или, например, вот) А иногда ведь хочется чего-нибудь такого, странного
M>В общем, вещь разумная, добрая и вечная
К слову сказать, о нестандартных контролах вообще. На мой вкус, любая библиотека контролов должны в первую очередь проектироваться с расчетом на создание новых контролов. Для большинства существующих библиотек это, к сожалению, не так.
PS. Пришлось написать свою, совсем другую Если кому интересно, как-нито поделюсь заложенными принципами. Кажется, так еще никто не делал
ЗХ>К слову сказать, о нестандартных контролах вообще. На мой вкус, любая библиотека контролов должны в первую очередь проектироваться с расчетом на создание новых контролов. Для большинства существующих библиотек это, к сожалению, не так.
Вот за что я люблю Qt — за простор и неограниченный полет фантазии.
ЗХ>PS. Пришлось написать свою, совсем другую Если кому интересно, как-нито поделюсь заложенными принципами. Кажется, так еще никто не делал
Здравствуйте, c-smile, Вы писали:
CS>Как вам вот такой combobox? CS>
А если "выпадающий список" (или как его назвать ) можно полупрозрачным сделать —
Клавиатура на нём работает? ([Alt+]LeftArrow-RightArrow-TopArrow-BottomArrow, Enter, Escape)?
Здравствуйте, Mamut, Вы писали:
ЗХ>>К слову сказать, о нестандартных контролах вообще. На мой вкус, любая библиотека контролов должны в первую очередь проектироваться с расчетом на создание новых контролов. Для большинства существующих библиотек это, к сожалению, не так.
M>Вот за что я люблю Qt — за простор и неограниченный полет фантазии.
ЗХ>>PS. Пришлось написать свою, совсем другую Если кому интересно, как-нито поделюсь заложенными принципами. Кажется, так еще никто не делал
M>Колись
Ну, грубо говоря, у меня каждый виджет каждый раз собирается из кусочков-"концепций".
Чтобы понятно было, сразу пример. Если кто-то еще помнит мой навигатор
Поведение определяет изменение состояния по событию. Стиль определяет отрисовку в зависимости от состояния. Все стили и поведения — в общем, просто выглядящие классы, создать свой, новый — дело 5 минут. К примеру, когда мне захотелось, чтобы в навигаторе рядом с каждым файлом была кнопка "Анализировать", мне пришлось написать следующие, условно говоря классы:
class AnalyzeButton: Behavior
{
bool onLClick(Area _area)
{
if(_area.name == "button") //кликнули именно по кнопке
{
file = state["list-items"][_area.number]; //узнаем, какому файлу соответствует кликнутая область
...
return true;
}
return false;
}
}
class InListButton: Style
{
void setup()
{
areas.push("button");//определяет, что в виджете есть область по имени "button"
}
rect doLayout(rect _place)
{
//Получает место внутри которого надо расположиться, откусывает себе кусок, возвращает остаток
}
void doDraw ()
{
//отрисовывает себя в заданном месте
}
}
И все. Добавив эти два класса в код, рождающий навигатор, имеем список с кнопками.
Чтобы сделать в списке не мультиселект, а сингеселект, надо заменить соотв. поведение. Чтобы изменить скроллбар со стандартного на какой-нибудь "рыбий глаз", надо всего лишь сменить соответствующий стиль (для другой отрисовки) и соотв. поведение (для другой обработки движений мыши). И т.п.
Здравствуйте, Mamut, Вы писали:
M>>>Хммм.. Не знаю, не знаю. List view header — хорошая штука. Правда, я думаю, енто дело можно будет эмулировать. CS>>А например? Из набора стандартных программ Windows, где тебе нужны headers? CS>>Ну или нестандартных. Мне действительно интересно.
M>Ну, например Outlook — сортировка по From или дате. У нас тут народ активно пользуется. Или есть тут написанная задней ногой (моей ) програмка для составления резерваций отелям. Список резерваций сортируется по дате, статусу (pending, confirmed, cancelled) или оплаченности.
Например я хочу сортировать по нескольким колонкакм — headers тут не помогают — только один.
Здравствуйте, _FRED_, Вы писали:
_FR>А если "выпадающий список" (или как его назвать ) можно полупрозрачным сделать — _FR>Клавиатура на нём работает? ([Alt+]LeftArrow-RightArrow-TopArrow-BottomArrow, Enter, Escape)?
Полупрозрачность — технически возможно. Но только на тех OS которые поддерживают оную.
Клавиатура работает. Пока стандартные home/end/up/down
Но вот кстати инетерсный вопрос: так как у элементы лежат в некоей структуре
в данном случае в таблице то есть возможность организовать перемещение "стрелками".
Например по элементам контроля лежащим в двумерной таблице удобно ходить именно стрелками а не
Tabом. Это имеет смысл?
Re[4]: Клавиатурная навигация, в частности Tab navigation
Здравствуйте, c-smile, Вы писали:
_FR>>А если "выпадающий список" (или как его назвать ) можно полупрозрачным сделать — _FR>>Клавиатура на нём работает? ([Alt+]LeftArrow-RightArrow-TopArrow-BottomArrow, Enter, Escape)?
CS>Полупрозрачность — технически возможно. Но только на тех OS которые поддерживают оную.
Кстати, можно сделать ширину-высоту выпадающего окна resizable для юзера, то есть в runtime (и, соответственно, полосы прокрутки внутрь вставить) — потому как при разрешении 600х800 (или даже 480х640) такая таблица может запросто не влезть в экран (или я не прав ) Тогда полупрозрачность для _не_ "тех OS которые поддерживают оную" не будет критичной — я о ней подумал, потому что такой широкий список (а так как элемент управления, в принципе, позволяет такие создавать, то эта "фича" будет востребована) закрывает половину (а то и большую часть) экрана.
CS>Клавиатура работает. Пока стандартные home/end/up/down
CS>Но вот кстати инетерсный вопрос: так как у элементы лежат в некоей структуре CS>в данном случае в таблице то есть возможность организовать перемещение "стрелками".
CS>Например по элементам контроля лежащим в двумерной таблице удобно ходить именно стрелками а не CS>Tabом. Это имеет смысл?
Примерно так и сделано в DateTimePicker'е:
Alt+DownArrow - открыть список;
LeftArrow|RightArrow|TopArrow|DownArrow - Перемещение по таблице календаря влево|вправо|вверх|вниз;
PageDown|PageUp - месяц вперёд|назад;
Ctrl+PageDown|Ctrl+PageUp - год вперёд|назад;
Home|End - первая|последняя дата текущего месяца;
Esc - закрытие списка и возврат предыдущего значения;
Enter - закрытие списка и установка текущего значения
(как с кливиатуры перейти на Today так выснить и не удалось ).
Tab в "раскрытом" состоянии он вообще не обрабатывает. "Стандартный" комбо — применяет текущее значение (как по Enter) и перемещает фокус на следующий элемент. ИМХО, вполне очевидно — Tab используется только для навигации по "макроэлементам".
Здравствуйте, _FRED_, Вы писали:
_FR>Кстати, можно сделать ширину-высоту выпадающего окна resizable для юзера, то есть в runtime (и, соответственно, полосы прокрутки внутрь вставить) — потому как при разрешении 600х800 (или даже 480х640) такая таблица может запросто не влезть в экран (или я не прав ) Тогда полупрозрачность для _не_ "тех OS которые поддерживают оную" не будет критичной — я о ней подумал, потому что такой широкий список (а так как элемент управления, в принципе, позволяет такие создавать, то эта "фича" будет востребована) закрывает половину (а то и большую часть) экрана.
Popup окно автоматически вписывается в (не может иметь размеров больше чем) пол-экрана (текущего монитора) по высоте и две трети экрана по ширине (стандартное поведение). Соответсвенно если такя вероятность есть
то у стиля Popup окна ставим overflow: auto — и гори оно огнем — скролбары автоматически появятся.
CS>>Например по элементам контроля лежащим в двумерной таблице удобно ходить именно стрелками а не CS>>Tabом. Это имеет смысл?
_FR>Примерно так и сделано в DateTimePicker'е: _FR>
_FR>Alt+DownArrow - открыть список;
_FR>LeftArrow|RightArrow|TopArrow|DownArrow - Перемещение по таблице календаря влево|вправо|вверх|вниз;
_FR>PageDown|PageUp - месяц вперёд|назад;
_FR>Ctrl+PageDown|Ctrl+PageUp - год вперёд|назад;
_FR>Home|End - первая|последняя дата текущего месяца;
_FR>Esc - закрытие списка и возврат предыдущего значения;
_FR>Enter - закрытие списка и установка текущего значения
_FR>
_FR>(как с кливиатуры перейти на Today так выснить и не удалось ).
_FR>Tab в "раскрытом" состоянии он вообще не обрабатывает. "Стандартный" комбо — применяет текущее значение (как по Enter) и перемещает фокус на следующий элемент. ИМХО, вполне очевидно — Tab используется только для навигации по "макроэлементам".
Ага, спасибо. Тут еще одна фенечка — у меня попапы могут иметь дочерние элементы контроля тоже...
Re: HTMLayout, версия "Pandorra" preview available
Здравствуйте, c-smile, Вы писали:
CS>Например я хочу сортировать по нескольким колонкакм — headers тут не помогают — только один.
CS>Вот смотри например: CS>http://www.newsgator.com/images/ss_autoprev.gif CS>Это уже не column headers а нечто другое совсем...
А например, в TestTrack можно сортировать по нескольким колонкам и это удобно!!!
Здравствуйте, iLYA, Вы писали:
LYA>Здравствуйте, c-smile, Вы писали:
CS>>Например я хочу сортировать по нескольким колонкакм — headers тут не помогают — только один.
CS>>Вот смотри например: CS>>http://www.newsgator.com/images/ss_autoprev.gif CS>>Это уже не column headers а нечто другое совсем...
LYA>А например, в TestTrack можно сортировать по нескольким колонкам и это удобно!!!
"Пальцем покажи как".
Нет там этого. Во всяком случае в последней версии.
Есть фильтры. Но это уже другое. А сортировать только по одной колонке.
Т.е. примитивный набор radio buttons.
Вот кстати идея хорошая. Напишу-ка я себе TestTrack в Pandora...
Здравствуйте, c-smile, Вы писали:
CS>"Пальцем покажи как".
CS>Нет там этого. Во всяком случае в последней версии. CS>Есть фильтры. Но это уже другое. А сортировать только по одной колонке. CS>Т.е. примитивный набор radio buttons.
CS>Вот кстати идея хорошая. Напишу-ка я себе TestTrack в Pandora...
Новую версию я не трогал...а в старой можно было. В header контроле ставились апострофы: один — первичный ключ, 2ва апострофа — вторичный ключ. Примитивно, но не в этом суть. Главное оно сортировало по двум колонкам.
Здравствуйте, iLYA, Вы писали:
LYA>Здравствуйте, c-smile, Вы писали:
CS>>"Пальцем покажи как".
CS>>Нет там этого. Во всяком случае в последней версии. CS>>Есть фильтры. Но это уже другое. А сортировать только по одной колонке. CS>>Т.е. примитивный набор radio buttons.
CS>>Вот кстати идея хорошая. Напишу-ка я себе TestTrack в Pandora...
LYA>Новую версию я не трогал...а в старой можно было. В header контроле ставились апострофы: один — первичный ключ, 2ва апострофа — вторичный ключ. Примитивно, но не в этом суть. Главное оно сортировало по двум колонкам.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Здравствуйте, iLYA, Вы писали:
LYA>>Здравствуйте, c-smile, Вы писали:
CS>>>"Пальцем покажи как".
CS>>>Нет там этого. Во всяком случае в последней версии. CS>>>Есть фильтры. Но это уже другое. А сортировать только по одной колонке. CS>>>Т.е. примитивный набор radio buttons.
CS>>>Вот кстати идея хорошая. Напишу-ка я себе TestTrack в Pandora...
LYA>>Новую версию я не трогал...а в старой можно было. В header контроле ставились апострофы: один — первичный ключ, 2ва апострофа — вторичный ключ. Примитивно, но не в этом суть. Главное оно сортировало по двум колонкам.
ЗХ>Смотри обсуждение этой темы ранее
Здравствуйте, c-smile, Вы писали:
CS>>>>"Пальцем покажи как".
CS>>>>Нет там этого. Во всяком случае в последней версии. CS>>>>Есть фильтры. Но это уже другое. А сортировать только по одной колонке. CS>>>>Т.е. примитивный набор radio buttons.
CS>>>>Вот кстати идея хорошая. Напишу-ка я себе TestTrack в Pandora...
LYA>>>Новую версию я не трогал...а в старой можно было. В header контроле ставились апострофы: один — первичный ключ, 2ва апострофа — вторичный ключ. Примитивно, но не в этом суть. Главное оно сортировало по двум колонкам.
ЗХ>>Смотри обсуждение этой темы ранее
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Мммм... А ты уверен, что надо отменять?
Обратная операция должна быть.
Выключатели в квартире работают только один раз на включение. Чтобы выключить свет в коридоре — надо включить свет в туалете или на кухне...