diff --git a/tools/build/rbuilder/config/rbuilder.log b/tools/build/rbuilder/config/rbuilder.log new file mode 100644 index 0000000..95f853e --- /dev/null +++ b/tools/build/rbuilder/config/rbuilder.log @@ -0,0 +1,2 @@ +[Info] settings.load projectpath nil, using default settings. +[Info] settings.save_recents. diff --git a/tools/build/rbuilder/rbuilder.lua b/tools/build/rbuilder/rbuilder.lua index 340a514..3652853 100644 --- a/tools/build/rbuilder/rbuilder.lua +++ b/tools/build/rbuilder/rbuilder.lua @@ -27,6 +27,23 @@ ffi.cdef[[ void Sleep(uint32_t ms); ]] +-- -------------------------------------------------------------------------------------- +local ticker = nil + +function default_handler(ctx, build) + ticker = (ticker or 0) + 0.016 + if(ticker > 0.01) then + build.progress[0] = build.progress[0] + 1 + ticker = ticker - 0.01 + end + if(panel.build.progress[0] >= 999) then + ticker = nil + build.progress[0] = 0.0 + build.active = 0 + build.mode = nil + end +end + -- -------------------------------------------------------------------------------------- local function init(void) @@ -46,6 +63,7 @@ local function init(void) sapp.sapp_show_mouse(false) panel.init() + panel.build.handler = default_handler sapp.sapp_set_window_title(panel.config.rbuilder.title.value) end diff --git a/tools/build/rbuilder/ui/panels.lua b/tools/build/rbuilder/ui/panels.lua index c643ccb..a138d37 100644 --- a/tools/build/rbuilder/ui/panels.lua +++ b/tools/build/rbuilder/ui/panels.lua @@ -23,6 +23,35 @@ local logging = require("utils.logging") local panel = { config = nil, current_path = ".", + + build = { + mode = nil, + active = 0, + progress = ffi.new("size_t[1]", { 0 } ), + status = "", + handler = nil, + ui_func = function(ctx, dim, build) + + nk.nk_layout_row_dynamic(ctx, dim.h-20, 1) + + local flags = bit.bor(nk.NK_WINDOW_BORDER, nk.NK_WINDOW_TITLE) + flags = bit.bor(flags, nk.NK_WINDOW_NO_SCROLLBAR) + if (nk.nk_group_begin(ctx, "Building...", flags) == true) then + + nk.nk_layout_row_dynamic(ctx, dim.h-dim.h/2 - 50, 1) + nk.nk_layout_row_dynamic(ctx, 25, 1) + nk.nk_label(ctx, "Please wait. Build mode: "..build.mode, nk.NK_TEXT_CENTERED) + nk.nk_layout_row_dynamic(ctx, 25, 1) + nk.nk_progress(ctx, build.progress, 1000, nk.NK_FIXED) + nk.nk_group_end(ctx) + end + + if(build.handler) then build.handler(ctx, build) end + + if(build.active == 0) then nk.nk_popup_close(ctx) end + return build.active + end, + } } -- -------------------------------------------------------------------------------------- @@ -281,6 +310,11 @@ local project_tabs = { }, { name = "Logs", + func = function(ctx) + local bounds = nk.nk_window_get_content_region(ctx) + nk.nk_layout_row_dynamic(ctx, bounds.h, 1) + wdgts.widget_list(ctx, "Logs", nk.NK_WINDOW_BORDER, logging.loglines) + end, } } -- -------------------------------------------------------------------------------------- @@ -294,13 +328,13 @@ local function project_panel(ctx) -- display_section(ctx, "audio") nk.nk_layout_row_dynamic(ctx, 25, 2) - local add_folder = false if (nk.nk_button_label(ctx, "Build Release") == true) then - add_folder = true + panel.build.mode = "release" + panel.build.active = 1 end - local add_file = false if (nk.nk_button_label(ctx, "Clean All") == true) then - add_file = true + panel.build.mode = "clean" + panel.build.active = 1 end -- Awesome little radial popup. @@ -379,9 +413,10 @@ panel.main_ui = function(ctx) wdgts.widget_panel_fixed(ctx, "WinMain", 0, 0, sapp.sapp_width(), sapp.sapp_height(), 0, function(data) - folder_select.popup_active = wdgts.widget_popup_panel(ctx, "popup", folder_select.popup_dim, folder_select.ui_func, folder_select, folder_select.popup_active) - file_select.popup_active = wdgts.widget_popup_panel(ctx, "popup", file_select.popup_dim, file_select.ui_func, file_select, file_select.popup_active) - recent_files.popup_active = wdgts.widget_popup_panel(ctx, "popup", recent_files.popup_dim, recent_files.ui_func, recent_files, recent_files.popup_active) + panel.build.active = wdgts.widget_popup_panel(ctx, "popup_build", folder_select.popup_dim, panel.build.ui_func, panel.build, panel.build.active) + folder_select.popup_active = wdgts.widget_popup_panel(ctx, "popup_folder", folder_select.popup_dim, folder_select.ui_func, folder_select, folder_select.popup_active) + file_select.popup_active = wdgts.widget_popup_panel(ctx, "popup_fileselect", file_select.popup_dim, file_select.ui_func, file_select, file_select.popup_active) + recent_files.popup_active = wdgts.widget_popup_panel(ctx, "popup_recentfiles", recent_files.popup_dim, recent_files.ui_func, recent_files, recent_files.popup_active) -- /* menubar */ local menu_states = { MENU_DEFAULT = 0, MENU_WINDOWS = 1} @@ -464,24 +499,20 @@ panel.main_ui = function(ctx) local height = sapp.sapp_height() nk.nk_layout_row_dynamic(ctx, height-20, 2) - -- wdgts.widget_panel_fixed(ctx, "Project", 10, 10, width, height, flags, function(data) if (nk.nk_group_begin(ctx, "Settings", flags) == true) then local padding = ctx[0].style.window.padding ctx[0].style.window.padding = nk.nk_vec2(10,10) project_panel(data.ctx) - -- end, {ctx=ctx}) nk.nk_group_end(ctx) end nk.nk_style_set_font(ctx, myfonts[4].handle) - -- wdgts.widget_panel_fixed(ctx, "Assets", 10+width+10, 10, width, height, flags, function(data) if (nk.nk_group_begin(ctx, "Assets", flags) == true) then assets_panel(data.ctx) - -- end, {ctx=ctx}) nk.nk_group_end(ctx) end @@ -566,6 +597,7 @@ end panel.cleanup = function() settings.save_recents() + logging.cleanup() end -- -------------------------------------------------------------------------------------- diff --git a/tools/build/rbuilder/utils/logging.lua b/tools/build/rbuilder/utils/logging.lua index 16e1950..f6a371b 100644 --- a/tools/build/rbuilder/utils/logging.lua +++ b/tools/build/rbuilder/utils/logging.lua @@ -1,22 +1,49 @@ -local logging = {} +local tinsert = table.insert + +local logging = { + logfilename = "config/rbuilder.log", + logfh = nil, -- log file handle + loglines = {}, -- As each line is written, its captured for display if needed. +} + +-- -------------------------------------------------------------------------------------- + +logging.write = function( str ) + + logging.fh = logging.fh or io.open(logging.logfilename, "w") + assert(logging.fh, "[Fatal Error] Cannot open logfile") + + tinsert(logging.loglines, str) + + logging.fh:write(str) + io.write(str) -- writes to std out as well +end -- -------------------------------------------------------------------------------------- logging.info = function( infostr ) - io.write(string.format("[Info] %s\n", infostr)) + logging.write(string.format("[Info] %s\n", infostr)) end -- -------------------------------------------------------------------------------------- logging.warn = function( warnstr ) - io.write(string.format("[Warning] %s\n", warnstr)) + logging.write(string.format("[Warning] %s\n", warnstr)) end -- -------------------------------------------------------------------------------------- logging.error = function( errstr ) - io.write(string.format("[Error] %s\n", errstr)) + logging.write(string.format("[Error] %s\n", errstr)) +end + +-- -------------------------------------------------------------------------------------- + +logging.cleanup = function( ) + if(logging.logfh) then + logging.logfh:close() + end end -- -------------------------------------------------------------------------------------- diff --git a/tools/build/rbuilder/utils/widgets.lua b/tools/build/rbuilder/utils/widgets.lua index fe674b2..8bba1a4 100644 --- a/tools/build/rbuilder/utils/widgets.lua +++ b/tools/build/rbuilder/utils/widgets.lua @@ -241,6 +241,19 @@ end -------------------------------------------------------------------------------- +widgets.widget_list = function(ctx, title, flags, items) + + if (nk.nk_group_begin(ctx, title, flags) == true) then + nk.nk_layout_row_dynamic(ctx, 22, 1); + for i, item in ipairs(items) do + nk.nk_label(ctx, item, nk.NK_TEXT_LEFT) + end + nk.nk_group_end(ctx) + end +end + +-------------------------------------------------------------------------------- + widgets.widget_list_selectable = function(ctx, title, flags, items, width) if (nk.nk_group_begin(ctx, title, flags) == true) then