1Ridav 1 049 Опубликовано: 10 сентября, 2014 https-~~-//github.com/1Ridav/ComputerCraft-GUI Библиотека сделана для "золотых" компьютеров и мониторов Все мы знаем, что при написании программ - зачастую требуется делать кнопочки, менюшки и тд для более-менее удобного использования программы. Проблема в том, что не у каждого хватит опыта и усидчивости для решения такого рода задачи. Поэтому обмозговав все за и против - я решил сделать такую библиотеку сам, тк раньше похожая библа с похожим функционалом была в свободном доступе на англоязычных пабликах, то теперь её просто нет - автор удалил исходные коды и забросил проект( Что на мой взгляд очень прискорбно). Существующие на данный момент графические библиотеки просто не отвечают требованиям гибкости и функциональности В чем смысл написания этой библиотеки? Задача в том, чтобы упростить работу самому разработчику и значительно уменьшить время, которое требуется для завершения программы. Это что то в роде движка - разработчику программы требуется лишь создать объект по параметрам и дать ему свойства - все остальное сделается само. Ему не требуется знать все досконально и контролировать каждую мелочь. Думаю с этим более-менее понятно. При написании библиотеки я старался взять самые лучшие стороны из разных языков программирования и разных библиотек, к примеру значительный объем функционала взят из WinAPI, Java и по мелочам из других источников. Функционал, который должен быть по моему видению: Вся документация переехала на нашу Wiki http://computercraft.ru/wiki/index.php/ComputerCraft/GUI_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0 5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav Автор темы 1 049 Опубликовано: 10 сентября, 2014 Резерв 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav Автор темы 1 049 Опубликовано: 10 сентября, 2014 Резерв Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Exstes 0 Опубликовано: 10 сентября, 2014 Жаль synaps уже спит, у него эрекция начнётся когда он это увидит...... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy 1 169 Опубликовано: 11 сентября, 2014 В чем преимущества перед Graffiti? http://www.youtube.com/watch?v=FebXgbxbhN8 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav Автор темы 1 049 Опубликовано: 11 сентября, 2014 В чем преимущества перед Graffiti? http-~~-//www.youtube.com/watch?v=FebXgbxbhN8 Разные концепции реализации.Технология построения интерфейса отличается, хотя и имеет одни и те же цели. Задачей была гибкость и легкость разработки программ с использованием этой библиотеки. Разработчику достаточно лишь прилеиить куда нибудь объект и установить ему функционал. При использовании объекта он выполняет поставленную задачу сам , а как это все работает не должно тревожить разработчика Про различия скоростей работы ничего сказать не могу, тк не замерял Для сравнения создай на Graffiti две кнопки и прогрессбар. Одна кнопка пусть заполняет прогрессбар, а другая - очищает его. На моей GUI библиотеке это будет выглядеть так: os.loadAPI("GUI") local pb = GUI.NewProgressBar(nil, 10, 10, 14, 1) -- Создаем шкалу прогресса local f1 = function(s) -- Задаем функционал первой кнопки pb:stepIt() -- Заполняем шкалу на шаг end local f2 = function(s) -- задаем функционал второй кнопки pb:clear() -- Очищаем шкалу end local buttonFill = GUI.NewButton(nil, 1, 1, 5, 1, "fill ", f1) local buttonClear = GUI.NewButton(nil, 1, 3, 5, 1, "clear", f2) GUI.MainPanel:addCHILD({buttonFill, buttonClear, pb}) -- Добавляем на экран GUI.MainPanel:draw() -- Рисуем все объекты на экране К тому же мой вариант GUI может работать с бесконечным количеством мониторов, любой объект может быть на любом мониторе, можно менять положение прямо во время работы программы, динамически Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 11 сентября, 2014 Надо бы деструктор придумать. Кнопки продолжают работать даже после выхода из программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav Автор темы 1 049 Опубликовано: 11 сентября, 2014 Надо бы деструктор придумать. Кнопки продолжают работать даже после выхода из программы.Ну в принципе так и было задумано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav Автор темы 1 049 Опубликовано: 16 сентября, 2014 Дополнил документацию Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
GodusX 1 Опубликовано: 16 сентября, 2014 РИД Я ТЯ ЩАС ЗАЦЕЛУЮ ИДЕАЛЬНАЯ АПИ И ТОЧКА (ладно чёто я погорячился))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 18 сентября, 2014 ProgressBar - Шкала прогресса.Цифровое значение шкалы прогресса почему то выводится на красном фоне. Вот так Хотя должно быть так Или так Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 18 сентября, 2014 Можно попробовать s.target.setBackgroundColor( s.color_used ) for i=1,#temp do X = term.getCursorPos() if X > px + s.x + pos - 1 then s.target.setBackgroundColor( s.color_bg ) s.target.write(temp:sub(i)) break end s.target.write(temp:sub(i,i)) end вместо s.target.write(temp) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav Автор темы 1 049 Опубликовано: 24 сентября, 2014 Можно попробовать s.target.setBackgroundColor( s.color_used ) for i=1,#temp do X = term.getCursorPos() if X > px + s.x + pos - 1 then s.target.setBackgroundColor( s.color_bg ) s.target.write(temp:sub(i)) break end s.target.write(temp:sub(i,i)) end вместо s.target.write(temp) Мой вариант решения: if cx > s.dynX + pos then s.target.setBackgroundColor(s.color_bg) s.target.write(temp) else s.target.write(string.sub(temp, 1, math.floor(s.dynX + pos - cx + 1) ) ) s.target.setBackgroundColor(s.color_bg) s.target.write(string.sub(temp, math.floor(s.dynX + pos - cx + 2), #temp)) end Для справки: Изменено апи _dynRefresh = function(s) px, py = 1, 1 if s._PARENT then px, py = s._PARENT.dynX, s._PARENT.dynY end s.dynX = s.x + px - 1 s.dynY = s.y + py - 1 end, Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav Автор темы 1 049 Опубликовано: 25 сентября, 2014 Добавил ссылку на Github, Все обновления будут происходить там Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Brey 103 Опубликовано: 25 октября, 2014 Доброго времени. Кейпад глючит: при лкм по любой отличной от 1 кнопке начинается странная беготня вызывающая странные ассоциации с поиском пути. Т.е. тыкаю на 16 и получаю на выходе последовательно нажатые 2, 6, 7,8,16 (к примеру. при следующем нажатии путь может пройти по другому). Вопрос: так и должно быть? =D os.loadAPI("GUI") b={} f={} local p1 = GUI.NewPanel(21,4) for i=1,16 do b[i]=GUI.NewButton(nil,1,1,3,3,tostring(i),f[i]) f[i]=function(s) s=rednet.send(хххх,i) end p1:addCHILD({b[i]}) i=i+1 end for i=5,8 do b[i].x=6 i=i+1 end for i=9,12 do b[i].x=11 i=i+1 end for i=13,16 do b[i].x=16 i=i+1 end for i=2,14,4 do b[i].y=5 end for i=3,15,4 do b[i].y=9 end for i=4,16,4 do b[i].y=13 end GUI.MainPanel:addCHILD({p1}) GUI.MainPanel:draw() pastebin.com/ZyC0KXtx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav Автор темы 1 049 Опубликовано: 25 октября, 2014 Доброго времени. Кейпад глючит: при лкм по любой отличной от 1 кнопке начинается странная беготня вызывающая странные ассоциации с поиском пути. Т.е. тыкаю на 16 и получаю на выходе последовательно нажатые 2, 6, 7,8,16 (к примеру. при следующем нажатии путь может пройти по другому). Вопрос: так и должно быть? =D os.loadAPI("GUI") b={} f={} local p1 = GUI.NewPanel(21,4) for i=1,16 do b[i]=GUI.NewButton(nil,1,1,3,3,tostring(i),f[i]) f[i]=function(s) s=rednet.send(хххх,i) end p1:addCHILD({b[i]}) i=i+1 end for i=5,8 do b[i].x=6 i=i+1 end for i=9,12 do b[i].x=11 i=i+1 end for i=13,16 do b[i].x=16 i=i+1 end for i=2,14,4 do b[i].y=5 end for i=3,15,4 do b[i].y=9 end for i=4,16,4 do b[i].y=13 end GUI.MainPanel:addCHILD({p1}) GUI.MainPanel:draw() pastebin.com/ZyC0KXtx p1:addCHILD({b}) GUI.MainPanel:addCHILD({p1}) используй без кавычек {} . То есть GUI.MainPanel:addCHILD(p1) p1:addCHILD(b) Так же функционал надежнее задать через постустановку. b.func = function(s) бла бла бла end Баг в задании функционала Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Brey 103 Опубликовано: 25 октября, 2014 Как-то не прокатывает... Если использовать удочерение (например GUI.MainPanel:addCHILD(p1)) (без {}) вылетает ошибка GUI:105 (или 501...). Кроме того, попробовал создать 4 кнопки вообще без функционала т.е. голые квадраты b=GUI.NewButton() и потом вручную прописал им х, у, высоту, ширину и текст. И та же хрень: верхняя жмется нормально, а остальные кое-как. Т.е. жму на 4 (нижняя) и получаю эффект нажатия 1, 2, 3 и только потом 4. Не понимаю пока... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav Автор темы 1 049 Опубликовано: 25 октября, 2014 Как-то не прокатывает... Если использовать удочерение (например GUI.MainPanel:addCHILD(p1)) (без {}) вылетает ошибка GUI:105 (или 501...). Кроме того, попробовал создать 4 кнопки вообще без функционала т.е. голые квадраты b=GUI.NewButton() и потом вручную прописал им х, у, высоту, ширину и текст. И та же хрень: верхняя жмется нормально, а остальные кое-как. Т.е. жму на 4 (нижняя) и получаю эффект нажатия 1, 2, 3 и только потом 4. Не понимаю пока... Указанный пастбин устарел уже больше месяца назад. Используй эту версию: ZTM3Njm6 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Brey 103 Опубликовано: 25 октября, 2014 :fp:Ура! Спасибо! =D Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav Автор темы 1 049 Опубликовано: 30 октября, 2014 Обновлена библиотека, добавлены функции GUI.NO_EXIT() GUI.EXIT() А так же деструктор объектов 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах