LINUX.ORG.RU

Универсальная таблица

 , ,


0

2

Привет. Поразмыслив на досуге, пришел к выводу, что 95% процентов моих гуй задач покроет табличный интерфейс. Хочу некоторый шаблонный класс-таблицу на fltk (предпочтительно, но на крайняк возможны варианты, но не на QT), задается количество колонок подписи и тп, принимает Х колбэков на попытку редактирования соответствующей колонки, принимает Z колбэков (с подписями для соответствующего пункта меню) на какие-то действия с этими данными (удалить, добавить и т.п). Shortcuts, мультивыбор.

В общем-то задача на 1К строк примерно, но разбираться в gui toolkit’ах мне вообще неохота. Мне пофиг на внешний вид, функциональность в приоритете. Мож встречали что-то подобное готовое к заюзыванию? Ну не хочется мне клепать формочки с виджетами, ещё и поддерживать это дерьмо, хочу дать пачку колбэков и делать из них своих основные действия


Если вы будете использовать FLTK, разбираться придется все равно, т.к. по умолчанию он работает как фреймворк, т.е. монопольно захватывает поток выполнения.

Посмотрите у Столярова в «Программирование: введение в профессию второе издание», третий том. За вечер разберетесь.

zx_gamer ★★★
()
Последнее исправление: zx_gamer (всего исправлений: 1)
Ответ на: комментарий от zx_gamer

Поток создать - дело нехитрое, в общем-то в целом FLTK - не сложен, проштудировав по диагонали его доку представление имею.

Вот только начав попытку практической реализации хотелки (универсальной таблицы) начал слишком много тратить время на мелочах - взяв две таблицы из примеров (sort_table и spreadsheet) я не въехал почему одна из них позволяет довыбор/снять выбор с одной строки удерживая CTRL, а другая нет. Вроде в event колбэках ничего об этом нет. Не, я не тупой, и если прижмет - я разберусь, но желания нет, и время это отнимет, хочется избавить себя от этого, не моё это все формошлепство.

kvpfs_2
() автор топика
Ответ на: комментарий от anonymous

Мне думается, что таблица - один из лучших способов представлять данные, и не могло никому не прийти в голову сделать некую generic таблицу на шаблонах.

Я не собираюсь создать вау эффект от цветастости и обилия кнопочек в форме сердечек с прозрачностью на фоне заката. А себя я лучше применю в действительно важных элементах системы. Да и тут ведь как получается - отвлекашеься на что-то, проходит время, забываешь контекст в котором писал до. Отвлекаться вредно, тем более на гуйню, потом пару дней въезжать придется обратно в контекст.

kvpfs_2
() автор топика

возможны варианты, но не на QT

Разумеется, не на QuickTime. А если ты имел в виду Qt, ты её, похоже, просто не знаешь. Рекомендую таки потыкать, там не только GUI, если что.

Если что, я ничего не имею против FLTK, а также Nuklear и Dear ImGui. Но если брать эти библиотеки, хорошо бы убедиться, хватит ли тебе их возможностей. Например, не понадобится ли тебе драг-н-дроп из одной таблицы в другую..

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

Я кстати, тоже совсем не энтузиаст формошлёпства. И именно поэтому, в числе прочего мне нравится Qt, где формошлёпство максимально автоматизировано и можно сосредоточиться на прикладной стороне вопроса.

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

Я ведь не могу из своей приложухи запустить emacs с таблицой с нужными данными, нужными кнопками-действиями над этими данными, и получать вызов callback’ов из другой приложухи при редактировании данных внутри emacs’а? Для этого у emacs есть какая-то либа c ipc между либой и emacs’ом?

PS: если нужно самому костылить IPC на лиспе, то с FLTK я справлюсь быстрее)

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 1)

Спасибо за ответы. Чего-то готового я не нашел.

Тем временем понял про выделение в флтк’ашной таблице - обычная таблица Fl_Table умеет выделять регионами (группу ячеек), можно запрашивать координаты этой области. Fl_Table_Row - наследница, просто добавляет дополнительный флаг (признак выделенности + всякие shortcuts) к строкам, и дает возможность запросить данный флаг для каждой строки отдельно, нельзя получить массив с индексами выделенных ячеек. Странное решение, в общем и у меня не таблица на 1^9 строк, сгодится.

Накостылю свою таблицу на FLTK. Вся суть взаимодействия с нею из основного кода - дать ей начальные данные ячеек и заголовков, колбэк на случай когда юзер правит данные в ячейке, + пачку пар {колбэк, «подпись в менюшке»}, которые задают кол-во поддерживаемых действий (удалить, добавить, …). Данную обобщенную интерактивную таблицу удастся заюзать раз 10 в проекте для различных задач. Не будет надобности делать множество разных гуй окон под каждую задачу и поддерживать потом этот хлам.

kvpfs_2
() автор топика

Нормальные контролы с таблицами есть только в Qt. С полноценным view/model разделением и удобнейшим механизмов делегатов, в итоге можно делать сложные вещи минимумом кода. Ну для моего случая там незаменимый painter быстрый и с antialiasing, т.к. мне нужно было графику рисовать.

но не на QT

Игнорировать самый подходящий инструмент для своей задачи - это не просто профнепригодность, это ламерство.

Покажи потом что ты там наговнякаешь на своём fltk, спорю что на Qt это можно сделать проще и в 2 раза короче.

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

Покажи потом что ты там наговнякаешь на своём fltk, спорю что на Qt это можно сделать проще и в 2 раза короче.

Ок, после сна закончу, думаю. Вряд ли тебе интересно что я конкретно написал, я скажу объем кода (думаю, что уложусь в 3 сотни), покажу результат с апи торчащим к вызывающей стороне. Там уже можно оценить сложность аналога на qt. QT недолюбливаю, он тяжёлый, пишет свою элементарщину, от него несёт проприетарщиной, ещё и свой препрцессор вдовесок, перебор.

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 2)
Ответ на: комментарий от wandrien

Виджет: https://tktable.sourceforge.net/tktable/doc/tkTable.html

Пример использования: https://moodss.sourceforge.net/

только тогда уж https://tktreectrl.sourceforge.net/

просто когда-то сталкивался с тем-же что хочет ТС: интерфейсы где много табличек и надо было максимально просто описывать и однотипно работать; .. Как бек для этого безобразия идеально подошёл treectrl. А так - это классика Model/View

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

Покажи потом что ты там наговнякаешь на своём fltk, спорю что на Qt это можно сделать проще и в 2 раза короче.

Накостылил. Юзать таблицу просто (простое заполнение, можно и с циклами, естественно):

int main()
{
   Itable<3> t("My table",
         {
            Column_header{"First column", 100, false},
            {"Second column", 150, true}, // title, width, editable
            {"Third column", 200, false}},
         {
            {"hello", "world", "1"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"},
            {"2", "3", "4"}
         },
         // callback called at cell modification
         {[](data_t<3> &d, int row, int col, const char *new_val) {
            d[row][col] = new_val;
            d.pop_back(); // delete last item
         }},
         {
            {"first_action", 0, {}},
            {"menu_root/second_action", 0, {}},
            {"third_action", 0,
               // callback at action button click
               [](data_t<3> &, std::vector<int>) {
                  std::cout << "Hello world!!!" << std::endl; }},
            });

   t.show();
   Fl::run();
}

Задаю пункты меню с колбэками при нажатии на них (в колбэк передается массив с данными таблицы и массив с индексами выбранных строк, в колбэке можно редактировать данные как хочется). Красные колонки доступны для редактирования, по завершению редактированию дергается колбэк, в него передается массив строк таблицы и новое значение, применять его или нет - дело хозяйское. Ну и всякое типо прокрутки, смена ширины колонок. В общем вышло точно то, что и хотел. Получилось 300 строк кода. Теперь заюзаю данную таблицу по максимуму в проекте с разными настройками и колбэками без дополнительного формошлепства. Еще доступны сочетания клавиш на действия вешать (там где ноль передается).

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 2)