diff --git a/plugins/profiles.koplugin/main.lua b/plugins/profiles.koplugin/main.lua index 336bb23c6..d42385f36 100644 --- a/plugins/profiles.koplugin/main.lua +++ b/plugins/profiles.koplugin/main.lua @@ -98,6 +98,21 @@ function Profiles:getSubMenuItems() end self:editProfileName(editCallback) end, + }, + { + text = _("New with current document settings"), + enabled = self.ui.file_chooser == nil, + keep_menu_open = true, + callback = function(touchmenu_instance) + local function editCallback(new_name) + self.data[new_name] = self:getProfileFromCurrentDocument(new_name) + self.updated = true + touchmenu_instance.item_table = self:getSubMenuItems() + touchmenu_instance.page = 1 + touchmenu_instance:updateItems() + end + self:editProfileName(editCallback) + end, separator = true, }, } @@ -281,6 +296,77 @@ function Profiles:editProfileName(editCallback, old_name) name_input:onShowKeyboard() end +function Profiles:getProfileFromCurrentDocument(new_name) + local document_settings + if self.ui.rolling then + document_settings = { + "rotation_mode", + "set_font", + "font_size", + "font_gamma", + "font_base_weight", + "font_hinting", + "font_kerning", + "word_spacing", + "word_expansion", + "visible_pages", + "h_page_margins", + "sync_t_b_page_margins", + "t_page_margin", + "b_page_margin", + "view_mode", + "block_rendering_mode", + "render_dpi", + "line_spacing", + "embedded_css", + "embedded_fonts", + "smooth_scaling", + } + else + document_settings = { + "rotation_mode", + "kopt_text_wrap", + "kopt_trim_page", + "kopt_page_margin", + "kopt_zoom_overlap_h", + "kopt_zoom_overlap_v", + "kopt_max_columns", + "kopt_zoom_mode_genus", + "kopt_zoom_mode_type", + "kopt_zoom_factor", + "kopt_zoom_direction", + "kopt_page_scroll", + "kopt_line_spacing", + "kopt_font_size", + "kopt_contrast", + "kopt_quality", + } + end + + local profile = { settings = { name = new_name, order = document_settings } } + for _, v in ipairs(document_settings) do + profile[v] = self.document.configurable[self.ui.rolling and v or v:sub(6)] + end + if self.ui.rolling then + profile["set_font"] = self.ui.font.font_face + profile["sync_t_b_page_margins"] = self.ui.typeset.sync_t_b_page_margins + profile["view_mode"] = self.view.view_mode + profile["embedded_css"] = self.ui.typeset.embedded_css + profile["embedded_fonts"] = self.ui.typeset.embedded_fonts + profile["smooth_scaling"] = self.ui.typeset.smooth_scaling + else + local trim_page_to_mode = { _("manual"), _("auto"), _("semi-auto"), _("none") } + local zoom_genus_to_mode = { _("manual"), _("rows"), _("columns"), _("content"), _("page") } + local zoom_type_to_mode = { _("height"), _("width"), _("full") } + profile["rotation_mode"] = self.document.configurable.rotation_mode + profile["kopt_trim_page"] = trim_page_to_mode[profile["kopt_trim_page"]+1] + profile["kopt_zoom_mode_genus"] = zoom_genus_to_mode[profile["kopt_zoom_mode_genus"]+1] + profile["kopt_zoom_mode_type"] = zoom_type_to_mode[profile["kopt_zoom_mode_type"]+1] + profile["kopt_page_scroll"] = self.view.page_scroll + end + return profile +end + function Profiles:updateGestures(action_old_name, action_new_name) local gestures_path = FFIUtil.joinPath(DataStorage:getSettingsDir(), "gestures.lua") local all_gestures = LuaSettings:open(gestures_path) -- in file