LINUX.ORG.RU

FINAL CUT 0.9.0 - библиотека для создания консольных приложений

 , , , ,


9

1

22 мая, после более полутора лет разработки, состоялся выпуск 0.9.0 C++ библиотеки FINAL CUT, предназначенной для создания приложений с текстовым интерфейсом, не зависящей от библиотек ncurses, termbox или подобных, и распространяемой по лицензии LGPL-3.0.

Список изменений:

  • переход на использование стандарта C++14;
  • строгое использование trailing return type;
  • полностью переписано управление виртуальными окнами, что ускорило отрисовку;
  • изменён способ получения фокуса виджетом. Отправка событий фокуса больше не является отдельным шагом;
  • ускорение парсинга UTF-8;
  • использование кольцевого буфера для хранения необработанного ввода с клавиатуры и мыши;
  • очередь буфера вывода также была заменена на кольцевой буфер для повышения производительности;
  • использование хэш-таблицы для ускорения идентификации нажатых клавиш;
  • ускорено отображение теней и линий;
  • в виджет FTextView добавлена возможность подсветки текста (цветом и стилем);
  • пункты виджета FDialogListMenu теперь автоматически разрешаются и запрещаются в зависимости от количества диалогов;
  • в строке заголовка виджета FFileDialog теперь показывается фильтр файлов;
  • виртуальные окна можно перемещать вверх из области виртуального терминала;
  • для большего контроля в виджеты FLineEdit и FTextView добавлены дополнительные публичные методы;
  • в виджет FLineEdit добавлена возможность выравнивания содержимого (слева, по центру или справа);
  • в виджет FListView добавлена возможность показывать и скрывать отдельные столбцы;
  • в виджет FListView добавлены методы для удаления колонок removeColumn() и removeAllColumns();
  • флаги виджетов сгруппированы в иерархическую структуру;
  • класс вывода терминала (производный от FOutput) теперь можно изменить с помощью конструктора класса FVTerm;
  • теперь приложение уведомляется об изменении фокуса в окне терминала с помощью новых событий onTermFocusIn() и onTermFocusOut();
  • в класс FObject добавлена поддержка обратных итераторов;
  • изменения размера и положения FDialog «мышью» теперь выполняются непосредственно перед выводом в консоль;
  • добавлен новый пример, демонстрирующий звезды с эффектом параллаксной прокрутки;
  • добавлен новый пример, демонстрирующий просмотр изображений в формате X PixMap (XPM) в консоли.

>>> Подробности

★★★★

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

Ответ на: комментарий от MOPKOBKA

Ты смотришь на интерфейс как на данные

Я сторонник ООП, и для виджетов оно в самый раз, как по мне.

делать просто так текст красным не надо?

Ну почему же просто так. Пользователь может задавать его в .conf, например.

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

Ну почему же просто так. Пользователь может задавать его в .conf, например.

Это уже тема приложения, или типо того? Тогда где то в main запускаешь следующую функцию.

void theming(nk_context *ctx, theme *theme) {
  ctx->defaults.label.color = theme->label_color;
  ...
}
И весь текст по умолчанию будет нужного цвета. Название полей у nk_context могу путать, но это стандартный функционал.


Если это отдельный элемент темизируемый, то тоже просто:

void draw_themed_label(nk_context *ctx, const char *text) {
  Theme *theme = ((Application)ctx->user_data)->theme;
  nk_label_colored(ctx, text, theme->themed_label_color);
}
И потом вместо nk_label() используешь просто draw_themed_label()

Аналог в ООП:

class ThemedLabel : public Label {
  constructor () {
    auto theme = Application.getInstance().getTheme()
    self.set_color(theme.getThemedLabelColor())
  }
} 
А дальше так же, вместо Label нужно использовать ThemedLabel.

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 5)
Ответ на: комментарий от I-Love-Microsoft

Кстати, хорошая мысль

Инсталлятор дебианах так может, интересно, там две отдельных программы с абсолютно идентичны поведением или есть некий слой абстракции…

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

https://www.opennet.ru/base/dev/linux_dialog.txt.html

Не смотрел что в Debian, думаю там просто выбор разных реализаций dialog, есть графические как zenity есть консольные. А используется при вызове $DIALOG как по ссылке, или /usr/bin/dialog определенный через update-alternative.

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

Так я и не протестую? Терминальный ГУЙ старого образца, был и будет для своих сфер применения, и креаклы ему по барабану.

seiken ★★★★★
()

А в чем смысл «строгое использование trailing return type;» … ведь: bool HasMultipleItems(); это тоже самое что: auto HasMultipleItems() -> bool;

?

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

В debian based дистрах не dialog, a whiptail — если говорить про консольную утилиту, вид имеет помоднее-помолодёжнее, чем dialog, но умеет чуток меньше. По синтаксису практически полностью совместим — всё что написано в скрипте для whiptail будет работать и с dialog, обратное — не всегда, с точностью до поддерживаемых одноимённых фич. Основан на библиотеке Newt.

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

Сегодня горшочек уже не варит, устал. Завтра напишу. :)

dataman ★★★★
() автор топика

Похоже, что пример background-color не показывает то что должен показывать.

Xintrea ★★★★★
()

И непонятно, какими кнопками вызывается меню любого окошка. Только мышкой можно тыкнуть.

Xintrea ★★★★★
()

Мда, это эпично. Строки в C++... Ну когда уже они заработают?

examples> ./string-operations
----------------[ terminal ]-------------------
    Locale: ru_RU.UTF-8
   Codeset: UTF-8
--------------[ FString test ]-----------------
     Input: dliouthweliou wiher uiwehitrouew i
...
[ERROR] Arithmetic error
 setNumber:  137 (unsigned)
 setNumber: -512 (signed)
 setNumber:  3.14159265359 (long double)
setFormatedNumber: 18'446'744'073'709'551'615 (unsigned)
terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_M_construct null not valid
Аварийный останов

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

… и вы этим так гордитесь, будто вспоминаете не самый скучный альбом уже фактически мертвой на тот момент группы.

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

Разве это не форум об унылом легаси и говне мамонта?

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

Тридцать с лишним лет назад. VitaminC. Не плюсы, конечно, а «просто си», но то же самое.

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

делать TUI как у https://github.com/junegunn/fzf

Взять только нужное из https://github.com/jhawthorn/fzy? :)

Возможные C-кандидаты:

Для C++ ничего лучше FTXUI не предложу. :)

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

Я когда-то на языке D делал GUI библиотеку DLangUI Консольный гуи можно выбрать флагом компиляции. Код приложения менять не требуется.

Скриншоты в консольном режиме здесь

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

А в нем походу даже кнопочек нет

Есть.

dataman ★★★★
() автор топика

в Кларионе (и вроде в фокспро) сразу и интерфейс и бд

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

Ну неплохо. Чем-то напоминает старый досовский воркбенч из комплекта Microsoft C 6.0.

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

Ну теперь их два будет! :) Собирается, я проверил.

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

Нет, у вас включен режим регистронезависимости. :)

dataman ★★★★
() автор топика

FTXUI вчера обновился до 4.1.1, оказывается. Новость нужна? :)

dataman ★★★★
() автор топика

ну все пора делать опеншиндошс 1.0 на этой либе

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

Ну там уж просто сольники Гилмора (с добавками).

unsigned ★★★★
()

Кстати, я не понял, если заявлена поддержка CygWin, это значит что либа без проблем работает под Windows?

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