[mimgui] фокус popup

Tema05

Известный
Автор темы
1,464
412
Версия MoonLoader
.026-beta
Как Можно при открытии pupop единоразово установить фокус одному из элементов?

Lua:
if imgui.Button(imgui.TextRegionAvail(table[key]), imgui.ImVec2(125, 20)) then
    menu.input = imgui.new.char[16](table[key])
    imgui.OpenPopup(u8'Редактирование')
end

if imgui.BeginPopupModal(u8'Редактирование') then
    if imgui.InputText('##input', menu.input) then
       
    end
    if imgui.Button(fa.ICON_FA_TIMES_CIRCLE .. u8' Закрыть', imgui.ImVec2(125, 20)) then
        imgui.CloseCurrentPopup()
    end
    imgui.EndPopup()
end
 
Последнее редактирование:
Решение
Не помогло. Оно выделяет весь текст.
Колхоз, но работает.
Писалось на imgui. На mimgui может колбек по другому выглядеть.


Lua:
function clearSelect() -- вне фрейма
    local function CallBack(data)
        if focus then
            focus = false
            data.SelectionStart, data.SelectionEnd = 0,0
        end
    end
    return imgui.ImCallback(CallBack)
end


-- Во фрейме
imgui.InputText("Test", varTest, 256, clearSelect())
if imgui.Button("Insert text", imgui.ImVec2(150,25)) then
    varTest = "some text"
    imgui.SetKeyboardFocusHere(-1)
    focus = true
end

Tema05

Известный
Автор темы
1,464
412
Переформулируй, не понятна суть вопроса..
Вот у меня есть PopupModal в котором есть InputText. Я хочу сделать чтобы при открытии этого окна popup фокус клавиатуры устанавливался на inputtext.
 
  • Нравится
Реакции: Hatiko

Hatiko

Известный
Проверенный
1,480
615
Я уже забыл функцию, после инпата imgui.SetKeyboardFocusHere(-1) вроде
Оно. -1 для элемента выше этой функции, от 0 до n оффсет для элементов находящиеся под функции, где n порядковый номер элемента.
Только надо бы иметь переменную, чтобы функция не флудилась при рендере. Хотя для Попы это не столь важно, если там элементов не очень много.
 

Tema05

Известный
Автор темы
1,464
412
Оно. -1 для элемента выше этой функции, от 0 до n оффсет для элементов находящиеся под функции, где n порядковый номер элемента.
Только надо бы иметь переменную, чтобы функция не флудилась при рендере. Хотя для Попы это не столь важно, если там элементов не очень много.
Не варик так как не даст нажать button. Я и создал тему так как не всё так просто.
 

Hatiko

Известный
Проверенный
1,480
615
Не варик так как не даст нажать button. Я и создал тему так как не всё так просто.
Только надо бы иметь переменную, чтобы функция не флудилась при рендере.
Тебе надо создать переменную, к примеру, focus = false.
При нажатии на кнопку или что у тебя там, которая вызывает Попу, присваиваешь переменной фокус true. В рендере создаёшь условие:

Lua:
if focus then
    imgui.SetKeyboardFocusHere(0)
    focus = false

end
-- InputText
Которое обратно вернёт false фокусу, но при этом установится курсор в инпут. Я такую систему использовал, работает отлично.
Мб и костыль, но вроде так и задумывалось.
 
  • Нравится
Реакции: AnWu

Double Tap Inside

Известный
Проверенный
1,915
1,252
[imGui]
У меня беда, если в InputTex() есть какой то тектст, то SetFocusHere() его выделяет при срабатывании. Флагов в InputText() на выделение не ставил, это SetFocusHere() делает. Как сделать шоб оно собака не выделяло?

1615559876356.png
 

Hatiko

Известный
Проверенный
1,480
615
У меня беда, если в InputTex() есть какой то тектст, то SetFocusHere() его выделяет при срабатывании. Флагов в InputText() на выделение не ставил, это SetFocusHere() делает. Как сделать шоб оно собака не выделяло?
Выше описанный способ. Вместо 0 ставишь размер текста., вроде бы как, не приходилось ещё кроме 0 юзать.
 
  • Нравится
Реакции: Double Tap Inside

Double Tap Inside

Известный
Проверенный
1,915
1,252
Выше описанный способ. Вместо 0 ставишь размер текста., вроде бы как, не приходилось ещё кроме 0 юзать.
Не помогло. Оно выделяет весь текст.

1. Поле активно.
2. Нажимаю кнопку, которая меняет значение поля.
При нажатии кнопки фокус теряется из поля.
Также устанавливаю переменную focus = true.

1. Поле не активно. Поскольку focus == true, то пишу SetFocusHere(длина строки пробовал и utf и cp) и focus = true.
2. Весь текст выделяется. Заметил, что если текст был тот же самый, то оно не выделяется. Сука.
 

Hatiko

Известный
Проверенный
1,480
615
Не помогло. Оно выделяет весь текст.
Колхоз, но работает.
Писалось на imgui. На mimgui может колбек по другому выглядеть.


Lua:
function clearSelect() -- вне фрейма
    local function CallBack(data)
        if focus then
            focus = false
            data.SelectionStart, data.SelectionEnd = 0,0
        end
    end
    return imgui.ImCallback(CallBack)
end


-- Во фрейме
imgui.InputText("Test", varTest, 256, clearSelect())
if imgui.Button("Insert text", imgui.ImVec2(150,25)) then
    varTest = "some text"
    imgui.SetKeyboardFocusHere(-1)
    focus = true
end
 
  • Влюблен
Реакции: Double Tap Inside

Double Tap Inside

Известный
Проверенный
1,915
1,252
Колхоз, но работает.
Писалось на imgui. На mimgui может колбек по другому выглядеть.


Lua:
function clearSelect() -- вне фрейма
    local function CallBack(data)
        if focus then
            focus = false
            data.SelectionStart, data.SelectionEnd = 0,0
        end
    end
    return imgui.ImCallback(CallBack)
end


-- Во фрейме
imgui.InputText("Test", varTest, 256, clearSelect())
if imgui.Button("Insert text", imgui.ImVec2(150,25)) then
    varTest = "some text"
    imgui.SetKeyboardFocusHere(-1)
    focus = true
end
ебать. помогло. 256 флаг это шо у нас? а то я не думал шо это важно. без него ниработало.
 

Hatiko

Известный
Проверенный
1,480
615
  • Влюблен
Реакции: Double Tap Inside

Tema05

Известный
Автор темы
1,464
412
ебать. помогло. 256 флаг это шо у нас? а то я не думал шо это важно. без него ниработало.
Ты что первый раз callback увидел? Я собственно и создал тему чтобы этот колхоз не юзать но всё же чделал через него.
 

Double Tap Inside

Известный
Проверенный
1,915
1,252
Ты что первый раз callback увидел? Я собственно и создал тему чтобы этот колхоз не юзать но всё же чделал через него.
Да, я почти не развиваюсь. Только шевелюсь, когда сталкиваюсь с проблемой. Скрипты делаю с максимально простым интерфейсом. Я юзал обычные диалоги для настроек, в то время как все сидели уже на имгуи.... А нахуя мне было имгуи, если там две галочки в настройках. А порой вообще без интерфейса.
 
  • Нравится
  • Вау
Реакции: MrBidloKoder и Hatiko