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 тут не помогают — только один.