diff --git a/builtin/fstk/tabview.lua b/builtin/fstk/tabview.lua index 7e2323e65..4d1a74eb6 100644 --- a/builtin/fstk/tabview.lua +++ b/builtin/fstk/tabview.lua @@ -66,8 +66,8 @@ local function get_formspec(self) local content, prepend = tab.get_formspec(self, tab.name, tab.tabdata, tab.tabsize) + local tsize = tab.tabsize or { width = self.width, height = self.height } if self.parent == nil and not prepend then - local tsize = tab.tabsize or {width=self.width, height=self.height} prepend = string.format("size[%f,%f,%s]", tsize.width, tsize.height, dump(self.fixed_size)) @@ -76,7 +76,28 @@ local function get_formspec(self) end end - local formspec = (prepend or "") .. self:tab_header() .. content + local end_button_size = 0.75 + + local tab_header_size = { width = tsize.width, height = 0.85 } + if self.end_button then + tab_header_size.width = tab_header_size.width - end_button_size - 0.1 + end + + local formspec = (prepend or "") .. self:tab_header(tab_header_size) .. content + + if self.end_button then + formspec = formspec .. + ("style[%s;noclip=true;border=false]"):format(self.end_button.name) .. + ("tooltip[%s;%s]"):format(self.end_button.name, self.end_button.label) .. + ("image_button[%f,%f;%f,%f;%s;%s;]"):format( + self.width - end_button_size, + (-tab_header_size.height - end_button_size) / 2, + end_button_size, + end_button_size, + core.formspec_escape(self.end_button.icon), + self.end_button.name) + end + return formspec end @@ -91,8 +112,12 @@ local function handle_buttons(self,fields) return true end + if self.end_button and fields[self.end_button.name] then + return self.end_button.on_click(self) + end + if self.glb_btn_handler ~= nil and - self.glb_btn_handler(self,fields) then + self.glb_btn_handler(self, fields) then return true end @@ -126,8 +151,7 @@ end -------------------------------------------------------------------------------- -local function tab_header(self) - +local function tab_header(self, size) local toadd = "" for i=1,#self.tablist,1 do @@ -138,8 +162,8 @@ local function tab_header(self) toadd = toadd .. self.tablist[i].caption end - return string.format("tabheader[%f,%f;%s;%s;%i;true;false]", - self.header_x, self.header_y, self.name, toadd, self.last_tab_index); + return string.format("tabheader[%f,%f;%f,%f;%s;%s;%i;true;false]", + self.header_x, self.header_y, size.width, size.height, self.name, toadd, self.last_tab_index) end -------------------------------------------------------------------------------- @@ -230,6 +254,8 @@ local tabview_metatable = { function(self,handler) self.glb_evt_handler = handler end, set_fixed_size = function(self,state) self.fixed_size = state end, + set_end_button = + function(self, v) self.end_button = v end, tab_header = tab_header, handle_tab_buttons = handle_tab_buttons } diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua index e299cb343..39eb1969a 100644 --- a/builtin/mainmenu/init.lua +++ b/builtin/mainmenu/init.lua @@ -51,30 +51,13 @@ dofile(menupath .. DIR_DELIM .. "dlg_register.lua") dofile(menupath .. DIR_DELIM .. "dlg_rename_modpack.lua") dofile(menupath .. DIR_DELIM .. "dlg_version_info.lua") -local tabs = {} - -tabs.settings = { - name = "settings", - caption = fgettext("Settings"), - cbf_formspec = function() - return "button[0.1,0.1;3,0.8;open_settings;" .. fgettext("Open Settings") .. "]" - end, - cbf_button_handler = function(tabview, fields) - if fields.open_settings then - local dlg = create_settings_dlg() - dlg:set_parent(tabview) - tabview:hide() - dlg:show() - return true - end - end, +local tabs = { + content = dofile(menupath .. DIR_DELIM .. "tab_content.lua"), + about = dofile(menupath .. DIR_DELIM .. "tab_about.lua"), + local_game = dofile(menupath .. DIR_DELIM .. "tab_local.lua"), + play_online = dofile(menupath .. DIR_DELIM .. "tab_online.lua") } -tabs.content = dofile(menupath .. DIR_DELIM .. "tab_content.lua") -tabs.about = dofile(menupath .. DIR_DELIM .. "tab_about.lua") -tabs.local_game = dofile(menupath .. DIR_DELIM .. "tab_local.lua") -tabs.play_online = dofile(menupath .. DIR_DELIM .. "tab_online.lua") - -------------------------------------------------------------------------------- local function main_event_handler(tabview, event) if event == "MenuQuit" then @@ -121,7 +104,6 @@ local function init_globals() tv_main:add(tabs.local_game) tv_main:add(tabs.play_online) tv_main:add(tabs.content) - tv_main:add(tabs.settings) tv_main:add(tabs.about) tv_main:set_global_event_handler(main_event_handler) @@ -132,6 +114,19 @@ local function init_globals() tv_main:set_tab(last_tab) end + tv_main:set_end_button({ + icon = defaulttexturedir .. "settings_btn.png", + label = fgettext("Settings"), + name = "open_settings", + on_click = function(tabview) + local dlg = create_settings_dlg() + dlg:set_parent(tabview) + tabview:hide() + dlg:show() + return true + end, + }) + -- In case the folder of the last selected game has been deleted, -- display "Minetest" as a header if tv_main.current_tab == "local" and not game then diff --git a/doc/fst_api.txt b/doc/fst_api.txt index 0303291c0..9ad06362d 100644 --- a/doc/fst_api.txt +++ b/doc/fst_api.txt @@ -75,7 +75,7 @@ methods: ^ handler: function(tabview,fields) --> returns true to finish button processing false to continue - set_parent(parent) ^ set parent to attach tabview to. TV's with parent are hidden if their parent - is hidden and they don't set their specified size. + is hidden and they don't set their specified size. ^ parent: component to attach to - show() ^ show tabview @@ -85,6 +85,12 @@ methods: ^ delete tabview - set_fixed_size(state) ^ true/false set to fixed size, variable size +- set_end_button(info) + ^ info is a table with: + * name: button name + * label: tooltip text + * icon: path to icon + * on_click(tabview): callback function File: fst/dialog.lua ---------------------