Перейти к содержимому
  • 0
Oleshe

Ошибка в работе System.addWindow

Вопрос

local args = {...}
print(pcall(function()
  ...
  29 local Project = fs.readTable(fs.removeSlashes(args[1]..'/.Data.dat'))
  ...
  31 local wk, win, menu = System.addWindow(GUI.titledWindow(1,1,160,50,lc.Editor, true))
  32 local contextWindowMenus = menu:addContextMenuItem(lc.createWindows)
  ...
end))

image.png.8ae164eebf99a8cb27e5af3a5408c6e4.png

 

Создал окно, захотел привязать к меню контекст меню, но не получилось. Запускалось через pcall потому-что иначе system fatal error: nil.

Не знаю что с этим делать. Должно работать, но не работает. Сам этот файл вызывается из другого файла через loadfile:

local Projects = {'/Applications/New project/'}
local ChoosedProject = 1
...
loadfile('/Editor.lua')(Projects[ChoosedProject])
...

 

Изменено пользователем Oleshe

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

18 часов назад, Oleshe сказал:

Запускалось через pcall потому-что иначе system fatal error: nil.

В нормальных условиях меню может не вернуться в двух случаях:

 

1) Когда окно форсированно игнорирует добавление в док и меню, т.е. system.addWindow(window, [addToDockAndMenu = false]). Обычно этот параметр используется для утилитарных окон, например, при ПКМ на файле -> Properties. Но, судя по всему, это не твой случай

 

2) Когда ты добавляешь окно в воркспейс системы не из Name.app/Main.lua, а из внешнего скрипта, загруженного через loadfile/dofile/readfile - это захардкожено вот тут. Система пытается получить путь к директории приложения, чтобы адекватно визуализировать иконку и имя в доке и в меню, но не может т.к. внешние файлы не считаются приложениями. Поэтому добавление в меню и док скипается

 

Собственно, выход один: добавлять окно в основном скрипте приложения. Ещё было бы разумно доработать анализ пути исполняемого скрипта, чтобы искать последнее вхождение .app/ и не создавать анальных ограничений. Ну или хотя бы кидать ошибку, мол, "ай-ай-ай, так нельзя". Но лень хд

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 часов назад, ECS сказал:

Name.app/Main.lua,

Main.lua

image.thumb.png.a8dac470b01cda2293fbc7d3986e7042.png

Editor.lua

30 local wk, win, menu = table.unpack(args[2])
31 print(win, menu) -- Показывает только окно
32 contextWindowMenus = menu:addContextMenuItem(lc.createWindows)

Та-же ошибка

image.png.e160bca0a69a08ef494655a7574c0079.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну, тогда смерть. Можешь попробовать "ПКМ - создать приложение", система сгенерит шаблонный .app,  где как раз реализована поддержка меню. Если оно там будет работать - то ищи ошибку у себя, а если нет - надо думать дальше. Без фулл сырцов трудно что-то сказать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ладно, свою ошибку я так и не понял. Моё решение:

win:resize(160,50) -- Итоговый размер окна
win.titleLabel.text = lc.LabelEditor -- Имя окна
winMask:remove() -- Контейнер для тех элементов которые участвовали в первой части программы, 
--потому-что если мы удалим чайлды win(основное окно) то оно 
--удалит ваще всё и оставит прозрачный полиэтиленовый пакет, а строить окно заново мне не очень хочеться. 
--Проще было-б его пересоздать, но мы выяснели ранее что не можем так сделать(
win.localX = 1 -- В моём случаи длинна 160, поетому шоб оно влезно на фулскрин ставим его в начало экрана
win.localY = 1 -- Так-же и с высотой
itemSettings:remove() -- Шляпа привязанная к menu. Причина почему не removeChildren и почему отдульно каждый 
--элемент: таже что и с окном
loadfile(hubPath..'/Editor.lua')(Projects[ChoosedProject], {wk,win,menu}) -- Ну и грузим его. Сам едит тот-же

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...