LINUX.ORG.RU
ФорумTalks

[gui][печаль] Что делать с элементами списков?


0

0

Я про всякие ListView, TableView, TreeView и их производные в виде портянок комбобоксов, иконок или вкладок. До вчерашнего дня я считал их самостоятельной сущностью, отображащей какие-то данные и позволяющей что-то с ними делать. Я хотел оставить все как есть в текущих реализациях, разве что добавить мелочи вроде поиска/подстветки.

Сегодня же, во время разгребания сотен мокапов и просмотра одного видео я понял, что был не прав. Это скорее контейнерные элементы, layout, только определяющие положение других виджетов. А следовательно, если следовать идее о том, что пользователь сам определяет layout, то появляется возможность разделить 1 список на несколько, задать в них особые правила сортировок/подстветок/фильтрации. Можно пойти дальше и в каждом таком списке выставить свои правила по автоматической установке свойств.

Пример (из прошлого треда про комбобоксы): список модулей для ядра, у каждого элемента 3 состояния - это «вкл», «выкл» и «модулем». Пользователь открывает список, разделяет на 3 части, в каждой из которых выставляет только свой тип сборки, после чего может таскать элементы между окнами этих списков.

Пример 2: недавно пункты меню в фаерфоксе поменяли местами, а такой подход к организации списков позволит пользователю не просто задать свою сортировку, но и полностью по своему желанию контролировать содержимое

Выглядит многообещающе, но как это реализовать я не представляю. Пока посижу в печале и подумаю над бренностью мира, над убиением комбобоксов в пользу списков и порисую свои майндмапы.

А оно надо? Пользователям и так в каждой второй софтине надо настроить кучу всего, тему DE, панели инструментов для всяких офисов и текстовых редакторов, а ты хочешь им каждый комбобокс/лист предложить ковырять под себя? Этак работать некогда будет, только настраивать.
Нафик. Настройка для настройки.

HE-OH ()
Ответ на: комментарий от HE-OH

Ага, зато бывает поставишь софтину, а настроить что-то нельзя. Один раз даже побежал исходники патчить, так сильно меня оформление добесило. Открыл длинный список, а поиска в нем нет (постоянно матерюсь, когда ищу записи в буфере обмена). Словарь в систрее вылетел и был перезапущен - иконка не на привычном месте, бесит, а перетащить на старое место нельзя.

simple_best_world_web_master ()
Ответ на: комментарий от HE-OH

Ну написать несколько стандартных шаблонов размещения элементов, делов то

different_thing ()
Ответ на: комментарий от different_thing

Я конечно могу показать свой быдлокод, рисующий ч0рные полупрозрачные кнопочки/поля текстового ввода с пиксельными шрифтами внутри, но после этого http://www.linux.org.ru/gallery/5070593.png тебе раем покажется, поверь. И все это на java, что еще страшнее. В последнее время меня задолбало переделывать только что созданное и я понял, что у меня нехватает знаний по интерфейсам. Вот теперь разребаю мокапы 30 летней давности, смотрю видео и пишу спеки/роадмапы, как оно должно быть, как реализовывать сторонние элементы, дабы система была расширяема для разных извращений и не пришлось больше переделывать уже созданное.

simple_best_world_web_master ()
Ответ на: комментарий от simple_best_world_web_master

simple_best_world_web_master (фотография)

Я конечно могу показать свой быдлокод, рисующий ч0рные полупрозрачные кнопочки/поля текстового ввода с пиксельными шрифтами внутри, но после этого www.linux.org.ru/gallery/5070593.png тебе раем покажется, поверь. И все это на java, что еще страшнее.

Дело твоё, но... лучше забей. Если у тебя конечно нет кучи времени лишнего.

ShTH ()
Ответ на: комментарий от different_thing

Хм, увидел у себя:
fontQueryX=new short[fontQuerySize];
fontQueryY=new short[fontQuerySize];
fontQueryID=new short[fontQuerySize];
fontQueryAngle=new double[fontQuerySize];
fontQueryIsCenter=new boolean[fontQuerySize];
И решил не выкладывать, там такие ужасы

simple_best_world_web_master ()
Ответ на: комментарий от different_thing

Там нормальное решение заменено ненормальным. Зачем я это сделал, не помню.

different_thing ()
Ответ на: комментарий от different_thing

Лучше бы чего по теме сказал, я не знаю что делать со списками. Раньше я все в них пытался засунуть, исключить остальные элементы по максимуму, а теперь... не знаю что делать

simple_best_world_web_master ()
Ответ на: комментарий от simple_best_world_web_master

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

list.addElement (e);

Element e2 = new Element («Родитель»); // Или как там в жабе?
Element e3 = new Element («Дитё»);
e2.add(e3);
list.add (e2);
list.attachLayout (new TreeView());

Как реализовать - сам думай.

different_thing ()

Поток сознания какой-то :3

Чем это отличается от model-view-delegate в qt?

Gary ★★★★★ ()
Ответ на: комментарий от different_thing

> list.attachLayout (new TreeView());

Вот в этом то у меня и затыка. Мне все созданное надо будет наизнанку вывернуть, ибо было так:

1. приложение не определяет, как именно должен быть отображен элемент списка, это может быть таблица, превьюшка, иконка, какой-то самостоятельный виджет. Не определяет и сам список: скажем, на десктопе это будет таблица, а на экране мобильного телефона - только краткие названия в столбик, отображение подробностей элемента (остальные поля таблицы) только после клика. Это - детали реализации на конкретной платформе, приложение не должно об этом знать, да и пользователь может переключать виды по своему усмотрению. К примеру, нужно указать файлы фотографий: можно сначала вывести тумбинашки (как это делается в KDE), потом посмотреть как ленту в шкале времени, потом переключить View на карту и получить метки с этими фотографиями и геопривязкой. Но для приложения - это все неизвестно, это только выбор файлов определенного типа. А будет ли пользователь кликать, выбирать по маске в имени, по диапазону в дате или по области съемки - это его, пользователя дело.

2. смотрим на работы Раскина относительно «все есть контент», это дает еще больше свободы, чем-то напоминает идею файл-серверов из Plan9, когда элементу не надо делать container.add(new Element()) 100 000 раз, а можно скормить ссылку на dataprovider и пусть система сама разбирается как этим контентом работать. Например, имплементация мобильного телефона может подгружать элементы списка динамически, так как оперативки в достатке нет, система может предложить пользователю опции для навигации по большим спискам, ну и главное - мешапы, возможность смешивать информацию из разных источников. Скажем, есть у меня dataprovider, отдающий контент «список торрентов», его можно расширить данными из imdb и пользователь сможет сортировать кино не только по названию, но и рейтингу.

А если представить, что список - это только лейаут, а не смотрелка/выбиралка данных, то все летит фиг знает куда, как это перестроить на новый лад я уже не знаю

simple_best_world_web_master ()
#define bicyle_toolkit_finished 0;

while ( ! bicyle_toolkit_finished ) {
    post_another_stupid_gui_thread( LOR->talks );
    sleep( 86400 );
}
nu11 ★★★★★ ()
Ответ на: комментарий от ls-h

Начинал отсюда: http://en.wikipedia.org/wiki/Category:Human-computer_interaction_researchers - кладезь идей, по ссылкам разное попадается. Вот скажем http://www.cs.cmu.edu/afs/cs/project/amulet/www/userspictures/shizuki.klieg2.gif или http://users.telenet.be/jomejom/ribeiro-3-gui.html - из разряда «непонятно, но интересно»

http://www.humanized.com/movies/EnsoIntroFinalSmall.flv - хоть демонстрируется и конкретный продукт, но корнями он уходит в plumbing из Plan9 (http://en.wikipedia.org/wiki/Plumber_(program)), выделяясь уже в отдельный вид взаимодействия

http://vimeo.com/6712657 - на вид бесполезно, но задумка хорошая, в комментах говорят, что все правильно сделали

simple_best_world_web_master ()
Ответ на: комментарий от simple_best_world_web_master

Ты над интерфейсами форумов не думал? Ник, конечно, в глаза кидается, но в наше время судить по нику — дурной тон.

kde4-hater ()
Ответ на: комментарий от kde4-hater

угу, потом уже заметил. Что поделать, быдлокодинг на недоязычках разжижает мозг

nu11 ★★★★★ ()
Ответ на: комментарий от simple_best_world_web_master

Интерфейс — понятие более широкое, чем морды для локальных программок. Чем шире смотреть, тем более всеобъемлющие принципы открываются.

К тому же, если довольно-таки абстрактно посмотреть, то форум — это программа работающая с удалённой базой данных, выполняющаяся в виртуальной машине клиента (браузере).

kde4-hater ()
Ответ на: комментарий от kde4-hater

Если бы ты читал мои гуи-треды раньше, то увидел бы, что веб-морда для всего этого безобразия тоже планируется, как отдельный рендерер. Изначально оно задумывалось для 3 платформ: десктоп (тут я хотел немного смухлевать и рисовать через opengl), мобильные приложения (j2me) и веб, в 2 последних случаях кнопки рисовать нечем (вернее много чем, непонятно что выбрать), малые ресурсы, невозможность активно дергать базы данных. И дабы весь этот ужас не портировать друг на друга и задумывался тулкит (задумка правда идет чуток дальше, нежели просто отрисовка кнопок).

Больше всего меня пугает написание своего веб-браузера (html-парсера + генерилку layout из него), но если это осилить и сделать бекенд на веб, то можно покончить с глюками оригинальных браузерных layout-движков и получить 100% переносимость. Один код разметки - можно смотреть везде. Кстате, где-то тут болтается тред про «браузер на js внутри браузера», можешь посмотреть.

simple_best_world_web_master ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.