проблема с чтением текста в imgui.InputTextMultiline

$Mr.R1ch$

Активный
Автор темы
337
51
Версия MoonLoader
Другое
приветствую, недавно решил попробовать сделать свой лайтовый биндер на mimgui, и возникла проблема.
Для отрисовки полей ввода (imgui.TextMultiline) я попытался сделать так, чтобы при выборе созданного слота биндера, в инпуте отобразился текст этого слота, чтобы его можно было редактировать. В целе оптимизации я не стал их перебирать через for, pairs, а сделать один но чтобы текст менялся из выбранного слота. У одного автора видел такое, и попытался сделать но не понимаю нихуя. Как можно сделать так?

на коленке набросал (временно):
for i, v in ipairs(binder) do
      if i == setting_binder then
          if imgui.InputTextMultiline("##text_bind", text_binder, ffi.sizeof(text_binder), imgui.ImVec2(990, 300)) then
               binder[i][3] = u8:decode(ffi.string(text_binder)):gsub("\n", "&")
               inicfg.save(binder, "binder.ini")
            end
        end
   end
 
  • Эм
  • Клоун
Реакции: Corenale и XRLM

chapo

tg/inst: @moujeek
Модератор
9,070
12,031
Lua:
local binds = {
    'здарова пидорасы',
    'пока пидорасы',
    'как дела пидорасы',
};
local editBuffer = imgui.new.char[128]('');

-- frame
for index, text in ipairs(binds) do
    imgui.Text(u8(text));
    imgui.SameLine();
    if (imgui.Button(u8'Изменить##button-edit-' .. index)) then
        imgui.StrCopy(editBuffer, u8(text));
        imgui.OpenPopup('edit-popup-' .. index);
    end
    if (imgui.BeginPopupModal('edit-popup-' .. index, 0)) then
        imgui.InputTextMultiline('##edit-' .. index, editBuffer, ffi.sizeof(editBuffer), imgui.ImVec2(150, 150));
        if (imgui.Button(u8'Сохранить##button-save-' .. index)) then
            binds[index] = u8:decode(ffi.string(editBuffer)):gsub('\n', '&');
            imgui.CloseCurrentPopup();
        end
        if (imgui.Button(u8'Отмена##button-close-' .. index)) then
            imgui.CloseCurrentPopup();
        end
        imgui.EndPopup();
    end
end
 

$Mr.R1ch$

Активный
Автор темы
337
51
Lua:
local binds = {
    'здарова пидорасы',
    'пока пидорасы',
    'как дела пидорасы',
};
local editBuffer = imgui.new.char[128]('');

-- frame
for index, text in ipairs(binds) do
    imgui.Text(u8(text));
    imgui.SameLine();
    if (imgui.Button(u8'Изменить##button-edit-' .. index)) then
        imgui.StrCopy(editBuffer, u8(text));
        imgui.OpenPopup('edit-popup-' .. index);
    end
    if (imgui.BeginPopupModal('edit-popup-' .. index, 0)) then
        imgui.InputTextMultiline('##edit-' .. index, editBuffer, ffi.sizeof(editBuffer), imgui.ImVec2(150, 150));
        if (imgui.Button(u8'Сохранить##button-save-' .. index)) then
            binds[index] = u8:decode(ffi.string(editBuffer)):gsub('\n', '&');
            imgui.CloseCurrentPopup();
        end
        if (imgui.Button(u8'Отмена##button-close-' .. index)) then
            imgui.CloseCurrentPopup();
        end
        imgui.EndPopup();
    end
end
пофиксил все за 3 строчки, как теперь чтение текста в инпуте сделать так?: если найден символ & - то строка переносится. Я пытался сделать но у меня ошибка постоянно

Lua:
local text_binder = new.char[999999]('':gsub('&', '\n'))
@chapo
 
Последнее редактирование:
  • Клоун
Реакции: XRLM

w99zzl1

Участник
150
17
А если написать так:
local text_binder = 'здарова пидорасы&пока пидорасы&как дела пидорасы' а потом просто заменить "&" на новую строку, типо:

local text_binder2 = text_binder:gsub('&', '\n')

А, если char то можно попробовать:
local text_char = ffi.new('char[?]', #text_binder2 + 1, text_binder2)
 

$Mr.R1ch$

Активный
Автор темы
337
51
А если написать так:
local text_binder = 'здарова пидорасы&пока пидорасы&как дела пидорасы' а потом просто заменить "&" на новую строку, типо:

local text_binder2 = text_binder:gsub('&', '\n')

А, если char то можно попробовать:
local text_char = ffi.new('char[?]', #text_binder2 + 1, text_binder2)
попробовал так сделать, не получилось(
 

$Mr.R1ch$

Активный
Автор темы
337
51
пофиксил все за 3 строчки, как теперь чтение текста в инпуте сделать так?: если найден символ & - то строка переносится. Я пытался сделать но у меня ошибка постоянно

Lua:
local text_binder = new.char[999999]('':gsub('&', '\n'))
@chapo
.